Wprowadzenie
Jonny chce grać w Frogger. Jednak nie jest bardzo dobry. W rzeczywistości będzie próbował ruszyć do przodu i dopiero po przesunięciu platform.
Dowiedz się, czy żaba Jonny'ego dotrze do końca ścieżki, czy też umrze na swojej drodze.
Wyzwanie
Program będzie odbierał jako dane wejściowe siatkę Frogger złożoną z 0
s i 1
s, w następującym formacie:
- Siatka będzie miała losową szerokość i długość oraz co najmniej 3x3
1
reprezentuje platformy0
reprezentuje wodęF
przedstawia pozycję początkową żaby- Każda pierwsza i ostatnia linia siatki będzie się składać tylko z
1
s i nie będzie się ruszać, a żabaF
zostanie losowo umieszczona w ostatniej linii - Każda warstwa pośrednia zawsze będzie się poruszać i będzie miała znak
<
lub>
na końcu każdej linii wskazujący, czy porusza się w lewo, czy w prawo
Zastępowanie tych symboli własnymi symbolami jest dozwolone, o ile wszystkie są odrębne, a Ty podajesz zamienniki w swojej odpowiedzi.
Dane wejściowe mogą być w dowolnym kompatybilnym formacie (ciąg znaków z podziałem wiersza, tablica ciągów, tablica znaków, ...).
Zasady Wyzwania
- W każdej turze wszystkie platformy poruszają się o jedno pole, zgodnie z kierunkiem wskazanym przez znak
<
lub>
- Platformy pojawiają się ponownie po drugiej stronie siatki, jeśli zostaną wypchnięte z „ekranu”
- Jeśli żaba znajduje się na ruchomej platformie, będzie się poruszać wraz z nią
- Następnie żaba przeskoczy o jeden kwadrat w kierunku górnego rzędu. Żaba będzie się poruszać co turę.
- Żaba umiera, jeśli wskoczy do wody (
0
) lub dotknie boku siatki wraz z ruchomą platformą
Twój program musi wyprowadzić prawdziwą wartość, jeśli żaba przeżyje, aw przeciwnym razie wartość fałsz.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach. Obowiązują standardowe luki.
Przykłady
Przykład 1
Wejście
11111
00111>
00101<
1F111
Wynik
1
Wykonanie
Turn 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Turn 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Turn 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Przykład 2
Wejście
11111
00100<
00100<
1F111
Wynik
0
Wykonanie
Turn 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Turn 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Turn 3:
11111
00001
00001
11111
źródło
<
czy też>
możemy przyjąć tablice prostokątne jako dane wejściowe? Nawiasem mówiąc, miłe wyzwanie!<
lub>
koniec.0
przed nią, czy będzie czekać na następny1
? Jeśli może poczekać, czy pójdzie naprzód na każdym1
, czy może będzie mądrze czekać? Tj. Z przypadkiem testowym11111 00001< 00011< 11F11
, czy będzie falsey, ponieważ wskakuje do wody ( pastebin kroków ); czy będzie falsey, ponieważ przesuwa się poza ramkę ( pastebin kroków ); czy będzie to prawdą, ponieważ elegancko czeka na drugą platformę, zanim skoczy do przodu ( pastebin kroków )?0
.Odpowiedzi:
Python 2 ,
168165152145137129 129 bajtówWypróbuj online!
Format wejściowy to lista ciągów; znaki o znaczeniu podanym w opisie problemu.
Wyjaśnienie:
i
jest numerem tury (zaczynając od tury 1);x
jest pozycją żabki na początku tej tury.Rzędem, na który ma wejść żaba, jest sznurek
l
(zwróć uwagę, że poprzez krojenie są one uporządkowane od dołu do góry).d=('<'in l)%-2|1
daje-1
lub w1
zależności od kierunku, w którym rząd się porusza.Ponieważ jest to
i
tura, rząd ten zostanie przesunięty z oryginalnej pozycji oi
bajty; a więc postać Frogger ma zamiar wskoczyć tol[(x-d*i)%L]
gdzieL
jest szerokość rzędu, więc chcemy, że postać będzie równa'1'
; tj>'0'
.Ponadto chcemy sprawdzić, czy żaba nie zostanie przesunięta poza krawędź na początku następnego zakrętu; taka jest funkcja wyrażania
-1<x+d<L
.Warunki te są powiązane (ponieważ
'0'>-1
zawsze tak jestTrue
); a jeśli w dowolnym momencie wynikowe wyrażenie będzie fałszywe,k
stanie się (a następnie pozostanie)0
.W każdym razie aktualizujemy pozycję żabki
x+=d
i podbijamy numer wiersza; następnie spienić, spłukać, powtórzyć.źródło
Python 2 ,
246245244242 bajtów-3 bajt dzięki Mr. Xcoder
-1 bajt dzięki Jonathan Frech
Wypróbuj online!
Wyjaśnienie
d
to kierunek, w którym przesunie się każda warstwaq
to postać, która zostanie otoczona[q,' '][q<'L']
upuści żabę poza ekranemsum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
usunie ostatni znak (kierunek), a następnie usunie pierwszy znak i doda go lub usunie drugi znak i poprzedzi go (na podstawied
), i doda kierunek do tyłu, skutecznie przesuwając cały rząd w lewo / prawo.if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
sprawi, że żaba skoczy do przodumin('F',m[i-1][j])
sprawi, że żaba spadnie do wodymin
i<
) jest zgodne z kolejnością' ' < '0' < '1' < 'F' < 'L'
Wejściowa będzie lista znaków:
' '
- woda'F'
- żaba'L'
- platforma'0'
- przesuń warstwę w lewo'1'
- przesuń warstwę w prawoźródło
if i<len(m)-1
może byćif~-len(m)>i
.Java 8,
293277 bajtówWykorzystuje znaki domyślne określone w opisie wyzwania (
01F<>
).Wypróbuj online.
Wyjaśnienie:
źródło