パターンに従うすべての時間を見つける


13

あなたの仕事は、次のパターンのいずれかに従うすべての時間(HH:MM形式で24時間)を印刷するプログラムを作成することです。

  • 時間は分に等しい、例えば22:22,01:01
  • 逆の時間に等しい時間(例:10:01、01:10、22:22)
  • H:MMまたはHH:MMに一致するシーケンスは、常にHH:MMで印刷されます。例:00:12、01:23、23:45、03:45など(数字の間は常に1ステップ)

ルール:

  • 好きな言語を選択できます
  • 繰り返し印刷することはできません
  • 日ごとに1行に1回
  • 勝者は2月5日に選ばれます。

PS:これは私の最初の質問です、いくつかの矛盾があるかもしれません。編集してください。

PS2:予想される44のソリューションをご紹介します(すでにJoshとprimoから提供されています、ありがとう!)

00:00
00:12
01:01
01:10
01:23
02:02
02:20
02:34
03:03
03:30
03:45
04:04
04:40
04:56
05:05
05:50
06:06
07:07
08:08
09:09
10:01
10:10
11:11
12:12
12:21
12:34
13:13
13:31
14:14
14:41
15:15
15:51
16:16
17:17
18:18
19:19
20:02
20:20
21:12
21:21
22:22
23:23
23:32
23:45

2
私はそれ3:45がフォーマットで書かれて03:45おりHH:MM、シーケンスではないことを期待しています。
ハワード14年

正しい!私は例のそれを欠場
RSFalcon7

3
13:57シーケンスとしてカウント?どう6:54?同様に、6:42決定する必要もあります。
ジョン・ドヴォラック

3
00:01シーケンスとしてカウントするなど、先行ゼロではない1桁のみで時間を計算しますか?
ジョシュ14年

2
@ RSFalcon7では、先行ゼロのみが無視されますか?どれ?23:45、02:34、00:23、00:02は同様のケースのようです。
ヨアヒム・イザクソン14年

回答:


4

Golfscript(82 72)

まだ初心者ですが、GSの回答がなかったので... :)

24,{'0'\+-2>..+\.-1%+}%5,{'0'7,{+}/>4<.(;0\+}%|{2=54<},$);{2/~':'\++}%n*

PHPはそれを打ち負かすことはできません。
プリモ14年

そして、Cは間違いなくそれを打ち負かすことができません。
ジョシュ14年

4

PHP-93バイト

<?for(;24>$h;)@ereg(+$h=&date(i,$i).$m=date(s,$i++),"0123456$h$h".strrev($h))&&print"$h:$m
";

これにより02:34、などのパターンが検出されますが、00:23またはなどのパターンは検出されません00:02。コメントでOPの説明を理解している場合、これは正しいです。

合計44の結果を印刷します。

00:00
00:12
01:01
01:10
01:23
02:02
02:20
02:34
03:03
03:30
03:45
04:04
04:40
04:56
05:05
05:50
06:06
07:07
08:08
09:09
10:01
10:10
11:11
12:12
12:21
12:34
13:13
13:31
14:14
14:41
15:15
15:51
16:16
17:17
18:18
19:19
20:02
20:20
21:12
21:21
22:22
23:23
23:32
23:45

4

C、118(最初は136)

h,m;main(){h<24&&main(m>57?m=0,h++:h==m|h==m%10*10+m/10|m-12==h*11|h==m-22&!(~-m++%11)&&printf("%02d:%02d\n",h,m-1));}

119文字の反復バージョン:

h;main(m){for(;h<24;h++)for(m=0;m<57;m++)h==m|h==m%10*10+m/10|m-12==h*11|h==m-22&!(~-m%11)&&printf("%02d:%02d\n",h,m);}

@squeamish ossifrageに大いに感謝します!


1
今は良いはずです。
ジョシュ14年

2
私のソリューションはそれらを出力します(など02:34)。ルールm-12==h*11がそれらをキャッチします。
ジョシュ14年

2
あなたは置き換えることができ100*h+m==1234||100*h+m==2345((m-h)==22)&&!((m-1)%11)(多分少ないブラケット付き)
r3mainer

1
ジャックポット!128文字に戻ります。ありがとう!
ジョシュ14年

1
私の理解は、1桁の数字しか持たないシーケンスを含めないことでした00:01。説明のために元の質問に投稿します。
ジョシュ14年

2

パイソン(178)

s=sorted
for i in[x for x in['%04d'%i for i in range(2400)if i/10%10<6]if s(x[:2])==s(x[2:])or len({i-ord(y)for i,y in enumerate(x.lstrip('0'))})==1]:print'%2s:%2s'%(i[:2],i[2:])

シーケンスの前にすべての先行ゼロを除去すると、合計57の結果が得られます。


2

APL(90)

F←{,'ZI2'⎕FMT⍵}⋄↑⊃¨{(F⍺),':',F⍵}/¨Z/⍨{(⍺=⍵)∨(≡/0 1⌽∘F¨⍺⍵)∨∧/¯1=2-/⍎¨(⍕⍺),F⍵}/¨Z←,1-⍨⍳24 60

それでおしまい。すべてのキーワードとほとんどの機能が単一の文字であるperlの方言を作成します。+ 1、btw;)
primo 14

1

Javascript-171文字(5/2/14)!

for(h='00';+h<24;h=(++h<10?'0':'')+h)for(m='00';+m<60;m=(++m<10?'0':'')+m)if(h[1]+h[0]==m||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

私は真剣にゴルフのコツをつかんでいます。今から振り返ると、約30文字が削減されました。JSBin

Ungolfed(およびコメント):

// Note: +'string' is same as 'parseInt(string, 10)'
// Also, this code is not the shortest one, I have purposely made this code longer for
// understanding purposes

for(h = '0'; +h < 24; h = +h + 1 + '') //initialize h(our), loop while it's less than 24
{                                      // increase it by 1 and cast back to string
    for(m = '0'; +m < 60; m= +m + 1 + '') // intialize m(inute), loop while < 60
    {                                  // increase it by 1 and cast back to string
        if(h.length < 2) h = 0 + h;    // if it is '9', convert to '09'
        if(m.length < 2) m = 0 + m;    // if it is '9', convert to '09'

        // Tests for printing
        if(h[0] === m[1] && m[0] === h[1] ||
           h === m ||
           +m[1] - +m[0] === 1 && +m[0] - +h[1] === 1 && (+h[0] === 0 || +h[1] -+ h[0] === 1))
        console.log(h + ':' + m);  // print
    } // inner loop end
}     // outer loop end

187文字(旧)(4/2/14)

for(h='00';+h<24;h=(+h<9?'0':'')+(+h+1))for(m='00';+m<60;m=(+m<9?'0':'')+(+m+1))if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

少し実験して、多くの改善(9文字):) JSBin

196文字(旧)(3/2/14)

for(h='00';+h<24;h=(+h<9?'0':'')+(+h+1))for(m='00';+m<60;m=(+m<9?'0':'')+(+m+1))if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

新鮮な心で座って、それを大幅に改善しました、ライナー1つ:) JSBin

208文字(旧)(2/2/14)

for(h='0';+h<24;h=+h+1+''){for(m='0';+m<60;m=+m+1+''){if(h.length<2)h=0+h
if(m.length<2)m=0+m
if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-+m[0]==1&&+m[0]-+h[1]==1&&(+h[0]==0||+h[1]-+h[0]==1))console.log(h+':'+m)}}

正確に44の必要な時間を与えます(それぞれ新しい行にあります)

コードを改善し続けます。

フィードバックをいただければ幸いです。ありがとうございました。


最近更新されました!!
ゴーランタンドン14

1

Python 3、248文字

私は少し遅れており、あまり良くもありませんが、最終的に、共有する最初のコードゴルフを手に入れました:

00:12ではなく、01:23や23:45などの実際のシーケンスのみをサポートすることにしました。とにかく、私はもっと良くするために多くのことを賭けているので、先に進んでコメントを私と共有してください。

import itertools as t
s=sorted
r=range
i=int
d='%02d'
e=d+':'+d
print([e%(i(a[0]),i(a[1])) for a in t.product([d% x for x in r(0,24)], [d% x for x in r(0,60)]) if s(a[0])==s(a[1]) or list(a[0]+a[1])==[str(x) for x in r(i(a[0][0]),i(a[1][-1])+1)]])

私のペーストビンで非常に説明的なバージョンを入手しました


0

デルファイ

まだそれに取り組んでいますが、これは私が今のところ持っているものです。
動作しますが、短くすることは可能です。
編集: 48回印刷します。

インデント422文字なし

uses System.SysUtils,DateUtils;var t:TTime;a,b,c,d:integer;s:string;begin t:=StrToTime('00:01');while t<StrToTime('23:59')do begin s:=FormatDateTime('hhnn',t);a:=StrToInt(s[1]);b:=StrToInt(s[2]);c:=StrToInt(s[3]);d:=StrToInt(s[4]);if((a+1=b)and(b+1=c)and(c+1=d))or((a=0)and(b+1=c)and(c+1=d))or((a=0)and(b=0)and(c+1=d))or((a=d)and(b=c))or((a=c)and(b=d))then WriteLn(FormatDateTime('hh:nn',t));t:=IncMinute(t)end;ReadLn;end.

インデント557文字

uses
  System.SysUtils, DateUtils;

var
  t:TTime;
  a,b,c,d:integer;
  s:string;
begin
  t:=StrToTime('00:01');
  while t<StrToTime('23:59')do
  begin
    s:=FormatDateTime('hhnn',t);
    a:=StrToInt(s[1]);
    b:=StrToInt(s[2]);
    c:=StrToInt(s[3]);
    d:=StrToInt(s[4]);
    if((a+1=b) and (b+1=c) and (c+1=d)) or
      ((a=0) and (b+1=c) and (c+1=d)) or
      ((a=0) and (b=0) and (c+1=d)) or
      ((a=d) and (b=c)) or ((a=c) and (b=d)) then
      WriteLn(FormatDateTime('hh:nn',t));
    t:=IncMinute(t)
  end;
  ReadLn;
end.

0

q(116)

distinct{t:string 00:00+x;$[(t[0 1]in(t[3 4];t[4 3]))|all 1=1_deltas{"I"$x}each t[0 1 3 4];t;"00:00"]}each til 1440

00:00から23:59までインクリメントし、文字列にキャストしてから、チェック(テスト1または2)または3

出力:

("00:00";"01:01";"01:10";"01:23";"02:02";"02:20";"03:03";"03:30";"04:04";"04:40";"05:05";"05:50";"06:06";"07:07";"08:08";"09:09";"10:01";"10:10";"11:11";"12:12";"12:21";"12:34";"13:13";"13:31";"14:14";"14:41";"15:15";"15:51";"16:16";"17:17";"18:18";"19:19";"20:02";"20:20";"21:12";"21:21";"22:22";"23:23";"23:32";"23:45")

0

PHP- 56 39 31バイト

<? http_redirect("goo.gl/W2M5mo")?>

ルールを曲げることはありません。php.iniでpecl_httpモジュールをインストールし、short_open_tagを「1」に設定する必要があります。


+1、隠密性がなければ、オクターブは38文字でそれを打ちますがdisp(urlread('http://bit.ly/1fzhb3C')):)
ヨアヒム・イサクソン14

...あなたはおそらく、カスタム設計された静的なHTMLを検討すべきであるが、もしそうでない場合は、静的なファイルが行うだろうしているロードのソースコードの一部、(と同じようにカウントされない...?)
ヨアヒムIsaksson

-7

TI-BASIC

TI-84電卓用

DelVar AWhile A<24:A+1→A:Disp A,":",A:End

3
これはどのように質問に答えますか?
ハワード14年

2
公平を期すために、質問は「次のパターンのいずれかに従う」と述べています
ダニー14年

2
@Dannyしかし、これはルールを曲げすぎていると思います。
ジョンドヴォルザーク14年

1
@JanDvorakこれはどのようにルールを曲げていますか?
ティムテック14年

2
OK ...そのルールを表現する他の方法を考えてみましょう。あなたが意図的に誤って解釈したかどうかはまだわかりませんが、これまでのところ、私と他のanwererにとっては十分に明らかです。
ジョンドヴォルザーク14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.