Liste de toutes les heures de la journée au tarif d'une demi-heure


31

La réponse la plus courte l'emporte.

Il doit être trié et dans les 24 heures. La dernière ligne n'a pas de virgule.

La sortie doit être la suivante:

'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
Est-ce que c'est 24 heures? Pourriez-vous s'il vous plaît fournir la sortie entière?
xnor

1
La sortie doit-elle être triée?
orlp

44
Que faire si l'exécution de mon programme prend 23,5 heures?
tfitzger

9
Je ne vois pas pourquoi ce serait négatif.
Espen Schulstad

6
Juste une petite suggestion sur les votes positifs. J'essaie de voter pour chaque réponse valable à un défi que je crée comme une petite récompense pour avoir pris l'effort. J'ai beaucoup de représentants et je n'ai pas vraiment besoin d'un vote positif ici, mais veuillez considérer d'autres répondeurs qui peuvent renoncer à répondre si leurs réponses sont ignorées après beaucoup de réflexion et de débogage.
Logic Knight

Réponses:


17

Pyth, 26 octets

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

Manifestation.

Nous commençons par le produit cartésien de range(24)( U24) avec la chaîne "03".

Ensuite, nous mappons ces valeurs à la substitution de formatage de chaîne appropriée ( m%"'%02d:%s0',"d).

Ensuite, les chaînes résultantes sont jointes sur le caractère de nouvelle ligne ( jb).

Enfin, nous supprimons la virgule de fin ( P) et imprimons.


1
On dirait que nous avons un nouveau candidat pour le prix. Auteur de pyth, c'est presque de la triche;)
Espen Schulstad

15

Befunge-93, 63 octets

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

 

animation (animation réalisée avec BefunExec )


14

Bash: 58 47 46 caractères

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

J'aime cette solution :)
Espen Schulstad

1
Un utilisateur anonyme a proposé echo \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'40 caractères. Agréable. Merci. Mais je préfère faire usage de sa bashpropre force.
manatwork

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

@manatwork oh je n'ai pas bien lu la question, désolé ...
izabera

printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ est de 45 octets
izabera

10

CJam, 31 30 29 octets

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

C'est assez simple en utilisant le formatage 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

Essayez-le en ligne ici


On dirait que ça va prendre l'or. Nous le donnerons jusqu'à demain;)
Espen Schulstad

@EspenSchulstad J'aimerais que cela me donne de l'or. soupir
Optimizer

3
Rappelez-vous, ce n'est pas seulement de l'or virituel, mais aussi de l'honneur. Ce que nous faisons dans la vie fait écho dans l'éternité.
Espen Schulstad

10

Python 2, 58 56 octets

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

Comme la réponse de sentiao mais en utilisant une forboucle, avec découpage pour supprimer la virgule. Merci à @grc d'avoir supprimé deux octets.


Est-ce que cela fonctionnerait:"'%02d:%s0',"[:57-i]
grc

@grc Ahaha bien sûr, c'est beaucoup mieux
Sp3000

Mieux que je ne pourrais faire!
Tim

6

Java - 119 octets

J'ai commencé avec StringJoiner de Java 8, mais cela signifie inclure une instruction d'importation, j'ai donc décidé de le faire à l'ancienne:

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

Peut-être que cela peut être amélioré en se débarrassant des multiples mots String- Systemclés et occurrences.


une version groovy peut-être :)
Espen Schulstad

Vous pouvez raccourcir cela à 159: supprimez l'espace avant a, déplacez l' iincrément, perdez les foraccolades et déplacez la virgule / la nouvelle ligne au début (ce qui vous permet d'utiliser le plus court substringet de vous en débarrasser length()). Puisque les fonctions sont autorisées par défaut, vous pouvez le rendre encore plus court en éliminant le passe-partout: 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));}Encore un peu plus si vous le faites simplement renvoyer la chaîne au lieu de l'imprimer, mais cela semble aller à l'encontre de l'esprit, sinon de la lettre.
Geobits

Merde, c'est génial! Je dois garder ces astuces à l'esprit, merci!
Sander

Oh, quelques autres: changez String.formatpour s.format. Votre compilateur / IDE peut s'en plaindre, mais cela fonctionne;)
Geobits

1
Joli! le format est une méthode statique, donc il devrait être accessible par sa classe, mais en effet, l'utiliser de cette façon fonctionne aussi!
Sander

5

Rubis, 94 61 56 51

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

Merci à @blutorange (encore) pour son aide au golf!


Vous pouvez réduire cela à 61 octets: puts (0..47).to_a.map{|h|"'%02d:%02d'"%[h/2,h%2*30]}.join","(il y a une nouvelle ligne après la dernière virgule)
blutorange

Merci encore! Je n'ai vraiment pas beaucoup essayé ...
rorlork

Ruby a besoin d'amour. 58 octets;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

@blutorange @rcrmn vous pouvez réduire 4 octets de plus (et accéder à ma solution ci-dessous :))) en remplaçant .joinpar *:)
Tomáš Dundáček

5

Perl, 52 50 48 45B

$,=",
";say map<\\'$_:{0,3}0\\'>,"00".."23"

Avec l'aide de ThisSuitIsBlackNot :)


4

JAVA 95 94 octets

J'adore le fait que printf existe en 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);}

Ungolfed

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 Remplacé le ','par44


24. fois {printf ("'% 02d: 00', \ n '% 02d: 30'% c \ n", it, it, (it <24)? 44: 0)} dans groovy :) même solution , juste que c'est à 65 chr
Espen Schulstad

@EspenSchulstad Serait-ce considéré comme une fonction autonome, ou existe-t-il un autre passe-partout qui serait nécessaire pour le faire fonctionner?
tfitzger

1
Si vous avez du groovy, vous pouvez l'exécuter dans groovysh ou simplement comme un script groovy dans un fichier .groovy. alors vous n'avez besoin d'aucune fonction.
Espen Schulstad


@EspenSchulstad Intéressant. Je n'ai fait qu'un travail minimal avec Groovy.
tfitzger

4

Pyth, 32 31 octets

J'ai joué au golf en python, mais il s'est avéré être exactement la même chose que la réponse du Sp3000. J'ai donc décidé d'essayer Pyth:

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

C'est une traduction exacte de la réponse Sp3000:

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

C'est mon premier essai sur Pyth, alors s'il vous plaît, éclairez-moi à propos de cette économie d'un octet.


Bien joué et bienvenue sur Pyth.
isaacg

3

PHP, 109 octets

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

3

Rubis, 54 51 octets

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

1
Vous pouvez réduire 3 octets en passant \nà des sauts de ligne réels et en supprimant l'espace entre joinet ". En revanche, notez que la sortie spécifiée a des zéros non significatifs pour les heures.
rorlork

En outre, quelques octets supplémentaires en changeant puts en $><<(sans espace) et .joinavec *. Cependant, vous avez toujours le principal problème zéro pour les heures.
rorlork

3

C, 116 , 115 , 101 , 100 , 95 , 74 , 73 , 71

Peut être en mesure de gratter quelques octets de plus de cela ...

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

Vous pouvez économiser 3 octets en créant une fonction plutôt qu'un programme complet. Remplacez simplement "main" par "f", ou quelle que soit votre lettre préférée.
Bijan

Oh c'est une très belle suggestion ... une que j'oublie toujours!
Joshpbarron

3

T-SQL, 319 307 305 octets

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

Version non-golfée:

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 octets

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

Cela peut certainement être amélioré.

Essayez-le en ligne: Pyth Compiler / Executor

Explication:

     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"

Toujours impressionnant avec ces langues de golf :) Je l'apprécie en quelque sorte davantage quand c'est fait dans une langue non-golfique. Est-ce que quelqu'un sait s'il y a un golf-jar-lib à java par exemple?
Espen Schulstad

Port obligatoire de sentiao's donne 31: j+\,bm%"'%02d:%s0'",/d2*3%d2 48avec formatage de chaîne
Sp3000

2

Python 2, 69 octets

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

C'est assez évident, mais voici une explication:

  • utilisation de double for-loop
  • l'alternance entre '0'et '3'au format chaîne est plus courte qu'une liste
  • %02d fait le rembourrage pour h
  • mn'a pas besoin de rembourrage car le caractère alterné est sur une position fixe
  • '\n'.join() résout les exigences de la ligne finale

Je n'ai aucune idée si cela peut être fait plus court (en Python 2).

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


1
Que diriez-vous:print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))
Sp3000

Brillant, Sp3000! (vous devriez le poster)
sentiao

1
Non, pas assez différent pour poster dans mon livre. Tout ce que j'ai fait a été de supprimer les crochets (qui sont inutiles même dans le vôtre) et de les supprimer m. (C'est aussi 59 octets, pas 61)
Sp3000

2

Haskell, 85 octets

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

Nécessite malheureusement printfun octet 19 import, donc je ne peux pas l'utiliser.


2

Julia: 65 64 61 caractères

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

Julia: 64 caractères

(Conservé ici pour montrer la belle forsyntaxe de Julia .)

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

Standard abuse of types & requirement only for the final end for compiling. Sadly, due to implicit formatting, the '(a)' in the final print statement is required. Still, better than the C and C++ answers ;)


2

JavaScript (ES6), 77 86+1 bytes

Didn't realize there had to be quotes on each line (+1 is for -p flag with node):

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

old solution:

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

ungolfed version (using a for loop instead of 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`. Replace \n with an actual newline.
Mama Fun Roll

2

golflua 52 51 chars

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

Using ascii 44 = , and 0 a space saves a character.

An ungolfed Lua version would be

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

The if statement is much like the ternary operator a > b ? 44 : 0.


2

C# - 120 bytes

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 bytes

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

Ungolfed:

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

Try it online here.


1
Why not put it on 1 line, and save another 2 bytes.
isaacg

I don't think this works - no leading zero on the hour.
isaacg

1
@isaacg fixed that!
Tim

The output is not the same as in the original question.
sentiao

@sentiao what is different?
Tim


2

PHP, 69 70 62 bytes

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

Try it online

Outputting '23:30' at the end is a bit lame, and so is closing the php context using ?> without opening or re-opening it. An cleaner alternative (but 65 bytes) would be:

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

Try it online

Thank you @Dennis for the tips. Alternative inspired by the contribution of @ismael-miguel.


1
Welcome to Programming Puzzles & Code Golf! Your code prints a null byte at the end. I'm not sure if that is allowed.
Dennis

@Dennis Thank you, you're right... I assumed PHP would see it as end-of-string. Posted a new version.
mk8374876

<?...?>'23:30' saves three bytes. Also, you can replace \n with an actual newline.
Dennis

2

Swift, 74 bytes

Updated for Swift 2/3...and with new string interpolation...

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

The final line is specified to not have a comma & your code prints it.
Kyle Kanos

1

Javascript, 89 bytes

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

1
Quick question: how many arguments Array.push() supports? ;)
manatwork

You're right. That is a polyad. Thanks, I'll make that change after I finish testing my entry for another challenge.
SuperJedi224

A few more characters can be removed with some elementary reorganizations: for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

There, I fixed it.
SuperJedi224

That reuse of variable x is quite ugly coding habit. If you change the loop control variable to something else (as in my suggestion at 2015-05-07 15:28:25Z), then you can add the opening single quotes to x's value to reduce the two "'"+ pieces to one: for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
manatwork

1

Python 2: 64 bytes

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

The output is not the same as in the original question.
sentiao

I don't know what happened to the edit I made. here is the correct version also 64 chars: print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
Alan Hoover

1

Ruby - 52 bytes

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

This seems like my solution with just the change of the .join for *... It's common courtesy to instead of just posting a new answer with a minor improvement, to suggest the improvement to the original poster. See meta.codegolf.stackexchange.com/questions/75/…
rorlork

@rcrmn I agree I made a mistake and I apologize for it - should've had looked for other ruby answers first. Great work though in your answer with $><<!
Tomáš Dundáček

Don't worry about it, you are new here: I was advising you so that you could avoid this in the future.
rorlork

1

Python 2, 74 65 bytes

We generate a 2 line string for each hour, using text formatting:

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

This code is fairly clear, but the clever indexing and integer maths in the answer by Sp3000 gives a shorter solution.


1
no reason to use formatting for 00 and 30, save 9 bytes with "'%02u:00',\n'%02u:30'"%(h,h)
DenDenDo

you could save some bytes by having too loops : print',\n'.join("'%02u:%02u'"%(h,i)for h in range(24)for i in[0,30])
dieter

Thanks DenDenDo. I used this to save some bytes. Dieter, I can see where your idea may help, but I could save more bytes with that idea from DenDenDo.
Logic Knight
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.