Wprowadzenie
Wyobraź sobie, że linia znaków zawiera dwa rzędy. Górny rząd - kropki - reprezentuje godziny (system 24-godzinny), podczas gdy dolny - przecinek - reprezentuje minuty . Jedna postać może reprezentować godzinę, minutę lub jedno i drugie - gdy tylko jest to możliwe.
Najpierw prawdopodobnie będziesz musiał przeliczyć minuty od północy na godziny i minuty .
Wynikiem jest ciąg pokazujący aktualny czas w „formacie kropkowym”. Liczba kropek ( apostrof liczy się tutaj jako kropka i tak się nazywa! ) To liczba godzin od północy, a liczba przecinków to liczba minut. Pokażę kilka przykładów, aby to wyjaśnić.
- (Uwaga) gg: mm -
result
- (Tylko godziny) 05:00 -
'''''
- (Tylko minuty) 00:08 -
,,,,,,,,
- (godziny <minuty) 03:07 -
;;;,,,,
- (godziny> minuty) 08:02 -
;;''''''
- (godziny = minuty) 07:07 -
;;;;;;;
- (początek dnia) 00:00 -
( pusty wynik )
Zauważ, że znak „oba” można użyć maksymalnie 23 razy - dla 23: xx, gdzie xx to 23 lub więcej.
Symbolika
Jeśli postać musi (patrz reguła 5) być w twoim języku, możesz ją zmienić na jedną z alternatyw. Jeśli wspomniane alternatywy nie są wystarczające, możesz użyć innych symboli - ale zachowaj rozsądek. Po prostu nie chcę, żeby ucieczka była barierą.
;
(średnik) - marker zarówno godziny i minuty (alt::
)'
(apostrof) - marker godzin (alt:'``°
),
(przecinek) - marker minut (alt:.
)
Dodatkowe zasady
- Wygrywa kod z najmniejszą liczbą bajtów!
- Musisz użyć obu symboli, ilekroć jest to możliwe. W przypadku 02:04 wynik nie może być
'',,,,
, ani;',,,
. To musi być;;,,
- Dane wejściowe - może być parametrem skryptu / aplikacji, danymi wejściowymi użytkownika (np. Readline) lub zmienną w kodzie
3.1. Jeśli używana jest zmienna wewnątrz kodu, to jego długość musi być jak najdłuższa. Jest1439
(23:59), więc tak by wyglądałot=1439
- Część wspólna symbolizowana przez znak „oba” (12 w 12:05, 3 w 03:10) musi zostać umieszczona na początku ciągu
- Symbole można zastąpić alternatywami tylko wtedy, gdy będą musiały być poprzedzone znakami ucieczki w kodzie.
- Dane są podawane w minutach po 00:00 . Możesz założyć, że jest to nieujemna liczba całkowita.
Przypadki testowe
Input: 300
Output: '''''
Input: 8
Output: ,,,,,,,,
Input: 187
Output: ;;;,,,,
Input: 482
Output: ;;''''''
Input: 427
Output: ;;;;;;;
Input: 0
Output: (empty)
1439
jest23:59
i nie1339
. (23 x 60 + 59).Odpowiedzi:
Pyth, 19 bajtów
Zestaw testowy
źródło
CJam,
222019 bajtówPobiera dane wejściowe z STDIN:
Sprawdź to tutaj.
Wyjaśnienie
To było naprawdę szczęście, jak dobrze wszystko tutaj działało, w szczególności przypisanie godzin do
'
minut,
tak, że kolejność godzin i minut na stosie była zgodna z ciągiem znaków postaci.To jedyny 3-bajtowy blok, jaki do tej pory znalazłem. Było jednak mnóstwo rozwiązań 4-znakowych:
źródło
GNU Sed, 37
Wynik obejmuje +1 za
-E
opcję sed.Nie byłem pod wrażeniem golfowej odpowiedzi na bash , więc pomyślałem, że spróbuję z sed dla zabawy.
Dane wejściowe są jednoargumentowe, zgodnie z tą meta-odpowiedzią .
Wypróbuj online
źródło
Python 2, 56 bajtów
Funkcja, która drukuje (jeden znak krótszy niż
t=input();
).Metoda jest podobna do Loovjo . Liczba
,
jest różna między minutami i godzinami, z domyślnym minimum 0. Dla'
, to jest negacja. Ponieważ;
obliczamin
domyślnie, biorąc tyle;
godzin, a następnie skracając do liczby minut.Oszczędza znaki, aby zaoszczędzić
d
, ale nie liczbę godzin i minut tutaj. Analog z lambda był o dwa znaki dłuższy (58), więc warto przypisać zmienne.Bezpośrednie przetwarzanie danych wejściowych również nie zapisywało znaków (58):
Kolejna strategia z krojeniem, znacznie dłużej (64):
źródło
Retina , 24
Trywialny port mojej sed odpowiedzi .
Dane wejściowe są jednoargumentowe, zgodnie z tą meta-odpowiedzią .
Wypróbuj online.
źródło
Pure Bash (bez zewnętrznych narzędzi), 103
Dzięki @ F.Hauri za zapisanie 2 bajtów.
źródło
$1
i$2
wp()
i pisaćp , $c
na linii 3.printf "%s"
, mającyc
pracę pusty wola w porządku (choć nie użyć ponownie)C, 119 bajtów
Szczegółowy
źródło
putchar
literałów całkowitych i znaków jako znaków oszczędza jeden bajt, ciągnięcie średników wewnątrz makra oszczędza jeszcze dwa :)while
makrem #define. -1 bajtHaskell,
6866 bajtówPrzykład użycia:
Sprytny bit polega na tym,
replicate
że zwróci pusty ciąg, jeśli podana długość jest ujemna lub zero, więc mogę zastosować go do obu różnic i tylko ta dodatnia się pojawi. Pierwsza część jest łatwa, ponieważ liczba średników jest tylko minimum dwóch. NastępniezipWith
stosuje funkcję do odpowiednich pozycji.EDYCJA: Zdałem sobie sprawę, że przez kilka minut używałem niewłaściwego znaku
EDYCJA 2: Zaoszczędź 2 bajty dzięki @Laikoni
źródło
concat$
jeid=<<
.JavaScript (ES6) 69
źródło
PowerShell,
9985 bajtówparam($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)
Używając metody Loovjo , jest to moja implementacja PowerShell.
bez golfa
Zaoszczędzono 14 bajtów dzięki AdmBorkBork
źródło
$m
i$h
deklaracje do niego, a następnie przy użyciu logiczną mnożenia. Tak jak -param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
Python 3, 98 bajtów
Prawdopodobnie nie najlepsza odpowiedź, ale była świetna zabawa!
źródło
Python 2, 61 bajtów
Wyjaśnienie:
źródło
PHP, 81 bajtów
Poszedłem do zmiennej wejściowej, ponieważ jest ona krótsza niż czytanie
STDIN
lub przyjmowanie argumentów wiersza poleceń.źródło
240
. Spróbuj$i>=min($h,$m)?$h<$m?",":"'":";"
(+1 bajt). Lub użyjfor($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];
(76 bajtów). Btw: pojedynczy cytat-r
uniemożliwia; więc powinieneś używać backticka przez wiele godzin, jeśli jest to ciąg lub°
samodzielny (nie wymaga cudzysłowów -> -1 bajt).JavaScript (ES6),
7771 bajtówźródło
Perl 6,
103101989769 bajtówGeneruje kilka tablic, ale pieprzyć to,ciesz się. Jak zwykle, wszelkie możliwości gry w golfa są apperowane.Edycja: -2 bajty: stał się odważny i usunął niektóre obsady.
Edycja2: -3 bajty poprzez usunięcie tablic.
Edytuj3: -1 bajt, aby wydrukować w odpowiednim formacie, używając „lambdas” i usuwając nawiasy.
Edit4: (przepraszam) nadużywają tych godzin - minuty powinny zwracać 0 i odwrotnie. Usunięto instrukcje if. Następnie usuwając nawiasy, a potem uświadamiając sobie, że wcale nie potrzebowałem lambda. -28 bajtów :)
Woah, jestem w tym lepszy.
źródło
C, 141 bajtów
źródło
h>0||m>0
. Następnie musiszh--;m--;
tylko raz w każdej iteracji, a{}
forif/else
stałoby się przestarzałe.else if(h&&!m)
możesz po prostu miećelse if(h)
if
ielse
.scanf()
.%24
jest to konieczne - maksymalny wkład to 23:59.Gema, 119 znaków
Przykładowy przebieg:
źródło
Matlab: 89 bajtów
Test:
źródło
SmileBASIC, 59 bajtów
Wyjaśniono:
Wygląda to dość straszne, ponieważ dolna część
;
nie jest nawet takie same, jak,
w czcionce SmileBASIC zaźródło
PHP, 81 bajtów
kilka innych rozwiązań:
Uruchom z
echo <time> | php -R '<code>'
.Zamień na
1439
dane wejściowe, zapisz do pliku, uruchom.źródło
Ruby, 50 znaków
Dzięki:
Tak długo czekałem na użycie
Numeric.divmod
, by zdać sobie sprawę, że jest strasznie długi.Przykładowy przebieg:
źródło
(?;*h=t/60)[0,m=t%60]
",',"[0<=>m-=h]*m.abs
05AB1E , 25 bajtów
Wypróbuj online!
60‰vy„'.Nè×}
można zdecydowanie skrócić, po prostu nie mogłem tego rozgryźć i wątpię, czy uda mi się wygolić 7 bajtów, aby wygrać dzięki temu podejściu, chyba że istnieje wersja wektorem×
.Przykład (z wejściem równym 63):
D60÷''×s60%'.ׂ.BøJ„'.';:ðK
była moja oryginalna wersja, ale jest to nawet WIĘCEJ kosztowne niż divmod.60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ
jeszcze jedną metodę próbowałem ...źródło
dc , 95 bajtów
Wypróbuj online!
źródło
Java 8,
1019986 bajtówWyjaśnienie:
Wypróbuj tutaj.
źródło