Utwórz program, który określa, na podstawie danych wejściowych ścieżki, czy Mario może dotrzeć do końca, oznaczony E
od początku, oznaczony przez S
.
Ścieżka będzie wyglądać mniej więcej tak:
S = E
=====
Na ścieżce różne symbole i ich reprezentacje to:
=
: ściana / podłoga / sufit. Mario nie może przejść przez ścianę i nie może spaść przez podłogę ani skoczyć przez sufit (uderzyłby się w głowę)S
: powietrze, z wyjątkiem pokazania, gdzie zaczyna się Mario. Będzie to zawsze pojawiać się w lewej kolumnie na wejściu, na poziomie gruntu.E
: powietrze, z wyjątkiem pokazania, gdzie Mario chce się dostać. Będzie to zawsze pojawiać się w prawej kolumnie wejścia, na poziomie gruntu.
Wejście będzie zawierało spacje w każdym miejscu, w którym Mario mógłby chodzić.
Mario może tylko iść do przodu; w tym przykładzie Mario nie może dojść do celu
S
===
===
E
====
w tym też nie może
E
==
==
#==
==
==
==
S ==
======
Może jednak dotrzeć do miejsca oznaczonego przez #
(które nie pojawi się na wejściu), ponieważ może skoczyć do czterech komórek wysoko; Mario jest nadludzki. Jako kolejny przykład jego nadludzkości:
S
=
=
=
=
=
= #
= =
=
=
=
= E
=======
Mario może dojść do tego E
, spadając z dużej odległości, przeżywając i spacerując spokojnie E
. Zauważ, że nie może dosięgnąć #
, ponieważ Mario upada prosto.
Mario potrafi skakać naprawdę wysoko, ale w porównaniu z tym niezbyt daleko.
S E
== ==
= =
Mario może spróbować przeskoczyć lukę, ale mu się nie uda i wpadnie prosto. Nie może dojść do końca.
Mario może osiągnąć cel we wszystkich tych przykładach:
E
=
=
=
S=
==
=
= E
S= =
== =
= =
=====
S
=
= E
====
To jest kod golfowy, więc wygrywa najmniej bajtów!
źródło
#
, ponieważ Mario upada prosto”. Jeśli dobrze to widzę, czy nie spadłby prosto na#
? Czy skoki są zdefiniowane jako maksymalnie 4 spacje w górę i maksymalnie 1 spacja, prawda?#
. Co do drugiego pytania: nie jestem OP, ale zgaduję, że masz rację. (tak założyłem w moim rozwiązaniu)E
nie pojawia się w kolumnie znajdującej się najbardziej na prawo, ponieważ poziom gruntu rozciąga się na prawo od reszty mapy.Mario cannot walk through wall , and cannot fall past a floor, or jump past a ceiling
Odpowiedzi:
Poślizg ,
382725 bajtówWymaga dopełnienia danych wejściowych do prostokąta, tak aby w każdej komórce Mario musiał przejść przez spacje (potencjalnie z wiodącą linią pełną spacji). Drukuje albo ciąg reprezentujący prawidłową ścieżkę (co obejmuje
S
,E
i wszyscy=
chodzić z wyjątkiem ostatniego) lub nic, jeżeli nie istnieje żadna droga.Sprawdź to tutaj.
Wyjaśnienie
Slip był wejściem Sp3000 do naszego wyzwania projektowania języka w 2D. Przypomina to rozszerzenie 2D wyrażenia regularnego, w którym można podawać instrukcje kursorowi silnika, gdy jest to dozwolone lub wymagane do skrętu w lewo lub w prawo. Posiada również wygodną funkcję, dzięki której można zapobiec przesuwaniu się kursora, umożliwiając dopasowanie jednej pozycji dwa razy z rzędu (z różnymi wzorami).
Poślizg nie ma czegoś porównywalnego do wyrażeń regularnych w wyrażeniu regularnym, ale ponieważ możesz przesuwać dowolną pozycję wiele razy, możesz po prostu przetestować warunek, a następnie powrócić. Używamy tego, aby zapewnić, że skaczemy tylko na ziemi, przechodząc do płytki podłoża po każdym kroku.
źródło
Java
234 230 221 216 208 207 205179 bajtówSłuchaj, pokonałem C i pytona? Osiągnąłem prawdziwą transcendencję wśród śmiertelników! Pomijając wszystkie dowcipy, było to zabawne wyzwanie. Poniższa funkcja przyjmuje dane wejściowe jako tablicę ciągów kolumn o tej samej długości. Jeśli jest to niezgodne z zasadami, daj mi znać. Wyprowadza 1, co oznacza pomyślny przebieg mario, i każdą inną wartość sugerującą nieudany przebieg mario.
Oto starsza logika (która jest podobna do obecnej wersji) z przykładowym użyciem i danymi wyjściowymi. Plus kilka komentarzy wyjaśniających logikę
źródło
Python,
260239222215209206 bajtów,wypróbuj na ideone (z przypadkami testowymi)
zadzwoń jak:
f([' S=', ' E='])
Opis zmian:
Teraz, podobnie jak niektóre inne rozwiązania, zakłada, że dane wejściowe to tablica ciągów kolorów, z których każde rozpoczyna się od „”
Opakowanie dla starego formularza wejściowego:
g=lambda x:f(map("".join,zip(*([" "*x.index("\n")]+x.split("\n")))))
Naprawiłem również błąd, w którym Mario mógł przeskakiwać bloki nad nim.
wersja bez golfa z objaśnieniami:
f
rekurencyjnie nazywa się we wszystkich kierunkach, z których Mario może się przenieśćy,x
. Zwraca,True
gdy osiągnie"E"nd
, który następnie przechodzi przez wszystkie wywołania funkcji, aż wg
końcu powracaTrue
.źródło
else
przed finałemreturn
?Ślimaki ,
413729 bajtówDzięki feersum za pomoc w unikaniu nakładających się ścieżek i zaoszczędzeniu 4 bajtów.
Wymaga dopełnienia danych wejściowych do prostokąta, tak aby w każdej komórce Mario musiał przejść przez spacje (potencjalnie z wiodącą linią pełną spacji).
Wypróbuj online!
Wyjaśnienie
Snails było wejściem feersum do naszego wyzwania projektowania języka w dopasowaniu wzorów 2D. Podobnie jak Slip, jest również podobny do wyrażenia regularnego, ale główna różnica polega na tym, że a) ten obsługuje twierdzenia (spojrzenia) ib) oprócz tych zapewnień, nie jest możliwe dwukrotne przejście do żadnej komórki w siatce. To sprawia, że ten problem jest nieco trudny, ponieważ istnieją przypadki, w których Mario musi wpaść do dziury i wyskoczyć z powrotem, np .:
Oprócz tych różnic, składnia tych dwóch języków również bardzo się różni.
Aby obejść problem polegający na tym, że nie możemy dwukrotnie przejść przez komórkę, zawsze zmieniamy krok poziomy na pionowy. Oznacza to jednak, że musimy pokonać upadek, zanim przejdziemy przez półkę. Więc technicznie faktycznie spadną przez płytki gruntu, ale upewnimy się, że zdarzają się tylko przy otwartej przestrzeni.
źródło
C,
256236213197 bajtów20 bajtów zapisanych przez „To zawsze pojawi się w kolumnie po lewej stronie wejścia”
23 bajty zapisane dzięki systemowi opartemu na kolumnie @ RohanJhunjhunwala
Wypróbuj na ideone, z przypadkami testowymi ...
Stosowanie:
Nieoznakowany z wyjaśnieniem:
źródło
PHP,
399338284265251 bajtówoczekuje danych wejściowych jako argumentu wiersza poleceń z podziałami linii w stylu uniksowym i końcowymi spacjami w każdym wierszu, zwraca kod wyjścia w
1
przypadku powodzenia, w0
przypadku niepowodzeniapodział na funkcje
testy (na funkcji m)
źródło
Rubin,
153147 bajtówPrzepraszam, Jawa ... Twoje miejsce jako najlepsze miejsce do gry w golfa zostało przejęte!
Dane wejściowe to lista ciągów kolumn, poprzedzona pojedynczą spacją w stylu, w jaki rozwiązania Slip i Snails wymagają wypełnienia danych wejściowych prostokątem pustej przestrzeni.
Wypróbuj online!
źródło
Brud, 46 bajtów (niekonkurencyjny)
Kilka razy aktualizowałem Grime po opublikowaniu tego wyzwania, więc ta odpowiedź nie kwalifikuje się do wygrania. Niektóre zmiany są tak nowe, że nie udało mi się wprowadzić ich do TIO, ale kiedy to zrobię, możesz wypróbować program . W każdym razie moje repozytorium zawiera wersję, która poprawnie obsługuje ten kod.
Program drukuje,
1
czy Mario może osiągnąć cel, a0
jeśli nie. Dane wejściowe muszą zawierać spacje we wszystkich miejscach, które Mario musi odwiedzić. Do ogólnych danych wejściowych mam następujące 57-bajtowe rozwiązanie:Wyjaśnienie
Wyjaśnienie na wysokim poziomie jest takie, że nieterminalny
A
, zdefiniowany w pierwszym wierszu, pasuje do pod-prostokąta 1 × 1 wejścia, w którym Mario może osiągnąć cel.A
jest zdefiniowany albo dosłownieE
(Mario jest już przy bramce), albo jako wzór 1 × 1 , który znajduje się w lewej kolumnie jakiegoś prostokąta 2 × n i zawiera prawidłowy skok Mario do innego dopasowaniaA
w prawej kolumnie. Drugi wiersz zawiera liczbę dopasowań,A
które zawierają również znak początkowyS
, i drukuje je.Oto podział kodu:
Chodzi o to, że
\ {,-4}
część po lewej pasuje do przestrzeni, przez którą Mario skacze w górę, a\ /*
część po prawej pasuje do koryta przestrzeni, po której następnie spada. Wymagamy, aby wylądował na meczuA
(ponieważ chcemy osiągnąć cel), który jest na szczycie=
. Pionowe stosy poniżej obu kolumn po prostu zagwarantują, że kolumny będą miały tę samą wysokość, dzięki czemu będziemy mogli je łączyć (co robi pojedyncza przestrzeń na środku). Oto schemat artystyczny ASCII przykładowego skoku, z podziałem na wyżej wspomniane prostokąty i spacje zastąpione przez*
s:W drugim wierszu opcja
n
powoduje zliczanie wszystkich dopasowań, zamiast znajdowania pierwszego dopasowania. W ogólnym rozwiązaniu spacje mogą być również specjalnymi znakami braku danych wejściowych, a opcjab
powoduje, że dane wejściowe są uzupełniane znakami znaków braku danych wejściowych.Mam nadzieję, że to wszystko ma sens!
źródło