Перечислите все время в день по полчаса


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".

Затем мы сопоставляем эти значения с соответствующей строкой форматирования substitution ( m%"'%02d:%s0',"d).

Затем результирующие строки соединяются символом новой строки ( jb).

Наконец, мы убираем запятую ( P) и печатаем.


1
Похоже, у нас появился новый претендент на приз. Автор pyth, это почти измена;)
Эспен Шульстад

15

Befunge-93, 63 байта

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

 

анимация (анимация сделана с помощью BefunExec )


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собственные силы.
manatwork

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

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

@grc Ахаха, конечно, это намного лучше
Sp3000

Лучше, чем я мог сделать!
Тим

6

Java - 119 байт

Я начал с StringJoiner в Java 8, но это означает включение оператора импорта, поэтому я решил сделать это по-старому:

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

Возможно , это может быть улучшено за счет избавления от множественных встречающейся Stringи Systemключевых слов.


версия в отличной пожалуй :)
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));}даже немного больше, если вы сделаете так, чтобы он просто возвращал строку вместо печати, но, похоже, это идет вразрез с духом, если не с буквой.
Geobits

Блин, это замечательно! Я должен помнить эти уловки, спасибо!
Сандер

О, еще несколько: изменить String.formatна s.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"," (после последней запятой есть
новая строка

Еще раз спасибо! Я действительно не очень старался ...
Rorlork

Руби нужна любовь. 58 байт;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

@blutorange @rcrmn вы можете уменьшить еще 4 байта (и перейдите к моему решению ниже :))), заменив .joinна *:)
Tomáš Dundáček


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

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

РЕДАКТИРОВАТЬ Заменены ','с44


24.times {printf ("% 02d: 00 ', \ n'% 02d: 30 '% c \ n", it, it, (it <24)? 44: 0)} в том же решении groovy :) только до 65 грн.
Espen Schulstad

@EspenSchulstad Будет ли это рассматриваться как отдельная функция, или для ее запуска потребуются другие шаблоны?
tfitzger

1
Если у вас есть groovy, вы можете запустить его в groovysh или просто как groovy-скрипт в .groovy-файле. тогда вам не нужна никакая функция.
Эспен Шульстад


@EspenSchulstad Интересно. Я только сделал минимальную работу с Groovy.
tfitzger

4

Пиф, 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.
Исаак

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
Вы можете уменьшить 3 байта, изменив \nфактические символы новой строки и убрав пробел между joinи ". С другой стороны, обратите внимание, что указанный вывод имеет ведущие нули для часов.
rorlork

Кроме того , некоторые больше байтов, изменяя puts к $><<(без пробела) и .joinс *. У вас все еще есть ведущая нулевая проблема для часов, хотя.
Rorlork

3

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

Может быть, удастся убрать еще несколько байтов из этого ...

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

Вы можете сохранить 3 байта, создав функцию, а не полную программу. Просто замените «основной» на «f», или как там ваша любимая буква.
Биджан,

О, это очень хорошее предложение ..... я всегда забываю!
Джошпаррон

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 для гольфа, например, jar-lib?
Эспен Шульстад

Обязательный порт sentiao's дает 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! (вы должны опубликовать это)
Sentiao

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 персонажа

(Сохранено здесь, чтобы показать хороший forсинтаксис Джулии .)

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

2

Фортран 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

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

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

Попробуйте это онлайн здесь .


1
Почему бы не поместить его в 1 строку и сохранить еще 2 байта.
Исаак

Я не думаю, что это работает - нет ведущего нуля на час.
Исаак

1
@isaacg исправил это!
Тим

Вывод не такой, как в оригинальном вопросе.
Sentiao

@sentiao что отличается?
Тим

2

𝔼𝕊𝕄𝕚𝕟, 39 символов / 67 байтов (не конкурирующие)

↺;Ḁ⧺<Ḱ;)ᵖ`'⦃Ḁ<Ḕ?0:⬯}⦃0|Ḁ/2}:⦃Ḁ%2*3}0',”

Try it here (Firefox only).

Ни одного алфавитного символа в поле зрения ...


2

PHP, 69 70 62 байта

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

Попробуйте онлайн

Вывод '23:30'в конце немного хромает, и поэтому закрывает контекст php, ?>не открывая и не открывая его снова. Более чистая альтернатива (но 65 байт) будет:

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

Попробуйте онлайн

Спасибо @Dennis за советы. Альтернатива вдохновлена ​​вкладом @ ismael-miguel.


1
Добро пожаловать в Программирование Пазлов и Code Golf! Ваш код печатает нулевой байт в конце. Я не уверен, разрешено ли это.
Деннис

@Dennis Спасибо, вы правы ... Я предполагал, что PHP будет видеть это как конец строки. Выложил новую версию.
mk8374876

<?...?>'23:30'сохраняет три байта. Кроме того, вы можете заменить \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()поддерживает? ;)
manatwork

Вы правы. Это полиада. Спасибо, я внесу это изменение после того, как закончу тестирование своей заявки на еще один тест.
SuperJedi224

Еще несколько персонажей можно удалить с помощью некоторых элементарных реорганизаций:for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

Там я это исправил.
SuperJedi224

Такое повторное использование переменной 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)])

Вывод не такой, как в оригинальном вопросе.
Sentiao

Я не знаю, что случилось с редактированием, которое я сделал. вот правильная версия также 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]}*",
"

Это похоже на мое решение с изменением только .joinдля *... Это обычная вежливость вместо того, чтобы просто публиковать новый ответ с незначительным улучшением, предлагая улучшение оригинального плаката. См meta.codegolf.stackexchange.com/questions/75/...
rorlork

@rcrmn Я согласен, что допустил ошибку и извиняюсь за это - следовало бы сначала поискать другие рубиновые ответы. Отличная работа, хотя в вашем ответе с $><<!
Томаш Дундачек

Не беспокойтесь об этом, вы новичок здесь: я советовал вам, чтобы вы могли избежать этого в будущем.
Рорлорк

1

Python 2, 74 65 байт

Мы генерируем двухстрочную строку для каждого часа, используя форматирование текста:

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

Спасибо DenDenDo. Я использовал это, чтобы сохранить несколько байтов. Дитер, я вижу, чем может помочь твоя идея, но я мог бы сэкономить больше байтов с этой идеей от DenDenDo.
Логика Найт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.