Bir kalıbı takip eden tüm saatleri bul


13

İşiniz, aşağıdaki kalıplardan birini izleyen her zaman (SS: DD, 24 saat biçiminde) yazdıran bir program yazmaktır:

  • Dakikalara eşit saatler, örneğin 22: 22,01: 01
  • Saatler ters dakikaya eşittir, örneğin 10:01, 01:10, 22:22
  • H: MM veya HH: MM ile eşleşen diziler, her zaman HH: MM ile yazdırılır. Ör. 00:12, 01:23, 23:45, 03:45, vb (her zaman rakamlar arasında tek bir adım)

Kurallar:

  • İstediğiniz herhangi bir dili seçebilirsiniz
  • Tekrarlanan süreleri yazdıramazsınız
  • Günün sırasını izleyen satır başına bir kez
  • Kazanan 5 Şubat'ta seçilecek.

Not: Bu benim ilk sorum, bazı tutarsızlıklar olabilir. Düzenlemek için çekinmeyin.

PS2: İşte beklenen 44 çözüm (Josh ve primo tarafından zaten sunuldu, teşekkürler!)

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
00:12
00:21
00: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
Bunun bir formatta değil , formatta 3:45yazılmasını beklerdim . 03:45HH:MM
Howard

sağ! Örneklerde bunu özlüyorum
RSFalcon7

3
etmez 13:57bir dizi olarak kabul? Ne olmuş 6:54? Aynı notta 6:42da karar verilmesi gerekiyor.
John Dvorak

3
Yalnızca tek bir basamağa sahip zamanlar, başa çıkma sıfırı olmayan 00:01bir sıra mıdır?
Josh

2
@ RSFalcon7 Yalnızca önde gelen sıfırlar yok sayılıyor mu? Hangileri? 23:45, 02:34, 00:23, 00:02 benzer durumlar gibi görünüyor.
Joachim Isaksson

Yanıtlar:


4

Golf Yazıları ( 82 72)

Hala bir acemi, ama GS cevap yoktu, yani ... :)

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

PHP bunu yenemez.
primo

Ve C kesinlikle bunu yenemez.
Josh

4

PHP - 93 bayt

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

Bu, veya 02:34gibi desenler bulamaz . OP'nin açıklamalardaki açıklamalarını anlarsam, bu doğrudur.00:2300:02

Toplam 44 sonuç yazdırır:

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 (başlangıçta 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 karakterlik yinelemeli bir sürüm:

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'a çok teşekkürler!


1
Şimdi iyi olmalı.
Josh

2
Benim çözümüm çıktılar (örneğin 02:34). Kural m-12==h*11onları yakalar.
Josh

2
Sen yerini alabilecek 100*h+m==1234||100*h+m==2345olan ((m-h)==22)&&!((m-1)%11)(hatta belki de daha az parantez ile)
r3mainer

1
İkramiye! 128 karaktere geri dön. Teşekkürler!
Josh

1
Anladığım kadarıyla yalnızca tek bir basamağı olan dizileri içermemekteydim 00:01. Açıklığa kavuşturmak için orijinal soru üzerine yazacağım.
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:])

Tüm önde gelen sıfırları dizilerden önce sıyırmak toplamda 57 sonuç verir.


2

APL (90)

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

Bu kadar. Her anahtar kelime ve çoğu fonksiyon tek bir karakter olduğu perl bir lehçe yapmak için kapalı. +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)

Ciddi golf asmak alıyorum. Şimdiden geriye bakarsam, neredeyse 30 karakter kestim! JSBin .

Ungolfed (ve yorum yaptı):

// 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 (Eski)

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)

Biraz deneme ve lot iyileştirmesi (9 karakter) :) JSBin

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

Taze bir zihinle oturdu ve çok geliştirdi, bir astar :) JSBin .

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

Tam olarak gerekli 44 zamanı verir (her biri yeni satırda)

Kodumu geliştirmeye devam edecek.

Herhangi bir geri bildirimi çok takdir ediyorum. Teşekkür ederim.


Son Güncelleme !!
Gaurang Tandon

1

Python 3, 248 karakter

Sanırım biraz geç kaldım ve çok da iyi değilim, ama sonunda paylaşacağım ilk codegolf şeyim var:

Sadece 01:23 ve 23:45 gibi gerçek dizileri desteklemeye karar verdim, 00:12 değil. Her neyse, daha iyisini yapmak için bol miktarda bahis oynuyorum, bu yüzden lütfen devam edin ve benimle bir yorum paylaşın.

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

Benim üzerinde onunla birlikte çok açıklayıcı sürümü var pastebin


0

Delphi

Hala üzerinde çalışıyor ama bu şimdiye kadar var.
Çalışır, ancak daha kısa elde etmek mümkün olduğundan eminim.
Düzenleme: 48 kez yazdırır.

Girintisiz 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.

Girintili 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

00:00 ila 23:59 değerini artırır, dizeye yayın yapar, sonra kontrol edin (test 1 veya 2) veya 3

Çıktı:

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

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

Kuralları hiçbir şekilde bükmez. Php.ini dosyasında pecl_http modülü kurulu ve short_open_tag öğesi "1" olarak ayarlanmış olmalıdır.


+1, gizlilik için başka bir şey değilse, Octave 38 karaktere yenerse disp(urlread('http://bit.ly/1fzhb3C')):)
Joachim Isaksson

... muhtemelen kaynak kodun bir kısmını yüklediğiniz özel olarak tasarlanmış statik HTML'yi düşünmelisiniz, aksi takdirde statik bir dosya yapar (ve aynı şekilde sayılmaz ...?)
Joachim Isaksson

-7

TI-BASIC

TI-84 hesap makineniz için

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

3
Bu hangi soruya cevap veriyor?
Howard

2
Adil olmak gerekirse, soru " aşağıdaki kalıplardan birini izleyin "
Danny

2
@Danny Bence bu kuralları çok fazla büküyor.
John Dvorak

1
@JanDvorak Bu kuralları nasıl büküyor ???
Timtech

2
Tamam ... bu kuralı ifade etmenin başka yollarını düşüneyim. Bunu kasıtlı olarak yanlış yorumlayıp yorumlamadığınızdan hala emin değilim, ama şu ana kadar bana ve diğer anwerer'a yeterince açık görünüyor.
John Dvorak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.