1日のすべての時間を30分率でリストする


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

44
プログラムの実行に23.5時間かかる場合はどうなりますか?
tfitzger

9
なぜそれがネガティブになるのかわかりません。
エスペンシュルスタッド

6
賛成票についてのちょっとした提案。私は、努力したことに対する小さな報酬として、私が作成したチャレンジに対するすべての有効な答えを支持しようとします。私は多くの担当者を抱えており、実際に賛成票を送る必要はありませんが、多くのハード思考とデバッグの後に回答が無視された場合、応答を断念する他の回答者を検討してください。
ロジックナイト

回答:


17

Pyth、26バイト

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

デモンストレーション。

文字列を含むrange(24)U24)のデカルト積から始めます"03"

次に、これらの値を適切な文字列形式の置換(m%"'%02d:%s0',"d)にマッピングします。

次に、結果の文字列が改行文字(jb)で結合されます。

最後に、末尾のコンマ(P)を削除して印刷します。


1
賞品の新しい候補者がいるようです。pythの著者、それはほとんど不正行為です;)
Espen Schulstad


14

バッシュ:58 47 46文字

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

私はこの解決策が好きです:)
Espen Schulstad

1
匿名ユーザーecho \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'は40文字を提案しました。いいね ありがとう。しかし、私はbash自分の力を利用することを好みます。
マナトワーク

1
printf "'%s',\n" {00..23}:{0,3}0
イザベラ

@manatworkああ、私は質問をよく読みませんでした、ごめんなさい
...-izabera

printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ 45バイト
イザベラ

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

こちらからオンラインでお試しください


これは金を取るだろうように見えます。明日まで提供します;)
エスペンシュルスタッド

@EspenSchulstad私はそれが実際に私にいくらかの金を与えることを望みます。ため息
オプティマイザー

3
覚えておいてください、それはただの金であるだけでなく、名誉でもあります。人生で私たちがすることは永遠に響き渡ります。
エスペンシュルスタッド

10

パイソン2、58の 56バイト

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

同様sentiaoの答えが、使用してforコンマを削除するためにスライスして、ループを。@grcが2バイトをノックオフしてくれてありがとう。


これは機能しますか?"'%02d:%s0',"[:57-i]
-grc

ずっとましだもちろんのAHAHA、@grc
SP3000

私ができるよりも良い!
ティム

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

あなたは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));}文字列を印刷するのではなく単に返すようにすると、さらに多くなりますが、文字ではなく精神に反するようです。
ジオビット

くそー、それは素晴らしい!これらのトリックを心に留めておく必要がありました、ありがとう!
サンダー

ああ、もう少し:に変更String.formats.formatます。コンパイラ/ IDEが文句を言うかもしれませんが、動作します;)
Geobits

1
良いですね!formatは静的メソッドであるため、そのクラスからアクセスする必要がありますが、実際、この方法を使用しても機能します!
サンダー

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

Rubyには愛が必要です。58バイト;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
ブルトレンジ

@blutorange @rcrmnさらに4バイトを削減できます(そして、以下の解決策に進みます:))):)に置き換えること.join*
トマーシュDundáček15年


4

JAVA 95 94バイト

printfがJavaに存在するという事実が大好きです。

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

EDITを交換','して44


24.times {printf( "'%02d:00'、\ n '%02d:30'%c \ n"、it、it、(it <24)?44:0)} in groovy :)同じソリューション、ちょうど65 chrになっていること
Espen Schulstad

@EspenSchulstadそれはスタンドアロン機能と見なされますか、それを実行するために必要な他の定型的なものはありますか?
tfitzger

1
groovyがある場合は、groovyshで実行するか、単に.groovyファイルのgroovyスクリプトとして実行できます。機能は必要ありません。
エスペンシュルスタッド


@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バイトの節約について教えてください。


うまくできました。Pythへようこそ。
isaacg

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

ルビー、54 51バイト

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

1
\n実際の改行に変更し、joinとの間のスペースを削除することにより、3バイトを削減できます"。一方、指定された出力には時間の先行ゼロがあることに注意してください。
ロルク

また、puts $><<(スペースなし)および.joinで変更して、もう少しバイトを追加します*。ただし、まだ何時間も先行ゼロ問題があります。
ロルク

3

C、116115101100957473、71

これからさらに数バイトを削ることができるかもしれません...

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

完全なプログラムではなく関数を作成すると、3バイトを節約できます。「main」を「f」、または好きな文字に置き換えてください。
ビジャン

ああ、それはとてもいい提案です。
-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 Compiler / Executor

説明:

     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があるかどうかは誰にもわかりますか?
エスペンシュルスタッド

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

かなり明らかですが、ここに説明があります:

  • ダブルforループを使用する
  • '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!(投稿する必要があります)
sentiao

1
いや、私の本に投稿するのに十分な違いはありません。私がしたことは、角かっこ(あなたの場合でも不要mです)をドロップして、ドロップするだけでした。(61バイトではなく59バイトでもあります)
Sp3000

2

Haskell、85バイト

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

残念ながらprintf19バイトが必要な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を実際の改行に置き換えます。
ママファンロール

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

私はこれがうまくいくとは思わない-時間に先行ゼロはありません。
isaacg

1
@isaacgはそれを修正しました!
ティム

出力は元の質問と同じではありません。
センティアオ

@sentiao違いは何ですか?
ティム


2

PHP、69 70 62バイト

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

オンラインで試す

'23:30'最後に出力するのは少し足りないので、phpコンテキストを?>開いたり、再度開いたりせずにphpコンテキストを閉じています。よりクリーンな代替(ただし65バイト)は次のようになります。

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

オンラインで試す

ヒントをありがとう@Dennis @ ismael-miguelの貢献に触発された代替。


1
プログラミングパズルとコードゴルフへようこそ!コードは最後にヌルバイトを出力します。それが許可されているかどうかはわかりません。
デニス

@Dennisありがとうございます、あなたは正しいです...私はPHPがそれを文字列の終わりとして見ると仮定しました。新しいバージョンを投稿しました。
mk8374876

<?...?>'23:30'3バイト節約します。また、\n実際の改行に置き換えることができます。
デニス

2

Swift、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()サポートされていますか?;)
マナトワーク

あなたが正しい。それはポリアドです。おかげで、別のチャレンジのエントリーをテストし終わった後に、その変更を行います。
SuperJedi224

:より多くの数文字はいくつかの基本再編成で除去することができるfor(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

そこで修正しました。
SuperJedi224

変数xの再利用は非常にいコーディング習慣です。あなたが(:28:2015年5月7日15時私の提案のように、25Z)何か他のものにループ制御変数を変更する場合は、2減らすためのxの値に開ける単一引用符を追加することができます"'"+1個を: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)])

出力は元の質問と同じではありません。
センティアオ

自分が行った編集がどうなったのかわかりません。ここでの正しいバージョンも64個の文字である:print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
アラン・フーバー

1

ルビー-52バイト

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

これは.joinforを変更するだけの私の解決策のように思え*ます...元のポスターの改善を提案するために、わずかな改善を伴う新しい回答を単に投稿する代わりに、一般的な礼儀です。参照してくださいmeta.codegolf.stackexchange.com/questions/75/...
rorlork

@rcrmn私は間違いを犯したことに同意し、それについて謝罪します-他のルビーの答えを最初に探していたはずです。でもあなたの答えで素晴らしい仕事$><<
トマーシュダンダチェック2015年

心配しないでください、あなたはここに新しいです:あなたが将来これを避けることができるように私はあなたに助言していました。
ロルク

1

Python 2、74 65バイト

テキスト形式を使用して、1時間ごとに2行の文字列を生成します。

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

このコードはかなり明確ですが、Sp3000の答えにある巧妙なインデックス付けと整数計算により、より短いソリューションが得られます。


1
00と30のフォーマットを使用する理由はありません。9バイトを節約します"'%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])
ディーター・

ありがとうDenDenDo。これを使用して、いくつかのバイトを節約しました。ディーター、あなたのアイデアがどこで役立つかはわかりますが、DenDenDoのアイデアを使えばさらにバイトを節約できます。
ロジックナイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.