Znajdź wszystkie czasy zgodne ze wzorem

13

Twoim zadaniem jest napisanie programu, który drukuje cały czas (w formacie GG: MM, 24 godziny), według dowolnego z następujących wzorów:

  • Godziny równe minutom, np. 22: 22,01: 01
  • Godziny równe minutom wstecznym, np. 10:01, 01:10, 22:22
  • Sekwencje pasujące do H: MM lub GG: MM, zawsze drukowane z GG: MM. Np. 00:12, 01:23, 23:45, 03:45 itp. (Zawsze jeden krok między cyframi)

Zasady:

  • Możesz wybrać dowolny język
  • Nie można drukować wielokrotnie
  • Jeden raz na linię, zgodnie z kolejnością dnia
  • Zwycięzca zostanie wybrany 5 lutego.

PS: to moje pierwsze pytanie, może mieć pewne niespójności. Nie krępuj się edytować.

PS2: Oto oczekiwane 44 rozwiązania (już przedstawione przez Josha i primo, dzięki!)

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
RSFalcon7
źródło
2
Spodziewałbym się, że 3:45jest zapisany 03:45w HH:MMformacie, a więc nie w sekwencji.
Howard
dobrze! Tęsknię za tym w przykładach
RSFalcon7
3
nie 13:57liczą się jako ciąg? Co 6:54? Z tego samego 6:42powodu należy również podjąć decyzję.
John Dvorak
3
Czy czasy zawierające tylko jedną cyfrę, która nie jest wiodącym zerem, na przykład 00:01liczone jako sekwencja?
Josh
2
@ RSFalcon7 Więc tylko niektóre zera wiodące są ignorowane? Które? 23:45, 02:34, 00:23, 00:02 wydają się podobne przypadki.
Joachim Isaksson

Odpowiedzi:

4

Golfscript ( 82 72)

Nadal bardzo początkujący, ale nie było odpowiedzi GS, więc ... :)

24,{'0'\+-2>..+\.-1%+}%5,{'0'7,{+}/>4<.(;0\+}%|{2=54<},$);{2/~':'\++}%n*
Joachim Isaksson
źródło
PHP nie będzie w stanie tego pokonać.
primo
I C zdecydowanie nie będzie w stanie tego pokonać.
Josh
4

PHP - 93 bajty

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

Spowoduje to znalezienie wzorów podobnych 02:34, ale nie znajdzie wzorów podobnych 00:23lub 00:02. Jeśli rozumiem wyjaśnienia PO w komentarzach, jest to poprawne.

Drukuje w sumie 44 wyniki:

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
primo
źródło
4

C, 118 (początkowo 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));}

Wersja iteracyjna z 119 znakami:

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

Ogromne podziękowania dla @squeamish ossifrage!

Josh
źródło
1
Teraz powinno być dobrze.
Josh
2
Moje rozwiązanie generuje te (takie jak 02:34). Reguła m-12==h*11je łapie.
Josh
2
Można wymienić 100*h+m==1234||100*h+m==2345z ((m-h)==22)&&!((m-1)%11)(być może nawet mniej nawiasach)
r3mainer
1
Pula! Wróć do 128 znaków. Dzięki!
Josh
1
Zrozumiałem, że nie uwzględniam sekwencji, które mają tylko jedną cyfrę, taką jak 00:01. Wyślę oryginalne pytanie w celu wyjaśnienia.
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:])

Usuwanie wszystkich wiodących zer przed sekwencjami daje w sumie 57 wyników.

Joachim Isaksson
źródło
2

APL (90)

F←{,'ZI2'⎕FMT⍵}⋄↑⊃¨{(F⍺),':',F⍵}/¨Z/⍨{(⍺=⍵)∨(≡/0 1⌽∘F¨⍺⍵)∨∧/¯1=2-/⍎¨(⍕⍺),F⍵}/¨Z←,1-⍨⍳24 60
marinus
źródło
Otóż ​​to. Idę zrobić dialekt perla, w którym każde słowo kluczowe i większość funkcji są pojedynczymi znakami. +1, btw;)
primo
1

JavaScript - 171 znaków (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)

Poważnie zaczynam grać w golfa. Jeśli spojrzę wstecz, odciąłem prawie 30 znaków! JSBin .

Ungolfed (i skomentował):

// 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 znaków (stare) (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)

Trochę eksperymentów i wiele ulepszeń (9 znaków) :) JSBin

196 znaków (stare) (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)

Usiadłem ze świeżym umysłem i bardzo go poprawiłem, jeden liniowiec :) JSBin .

208 znaków (stare) (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)}}

Podaje dokładnie 44 wymagane czasy (każdy w nowej linii)

Będę ulepszać mój kod.

Byłbym bardzo wdzięczny za wszelkie opinie. Dziękuję Ci.

Gaurang Tandon
źródło
Zaktualizowano niedawno !!
Gaurang Tandon
1

Python 3, 248 znaków

Wygląda na to, że jestem trochę spóźniony i niezbyt dobry, ale w końcu udało mi się udostępnić moją pierwszą grę w codegolfa:

Postanowiłem obsługiwać tylko prawdziwe sekwencje, takie jak 01:23 i 23:45, a nie 00:12. W każdym razie, założę się, że jest wiele do zrobienia lepiej, więc proszę, podziel się ze mną komentarzem.

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

Mam bardzo opisową wersję wraz z nią na moim pastebin

Oliver Friedrich
źródło
0

Delfy

Nadal nad tym pracuję, ale to właśnie mam.
Działa, ale jestem pewien, że można go skrócić.
Edycja: drukuje 48 razy.

Bez wcięcia 422 znaków

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.

Z wcięciem 557 znaków

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.
Teun Pronk
źródło
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

Przyrosty od 00:00 do 23:59, rzutuje na string, a następnie sprawdza (test 1 lub 2) lub 3

Wynik:

("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")
nightTrevors
źródło
0

PHP - 56 39 31 bajtów

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

W żaden sposób nie zgina reguł. Musisz zainstalować moduł pecl_http, a short_open_tag ustaw na „1” w php.ini.

użytkownik3188175
źródło
+1, jeśli nic więcej za podstępność, chociaż Octave bije go przy 38 znakach disp(urlread('http://bit.ly/1fzhb3C')):)
Joachim Isaksson
... chociaż prawdopodobnie powinieneś wziąć pod uwagę niestandardowy zaprojektowany statyczny HTML, ładujesz część kodu źródłowego, w przeciwnym razie wystarczy plik statyczny (i równie nie można go policzyć ...?)
Joachim Isaksson
-7

TI-BASIC

Do kalkulatora TI-84

DelVar AWhile A<24:A+1→A:Disp A,":",A:End
Timtech
źródło
3
W jaki sposób odpowiada to na pytanie?
Howard
2
Aby być uczciwym, pytanie brzmi: „postępuj zgodnie z jednym z następujących wzorów”
Danny
2
@ Danny Myślę, że to jednak za bardzo nagina zasady.
John Dvorak
1
@JanDvorak Jak to jest naginanie zasad?
Timtech
2
OK ... pozwól mi pomyśleć o innych sposobach wyrażenia tej reguły. Nadal nie jestem pewien, czy celowo źle go zinterpretowałeś, ale wydaje mi się to wystarczająco jasne zarówno dla mnie, jak i dla dotychczasowego mordercy.
John Dvorak