查找所有遵循模式的时间


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,等等(总是在数字之间输入一个步骤)

规则:

  • 您可以选择任何喜欢的语言
  • 您无法重复打印
  • 按照一天的顺序,每行一次
  • 获奖者将在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:45HH:MM
霍华德

对!我在示例中错过了它
RSFalcon7,2014年

3
13:57算作一个序列?那6:54呢 同样,也6:42需要确定。
John Dvorak 2014年

3
是否只用一个不是前导零的数字来表示时间(例如00:01算作一个序列)?
2014年

2
@ RSFalcon7所以只有一些前导零被忽略了吗?哪个?23:45、02:34、00:23、00:02似乎是类似情况。
Joachim Isaksson 2014年

Answers:



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
现在应该很好。
2014年

2
我的解决方案输出了这些(例如02:34)。规则m-12==h*11抓住了他们。
2014年

2
您可以替换100*h+m==1234||100*h+m==2345((m-h)==22)&&!((m-1)%11)(甚至可以使用更少的括号)
r3mainer 2014年

1
大奖!减少到128个字符。谢谢!
2014年

1
我的理解是不包括仅包含一位数字的序列,例如00:01。我将在原始问题上发表以进行澄清。
2014年

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 2014年

1

Javascript-171个字符(2014年5月2日)!

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

取消评论(并发表评论):

// 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个字符(旧)(14/4/2)

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)

一心一意地坐下来改善一下,有了很多东西:) JSBin

208个字符(旧)(2014年2月2日)

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次所需时间(每行一次)

将继续改善我的代码。

我将不胜感激任何反馈。谢谢。


最近更新!
Gaurang Tandon

1

Python 3,248个字符

猜猜我来晚了一点,也不太好,但是最后,我分享了我的第一个代码高尔夫东西:

我决定只支持真实的序列,例如01:23和23:45,而不是00:12。无论如何,我敢打赌,还有很多事情要做得更好,所以请继续与我分享评论。

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

在我的pastebin上获得了非常具有描述性的版本


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,如果没有其他原因,尽管Octave在38个字符处击败了它disp(urlread('http://bit.ly/1fzhb3C')):)
Joachim Isaksson

...虽然您可能应该考虑自定义设计的静态HTML,但是您正在加载源代码的一部分,否则静态文件将可以(并且同样不计入...?)
Joachim Isaksson

-7

TI-BASIC

对于您的TI-84计算器

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

3
这将以哪种方式回答问题?
2014年

2
为了公平问题国家“跟着一个下列模式”
丹尼

2
@Danny我认为这太违反规则了。
John Dvorak 2014年

1
@JanDvorak这如何改变规则???
Timtech,2014年

2
好吧...让我想到其他表达规则的方法。我仍然不确定您是否故意误解了它,但对于我以及到目前为止的其他回答者来说似乎都足够清楚。
约翰·德沃夏克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.