以半小时的速度列出一天中的所有时间


31

最短答案胜出。

必须在24小时内对其进行排序。最后一行没有逗号。

输出应如下:

'00:00',
'00:30',
'01:00',
'01:30',
'02:00',
'02:30',
'03:00',
'03:30',
'04:00',
'04:30',
'05:00',
'05:30',
'06:00',
'06:30',
'07:00',
'07:30',
'08:00',
'08:30',
'09:00',
'09:30',
'10:00',
'10:30',
'11:00',
'11:30',
'12:00',
'12:30',
'13:00',
'13:30',
'14:00',
'14:30',
'15:00',
'15:30',
'16:00',
'16:30',
'17:00',
'17:30',
'18:00',
'18:30',
'19:00',
'19:30',
'20:00',
'20:30',
'21:00',
'21:30',
'22:00',
'22:30',
'23:00',
'23:30'

6
这是24小时吗?您能否提供全部输出?
xnor

1
必须对输出进行排序吗?
orlp 2015年

44
如果我的程序运行需要23.5个小时,该怎么办?
tfitzger'5

9
我不明白为什么这会是负面的。
Espen Schulstad 2015年

6
关于投票的只是一个小建议。对于尝试创建的挑战,我会尽量提出所有有效答案,以此作为付出努力的回报。我有很多代表,在这里真的不需要赞扬,但是请考虑其他回答者,如果经过大量的思考和调试,他们的答案被忽略了,他们可能会放弃回答。
逻辑骑士

Answers:


17

Pyth,26个字节

Pjbm%"'%02d:%s0',"d*U24"03

示范。

我们从range(24)U24)的笛卡尔积乘以字符串开始"03"

然后,我们将这些值映射到适当的字符串格式替换(m%"'%02d:%s0',"d)。

然后,将所得的字符串连接到换行符(jb)上。

最后,我们删除结尾的逗号(P)并打印。


1
看来我们有一个新的竞争者争夺该奖项。pyth的作者,这几乎是骗人的;)
Espen Schulstad 2015年

15

Befunge-93,63个字节

0>"'",:2/:55+/.55+%.":",:2%3*v
 ^,+55,","<_@#-*86:+1,"'".0. <

 

animation (动画与由BefunExec


14

重击:58 47 46个字符

h=`echo \'{00..23}:{0,3}0\'`
echo "${h// /,
}"

我喜欢这个解决方案:)
Espen Schulstad 2015年

1
匿名用户建议echo \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'使用40个字符。真好 谢谢。但是我更喜欢利用bash自己的力量。
manatwork

1
printf "'%s',\n" {00..23}:{0,3}0
izabera 2015年

@manatwork哦,我听不清楚这个问题,对不起...
izabera

printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ 是45个字节
izabera

10

CJam,31 30 29字节

24,[U3]m*"'%02d:%d0',
"fe%~7<

使用printf格式很简单:

24,                              e# get the array 0..23
   [U3]                          e# put array [0 3] on stack
       m*                        e# do a cartesian product between 0..23 and [0 3] array
                                 e# now we have tuples like [[0 0], [0 3] ... ] etc
         "'%02d:%d0',
"fe%                             e# this is standard printf formatting. What we do here is
                                 e# is that we format each tuple on this string
    ~7<                          e# unwrap and remove comma and new line from last line
                                 e# by taking only first 7 characters

在这里在线尝试


看起来这将夺金。我们会将其提供给明天;)
Espen Schulstad 2015年

@EspenSchulstad我希望它能给我一些金子。感叹
Optimizer

3
请记住,它不仅是宝贵的金子,而且是荣誉。我们在生活中所做的事与永恒相呼应。
Espen Schulstad

10

Python 2,58 56字节

for i in range(48):print"'%02d:%s0',"[:57-i]%(i/2,i%2*3)

就像sentiao的答案一样,但是使用了for循环,并进行了切片以删除逗号。感谢@grc删除了两个字节。


这项工作会:"'%02d:%s0',"[:57-i]
grc 2015年

@grc Ahaha当然,这要好得多
Sp3000

比我能做的更好!
蒂姆(Tim)2015年

6

Java-119字节

我从Java 8的StringJoiner开始,但这意味着要包含一个import语句,因此我决定以旧的方式进行操作:

void f(){String s="";for(int i=0;i<24;)s+=s.format(",\n'%02d:00',\n'%02d:30'",i,i++);System.out.print(s.substring(2));}

也许可以通过消除多个出现StringSystem关键字来改善此情况。


一个普通的版本:)
Espen Schulstad 2015年

您可以将其缩短为159:删除空格a,移动i增量,不使用花for括号,然后将逗号/换行符移动到开头(这使您可以使用较短的空格substring并摆脱length())。由于默认情况下允许使用函数,因此您可以通过消除样板代码来使其更短:void f(){String s="";for(int i=0;i<24;)s+=String.format(",\n'%02d:00',\n'%02d:30'",i,i++);System.out.print(s.substring(2));}如果仅使它返回字符串而不是打印它,则可以使它更短,但这似乎违反了精神,即使不是字母也是如此。
Geobits 2015年

该死的,太好了!我必须牢记这些技巧,谢谢!
桑德

哦,另外几个:更改String.formats.format。您的编译器/ IDE可能
对此有所

1
好东西!format是一个静态方法,因此应该由其类访问,但实际上,以这种方式使用它也是可行的!
桑德,2015年

5

红宝石,94 61 56 51

$><<(0..47).map{|i|"'%02d:%02d'"%[i/2,i%2*30]}*",
"

再次感谢@blutorange对高尔夫的帮助!


就可以减少到61个字节:puts (0..47).to_a.map{|h|"'%02d:%02d'"%[h/2,h%2*30]}.join","(有一个换行符最后一个逗号之后)
blutorange

再次感谢你!我真的没有尝试太多……
rorlork 2015年

Ruby需要一些爱。58字节;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

@blutorange @rcrmn可以减少4个字节(并获得如下:)我的解决方案)通过更换).join*:)
托马什Dundáček


4

JAVA 95 94字节

我喜欢在Java中存在printf的事实:

void p(){for(int i=0;i<24;)System.out.printf("'%02d:00',\n'%02d:30'%c\n", i,i++,(i<24)?44:0);}

不打高尔夫球

void p(){
    for(int i=0;i<24;)
        System.out.printf("'%02d:00',\n'%02d:30'%c\n", i,i++,(i<24)?44:0);
}

编辑取代了','44


groovy中的24.times {printf(“'%02d:00',\ n'%02d:30'%c \ n”,it,it,(it <24)?44:0)} ,只是下降到65 chr
Espen Schulstad 2015年

@EspenSchulstad是否应该将其视为独立功能,或者是否需要其他样板来使其运行?
tfitzger

1
如果您具有groovy,则可以在groovysh中运行它,也可以将其作为.groovy文件中的groovy脚本来运行。那么您不需要任何功能。
Espen Schulstad


@EspenSchulstad有趣。我只对Groovy做过最少的工作。
tfitzger

4

Pyth,32 31字节

我用python打高尔夫球,但结果与Sp3000的答案完全相同。因此,我决定尝试一下Pyth:

V48<%"'%02d:%d0',",/N2*3%N2-54N

这是Sp3000答案的确切翻译:

for i in range(48):print"'%02d:%d0',"[:57-i]%(i/2,i%2*3)

这是我第一次去Pyth,所以请向我介绍一下节省1字节的信息。


做得很好,欢迎来到佩斯。
isaacg 2015年

3

PHP,109字节

foreach(new DatePeriod("R47/2015-05-07T00:00:00Z/PT30M")as$d)$a[]=$d->format("'H:i'");echo implode(",\n",$a);

3

Ruby,54个 51字节

puts (0..23).map{|h|"'#{h}:00',
'#{h}:30'"}.join",
"

1
你可以通过改变减少3个字节\n实际换行符之间移除空间join"。另一方面,请注意,指定的输出在小时中具有前导零。
2015年

此外,通过更改puts $><<(无空格)和.join使用还可以增加一些字节*。但是,在小时中,您仍然面临着领先的零问题。
2015年

3

C,116115101100957473,71

也许可以再刮掉一些字节...

main(a){for(;++a<50;)printf("'%02d:%d0'%s",a/2-1,a%2*3,a<49?",\n":"");}

您可以通过创建一个函数而不是一个完整的程序来节省3个字节。只需用“ f”或任何您喜欢的字母替换“ main”即可。
Bijan

哦,那是一个非常好的建议。..我总是忘记了!
Joshpbarron

3

T-SQL,319个 307 305字节

WITH t AS(SELECT t.f FROM(VALUES(0),(1),(2),(3),(4))t(f)),i AS(SELECT i=row_number()OVER(ORDER BY u.f,v.f)-1FROM t u CROSS APPLY t v),h AS(SELECT i,h=right('0'+cast(i AS VARCHAR(2)),2)FROM i WHERE i<24)SELECT''''+h+':'+m+CASE WHEN i=23AND m='30'THEN''ELSE','END FROM(VALUES('00'),('30'))m(m) CROSS APPLY h

非高尔夫版本:

WITH
t AS(
    SELECT
        t.f
    FROM(VALUES
         (0),(1),(2),(3),(4)
    )t(f)
),
i AS(
    SELECT
        i = row_number() OVER(ORDER BY u.f,v.f) - 1
    FROM t u 
    CROSS APPLY t v
),
h AS(
    SELECT
        i,
        h = right('0'+cast(i AS VARCHAR(2)),2)
    FROM i
    WHERE i<24
)
SELECT
    '''' + h + ':' + m + CASE WHEN i=23 AND m='30' 
                              THEN '' 
                              ELSE ',' 
                         END
FROM(
    VALUES('00'),('30')
)m(m)
CROSS APPLY h

2

Pyth,34个字节

j+\,bmjk[\'?kgd20Z/d2\:*3%d2Z\')48

这绝对可以改善。

在线尝试:Pyth编译器/执行器

说明:

     m                          48   map each d in [0, 1, ..., 47] to:
        [                      )       create a list with the elements:
         \'                              "'"
           ?kgd20Z                       "" if d >= 20 else 0
                  /d2                    d / 2
                     \:                  ":"
                       *3%d2             3 * (d%2)
                            Z            0
                             \'          "'"
      jk                               join by "", the list gets converted into a string
j+\,b                                join all times by "," + "\n"

这些高尔夫语言总是给人留下深刻的印象:)当我使用非高尔夫语言完成这项工作时,我会不胜感激。有谁知道例如Java是否存在golf-jar-lib?
Espen Schulstad

的强制性端口sentiao的给出了31:j+\,bm%"'%02d:%s0'",/d2*3%d2 48用字符串格式化
SP3000

2

Python 2,69个字节

print',\n'.join(["'%02d:%s0'"%(h,m)for h in range(24)for m in'03'])

很明显,但这是一个解释:

  • 使用双换环
  • 之间交替'0''3'以字符串格式比更短列表
  • %02d 做填充 h
  • m由于交替字符位于固定位置,因此无需填充
  • '\n'.join() 解决最后的要求

我不知道它是否可以做得更短(在Python 2中)。

通过Sp3000,61字节: print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))


1
怎么样:print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))
Sp3000

辉煌,Sp3000!(您应该将其张贴)
七月

1
不,没什么不同,可以写在我的书上。我要做的就是放下方括号(即使在您的括号中也是没有必要的)并放下m。(也是59个字节,而不是61个字节)
Sp3000

2

Haskell,85个字节

putStr$init$init$unlines$take 48['\'':w:x:':':y:"0',"|w<-"012",x<-['0'..'9'],y<-"03"]

不幸的是printf需要19个字节import,所以我不能使用它。


2

朱莉娅:65 64 61个字符

[@printf("'%02d:%d0'%s
",i/2.01,i%2*3,i<47?",":"")for i=0:47]

朱莉娅:64个字符

(此处显示了Julia的for语法不错。)

print(join([@sprintf("'%02d:%d0'",h,m*3)for m=0:1,h=0:23],",
"))

2

Fortran 96

do i=0,46;print'(a1,i2.2,a,i2.2,a2)',"'",i/2,":",mod(i,2)*30,"',";enddo;print'(a)',"'23:30'";end

类型和要求的标准滥用仅用于最终end编译。可悲的是,由于隐式格式,'(a)'最后print一条语句中的是必需的。仍然比C和C ++的答案要好;)


2

JavaScript(ES6),77个 86 + 1字节

没意识到每一行都必须有引号(+1是-p带有节点的标志):

"'"+Array.from(Array(48),(d,i)=>(i>19?"":"0")+~~(i/2)+":"+3*(i&1)+0).join("',\n'")+"'"

旧的解决方案:

Array.from(Array(48),(d,i)=>~~(i/2).toFixed(2)+":"+3*(i&1)+"0").join(",\n")

非高尔夫版本(使用for循环而不是Array.from):

var a = [];
// there are 48 different times (00:00 to 23:30)
for (var i = 0; i < 48; i++) {
    a[i] =
        (i > 19 ? "" : "0") +
            // just a ternary to decide whether to pad
            // with a zero (19/2 is 9.5, so it's the last padded number)
        ~~(i/2) +
            // we want 0 to 24, not 0 to 48
        ":" +  // they all then have a colon
        3*(i&1) +
            // if i is odd, it should print 30; otherwise, print 0
        "0" // followed by the last 0
}
console.log(a.join(",\n"));

72: Array.from(Array(48),(d,i)=>`'${i>19?"":0}${0|i/2}:${i%2*3}0'`).join`,\n`。将\ n替换为实际的换行符。
Mama Fun Roll 2015年

2

golflua 52 51个字符

~@n=0,47w(S.q("'%02d:%d0'%c",n/2,n%2*3,n<47&44|0))$

使用ascii 44 = ,和0可以节省一个字符。

一个非高尔夫的Lua版本是

for h=0,47 do
   print(string.format("'%02d:%d0'%c",h/2,h%2*3, if h<47 and 44 or 0))
end

if语句很像三元运算符a > b ? 44 : 0


2

C#-120个字节

class P{static void Main(){for(var i=0;i<24;i++)System.Console.Write("'{0:00}:00',\n'{0:00}:30'{1}\n",i,i==23?"":",");}}

2

Python,60 58 64字节

for i in range(24):print("'%02d:00,\n%02d:30'"%(i,i)+', '[i>22])

取消高尔夫:

for i in range(24):
    if i <23:
        print( ('0'+str(i))[-2:] + ':00,\n' + str(i) + ':30,')
    else:
        print( ('0'+str(i))[-2:] + ':00,\n' + str(i) + ':30')

在这里在线尝试。


1
为什么不将其放在1行上,并再保存2个字节。
isaacg,2015年

我认为这行不通-每小时前导零。
isaacg 2015年

1
@isaacg修复了该问题!
蒂姆(Tim)

输出结果与原始问题不同。
森蒂奥2015年

@sentiao有什么不同?
蒂姆(Tim)


2

PHP,69 70 62字节

for($x=-1;++$x<47;)printf("'%02d:%d0',
",$x/2,$x%2*3)?>'23:30'

在线尝试

'23:30'在末尾输出有点la脚,因此使用php上下文关闭?>而不打开或重新打开它也是如此。更干净的替代方法(但65个字节)是:

for($x=-1;++$x<48;)printf("%s'%02d:%d0'",$x?",
":'',$x/2,$x%2*3);

在线尝试

谢谢@Dennis的提示。@ ismael-miguel的贡献启发了替代方法。


1
欢迎来到编程难题和代码高尔夫球!您的代码在末尾输出一个空字节。我不确定是否允许。
丹尼斯,

@Dennis谢谢您,您是对的...我以为PHP会将其视为字符串结尾。发布了新版本。
mk8374876'1

<?...?>'23:30'保存三个字节。另外,您可以替换\n为实际的换行符。
丹尼斯

2

迅捷,74字节

已为Swift 2/3更新...并带有新的字符串插值...

for x in 0...47{print("'\(x<20 ?"0":"")\(x/2):\(x%2*3)0'\(x<47 ?",":"")")}

指定的最后一行没有逗号,并且您的代码将其打印出来。
凯尔·卡诺斯

1

Javascript,89个字节

for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))

1
快速提问:有多少论点Array.push()支持?;)
manatwork

你是对的。那是一个混蛋。谢谢,我将在完成对另一个挑战的测试后再进行更改。
SuperJedi224 2015年

可以通过一些基本重组来删除一些其他字符:for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

在那里,我修复了它。
SuperJedi224 2015年

变量x的重用是非常难看的编码习惯。如果将循环控制变量更改为其他变量(如我在2015-05-07 15:28:25Z的建议),则可以将开头的单引号添加到x的值以将两"'"+部分减为一:for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
manatwork

1

Python 2:64个字节

print ',\n'.join(['%02d:00,\n%02d:30'%(h,h) for h in range(24)])

输出结果与原始问题不同。
森蒂奥2015年

我不知道我所做的编辑发生了什么。这也是64个字符的正确版本:print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
艾伦·胡佛

1

Ruby-52字节

puts (0..47).map{|i|"'%02d:%02d'"%[i/2,i%2*30]}*",
"

这似乎是我的解决方案,只是对.joinfor进行了更改*。这是常见的礼貌,而不是仅发布具有微小改进的新答案,以建议对原始海报进行改进。见meta.codegolf.stackexchange.com/questions/75/...
rorlork

@rcrmn我同意我犯了一个错误,对此我深表歉意-应该先寻找其他红宝石答案。伟大的工作,虽然你的答案$><<
托马什Dundáček

不用担心,您是这里的新手:我正在为您提供建议,以便您将来可以避免这种情况。
2015年

1

Python 2,74 65字节

我们使用文本格式为每小时生成2行字符串:

print',\n'.join("'%02u:00',\n'%02u:30'"%(h,h)for h in range(24))

这段代码很清楚,但是Sp3000的答案中巧妙的索引和整数数学运算提供了一个较短的解决方案。


1
没有理由使用00和30格式,请使用"'%02u:00',\n'%02u:30'"%(h,h)
DenDenDo

您可以通过太循环来节省一些字节: print',\n'.join("'%02u:%02u'"%(h,i)for h in range(24)for i in[0,30])
Dieter

谢谢DenDenDo。我用它来节省一些字节。Dieter,我可以看到您的想法可能会有所帮助,但是我可以从DenDenDo中节省更多的字节。
逻辑骑士
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.