Wyobraź sobie następujący zegar 24-godzinny, którym można sterować za pomocą klawiszy strzałek:
╔══╗ ┌──┐
║00║:│00│
╚══╝ └──┘
HH mm
Dwukrotne naciśnięcie strzałki w górę ( ↑↑
) spowoduje zwiększenie aktualnie ustawionej godziny:
╔══╗ ┌──┐
║02║:│00│
╚══╝ └──┘
HH mm
Naciśnięcie strzałki w prawo ( →
) spowoduje skupienie drugiego wejścia.
┌──┐ ╔══╗
│02│:║00║
└──┘ ╚══╝
HH mm
Naciśnięcie trzy razy strzałki w dół ( ↓↓↓
) zmniejszy teraz to wejście.
┌──┐ ╔══╗
│02│:║57║
└──┘ ╚══╝
HH mm
Krótko mówiąc:
- Strzałka w górę (
↑
) zwiększy aktualnie aktywne wejście. - Strzałka w dół (
↓
) zmniejsza aktywne wejście. - Prawa strzałka (
→
) przesunie fokus na prawe wejście. - Lewa strzałka (
←
) przesunie fokus na lewe wejście. - Ruch w górę i w dół zapętla się zgodnie z oczekiwaniami przez wprowadzony czas.
- Lewy i prawy ruch nie zapętlają się.
Wyzwanie
Zegar zaczyna 00:00
od godziny przy aktywnym wprowadzaniu godziny (patrz pierwszy schemat). Biorąc pod uwagę listę poleceń wejściowych, wyświetl wynikowy czas w HH:mm
formacie.
Dane wejściowe mogą być ciągiem znaków lub listą (lub odpowiednikiem języka), gdzie różne kierunki wprowadzania danych mogą być jedną z poniższych opcji:
↑↓←→
udlr
^v<>
- faktyczny klawisz strzałki naciska, jeśli twój program ma GUI
Obowiązują standardowe luki.
Przypadki testowe
↑↑→↓↓↓ = 02:57
↓→↑←↑→↓ = 00:00
↓→→↓ = 23:59
←←←←→↑ = 00:01
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓→↓ = 23:59
0123
) ułatwiłoby wyzwanie w niektórych językach, a nie przyniosłoby korzyści innym.Odpowiedzi:
HTML w Google Chrome 67 po chińsku (uproszczony), 39 bajtów
Chrome wyświetla różne komponenty interfejsu użytkownika w innym języku. Nawet proste wprowadzenie czasu: AM / PM zostanie wyświetlone, jeśli używasz języka angielskiego (USA). Jeśli chcesz to sprawdzić, zmieniając język przeglądarki Chrome. Nie masuj, jak to zmienić.
źródło
AM/PM
mnieC (gcc) ,
117107 bajtówWypróbuj online!
źródło
t,i,m[8];e(char*_){for(*m=i=2[m]=0;t=*_++;t<63?i=t%4:(i[m]+=t&8?1:119));printf("%02d:%02d",*m%24,2[m]%60);}
Wypróbuj online!Stax ,
36353332 bajtyUruchom i debuguj
Zastosowania
lrud
.Wyjaśnienie:
źródło
Python 2 , 105 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 103 bajty
Pobiera dane wejściowe jako ciąg, używając
udlr
.Wypróbuj online!
źródło
C # (.NET Core) ,
149132 bajtówWypróbuj online!
Korzystanie
^v<>
.Ten uświadomił mi, że operator modulo w C # nie działa zgodnie z oczekiwaniami, ponieważ w C #
-1 % 60 = -1
, więc muszę wykonać tę dziwną operację na końcu.źródło
Lua (framework love2d),
311308 bajtówWersja nieskruszona:
Prawdopodobnie wciąż nie jest w 100% łatwy do odczytania, ponieważ wszystkie ifs są zamienione instrukcją trójkową (... i ... lub) :)
jeśli zaczniesz w main.lua z miłością, pojawi się okno i możesz naciskać klawisze strzałek, aby zmienić liczby
źródło
MATL ,
575655 bajtówWypróbuj online!
Reprezentuje godziny i minuty przy użyciu liczb zespolonych, przy czym rzeczywista część to godziny, a część wyobrażona minuta.
Z komentarzami:
źródło
PHP ,
145134133 bajtów(-11 bajtów przez więcej golfa)
(-1 bajt przy użyciu metody pętli Davіda )
Aby uruchomić:
Przykład:
Lub wypróbuj online!
Uwagi:
error_reporting=0
opcja nie wyświetla ostrzeżeń.u d l r
źródło
JavaScript,
104103 bajtyPobiera dane wejściowe jako tablicę znaków, używając
<>^v
.Wypróbuj online
źródło
Haskell, 236 bajtów
f
jest główną funkcją i ma typString -> String
:Zasadniczo
u
iv
są wzajemnie rekurencyjnymi funkcjami typuInteger -> Integer -> String -> String
. Pobierają godzinę, minutę i listę znaków nad zestawem{v,^,<,>}
i zwracają ciąg czasu.u
działa tak, jakby podświetlono pokrętło godziny, wywołując rekurencyjnie,u
jeśli nagłówek listy jest w środku{v,^}
, av
nagłówek listy jest w środku{<,>}
.v
jest podobny, ale dotyczy wybierania minutowego.Cała reszta to tylko zapisywanie postaci.
źródło
Lua , 132 bajty
Wypróbuj online!
Wyjaśnienie
Jest to funkcja anonimowa (sposób jej użycia jest pokazany w linku).
źródło
HH:mm
format, a nie tabelęJava 8, 121 bajtów
Odpowiedź C na port Jonathana Frecha . Akceptuje . Wypróbuj online tutaj .
^v<>
źródło
Galaretka , 36 bajtów
Uważam, że
O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:
powinien działać dla 32, aleœṡ
wydaje się, że obecnie ma błąd .Pełny program wypisujący wynik do STDOUT (jako monadyczny link faktycznie zwraca mieszaną listę liczb całkowitych (aczkolwiek jednocyfrowych) i znaków (the
:
).Używa
udlr
opcji wprowadzania.Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
APL (Dyalog Classic) ,
9784 bajtówWypróbuj online!
Wymaga
⎕IO←1
źródło
QBasic , 229 bajtów
Skrypt, który pobiera dane wejściowe jako naciśnięcia klawiszy i dane wyjściowe do konsoli.
Uwaga: terminale
"
są dołączone tylko do podświetlania składni i nie mają wpływu na liczbę bajtówSkomentował
źródło
(m+y)
?m
z jakiegoś powodu myślałem, że minęło kilka minut ... Widzę, że skomentowana wersja jest bardziej czytelna.PowerShell,
109103 bajtów-6 bajtów dzięki AdmBorkBork
Skrypt testowy:
Wydajność:
Wyjaśnienie
Podstawową ideą jest użycie a
[hashtable]
, którekeys
są poleceniami sterującymi ivalues
są blokami skryptów. Kod wykonuje blok skryptu dla każdej komendy z argumentów.źródło
$i=0
, rzucając indeks tablicy,$t[+$i]
aby zapisać niektóre bajty. Wypróbuj online!Perl 6 ,
101 91 8986 bajtówWypróbuj online!
Anonimowy blok kodu, który pobiera ciąg
uldr
znaków i zwraca w danym formacieźródło
perl -F // -E, 72 bajty
źródło
Python, 120 bajtów
źródło
ld
lubrru
przyczyni
opuścić zakres (0,1) io[i]
jest dostępne później?unput()
. Na podstawie wymagań doszedłem do wniosku, że akcje L i R nigdy się nie zapętlają (tj. NieLL
)lll
nie jest taki sam jakr
. Posiadającll
lubrr
jest poprawnym wejściem, jest to również w przypadkach testowych, patrz na przykład trzeci.23:59
. Wypróbuj online!Haskell , 186 bajtów
Wypróbuj online!
źródło
R,
368355 bajtówZdecydowanie nie najlepsze podejście, ale działa.
Funkcjonalność: Uruchom funkcję, wpisz każdą literę do (in / de) bigowania lub przesuń w lewo / prawo, wpisanie „s” kończy „grę”. Haczyk polega na tym, że przyjmie jedną i tylko jedną literę na raz.
-13 bajtów Skonsolidowano niektóre wartości w jednym wierszu, zastąpiono T literą F zamiast użycia break, znaleziono kilka spacji do wyeliminowania, a zamiast tego ciąg przechowywany w zmiennej
Edytuję również alternatywny format, aby zaakceptować ciąg R i / lub wektor, opublikuję w przyszłym tygodniu.
źródło
SmileBASIC, 123 bajty
BUTTON()
zwraca liczbę całkowitą, gdzie każdy bit reprezentuje przyciskBUTTON(2)
zwraca tylko te przyciski, które zostały właśnie naciśnięte (nie są przytrzymywane)WAIT
jest wymagane, ponieważBUTTON
aktualizuje się tylko raz na klatkę (1/60 sekundy). W przeciwnym razie to samo naciśnięcie przycisku zostanie wykryte wiele razy.To może być zdecydowanie krótsze
źródło
05AB1E ,
3837 bajtówUżywa
udlr
wskazówek, ale może również używać^v<>
tej samej liczby bajtów (znaki↑↓←→
nie są częścią strony kodowej 05AB1E, więc użycie tych znaków znacznie zwiększy liczbę bajtów, ponieważ kodowanie powinno zostać zmienione na ASCII).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak
Ž9¦
jest2460
.źródło