24 и 12 часов

24

Напишите программу или функцию без ввода, которая печатает или возвращает эту строку 24-часовой и 12-часовой раз:

00:00 12:00am
01:00  1:00am
02:00  2:00am
03:00  3:00am
04:00  4:00am
05:00  5:00am
06:00  6:00am
07:00  7:00am
08:00  8:00am
09:00  9:00am
10:00 10:00am
11:00 11:00am
12:00 12:00pm
13:00  1:00pm
14:00  2:00pm
15:00  3:00pm
16:00  4:00pm
17:00  5:00pm
18:00  6:00pm
19:00  7:00pm
20:00  8:00pm
21:00  9:00pm
22:00 10:00pm
23:00 11:00pm

Строка должна быть выведена именно так, как здесь показано. Единственное исключение состоит в том, что он может иметь один завершающий перевод строки.

Таким образом, хэш MD5 вашего вывода должен быть

827ae6e2dbb1df494930baedb3ee2653

если у вас нет завершающего символа новой строки и

cd4c3d18abee9bafb495f390a919a13f

если вы делаете. (Ваш хэш может отличаться, если ваша система использует другой тип новой строки, но это нормально.)

Самый короткий код в байтах побеждает. Tiebreaker - более ранний ответ.

Кальвин Хобби
источник
Аналогично: codegolf.stackexchange.com/questions/49728/…
Джошпбаррон

Ответы:

13

Bash + coreutils, 43 30

  • Сохранено 7 байтов благодаря @Yossarian
  • Сохранено 3 байта благодаря @AndersKaseorg
seq 0 23|date -f- +%R\ %l:00%P
  • seq генерирует целые числа 0-23, по одному на строку.
  • dateинтерпретирует каждую строку как дату и время Голых целых чисел достаточно, чтобы их можно было распознать как часы дня date. dateзатем выводит каждый раз с требуемым форматированием, используя доступные спецификаторы формата времени .

Предполагает LANG=Cлокаль, согласно этому мета-ответу .

Ideone.

Цифровая травма
источник
2
Вы даже можете просто seq 0 23сохранить и сохранить 7 байтов
Yossarian
1
И %H:00%Rсохраняет еще 3.
Андерс Касеорг
@AndersKaseorg, nop, %Rвставляет начальный ноль, нежелательный для ОП.
rexkogitans
@rexkogitans ведущего нуля является хотел (в первой колонке, которая является один я говорю).
Андерс Касеорг
@AndersKaseorg, о, вы говорили о первом ... тогда, конечно, вы правы. Исправил мой комментарий выше.
rexkogitans
12

Python 2, 66 байт

for i in range(24):print'%02d:00%3d:00%sm'%(i,12+i%-12,'ap'[i>11])
kennytm
источник
1
по модулю -12 умный!
Эрик Outgolfer
На всякий случай, если кому-то интересно: i=0;exec"print'%02d:00%3d:00%cm'%(i,~-i%12+1,97+i/12*15);i+=1;"*24код меняется тремя разными способами, но каждое изменение имеет одинаковую длину.
Sp3000
8

C 73 байта

m(i){for(i=25;--i;)printf("%02d:00%3d:00%cm\n",24-i,12-i%12,"pa"[i/13]);}

Миллибайт нашел особенно аккуратный способ переписать этот ответ. Благодарность!

Линн
источник
Круто - я никогда не знал?:
Цифровая травма
Я не знал! Интересный. Я исправил это :)
Линн
Ааа, ну, ?:на самом деле ||, я думаю , это самый близкий эквивалент Perl . С ||больше похож (a || b) ? 1 : 0.
Линн
1
i++,i%12?:12,"ap"[i/12])не хватает точки последовательности. Не могу быть уверен, когда это i++произойдет. Возможноfor(i=0;i<24;i++) ...i,i%12?:12,"ap"[i/12]...
Chux - Восстановить Монику
i++<24лучше - не добавляет больше байтов в исходный код
anatolyg
6

MATL, 46 42 34 байта

12tEt:qy/t15XObZ"!b16XOhhkw14:X~Z)

Ранее 42 байта 12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z)и 46 байтов,736330 24t:qw/+t15XO' '24TX"b16XOhhk14: 12X~Z) . Конечно, 736330 не был нужен, это было безумие!

Примечание: не работает с TryItOnline, я думаю, что есть проблема совместимости между реализацией Matlab и Octaves datestr.

datestrберет числовое представление даты и преобразует его в строковое представление этой даты. Время дня является дробной частью числа, поэтому 0.0 соответствует 0 января 0000, в момент 00:00:00, а 1,0 соответствует 1 января 0000 в 00:00:00. 1/24 это 1:00, 2/24 2:00 и т. Д.

объяснение

12t         % push a 12 onto the stack and duplicate
Et          % double the 12 and duplicate the 24 (stack now has 12, 24, 24, bottom to top)
:q          % make vector 1:24 and decrement by 1, stack has 12, 24, 0:23
y           % duplicate second element on stack (24)
/           % divide, for (0:23)/24
t           % duplicate elements
15XO        % string representation of date, 15 specifies format
b           % bubble up element in stack (gets a 24 on top of the stack)
Z"!         % makes a column of 24 spaces, to put between columns of times
b           % bubble up another (0:23)/24 
16XO        % string representation of date, 16 for a different format
hh          % concatenate two time vectors and the column of spaces
k           % convert string to lowercase, because CO gives AM/PM not am/pm
w           % swap elements in stack, that first 12 is now on top
14:         % vector of equally spaced values 1:14
X~          % set exclusive-or, returns [1 2 3 4 5 6 7 8 9 10 11 13 14]
Z)          % get the right columns of the string array to remove extra column of blanks
            % implicit display

Чтобы показать это работает в Matlab, вот скриншот

введите описание изображения здесь

Дэвид
источник
5

/// , 160 байт

/Z/:00 //S/Z //A/:00am
//P/:00pm
/00Z12A01S1A02S2A03S3A04S4A05S5A06S6A07S7A08S8A09S9A10Z10A11Z11A12Z12P13S1P14S2P15S3P16S4P17S5P18S6P19S7P20S8P21S9P22Z10P23Z11P

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

Ungolfed

00:00 12:00
01:00 1:00
02:00 2:00
03:00 3:00
04:00 4:00
05:00 5:00
06:00 6:00
07:00 7:00
08:00 8:00
09:00 9:00
10:00 10:00
11:00 11:00
12:00 12:00
13:00 13:00
14:00 14:00
15:00 15:00
16:00 16:00
17:00 17:00
18:00 18:00
19:00 19:00
20:00 20:00
21:00 21:00
22:00 22:00
23:00 23:00

Эрик Outgolfer
источник
Интересный факт: что делает :00в качестве замены является один байт больше ... TIO
steenbergh
@steenbergh Это потому, что :003-байтовая строка появляется 3 раза. 3 × 3 = 9, замена в вашем случае стоит 3 + 1 + 3 = 7, так как он использует 1-байтовый псевдоним, и вы используете его 3 раза, поэтому 7 + 3 = 10. 9 <10, поэтому я не буду его заменять.
Эрик Outgolfer
5

MarioLANG, 965 834 байта

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

ну это было смешно сложно.

Технически выходные данные действительны, но на практике Tio для MarioLANG выводит «n» вместо «n», когда мы печатаем число с помощью «:»

если я найду время, думаю, я попытаюсь сделать (возможно, гораздо более длинную) версию программы, которая правильно выводит данные на Tio.

++<>) +++@++++>   [!) >)>((((::(.)::((.))+:+:--(.)::)).).).)+++++++++
++""+ +"=====""====#) "+"============================================
+++)+ +>>+++++- <+<)->+++ ![-).).).))(::)).(:(:)))..(((::)).(:+(:((((<
+>+++ ++"====<( ")")-"!+++#=========================================="
+(+++>++!++)<+( ++++-+++++>
 -))+)=(#==="+( ++++)+++++"==========================================!
 [!!+-[!(+++!!! !+!<+!++!>(((((+:(.))::(((.
==##===#====###=#=#"=##=#"=================<
++++)))+++++++++++++++(((![-).).).)::)).(:))   >
>========================#==================   "
+>+ >
+"+ "=======================================[   =====================#===============[
+!> ! -).).).))(::)).)):+(..(((::)).(:+(((((<++!-).).).))(::)).)):+(.(((::)).(:+(((((<
=#==#======================================="==#======================================

Пояснение:

наша главная проблема здесь заключается в том, что у нас есть 6 NaN char (newLine, Space,:, a, p, m)

в marioLANG, для печати символов нам нужно их значение ascii:

  • новая линия 10
  • Пространство 32
  • : 58
  • а 97
  • п 112
  • м 109

Итак, первое, что нужно сделать, это установить память:

++<>) +++@++++>   [!) >)> !
++""+ +"=====""====#) "+"==
+++)+ +>>+++++- <+<)->+++ 
+>+++ ++"====<( ")")-"!+++
+(+++>++!++)<+( ++++-+++++
 -))+)=(#==="+( ++++)+++++
 [!!+-[!(+++!!! !+!<+!++!>
==##===#====###=#=#"=##=#"

при этом память выглядит так:

                   v   
  32 58 0 0 97 109 10 0
  _  :      a   m  \n

мы преобразуем в р в течение остальной части программы

тогда мы делаем фактический вывод:

++<>) +++@++++>   [!) >)>((((::(.)::((.))+:+:--(.)::)).).).)+++++++++
++""+ +"=====""====#) "+"============================================
+++)+ +>>+++++- <+<)->+++ ![-).).).))(::)).(:(:)))..(((::)).(:+(:((((<
+>+++ ++"====<( ")")-"!+++#=========================================="
+(+++>++!++)<+( ++++-+++++>
 -))+)=(#==="+( ++++)+++++"==========================================!
 [!!+-[!(+++!!! !+!<+!++!>(((((+:(.))::(((.
==##===#====###=#=#"=##=#"=================<
++++)))+++++++++++++++(((![-).).).)::)).(:))   >
>========================#==================   "
+>+ >
+"+ "=======================================[   =====================#===============[
+!> ! -).).).))(::)).)):+(..(((::)).(:+(((((<++!-).).).))(::)).)):+(.(((::)).(:+(((((<
=#==#======================================="==#======================================
Эфир лягушка
источник
4

Юлия, 88 71 66 64 байта

[@printf "%02d:00%3d:00%cm
" i-11 i%12+1 i>22?112:97for i=11:34]

Это полная программа, которая печатает строку с одним завершающим переводом строки.

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

Сохранено 5 байтов благодаря Sp3000 и 2 благодаря Деннису!

Алекс А.
источник
4

Функция C #, 100 байт

void F(){for(int i=0;i<24;i++){Console.Write($"{i:00}:00 {(i+11)%12+1,2}:00 {(i>11?"p":"a")}m\n");}}

Безголовая версия:

void F()
{
    for (int i = 0; i < 24; i++)
    {
        Console.Write($"{i:00}:00 {(i + 11)%12 + 1,2}:00 {(i > 11 ? "p" : "a")}m\n");
    }
}

Console.Write() занимает слишком много символов!

STLDev
источник
Здравствуйте и добро пожаловать в PPCG! Я немного использую C #, но что ведущий $делает со строкой?
NoOneIsHere
3
@NoOneIsHere - это называется «интерполяция строк», и это новая функция в C # 6.0. Вы можете узнать больше об этом здесь https://msdn.microsoft.com/en-us/library/dn961160.aspx .
STLDev
3

JavaScript (ES2015), 147 138 137 134 133 байта

((o,x,r)=>{for(i=0;i<24;)b=i%12,c=b||12,o+='0'[r](i<10)+i+++x+' '[r]((c<10)+1)+c+x+(i<13?'a':'p')+"m\n";return o})('',':00','repeat')

В этой версии я использовал метод String.repeat (), чтобы избавиться от длинных .slice () и .join () и переместил приращение в цикл.

Предыдущая версия:

((o,x,i)=>{for(;i<24;i++){b=i%12;o+=[`0${i+x}`.slice(-5),(b||12)+x+(i<12?'a':'p')+'m'].join(' '.repeat((b>0&&b<10)+1))+"\n"}return o})('',':00',0)

Дает вывод с завершающим переводом строки. Проверено в Firefox Scratchpad. Не уверен, что передача аргументов в IIFE в порядке с правилом «без ввода».

Это мое первое представление, так что всем привет! :)

Leibrug
источник
3

TSQL (SQLServer 2012) 146 124 121

DECLARE @ DATETIME=0WHILE @<1BEGIN PRINT
CONVERT(char(5),@,108)+' '+LOWER(RIGHT(FORMAT(@,'g'),8))SET @=dateadd(hh,1,@)END

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

Первая попытка, немного дольше, но в одну строку:

SELECT CONVERT(char(5),n,108)+' '+LOWER(RIGHT(FORMAT(n,'g'),8))FROM(SELECT
top 24 dateadd(hh,Number,0)n FROM master..spt_values WHERE'P'=type)x

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

t-clausen.dk
источник
1
Сокращено до 121 символа: попробуйте онлайн
Ross Presser
@RossPresser еще раз вы мне помогли,
многому
2

Perl 5, 58

map{printf"%02u:00%3u:00%sm
",$_,$_%12||12,$_>11?p:a}0..23
msh210
источник
2

Javascript, 122 байта , 120 байтов

f=j=>j>12?j-12:j;for(i=0;i<24;i++)console.log('%s:00 %s:00%s',i<10?'0'+i:i,i==0?12:f(i)<10?' '+f(i):f(i),i>11?'pm':'am')

Редактировать: Исправлена ​​небольшая ошибка + вывод:

00:00 12:00am
01:00  1:00am
02:00  2:00am
03:00  3:00am
04:00  4:00am
05:00  5:00am
06:00  6:00am
07:00  7:00am
08:00  8:00am
09:00  9:00am
10:00 10:00am
11:00 11:00am
12:00 12:00pm
13:00  1:00pm
14:00  2:00pm
15:00  3:00pm
16:00  4:00pm
17:00  5:00pm
18:00  6:00pm
19:00  7:00pm
20:00  8:00pm
21:00  9:00pm
22:00 10:00pm
23:00 11:00pm
starcorder
источник
2

V , 56 53 байт

i00:00 23ñYpñH12G$yP13G$pgvó $/am
í/pm
í 0/  
í/12

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

Поскольку это может быть трудно ввести, вот обратимый hexdump:

00000000: 6930 303a 3030 201b 3233 f159 7001 f148  i00:00 .23.Yp..H
00000010: 1631 3247 2479 5031 3347 2470 6776 f320  .12G$yP13G$pgv. 
00000020: 242f 616d 0aed 2f70 6d0a ed20 302f 2020  $/am../pm.. 0/  
00000030: 0aed 2f31 320a                           ../12.

Версия неконкурирующей тривиальная 2 байта короче , если заменить оба вхождение G$с L, который должен был быть таким же , но был ошибка.

Объяснение:

i00:00<esc>                                     #Enter the starting text.
           23ñYp<C-a>ñ                          #Duplicate and increment 23 times
                      H                         #Move back to the beginning
                       <C-v>12G$y               #Select 12 lines horizontally
                                 P              #Horizontally paste
                                  13G$p         #Move to line 13 and Horizontally paste again
                                       gv       #Reselect the top 12 lines
                                         ó $/am #Replace a space at the end of the line with 'am'

í/pm      #Replace the previous search with 'pm'
í 0/      #Replace "Space+0" with 2 spaces
í/12      #Replace the previous search with "12"
DJMcMayhem
источник
2

05AB1E , 51 50 48 44 42 байта

Сохранено два байта благодаря carusocomputing

Код:

24FNgi0}N…:00©ðN12(%12+Dgiðs}®„paN12‹è'mJ,

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

объяснение

24F                                         # for N in [0...23]
   Ngi0}                                    # if len(N)=1, push 0
        N                                   # push N
         …:00©                              # push ":00" and store a copy in register
             ð                              # push " "
              N12(%12+D                     # push 2 copies of N%(-12)+12
                       giðs}                # if the length of that number is 1, 
                                            # push " " and swap with the number
                            ®               # push ":00" again
                             „pa            # push "pa"
                                N12‹è       # index into that with N<12
                                     'm     # push "m"
                                       J,   # join everything and print with newline
Emigna
источник
codegolf.stackexchange.com/questions/103242/… ;). Теперь вопрос о том, может ли это быть оптимизировано ниже 50, является вопросом ха-ха.
Волшебная урна осьминога
23Ýвместо 24L<1 байта. И как долго это ëсуществовало? Я чувствую себя так глупо, не зная о других заявлениях в 05AB1E до сих пор.
Волшебная урна осьминога
@carusocomputing: Спасибо! еще какое-то время существовало, но время от времени оно глючило. Особенно при вложении ifs.
Эминья
1

PowerShell v2 +, 76 байт

0..23|%{"{0:D2}:00{1,3}:00"-f$_,(($_%12),12)[!($_%12)]+('am','pm')[$_-ge12]}

Циклы от 0..23и каждый цикл устанавливает строку с -fоператором. Первый {0:D2}гарантирует, что мы добавили нули, второй {1,3}гарантирует, что у нас есть промежуточные пробелы для среднего столбца. В {0}один соответствует $_от -fоператора, в то время как {1}соответствует псевдо-тройному , что выбирает между $_%12или на 12основе того , $_%12отличен от нуля или нет (то есть, если мы на $_=13это будет выбрать 1для 1:00 вечера). Затем мы объединяем это с другим псевдо-троичным, который выбирает соответствующийam / pm.


В отличие от моего ответа в Списке за все время дня с полчаса , на самом деле короче цифры здесь короче, так как мы получаем значительно более дешевый отступ. Вот ответ с использованием функций даты, в 78 байтов

0..23|%{(Date -h $_ -f 'HH:00')+(Date -h $_ -f "h:00tt").ToLower().PadLeft(8)}
AdmBorkBork
источник
1

C ++, 81 79 байт

[]{for(time_t t=0,y;t<24;cout<<put_time(gmtime(&y),"%R %l:00%P\n"))y=t++*3600;}

Этот код требует using namespace std где-то предшествующего ему.

Делает цикл со значениями 0 ... 23. Он умножает каждое значение на 3600, преобразует в tmструктуру и печатает его. Формат печати %Rвыводит 24-часовой и минутный; форматы печати %lи %Pвывод правильных 12-часовых частей; они требуют GNU .

Рабочая онлайн версия здесь .

anatolyg
источник
1

Рубин, 66 62 байта

0.upto(23){|i| puts "%02d:00%3d:00#{'ap'[i/12]}m"%[i,(i-1)%12+1]}

Новая версия

24.times{|i|puts"%02d:00%3d:00#{'ap'[i/12]}m"%[i,(i-1)%12+1]}
Гоша У.
источник
1
24.timesкороче Не нужно места вокруг puts.
manatwork
Вы можете заменить (i-1)с ~-i2 байта.
Иордания
1

JavaScript (ES6), 119 116 байт

_=>Array(24).fill().map((_,i)=>`${`0${i}`.slice(-2)}:00 ${` ${(i+11)%12+1}`.slice(-2)}:00${'ap'[+(i>11)]}m`).join`
`
ASCII-только
источник
1

Скриптинг, 76 байт

Программа предполагает, что ввод пуст ( '0'или что-то, что преобразуется в целое число0 ).

Количество байтов предполагает кодировку UTF-16.

군 上 ❶ 겠 小 꼀 虛 嗎 ❷ 꾣 갰글 ❷ 결 加 곀 剩 增 ❶ 겠 小 글 虛 嗎 댆밁 ⓷ 꾣갰 ⓷⓼ 곀 小 掘 닐밊 終

Ungolfed:

군 // 23
上 // for loop (goes from 0 to 23 if input is 0)
    ❶겠小꼀虛嗎 // n < 10 ? "0" : ""
    ❷          // n
    꾣갰글      // ":00 "
    ❷결加곀剩增 // k = (n+11) % 12 + 1
    ❶겠小글虛嗎 // k < 10 ? " " : ""
    댆밁       // "pa"
    ⓷         // Pull n to top of stack
    꾣갰       // ":00"
    ⓷         // Pull "pa" to top of stack
    ⓼         // Pull k to top of stack
    곀小掘     // "pa"[k < 10 ? 1 : 0]
    닐밊       // "m\n"
終 // end of for loop

Каждая итерация цикла оставляет много маленьких строк в стеке; в конце все они автоматически объединяются.

Timwi
источник
1

JavaScript, 97 95 байт

Это основано на ответе Старкордера . Спасибо Джорджу Риту за улучшение в 2 байта.

for(i=0,k=12;i<24;k=i++%12+1)console.log('%s:00 %s:00%sm',i>9?i:'0'+i,k>9?k:' '+k,i>11?'p':'a')

Ungolfed:

for (i=0, k=12; i < 24; k = (i++) % 12 + 1)
    console.log('%s:00 %s:00%sm',
        i > 9 ? i : '0' + i,
        k > 9 ? k : ' ' + k,
        i > 11 ? 'p' : 'a')
Timwi
источник
Вы можете сэкономить 2 байта, переписав n < 10как 9 < nи поменяв местами троичные регистры
Джордж Райт
1

Пакет, 167 байт

@echo off
set h=11
set p=a
for /l %%a in (0,1,23)do call:e %%a
exit/b
:e
set a=0%1
set/ah=h%%12+1
set h= %h%
if %1==12 set p=p
echo %a:~-2:00 %h:~-2%:00%p%m
Нил
источник
1

Котлин , 95 байт

Это можно улучшить наверняка.

fun p(){for(i in 0..23)println("%02d:00 ${(i+11)%12+1}:00${if(i>12)"p" else "a"}m".format(i))}
Rames
источник
0

PHP, 110 107 байт

for($h=0;$h<24;){$m=($h+11)%12+1;echo($h<10?0:"")."$h:00 ".($m<10?" ":"")."$m:00".($h++<12?"a":"p")."m\n";}
в разобранном виде
for ($h=0; $h<24; ) {
  $m = ($h+11) % 12 + 1;
  echo ($h < 10 ?  0  : "") . "$h:00 " .
       ($m < 10 ? " " : "") . "$m:00"  . ($h++ < 12 ? "a" : "p") . "m\n";
}

Несколько удивленный, попытался превратить ($i < 10 ? $s : "") . "$i:00"бит в функцию, но это привело к добавлению ~ 25 символов. Не ходи туда.

ricdesi
источник
0

Swift, 85 байт

for x in 0...23{print(String(format:"%02d:00 %2d:00\(x<12 ?"a":"p")m",x,12+x % -12))}
GoatInTheMachine
источник
Это не работает, по крайней мере, не для меня на Swift 2.2. Выходной
JAL
Мне пришлось изменить формат строки:String(format: "%02d:00 %2d:00\(x<12 ?"a":"p")m", x, x%12 != 0 ? x%12 : 12)
JAL
0

Функция C, 82 байта

m(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}

Использование, 94 байта

m(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}main(){m();}

Ungolfed, 337 байт

#include <stdio.h>
void m(){
    int i,a;
    char c;
    for(i=0;i<24;i++){
        if (i%12==0){
            a = 12;
        }
        else{
            a = i%12;
        }
        if (i>11){
            c = 'p';
        } else{
            c = 'a';
        }
        printf("%02d:00 %2d:00%cm\n",i,a,c);
    }
}
int main(){
    m();
}

это работает на Windows:

в предупреждении вы можете найти всю программу

Программа C, 85 байт

main(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}
Джакомо Гарабелло
источник
Вам может потребоваться инициализация i=0для версии функции. А для версии программы вы можете вставить код непосредственно в него main- нет необходимости определять функцию там!
Анатолий
Благодарность! изм !! К вашему сведению: в версии funcion, если вы используете ее без параметров, она самоинициализируется до 0!
Джакомо Гарабелло
i%12==0?12:i%12->i%12?i%12:12
chux - Восстановить Монику
«В версии funcion, если вы используете ее без параметров, она самоинициализируется до 0!» Это не кажется стандартным C. Любая ссылка, чтобы поддержать это?
chux - Восстановить Монику
я заметил, что это работает только на gcc, который я установил в моей системе Windows .. мой друг с Linux сказал мне, что это не работает на его компьютере, но я не знаю, как это исправить для Linux ...
Джакомо Гарабелло
0

Foo, 163 байта

Довольно грубый подход; ничего хитрого здесь (я попытался в нескольких местах, но в итоге получилось короче), просто хотел дать Фу шанс. Foo автоматически печатает что-либо в кавычках. $c10печатает разрыв строки (## ... )циклы, пока текущая ячейка не станет равной ##.

"00:00 12:00am"$c10+1(10"0"$i":00  "$i":00am"$c10+1)(12$i":00 "$i":00am"$c10+1)"12:00 12:00pm"$c10+1(22$i":00  ">+1$i<":00pm"$c10+1)(24$i":00 ">+1$i<":00pm"$c10+1)

Немного разгулялся:

"00:00 12:00am"$c10+1
(10"0"$i":00  "$i":00am"$c10+1)
(12$i":00 "$i":00am"$c10+1)
"12:00 12:00pm"$c10+1
(22$i":00  ">+1$i<":00pm"$c10+1)
(24$i":00 ">+1$i<":00pm"$c10+1)

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

SnoringFrog
источник
0

Javascript (с использованием внешней библиотеки - Enumerable) (107 байт)

_.Range(0,24).WriteLine(x=>((x<10?"0"+x:x)+":00 "+(((h=((x+11)%12)+1))<10?" "+h:h)+":00"+(x<12?"am":"pm")))

Ссылка на библиотеку: https://github.com/mvegh1/Enumerable/

Объяснение кода: создайте массив целых чисел от 0 до 23, для каждой запишите строку в соответствии с предикатом. Этот предикат проверяет, является ли текущий val меньше 10, и дополняет его 0, иначе использует текущий val как есть. Затем добавляет строку минут к нему. Затем, в основном, делается небольшая хитрость, чтобы преобразовать военное в am / pm время и обрабатывает отступы для am / pm раза меньше, чем 10.

введите описание изображения здесь

applejacks01
источник
0

SmileBASIC, 73 байта

FOR H=0TO 23?FORMAT$(%02D:00 %2D:00%Sm",H,(H+11)MOD 12+1,"ap"[H>11])NEXT

Кто-то нашел 24-часовую формулу лучше, чем моя старая, которая экономит 3 байта и 5 байтов в другой программе

12Me21
источник
0

PHP, 67 65 64 байта

Это использует кодировку IBM-850.

for(;$i<24;)printf(~┌¤═ø┼¤¤┌╠ø┼¤¤┌îƧ,$i,$i%12?:12,$i++>11?p:a);

С не кодированной строкой (66 байт):

for(;$i<24;)printf("%02d:00%3d:00%sm\n",$i,$i%12?:12,$i++>11?p:a);

Запустите так:

php -n -r 'for(;$i<24;)printf(~┌¤═ø┼¤¤┌╠ø┼¤¤┌îƧ,$i,$i%12?:12,$i++>11?p:a);'

Tweaks

  • Экономия 2 байта за счет улучшения формата sprintf
  • Спас байт, избавившись от ненужного места (thx @Titus)
aross
источник
Вы можете использовать -nвместо -d error_reporting=30709. Там не должно быть места до am/ pm. Сохраните один байт в некодированной версии с физическим переводом строки.
Тит