Moja elektryczna brama garażowa działa w następujący sposób:
- Jest tylko jeden przycisk do sterowania drzwiami
- Jeśli drzwi są całkowicie zamknięte i nacisnę przycisk, drzwi zaczynają się otwierać. Pełne otwarcie zajmuje 10 sekund
- Jeśli drzwi są całkowicie otwarte i wcisnę przycisk, drzwi zaczynają się zamykać. Całkowite zamknięcie zajmuje 10 sekund
- Jeśli drzwi są częściowo w trakcie otwierania lub zamykania i wcisnę przycisk, drzwi zatrzymują się i zostają częściowo otwarte.
- Ilekroć drzwi przestają się poruszać, albo po automatycznym zakończeniu akcji otwierania lub zamykania, albo po ręcznej przerwie poprzez naciśnięcie przycisku w trakcie akcji, wówczas mechanizm się odwróci i zapamięta kierunek dla następnej akcji.
- Jeśli przycisk zostanie naciśnięty, gdy drzwi zostaną zatrzymane, ale częściowo otwarte, czas na zakończenie akcji wyniesie ułamek 10 sekund proporcjonalnie do ilości ruchu, jaką musi wykonać, aby ukończyć akcję.
Załóżmy, że drzwi są całkowicie zamknięte na początku.
Podana zostanie lista wejściowa liczb całkowitych. Te liczby całkowite to liczba sekund, które czekam między kolejnymi naciśnięciami przycisku sterowania.
Wyprowadź dwie rzeczy:
- wartość procentowa wskazująca stan drzwi po zakończeniu wszystkich naciśnięć przycisków i osiągnięciu przez drzwi stanu ustalonego. Wyjście
%
symbolu jest opcjonalne. - jednoznaczne wskazanie, w którym kierunku będą poruszać się drzwi po kolejnym naciśnięciu przycisku. Może to być
up
/down
,U
/D
,+
/-
,1
/0
lub cokolwiek wybierzesz.
Możesz założyć, że przejście zajmuje nieskończenie mniej niż 10 sekund, aby zakończyć czynność otwierania lub zamykania.
Przykładowe dane wejściowe:
<empty list> # button was pushed just once
20 # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7
Oczekiwane wyniki odpowiadające powyższym wejściom
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Działał przykład ostatniego testu
- Drzwi zaczynają się zamykać. Przycisk jest wciśnięty
- Poczekaj 11 sekund. Drzwi kończą się w pełni otwarte. Przycisk jest wciśnięty.
- Poczekaj 10 sekund. Drzwi zamykają się całkowicie. Przycisk jest wciśnięty.
- Poczekaj 9 sekund. Przycisk jest wciśnięty. Drzwi zatrzymują się przy 90% otwartym.
- Poczekaj 8 sekund. Przycisk jest wciśnięty. Drzwi zaczynają się zamykać.
- Poczekaj 7 sekund. Przycisk jest wciśnięty. Drzwi zatrzymują się przy 20% otwartym. Następny kierunek będzie w górę.
Odpowiedzi:
Lua,
258248242 bajtówBez golfa
Nie rozumiem, jak mogą wyglądać twoje przypadki testowe ...OP Naprawionoźródło
Pyth,
504539 bajtów6 bajtów dzięki Sp3000.
Zestaw testowy.
źródło
JavaScript (ES6),
109106 bajtówźródło
Rubin, 152 bajty
Przypadki testowe:
źródło
->v{
na->*v{
(tak myślę). Ponadto, nie trzeba spacje przed:
jak i po? I jesteś pewien, że:a<=0
to nie analizuje(:a) <= 0
?:a<=0
, dostanę,ArgumentError: comparison of Symbol with 0 failed
jeśli to nie zadziała. Myślę, że ponieważ przeanalizował?
i wie, że jest to operator trójskładnikowy, po prostu działa. Zasady są naprawdę dziwne. Włożyłam spacji ani nawiasów w miejscach, które są potrzebne, aby uniknąć błędów składni, jakSyntaxError: unexpected tLABEL
iNoMethodError: undefined method
u? `.a=u ? a+w : a-w
i zmienić tam,a=a+w*d
gdzied
jest1
lub w-1
zależności od kierunku, ale jeszcze tego nie wypracowałem.Python 3.5,
193187185181175173172 bajtów:Pobiera dane wejściowe w postaci liczb oddzielonych przecinkami, na przykład
1,2,3,4,5
lub nawet1.2,3.4,7.8,9.2
. Wyświetla informację, czy drzwi w następnym kroku idą w górę, czy w dół , odpowiednio, za pomocąU
lubD
. Z czasem będzie więcej golfa.Wypróbuj online! (Ideone) (Tutaj dane wejściowe mają postać listy składającej się z liczb oddzielonych przecinkami, np
[1,2,3,4,5]
.)źródło
PHP,
128120 bajtówKod jest zawinięty tutaj, aby zmieścił się w polu kodu. Umieść wszystko w jednym wierszu, umieść przed nim znacznik otwarty PHP i zapisz go w pliku. Lub uruchom go z wiersza poleceń, używając
php -d error_reporting=0 -r '...the code...' [arguments]
.Niegolfowany kod źródłowy, zestaw testów i przykłady użycia można znaleźć na github .
źródło