Napisz program lub funkcję bez danych wejściowych, które drukują lub zwracają ciąg 24-godzinny i 12-godzinny :
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
Ciąg musi być wyprowadzany dokładnie tak , jak tu się pojawia. Jedynym wyjątkiem jest to, że opcjonalnie może mieć jeden końcowy znak nowej linii.
Tak więc skrót MD5 twojego wyjścia powinien być
827ae6e2dbb1df494930baedb3ee2653
jeśli nie masz końcowego nowego wiersza i
cd4c3d18abee9bafb495f390a919a13f
Jeśli zrobisz. (Twój skrót może być inny, jeśli Twój system używa innego rodzaju znaku nowej linii, ale to jest OK.)
Najkrótszy kod w bajtach wygrywa. Tiebreaker to wcześniejsza odpowiedź.
code-golf
string
kolmogorov-complexity
arithmetic
date
Hobby Calvina
źródło
źródło
Odpowiedzi:
Bash + coreutils,
4330seq
generuje liczby całkowite 0–23, po jednej w wierszu.date
interpretuje każdą linię jako datę i godzinę. Nagie liczby całkowite wydają się wystarczające do rozpoznania jako godziny dnia do dniadate
.date
następnie wypisuje za każdym razem wymagane formatowanie przy użyciu dostępnych specyfikatorów formatu czasu .Zakłada
LANG=C
ustawienia regionalne, zgodnie z tą meta odpowiedzią .Ideone.
źródło
seq 0 23
i zapisać 7 bajtów%H:00
→%R
zapisuje kolejne 3.%R
wstawia wiodące zero, którego nie chce OP.Python 2, 66 bajtów
źródło
i=0;exec"print'%02d:00%3d:00%cm'%(i,~-i%12+1,97+i/12*15);i+=1;"*24
zmienia kod na trzy różne sposoby, ale każda zmiana ma tę samą długość.C, 73 bajty
MIllIbyte znalazł szczególnie fajny sposób na przepisanie tej odpowiedzi. Dzięki!
źródło
?:
?:
jest to najbliższy odpowiednik Perla||
. C||
jest bardziej podobny(a || b) ? 1 : 0
.i++,i%12?:12,"ap"[i/12])
brakuje punktu sekwencyjnego. Nie można być pewnym, kiedyi++
nastąpi. Być możefor(i=0;i<24;i++) ...i,i%12?:12,"ap"[i/12]...
i++<24
jest lepszy - nie dodaje więcej bajtów do kodu źródłowegoMATL,
464234 bajtówWcześniej 42 bajtów
12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z)
, oraz 46 bajtów736330 24t:qw/+t15XO' '24TX"b16XOhhk14: 12X~Z)
. Oczywiście 736330 nie był potrzebny, to było szalone!Uwaga: Nie działa z TryItOnline, myślę, że istnieje problem kompatybilności między implementacją Matlaba i Octavesa
datestr
.datestr
pobiera reprezentację liczbową daty i konwertuje ją do reprezentacji ciągu tej daty. Pora dnia jest ułamkową częścią liczby, więc 0,0 odpowiada 0 stycznia 0000, o godzinie 00:00:00, a 1,0 odpowiada 1 stycznia 0000 o 00:00:00. 1/24 to 1 rano, 2/24 2 rano itp.Wyjaśnienie
Aby pokazać, że działa w Matlabie, oto zrzut ekranu
źródło
/// , 160 bajtów
Wypróbuj online!
Bez golfa
źródło
:00
zamiennika jest o jeden bajt dłużej ... TIO:00
jest 3-bajtowym ciągiem, który pojawia się 3 razy. 3 × 3 = 9, wykonanie wymiany w twoim przypadku kosztuje 3 + 1 + 3 = 7, ponieważ używa 1-bajtowego aliasu, a używasz go 3 razy, więc 7 + 3 = 10. 9 <10, więc nie wymienię go.MarioLANG,
965834 bajtówWypróbuj online
to było absurdalnie skomplikowane.
Technicznie dane wyjściowe są poprawne, ale w praktyce Tio dla MarioLANG wyświetla „n” zamiast „n”, gdy wypisujemy liczbę za pomocą „:”
jeśli znajdę czas, zgadnę, że spróbuję zrobić (prawdopodobnie znacznie dłuższą) wersję programu, która poprawnie wyprowadza na Tio
Objaśnienie:
naszym głównym problemem jest to, że mamy 6 znaków NaN (newLine, Space,:, a, p, m)
w marioLANG, aby wydrukować postać, potrzebujemy jej wartości ascii:
Pierwszą rzeczą do zrobienia jest ustawienie pamięci:
dzięki temu pamięć wygląda następująco:
zamienimy a na p podczas reszty programu
następnie robimy rzeczywiste wyjście:
źródło
Julia,
88716664 bajtówJest to pełny program, który drukuje ciąg z pojedynczym znakiem nowej linii.
Wypróbuj online!
Zaoszczędzono 5 bajtów dzięki Sp3000 i 2 dzięki Dennisowi!
źródło
Funkcja C #, 100 bajtów
Wersja bez golfa:
Console.Write()
zajmuje zbyt wiele znaków!źródło
$
do łańcucha?JavaScript (ES2015),
147138137134133 bajtyW tej wersji skorzystałem z metody String.repeat (), aby pozbyć się długich .slice () i .join () i przeniosłem przyrost wewnątrz pętli.
Poprzednia wersja:
Daje wynik z końcowym znakiem nowej linii. Przetestowano w przeglądarce Firefox Scratchpad. Nie jestem pewien, czy przekazywanie argumentów do IIFE jest w porządku z regułą „bez wprowadzania danych”.
To moje pierwsze zgłoszenie, więc cześć wszystkim! :)
źródło
TSQL (SQLServer 2012)
146124121Wypróbuj online!
Pierwsza próba, nieco dłuższa, ale jednoliniowa:
Wypróbuj online!
źródło
Perl 5, 58
źródło
JavaScript,
122 bajtów, 120 bajtówEdycja: Mały błąd naprawiony + wyjście:
źródło
V ,
5653 bajtówWypróbuj online!
Ponieważ wprowadzenie tego może być trudne, oto odwracalny zrzut heksowy:
Wersja noncompeting jest trywialnie 2 bajty krótszy jeśli zastąpić oba wystąpienia
G$
zL
, który miał być taki sam, ale miał problem.Wyjaśnienie:
źródło
05AB1E ,
5150484442 bajtówZaoszczędzono dwa bajty dzięki carusocomputing
Kod:
Wypróbuj online!
Wyjaśnienie
źródło
23Ý
zamiast24L<
na 1 bajt. A jak długoë
istnieje? Czuję się tak głupio, że do tej pory nie wiedziałem o innych stwierdzeniach w 05AB1E.PowerShell v2 +, 76 bajtów
Pętle zi
0..23
każda pętla ustawia ciąg z-f
operatorem. Pierwszy{0:D2}
zapewnia, że wstawiliśmy zera, drugi{1,3}
gwarantuje, że mamy wypełnione spacje dla środkowej kolumny. W{0}
jednym odpowiada$_
na-f
operatora, natomiast{1}
odpowiada pseudo-trójskładnikowego która wybierze pomiędzy$_%12
lub12
na podstawie tego, czy$_%12
jest niezerowe, czy nie (czyli czy jesteśmy na$_=13
to zdecyduje1
o 1:00 pm). Następnie łączymy to z innym pseudo-trójka, który wybiera odpowiedniam
/pm
.W przeciwieństwie do mojej odpowiedzi na liście przez cały czas w ciągu pół godziny , w rzeczywistości jest tu krócej , aby brutalnie wymuszać liczby, ponieważ otrzymujemy znacznie tańsze wypełnienie. Oto odpowiedź przy użyciu funkcji daty o długości 78 bajtów
źródło
C ++,
8179 bajtówTen kod wymaga
using namespace std
gdzieś go poprzedzającego.Wykonuje pętlę na wartościach 0 ... 23. Mnoży każdą wartość przez 3600, konwertuje na
tm
strukturę i drukuje ją. Format wydruku%R
generuje 24 godziny i minuty; drukuje formaty%l
i%P
wyprowadza odpowiednie 12-godzinne części; wymagają GNU .Działająca wersja online jest tutaj .
źródło
Rubin,
6662 bajtówNowa wersja
źródło
24.times
jest krótszy. Nie ma potrzeby otaczania przestrzeniputs
.(i-1)
ze~-i
przez 2 bajty.JavaScript (ES6),
119116 bajtówźródło
Sclipting, 76 bajtów
Program zakłada, że wejście jest puste (
'0'
lub cokolwiek, co konwertuje na liczbę całkowitą0
).Liczba bajtów zakłada kodowanie UTF-16.
Nie golfowany:
Każda iteracja pętli pozostawia wiele małych łańcuchów na stosie; na koniec wszystkie są automatycznie łączone.
źródło
JavaScript,
9795 bajtówJest to oparte na odpowiedzi StarCorder . Podziękowania dla George'a Reitha za poprawę o 2 bajty.
Nie golfowany:
źródło
n < 10
jako9 < n
i zmieniając trójskładnikowe skrzynkiPartia, 167 bajtów
źródło
Kotlin , 95 bajtów
Na pewno można to poprawić.
źródło
PHP,
widok rozstrzelony110107 bajtówNieco zaskoczony, próbował zmienić
($i < 10 ? $s : "") . "$i:00"
bit w funkcję, ale skończyło się na dodaniu ~ 25 znaków. Nie idź tam.źródło
Szybki, 85 bajtów
źródło
String(format: "%02d:00 %2d:00\(x<12 ?"a":"p")m", x, x%12 != 0 ? x%12 : 12)
Funkcja C, 82 bajty
Użycie, 94 bajty
Niegolfowany, 337 bajtów
działa w systemie Windows:
Program C, 85 bajtów
źródło
i=0
wersji funkcji. A w przypadku wersji programu możesz włożyć kod bezpośrednio domain
- nie ma potrzeby definiowania tam funkcji!i%12==0?12:i%12
->i%12?i%12:12
Foo, 163 bajty
Całkiem brutalne podejście; nic sprytnego tutaj (próbowałem w kilku miejscach, ale okazało się, że jest krótszy, aby tego nie robić), po prostu chciałem dać szansę Foo. Foo automatycznie drukuje wszystko w cudzysłowie.
$c10
drukuje podział linii.(## ... )
zapętla się, aż bieżąca komórka się wyrówna##
.Ungolfed trochę:
Wypróbuj online
źródło
JavaScript (przy użyciu zewnętrznej biblioteki - Enumerable) (107 bajtów)
Link do biblioteki: https://github.com/mvegh1/Enumerable/
Objaśnienie kodu: Utwórz tablicę liczb całkowitych od 0 do 23, dla każdego napisz wiersz zgodnie z predykatem. Predykat sprawdza, czy bieżąca wartość jest mniejsza niż 10, i uzupełnia ją wartością 0, w przeciwnym razie używa bieżącej wartości bez zmian. Następnie dodaje ciąg minut. Następnie w zasadzie robi małą sztuczkę, aby przekonwertować wojsko na czas AM / PM i obsługuje wypełnianie dla AM / PM razy mniej niż 10.
źródło
SmileBASIC, 73 bajty
Ktoś znalazł lepszy 24-> 12-godzinny wzór niż mój stary, który oszczędza 3 bajty i 5 bajtów w innym programie
źródło
PHP,
676564 bajtówUżywa kodowania IBM-850.
Z niekodowanym ciągiem (66 bajtów):
Uruchom tak:
Poprawki
źródło
-n
zamiast-d error_reporting=30709
. Przedam
/ nie powinno być spacjipm
. Zapisz jeden bajt w niezakodowanej wersji z fizycznym podziałem wiersza.tcl, 93
próbny
źródło