Poniższe inspirowane jest pytaniem, które pojawiło się dzisiaj na Stack Overflow .
Biorąc pod uwagę liczbę mikrosekund, 0 <= n <= 86400000000
(np. 12345678900
), Wypisuje sformatowany ciąg hh:mm:ss:000:000
, np 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
Mam rozwiązanie w Pythonie w 209 bajtach, ale czy może być niższe?
hh:mm:ss.000000
prawdopodobnie byłby lepszy (i łatwiejszy). Nadal nie mogę go teraz zmienić.Odpowiedzi:
Python 2,
8279 bajtówBuduje ciąg, iterując przez serię divmodów. Jedynym wymyślnym bitem jest to
%7/2
, które mapy1000 -> 3
i60 -> 2
.źródło
Pyth, 31 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
Bash + coreutils, 61
Najkrótszy jak dotąd „główny nurt”…
Wyjście testowe:
źródło
CJam,
37 3534 bajtówTo jest prettty długi .. Gra w golfa teraz ..
AKTUALIZACJA: 1 bajt zapisany dzięki @ Sp3000
Wypróbuj online tutaj
źródło
C, 97 bajtów
Kod testowy:
źródło
q (34)
Jestem pewien, że może być krótszy
na przykład
źródło
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Julia,
1109695 bajtówTworzy to nienazwaną funkcję, która przyjmuje liczbę całkowitą jako dane wejściowe i zwraca ciąg znaków. Aby to nazwać, nadaj mu nazwę, np
f=t->...
.Niegolfowane + wyjaśnienie:
Przykłady:
źródło
C #,
179175 bajtówJeśli masz do dyspozycji wbudowane funkcje, dlaczego ich nie użyć?
Z lepszym formatowaniem:
źródło
Excel,
6563 znakówZakładając, że twoje mikrosekundy są w A1 :
Wydajność:
źródło
Perl,
14178 bajtów77 bajtów kodu, +1 dla
-n
flagi. Biegnij z:Dzięki Thomas Kwa i chilemagic za zmniejszenie mojego kodu o prawie połowę.
źródło
3600000000
może być36e8
.chomp($n=<STDIN>);
możesz uruchomić go jako linijkę z-n
flagą (która liczy się jako 1 znak). Nie potrzebujesz teżint(..)
każdego z nich$_
. Stosując również wskazówkę Thomasa, możemy to sprowadzićecho 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
i może być nawet krótsza droga!\n
ciągu wyjściowego. Możesz również zamienić ciąg na"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
Następnie dodajesz dodatkowy bajt dla-n
flagi. Jeśli użyjesz-nle
na przykład, będzie to liczone jako dodatkowe 2 (dlan
il
). Otrzymasz-
ie
(lubE
jeśli musisz użyćsay
) za darmo.Matlab - 88
89bajtówZdobył jeden bajt z rozwiązaniem bez użycia wbudowanej funkcji:
Utwórz funkcję wbudowaną, która pobiera liczbowy argument wejściowy
t
i zwraca ciąg znaków.wykorzystuje wektoryzowaną kombinację
fix
i,mod
aby oddzielić elementy czasu, a następnie wyświetlić.nieco frustrujące jest to, że formatowanie ciągu wyjściowego zajmuje tyle, więcej niż same obliczenia ...
Test:
Wersja 89 bajtów:
Dzieli liczbę, używa wbudowanej funkcji dla części hh: mm: ss, która nie może poradzić sobie z mikrosekundami, więc łańcuch jest zakończony kombinacją operacji
fix
imod
źródło
JavaScript (ES6),
128118116111 bajtówPrawdopodobnie jest w tym pewien potencjał golfowy.
Próbny
Jest to ES6, więc tylko Firefox, na razie i tak:
źródło
C,
113103105 bajtówEDYCJA: usunięto więcej bajtów
POPRAWKA: usunięto długi typ, dzięki niektórym użytkownikom
Nie jest to najkrótsza odpowiedź C, ale dobrze się bawiłem ze zwrotami karetki, więc czułem, że ktoś może to lubić.
Nazwij to tak:
źródło
CoffeeScript, 127 bajtów
Podejście to zastosowano w odpowiedzi ASCIIThenANSI . Szkoda, że interfejs API konsoli JavaScript nie ma symboli zastępczych formatowania dla liczb dopełniających.
źródło
PowerShell, 153
Stosowanie
źródło
F #,
111 92102 bajtówPierwsza iteracja: podstawowy pomysł.
Druga iteracja: Mniejsze stałe
Trzecia iteracja: Prawidłowe formatowanie części jednocyfrowych.
Uwaga: ta funkcja musi mieć int64, aby działała.
Przykładowe wyniki:
źródło
PHP -
115102 bajtówRozwiązanie w 155 bajtach (umieszczone tutaj w 3 wierszach dla czytelności):
Druga linia oblicza (od wewnątrz na zewnątrz) dokładne wartości składników, zaczynając od mikrosekund.
Krótsza wersja (115 bajtów, owinięta w dwa wiersze dla czytelności):
Wykorzystuje również wbudowane przypisania do obliczenia konwersji liczby wejściowej mikrosekund w milisekundach, sekundach, minutach i godzinach przy użyciu liczb zmiennoprzecinkowych. Operator modułu (
%
) i format liczb dziesiętnych (%d
)printf()
są następnie używane do wymuszenia ich na liczbach całkowitych (część ułamkowa jest ignorowana).Inne rozwiązanie wykorzystujące funkcje daty (102 bajty)
Godzinach: min: sek część obsługiwana przez funkcji daty PHP
gmdate()
istrtotime()
, The mili- i mikrosekund ekstrahowane są jako ciągi od wartości sygnału wejściowego.Stosowanie:
źródło
Java, 215 bajtów
Metoda
f
wykonuje pewne obliczenia,n
aby obliczyć godziny, minuty itp., I deleguje metodę,p
aby poprawnie sformatować każdą wartość.Sformatowany:
Stosowanie:
źródło
Rubin - 82 bajtów
źródło