Zrzeczenie się
Chociaż wiem, że istnieje to szczególne powiązane pytanie , moje pytanie wykorzystuje dwie bramy garażowe, element losowy, a także opieram je na prawdziwych wydarzeniach z życia, widząc, jak mój syn przypadkowo opuścił jedną z tych bram garażowych, gdy wychodziłem z garaż w zeszłym tygodniu ... Nie ma to jak cios w głowę, aby płynęły kreatywne soki! ;)
Tło
Lucas (mój 15-miesięczny syn) lubi bawić się pilotem do garażu. Na tym pilocie znajdują się dwa przyciski, jeden dla lewej bramy garażowej i jeden dla prawej bramy garażowej. Oba przyciski działają w ten sam sposób; naciśnij jeden raz, aby drzwi zaczęły się otwierać, naciśnij ponownie, aby zatrzymać, naciśnij ponownie, aby rozpocząć zamykanie, naciśnij ponownie, aby zatrzymać ponownie itd.
Lucas uwielbia tego pilota, losowo naciska jeden z przycisków, oba lub wcale. Jeśli oba zostaną naciśnięte, żaden sygnał nie zostanie wysłany, ale naciśnięcie jednego przycisku wyśle sygnał.
Tak więc wyzwanie związane z golfem jest podzielone na dwie części:
Część pierwsza
Wygeneruj ciąg znaków o długości 60 znaków reprezentujący losowe naciśnięcia przycisków Lucasa w ciągu minuty. „Losowy” w tym przypadku oznacza „z jednakową szansą na każdy wkład przy każdym tiku”. Znaki są następujące:
- 0: Lucas albo nie nacisnął żadnego przycisku, albo nacisnął oba przyciski. Tak czy inaczej, żaden sygnał nie został wysłany.
- 1: Lucas nacisnął przycisk lewej bramy garażowej
- 2: Lucas nacisnął przycisk prawej bramy garażowej
Część druga
Korzystając z ciągu wygenerowanego w części pierwszej, symuluj otwieranie i zamykanie garażu na dwa samochody, używając liczb jako wyzwalaczy do otwierania, zatrzymywania i zamykania tych drzwi.
Moje bramy garażowe są dość szybkie (zobacz Zastrzeżenie powyżej, dlaczego). Po naciśnięciu przycisku pełne otwarcie lub zamknięcie zajmuje cztery sekundy.
Jeśli więc zamknięte:
- 0 sekund: 0% otwarte (zamknięte); po naciśnięciu przycisku drzwi zaczynają się otwierać
- 1 s: 25% otwarty
- 2 sekundy: 50% otwarcia
- 3 s: 75% otwarty
- 4 sek .: 100% otwarte, drzwi zatrzymują się
A zatem, jeśli jest otwarty:
- 0 sekund: 100% otwarty; po naciśnięciu przycisku drzwi zaczynają się zamykać
- 1 s: 75% otwarty
- 2 sekundy: 50% otwarcia
- 3 sekundy: 25% otwarcia
- 4 s: 0% otwarte (zamknięte), drzwi zatrzymują się
Jeśli określone drzwi są w ruchu, sygnał do tych samych drzwi zatrzyma je. Następny sygnał wysłany do tych samych drzwi po tym wyśle je w przeciwnym kierunku. Jeśli drzwi zostaną zatrzymane, gdy były wcześniej w ruchu i będą teraz całkowicie otwarte lub całkowicie zamknięte, gdy otrzymany zostanie sygnał „stop”, drzwi zarejestrują się jako „zatrzymane” w stanie całkowicie otwartym lub całkowicie zamkniętym, gotowe do przesuń się w przeciwnym kierunku, gdy otrzyma nowy sygnał.
Dzięki tej symulacji obie bramy garażowe będą początkowo w pozycji zamkniętej. Spójrzmy więc na 10-sekundową listę poleceń i zobaczmy, co się stanie, jeśli Lucas wykona je na pilocie:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Wynik
Pierwsza część wyniku wymaga wyświetlenia ciągu o długości 60 znaków losowych znaków „0”, „1” i „2” wygenerowanych z części pierwszej. na przykład.
212022112021202211202120221120212022112021202211202120221120
Poniżej tego ciągu znajduje się przetwarzanie tych „sygnałów” zgodnie z regułami wspomnianymi powyżej, jak bramy garażowe będą się zachowywać z każdą postacią (sekunda po drugiej). Wynik powinien wynosić 60 linii poniżej początkowego ciągu wyświetlania.
Każda z tych przetworzonych linii będzie miała postać:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)
gdzie:
- N jest n-tym znakiem z odpowiedniego ciągu losowego, który będzie miał postać 0, 1 lub 2.
- X% to procent otwarcia lewych drzwi (nie ma wypełnienia zerowego)
- XXXXXXX to status lewych drzwi. Jeżeli drzwi nie są w ruchu (tj. Nie otwierają się ani nie zamykają), status „zatrzymany” jest wymuszony, co oznacza, że został zatrzymany w ruchu (możliwy tylko przy 25%, 50% lub 75%) lub zatrzymany przy pełnym otwarciu (100% ) lub całkowicie zamknięte (0%). W przeciwnym razie drzwi będą „otwierać się” lub „zamykać”.
- Y% to procent otwarcia prawych drzwi (nie ma wypełnienia zerowego)
- RRRRRRR to stan odpowiednich drzwi. Jeżeli drzwi nie są w ruchu (tj. Nie otwierają się ani nie zamykają), status „zatrzymany” jest wymuszony, co oznacza, że został zatrzymany w ruchu (możliwy tylko przy 25%, 50% lub 75%) lub zatrzymany przy pełnym otwarciu (100% ) lub całkowicie zamknięte (0%). W przeciwnym razie drzwi będą „otwierać się” lub „zamykać”.
Przykład pokazany poniżej z użyciem 10 „sygnałów” i 10 przetworzonych linii
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
To jest kod-golf, więc najkrótszy kod będzie wyraźnym zwycięzcą. Ułatwiłem to trochę, używając wyrażeń takich jak „otwieranie”, „zatrzymywanie” i „zamykanie”, które są siedmioma literami ... więc możesz chcieć wprowadzić to w swoją strategię.
Powodzenia!
1
w twoim przykładzie ostatnie polecenie nie zatrzymuje lewych drzwi na poziomie 75%?