Tìm tất cả các lần theo một mẫu


13

Công việc của bạn là viết một chương trình in mọi lúc (theo định dạng HH: MM, 24 giờ) theo bất kỳ mẫu nào sau đây:

  • Giờ bằng phút, ví dụ 22: 22,01: 01
  • Giờ bằng với số phút đảo ngược, ví dụ 10:01, 01:10, 22:22
  • Các chuỗi khớp với H: MM hoặc HH: MM, luôn được in bằng HH: MM. Ví dụ: 00:12, 01:23, 23:45, 03:45, v.v (luôn luôn là một bước duy nhất giữa các chữ số)

Quy tắc:

  • Bạn có thể chọn bất kỳ ngôn ngữ nào bạn thích
  • Bạn không thể in nhiều lần
  • Một lần trên mỗi dòng, theo thứ tự trong ngày
  • Người chiến thắng sẽ được chọn vào ngày 5 tháng 2.

PS: đây là câu hỏi đầu tiên của tôi, nó có thể có một số mâu thuẫn. Hãy chỉnh sửa.

PS2: Đây là 44 giải pháp dự kiến ​​(đã được Josh và primo trình bày, Cảm ơn!)

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
18h18
19:19
20:02
20:20
21h12
21h21
22h22
23:23
23:32
23:45

2
Tôi hy vọng nó 3:45được viết 03:45theo HH:MMđịnh dạng và do đó không phải là một chuỗi.
Howard

đúng! Tôi nhớ điều đó trong các ví dụ
RSFalcon7

3
không 13:57tính là một chuỗi? Thế còn 6:54? Cùng một lưu ý, cũng 6:42cần phải được quyết định.
John Dvorak

3
Có phải thời gian chỉ có một chữ số không phải là số 0 đứng đầu, chẳng hạn như 00:01được tính là một chuỗi?
Josh

2
@ RSFalcon7 Vì vậy, chỉ một số số 0 hàng đầu bị bỏ qua? Những cái nào? 23:45, 02:34, 00:23, 00:02 dường như là trường hợp tương tự.
Joachim Isaksson

Câu trả lời:


4

Golf ( 82 72)

Vẫn còn rất nhiều người mới bắt đầu, nhưng không có câu trả lời của GS, vì vậy ... :)

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

PHP sẽ không thể đánh bại điều đó.
Primo

Và C chắc chắn sẽ không thể đánh bại điều đó.
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
";

Điều này sẽ tìm thấy các mẫu như 02:34, nhưng sẽ không tìm thấy các mẫu như 00:23hoặc 00:02. Nếu tôi hiểu sự làm rõ của OP trong các bình luận, điều này là chính xác.

In tổng cộng 44 kết quả:

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 (ban đầu 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));}

Một phiên bản lặp với 119 ký tự:

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

Xin chân thành cảm ơn @squeamish ossifrage!


1
Nên tốt bây giờ.
Josh

2
Giải pháp của tôi đưa ra những cái đó (chẳng hạn như 02:34). Các quy tắc m-12==h*11bắt chúng.
Josh

2
Bạn có thể thay thế 100*h+m==1234||100*h+m==2345bằng ((m-h)==22)&&!((m-1)%11)(có thể thậm chí với ít dấu ngoặc hơn)
squossish ossifrage

1
Giải độc đắc! Trở lại xuống 128 ký tự. Cảm ơn!
Josh

1
Sự hiểu biết của tôi là không bao gồm các chuỗi chỉ có một chữ số như 00:01. Tôi sẽ đăng lên câu hỏi ban đầu để làm rõ.
Josh

2

Con trăn (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ước tất cả các số 0 đứng đầu trước khi các chuỗi cho tổng cộng 57 kết quả.


2

APL (90)

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

Đó là nó. Tôi sẽ tạo ra một phương ngữ perl trong đó mọi từ khóa và hầu hết các chức năng là một ký tự. +1, btw;)
primo

1

Javascript - 171 ký tự (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)

Tôi thực sự nghiêm túc với việc chơi golf. Nếu tôi nhìn lại từ bây giờ, tôi đã cắt giảm gần 30 ký tự! Mã não .

Ungolfed (và bình luận):

// 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 ký tự (Cũ) (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)

Một chút thử nghiệm và cải thiện rất nhiều (9 ký tự) :) JSBin

196 ký tự (Cũ) (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)

Hạ gục với một tâm trí tươi mới và cải thiện nó rất nhiều, một lớp lót :) JSBin .

208 ký tự (Cũ) (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)}}

Cung cấp chính xác 44 lần cần thiết (mỗi lần trong dòng mới)

Sẽ tiếp tục cải thiện mã của tôi.

Tôi sẽ đánh giá cao bất kỳ thông tin phản hồi. Cảm ơn bạn.


Cập nhật gần đây !!
Gaurang Tandon

1

Python 3, 248 ký tự

Đoán là tôi hơi muộn và cũng không tốt lắm, nhưng cuối cùng, tôi đã chia sẻ điều mã hóa đầu tiên của mình:

Tôi quyết định chỉ hỗ trợ các chuỗi thực như 01:23 và 23:45, không phải 00:12. Dù sao, tôi đặt cược có rất nhiều để làm tốt hơn, vì vậy hãy tiếp tục và chia sẻ nhận xét với tôi.

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

Có phiên bản rất mô tả cùng với nó trên pastebin của tôi


0

Delphi

Vẫn đang làm việc với nó nhưng đây là những gì tôi có cho đến nay.
Nó hoạt động, nhưng tôi chắc chắn có thể làm cho nó ngắn hơn.
Biên tập: In 48 lần.

Không có thụt lề 422 ký tự

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.

Với 557 ký tự thụt lề

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

Tăng 00:00 đến 23:59, chuyển thành chuỗi, sau đó kiểm tra (kiểm tra 1 hoặc 2) hoặc 3

Đầu ra:

("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")?>

Nó không bẻ cong các quy tắc theo bất kỳ cách nào. Bạn cần cài đặt mô-đun pecl_http và short_open_tag được đặt thành "1" trong php.ini.


+1, nếu không có gì khác cho sự lén lút, mặc dù Octave đánh bại nó ở 38 ký tự disp(urlread('http://bit.ly/1fzhb3C')):)
Joachim Isaksson

... mặc dù bạn có thể nên xem xét HTML tĩnh được thiết kế tùy chỉnh mà bạn đang tải một phần của mã nguồn, nếu không, một tệp tĩnh sẽ làm (và không được tính như nhau ...?)
Joachim Isaksson

-7

TI-CƠ BẢN

Đối với máy tính TI-84 của bạn

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

3
Bằng cách nào câu trả lời này?
Howard

2
Để công bằng, câu hỏi nêu rõ "làm theo một trong các mẫu sau"
Danny

2
@Danny Tôi nghĩ rằng điều này là uốn cong các quy tắc quá nhiều, mặc dù.
John Dvorak

1
@JanDvorak Làm thế nào điều này uốn cong các quy tắc ???
TimTech

2
OK ... hãy để tôi nghĩ ra những cách khác để thể hiện quy tắc đó. Tôi vẫn không chắc chắn nếu bạn giải thích sai về mục đích, nhưng nó có vẻ đủ rõ ràng đối với tôi cũng như với các anwerer khác cho đến nay.
John Dvorak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.