クリスマスですか?


33

チャレンジ

クリスマスが次の場合:

  • 12月
  • 月12
  • 25日目

毎年、今日の日付と、今日がクリスマスかどうかを判断します。クリスマスの場合は、印刷する必要があります"It's Christmas"。クリスマスではない場合は、クリスマスまで何とかしてから印刷する必要があります"It's Christmas"

このスタックオーバーフローの質問

import time
while time.strftime("%b, %d", time.localtime()) != "Dec, 25":
    time.sleep(60)
print "It's Christmas"

115文字のPython

ルール

ルールは次のとおりです。

  • コンピューターの時計が常に正しいと仮定します。
  • コードはいつでも開始できる必要があります。
  • コードは"It's Christmas"クリスマスに印刷する必要があります。
  • ループは確かに必要ではありませんが、一度コードが開始されると、コードが出力されるまで停止しないでください。
  • 最短のコードが優先されます。

私はこの記事を読む前に入力がユリウス日付であると思った
明唐

回答:



143

バッシュ、39

ただ待つことができない人のために:

sudo date 12250000
echo It\'s Christmas

これは、すべてのルール、特に最初のルールに従います。


11
賢い。私が意図したものではありませんが、気の利いたものです。
パトリックペリーニ

8
「...そして、コンピューターの時計が常に適切であるとは限らない場合は、それを作ってください。」
JB

13
ルートの場合、5文字を保存できます。:D-
ワグ

29

Unix、39バイト

echo{,} "It\'s christmas"|at -t12252359

デニスの助けを借りて、ありがとう。


これは違反します»ルーピングは確かに必要ではありませんが、いったんコードが開始されると、コードが印刷されるまで停止しないでください。«。
ジョーイ

私はあなたの批判を理解していません。これはループしていると主張しますか?印刷する前に停止することは?
ユーザー不明

2
を使用するとecho{,} "It\'s Christmas"|at -t12252359、これは受け入れられた答えよりも短くなります。(バックスラッシュは、方法によって必要とされる。)
デニス

1
@Dennis:ブレース展開の素晴らしい使用法。
ジョーイアダムス

18

PowerShell、45 46文字

for(;(date).date-ne'12/25'){}"It's Christmas"

確かに電力効率があまり良くないので、クリスマス前にラップトップのバッテリーが切れる可能性があります(新しいバッテリーを希望する理由かもしれません)。しかし、眠らないことは間違いなく短くなります。

これもロケールに依存しません。そして、これをさらに減らすための素晴らしいトリックをくれたJaykulに感謝します。

ルールを少し乱用、45文字

for(){"It's Christmas"*((date)-like'12/25*')}

これは、クリスマスになるまで空の行を出力し、その上に「It's Christmas」を出力します。

それ ...

  • ...いつでも開始できます。
  • ...クリスマスに「It's Christmas」を印刷します。数回。一日中。(ルールは、印刷される頻度については何も述べていません。)
  • ... クリスマスには「It's Christmas」を印刷しませ(その場合は空の行を印刷しますが、別のキャラクターを犠牲にすることで修正できますが、上記のより正気な解決策では何も得られません)。
  • ...止まることはありません(「It's Christmas」と印刷された後でも、間違いなくではありません)。

2
((日付).date-NE "12/25"){} "それのクリスマス" #45文字のために
Jaykul

Jaykul:ありがとう...それは私が働いているとは思わなかったものです。
ジョーイ

「虐待的な」スクリプトでは-match、ワイルドカードを使用せずに文字を使用したり、文字を増減させたりすることもできます。
Iszi

不正行為は今すぐ削除できますが、不要です。
エリックアウトゴルファー

@EriktheGolfer:どうして?短くはありませんが、それでも興味深い代替アプローチを提供します。
ジョーイ

13

Python(36文字)

ルールを乱用する精神で:

  • クリスマスに「It's Christmas」を確実に印刷する

  • クリスマスではない場合は、「It's Christmas」と印刷して時間を渡します

    while True:
        print "It's Christmas"
    

2
29バイト:while 1:print"It's Christmas"
エリックアウトゴルファー

11

PostScript、90

(%Calendar%)currentdevparams begin{Month 12 eq Day 25 eq and{exit}if}loop(It's Christmas)=

プリンターで実行しないでください。ページを印刷しません。また、クリスマスまでプリンターをDoSします。もう一度、プリンターを取り戻すことは素晴らしい贈り物です。



ほとんどのプリンターはオプションの機能であるため、機能するハードウェアクロックさえ持っていないと思います。非常に良い、しかし:)
ジョーイ


5

Perl、44 45

perl -E'1until localtime=~/c 25/;say"It's Christmas"'

GMT時間は十分ではないでしょうか?(3文字オフ;-)


1until localtime=~/c 25/;1文字節約できます。:)
イルマリ・カロネン

私はすでにそれを試してみて失敗したと思ってい-Eましたが、実際にはその時に忘れていました。ありがとう!
JB

問題ない。(localtime
追伸:

ナアオ、二度と考えないのは恥だ。別の答えは、完全に正当化されたIMO(および賛成票)です。
JB

5

Perl、45

{localtime=~/c 25/&&die"It's Christmas";redo}

Perl、44

三項演算子を使用(Ilmari Karonenに感謝)。

{localtime=~/c 25/?say"It's Christmas":redo}

? :代わりに&& ;1文字も保存します。(そして、きれいな出力のsay代わりに使用しdieます。)
イルマリカロネン

@Ilmari Karonen:ありがとう。しかしsay、dieの代わりに使用することにより、スクリプトは終了しません。
トト

三項演算子を使用する場合、それは。
イルマリカロネン

@Ilmari Karonen:はい、もちろんです。疲れているかもしれません!!!
トト


4

文字列を解析せずにこれをやりたかった。その後、私のコードには多くの魔法の数字があります。

うるう年を説明するためにいくつかの近似を行いました。12月25日00:00:00に印刷する必要があるとは誰も言いませんでした!

Perl、80 69 57文字

{(time-30931200)%31557600<86399?die"It's Christmas":redo}

より簡潔なループのために編集されました!



3

Python、66 68

import time
while'c 25'not in time.ctime():1
print"It's Christmas"

1二行目の終わりにそれは私には非常に疑わしいように見えます。:P
cjfaure 14年

@Trimsty:1はwhileループの本体を提供します。基本的には、12月25日までの待ち時間です。これは、と同様の効果がありwhile 1:if'c 25'in time.asctime():breakます。
スティーブンランバルスキー14年

ああ、それを片付けてくれてありがとう。
cjfaure

すると思いtime.ctime()ます。
ニブラー14

@gnibbler:確かにそうでしょう。ナイスキャッチ。
スティーブンランバルスキー14

3

TI-BASIC、42 38

Repeat 769=sum(getDate²,2
End
"It's Christmas

日付形式はYYYY / MM / DDであると予想されます。

getDateは3要素のリストを作成し{year,month,day}ます。クリスマスにのみ、月^ 2 +日^ 2は769に等しくなります。

文字列には23バイトが使用されます。これは、虚数単位トークンとして表示されるiを除き、小文字がそれぞれ2バイトであるためです。


2

バッチファイル、68文字

:l
@date/t|findstr/c:"-12-25">nul&&echo It's Christmas&&exit
@goto l

セッションを強制終了するため、対話的には使用できません。それを解決するには、さらに5文字が必要になります。

また、ロケール依存です。これは、ISO 8601日付形式を使用する私のロケールで機能します。

しかし、それはバッチファイルです(ほとんどの場合、プログラミング言語とは見なされていません)。そして、Javascriptよりも短い(そしてPythonと同等)。


2

グルーヴィー、55

while(!new Date()==~/.*c 25.*/);
println"It's Christmas"

それは機能すると思うが、それでも出力を待っている。


Groovyの正規表現が他のほとんどの言語のようなものである場合、それら.*はまったく不要です。(
Ps。25の

1
Ilmari、GroovyはJVM言語であり、Javaの正規表現はデフォルトで固定されています。
ジョーイ

1
Ilmari、私はチェックしたいが、私のプログラムはまだ実行されている
アルマン

2

(pdf)eTeX-180文字は12月1〜25日のみ。

\lccode`m`~\let\e\expandafter\def~{\ifdim900pt<\pdfelapsedtime
sp\pdfresettimer\else\e~\fi}\lowercase\e{\e\scantokens\e
{\romannumeral\numexpr (25 - \day)*96000}}It's Christmas!\bye

TeXには、プログラムが開始する日付と、開始からの経過時間(32768秒を上限とする)にアクセスする方法しかありません。したがって、待機する秒数を計算し、1秒ごとに待機するループを実行する必要があります。到達して時間を1sリセットする経過時間。(正確には、900秒のブロックを実行しています。)

毎月働くには、355文字の追加作業が必要です。

\lccode`m=`~\let\o\or\let\y\year\let\n\numexpr\let\e\expandafter
\def\b#1{\ifnum#1=\n(#1/4)*4\relax+1\fi}\def~{\ifdim
900pt<\pdfelapsedtime sp\pdfresettimer\else\e~\fi}\lowercase
\e{\e\scantokens\e{\romannumeral\n(25-\day+\ifcase\month\o334\b\y
\o303\b\y\o275\o244\o214\o183\o153\o122\o91\o61\o30\o0\ifnum25<\day
365\b{\n\y+1}\fi\fi)*96000}}It's Christmas!\bye

2

MySQL、180文字

とにかく、データベースエンジンは何のために使用しているのですか?

DELIMITER $$
CREATE FUNCTION c() RETURNS CHAR(14) BEGIN a: LOOP IF DAY(NOW())=25 && MONTH(NOW())=12 THEN RETURN 'It\'s Christmas'; END IF; END LOOP a; END$$
DELIMITER ;
SELECT c();

縦方向の競争力はそれほど高くありませんが、実行可能です。


試してDELIMITER /RETURNS TEXTそしてCURDATE()LIKE'%12-25'; そしていくつかの空白を削除してみてください。
タイタス


2

PHP、40バイト

<?while(date(dm)-1225);?>It´s Christmas;

12月25日までループします。その後、プレーンモードに戻って印刷します。

デフォルト設定で実行します(通知を表示しません)。


2

8086マシンコード、33バイト

00000000  b4 2a cd 21 81 fa 19 0c  75 f6 b4 09 ba 12 01 cd  |.*.!....u.......|
00000010  21 c3 49 74 27 73 20 43  68 72 69 73 74 6d 61 73  |!.It's Christmas|
00000020  24                                                |$|
00000021

1

Javascript、 93 89 78 77文字

function x(){Date().match("c 25")?alert("It's Christmas"):setTimeout(x,1)}x()


@Joeyありがとう!私はそれを忘れていました。
JiminP

2
別の非ブロッキングバージョン:setInterval('/c 25/.test(Date())&&alert("It\'s Christmas")',9)61文字で...唯一の欠点は、alert()クリスマスに終日なります。
デビッドマードック

なぜsetInterval1に?setInveralto 1000*60*60*24とそれは両方ともプロセスを苦しめることはなく、クリスマスに一度だけ通知します。
ジョージマウアー14

1

D、130

import std.datetime,std.stdio;
main(){
do{
auto t = Clock.currTime();
}while(t.month!=12||t.day!=25);
writeln("It's Christmas");
}

割り当てにはおそらく2文字を保存できます。また、行数を減らすことでさらにいくつかのことができます。
ジョーイ

t.month^12|t.day^25(優先順位が正しい場合)を使用して一部を保存することもできます
ラチェットフリーク

1

Q、63文字

system"t 1000";.z.ts:{$["12.25"~-5#-3!.z.d;1"It's Christmas";]}

毎年クリスマスの日に働きます


1

SQL * Plus + PL / SQL-100

EXEC LOOP EXIT WHEN TO_CHAR(SYSDATE,'DDMM')='2512';END LOOP;DBMS_OUTPUT.put_line('It''s Christmas');
  • 想定 SERVEROUTPUT ON
  • MySqlソリューションよりも短い(それを食べて、MySql!)
  • 去年には遅すぎるが、今年には間に合う
  • DBMS_OUTPUT.put代わりに試しましたがDBMS_OUTPUT.put_line、それは何も印刷しません。

1

C#(126)

using System;class P{static void Main(){while(DateTime.Now.Date.ToString("Md")!="1225");Console.WriteLine("It's Christmas");}}

お使いのバッテリーに最適:

C#(163)

using s=System;class P{static void Main(){s.Threading.Thread.Sleep(s.DateTime.ParseExact("1225","Md",null)-s.DateTime.Now);s.Console.WriteLine("It's Christmas");}}

編集する

2番目の(「バッテリーに適した」)バージョンには、12月の問題が少しあります。26日から12月 31日私はちょうど考えた:P

どちらのバージョンもおそらくもう少し短くすることができます。


1

Japt、27バイト(非競合)

Ks f"c 25" ?`It's CËItµs`:P

今日の日付に対してテストするには:c 25今月の最後の文字(省略)+スペース+月の日付で置き換えます。Feb 02==b 02

オンラインでお試しください!Japtはこの課題よりもはるかに新しいため、競合しません。


1

VBA、58バイト

匿名のVBEイミディエイトウィンドウ関数は、入力を受け取らず、クリスマスの日まで実行され、その時点で出力されます It's Christmasます。と、VBEイミディエイトウィンドウにれます。

While Left(Now,5)<>"12/25":DoEvents:Wend:?"It's Christmas"

0

bash-n-date:69文字:

sleep $(($(date -d"12/25" +%s)-$(date +%s))) && echo "It's X-Ray    "

しかし、12月26日から12月31日に失敗します。


0

Q(60)

 system"t 1000";.z.ts:{if[.z.d~2012.12.25;1"It’s Christmas"]}

>それがクリスマスではない場合、クリスマスまで何とかして待ってから「It's Christmas」を印刷する必要があります。
skeevey

申し訳ありませんが、クリスマスの場合は毎秒チェックするように修正しました。したがって、これは12月25日ごとに86,400回「It's Christmas」と出力します。明らかに、ミリ秒単位のタイマーを増やすことでこれを変更できます。
sinedcm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.