Temukan semua waktu yang mengikuti pola


13

Pekerjaan Anda adalah menulis program yang mencetak sepanjang waktu (dalam format HH: MM, 24 jam) yang mengikuti salah satu pola berikut:

  • Jam sama dengan menit, mis. 22: 22,01: 01
  • Jam sama dengan menit mundur, mis. 10:01, 01:10, 22:22
  • Urutan, yang cocok dengan H: MM, atau HH: MM, selalu dicetak dengan HH: MM. Misalnya 00:12, 01:23, 23:45, 03:45, dll. (Selalu selangkah di antara angka)

Aturan:

  • Anda dapat memilih bahasa apa pun yang Anda suka
  • Anda tidak dapat mencetak berulang kali
  • Satu kali per baris, mengikuti urutan hari ini
  • Pemenang akan dipilih pada 5 Februari.

PS: ini pertanyaan pertamaku, mungkin ada beberapa ketidakkonsistenan. Jangan ragu untuk mengedit.

PS2: Inilah 44 solusi yang diharapkan (sudah disampaikan oleh Josh dan Primo, Terima kasih!)

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
Saya berharap yang 3:45ditulis 03:45dalam HH:MMformat dan dengan demikian bukan urutan
Howard

Baik! Saya kehilangan itu dalam contoh
RSFalcon7

3
apakah 13:57dihitung sebagai urutan? Bagaimana dengan 6:54? Pada catatan yang sama, 6:42perlu diputuskan juga.
John Dvorak

3
Apakah waktu dengan hanya satu digit yang bukan nol di depan seperti 00:01dihitung sebagai urutan?
Josh

2
@ RSFalcon7 Jadi hanya beberapa nol terkemuka yang diabaikan? Yang mana 23:45, 02:34, 00:23, 00:02 akan menjadi kasus serupa.
Joachim Isaksson

Jawaban:


4

Golfscript ( 82 72)

Masih sangat pemula, tetapi tidak ada jawaban GS, jadi ... :)

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

PHP tidak akan bisa mengalahkan itu.
Primo

Dan C pasti tidak akan bisa mengalahkan itu.
Josh

4

PHP - 93 byte

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

Ini akan menemukan pola seperti 02:34, tetapi tidak akan menemukan pola seperti 00:23atau 00:02. Jika saya memahami klarifikasi OP di komentar, ini benar.

Mencetak total 44 hasil:

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 (awalnya 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));}

Versi berulang dengan 119 karakter:

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);}

Terima kasih banyak untuk osifrage @squeamish!


1
Seharusnya bagus sekarang.
Josh

2
Solusi saya menghasilkan mereka (seperti 02:34). Aturan m-12==h*11menangkap mereka.
Josh

2
Anda dapat mengganti 100*h+m==1234||100*h+m==2345dengan ((m-h)==22)&&!((m-1)%11)(bahkan mungkin dengan kurung lebih sedikit)
r3mainer

1
Jackpot! Kembali ke 128 karakter. Terima kasih!
Josh

1
Pemahaman saya adalah untuk tidak memasukkan urutan yang hanya memiliki satu digit seperti 00:01. Saya akan memposting pertanyaan asli untuk klarifikasi.
Josh

2

Python (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:])

Melucuti semua nol terkemuka sebelum urutan memberi hasil total 57


2

APL (90)

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

Itu dia. Saya akan membuat dialek perl di mana setiap kata kunci dan sebagian besar fungsi adalah satu karakter. +1, btw;)
primo

1

Javascript - 171 karakter (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)

Saya benar-benar memahami golf. Jika saya melihat ke belakang dari sekarang, saya telah mengurangi hampir 30 karakter! JSBin .

Tidak disatukan (dan berkomentar):

// 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 karakter (Tua) (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)

Sedikit bereksperimen, dan banyak perbaikan (9 karakter) :) JSBin

196 karakter (Tua) (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)

Duduk dengan pikiran segar dan banyak meningkatkannya, satu liner :) JSBin .

208 karakter (Tua) (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)}}

Memberikan persis 44 waktu yang diperlukan (masing-masing dalam baris baru)

Akan terus meningkatkan kode saya.

Saya akan sangat menghargai umpan balik apa pun. Terima kasih.


Diperbarui Baru-Baru Ini !!
Gaurang Tandon

1

Python 3, 248 karakter

Kira saya sedikit terlambat dan tidak terlalu baik juga, tetapi akhirnya, saya mendapat hal codegolf pertama saya untuk dibagikan:

Saya memutuskan untuk hanya mendukung urutan nyata seperti 01:23 dan 23:45, bukan 00:12. Bagaimanapun, saya yakin ada banyak yang harus dilakukan dengan lebih baik, jadi silakan lanjutkan dan berbagi komentar dengan saya.

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)]])

Punya versi yang sangat deskriptif bersama dengan itu di pastebin saya


0

Delphi

Masih mengerjakannya tapi ini yang saya miliki sejauh ini.
Ini bekerja, tetapi saya yakin itu mungkin untuk membuatnya lebih pendek.
Sunting: Mencetak 48 kali.

Tanpa indentasi 422 karakter

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.

Dengan indentasi 557 karakter

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

Peningkatan 00:00 hingga 23:59, dicor ke string, lalu periksa (tes 1 atau 2) atau 3

Keluaran:

("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 byte

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

Itu tidak menekuk aturan dengan cara apa pun. Anda memerlukan modul pecl_http diinstal dan short_open_tag diatur ke "1" di php.ini.


+1, jika tidak ada yang lain untuk kecerdikan, meskipun Oktaf mengalahkannya di 38 karakter disp(urlread('http://bit.ly/1fzhb3C')):)
Joachim Isaksson

... walaupun Anda mungkin harus mempertimbangkan statis statis HTML yang dirancang khusus Anda memuat bagian dari kode sumber, jika tidak file statis akan melakukan (dan sama-sama tidak dihitung ...?)
Joachim Isaksson

-7

TI-DASAR

Untuk kalkulator TI-84 Anda

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

3
Dengan cara apa ini menjawab pertanyaan?
Howard

2
Agar adil, pertanyaan itu menyatakan "ikuti salah satu pola berikut"
Danny

2
@Danny, saya pikir ini terlalu banyak membengkokkan aturan.
John Dvorak

1
@ JanDvorak Bagaimana ini menekuk aturan ???
Timtech

2
Oke ... biarkan saya memikirkan cara lain untuk mengekspresikan aturan itu. Saya masih tidak yakin apakah Anda salah mengartikannya dengan sengaja, tetapi tampaknya cukup jelas bagi saya dan juga bagi pengguna lain sejauh ini.
John Dvorak
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.