Twoim zadaniem jest napisanie programu, który znajdzie optymalną liczbę ruchów potrzebnych do przejścia od lewego dolnego rogu prostokąta do prawego górnego rogu naprzeciwko.
Twój program zaakceptuje dane wejściowe jako uporządkowaną parę (width, height)
. Będą to wymiary prostokąta, z którymi będziesz pracować. Twój program utworzy ASCII-art rozwiązania (użyj .
dla pustego kwadratu i #
dla części rozwiązania, X
dla kwadratu początkowego) i policz liczbę ruchów potrzebnych do osiągnięcia punktu końcowego. Ruchy po przekątnej są niedozwolone. Jeśli istnieje wiele rozwiązań, wybierz jedno z nich.
Najkrótszy program w bajtach wygrywa.
Przykład
Wejście: (4, 5)
Wynik:
..##
..#.
.##.
.#..
X#..
Liczba ruchów: 7
#
„optymalnego rozwiązania” (które jest rozwiązaniem, które nigdy nie przesuwa się w lewo ani w dół)?#
ponieważ nielogiczne jest przechodzenie w lewo lub w dół.Odpowiedzi:
05AB1E ,
2724 bajtówKod:
Wyjaśnienie:
Wypróbuj online! . Wykorzystuje kodowanie CP-1252 .
źródło
Retina ,
5453 bajtówPobiera dane wejściowe oddzielone od linii i generuje siatkę rozwiązania, a następnie liczbę ruchów.
Wypróbuj online!
Wyjaśnienie
Zamień obie liczby całkowite na tyle
.
s, tzn. Przekonwertuj je na unary.To buduje siatkę
.
s, dopasowując każdą.
na jednostkowej wysokości i przechwytując jednoznaczną reprezentację szerokości.S
Aktywuje tryb podziału, która zwraca przechwyconych ciągi, a|\D
i_
razem upewnić się, że wszystko jest usuwane z łańcucha.To zmienia ostatni znak każdej linii, a także całą ostatnią linię na
#
s.Wykorzystuje to mnóstwo opcji do przekonwertowania tylko pierwszego
#
z ostatniego wiersza naX
(musimy upewnić się, że dotyczy to tylko ostatniego wiersza ze względu na dane wejściowe o szerokości 1).m
aktywuje tryb wieloliniowy, który^
dopasowuje początek linii.-1=
mówi Retinie, aby wykonała zmianę tylko w ostatnim meczu. Na koniec:
wyłącza domyślny tryb cichy, tak że siatka jest drukowana do STDOUT jako wynik pośredni.Na koniec po prostu liczymy liczbę
#
w ciągu, która odpowiada liczbie ruchów.źródło
Pyke, 26 bajtów
Wypróbuj tutaj
Lub niekonkurencyjne 34 bajty, dodaj zastosuj węzeł z ast)
Wypróbuj tutaj!
Lub 30 bajtów, jeśli dozwolone spacje jako dopełnienie
źródło
Pyth,
322924 bajtówWypróbuj online!
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Jak to działa:
Poprzednia próba:
Wypróbuj online!
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Jak to działa:
źródło
AtMQ
. To przypisuje dwie wartości doG
iH
.CJam,
3533 bajtówPobiera dane wejściowe w formularzu
width height
i wyświetla liczbę ruchów w pierwszym wierszu, a następnie siatkę rozwiązania.Sprawdź to tutaj.
Działa to również dla tej samej liczby bajtów:
źródło
Rubinowy, 48 bajtów
Jest to funkcja anonimowa, która zgodnie z tym meta postem jest akceptowalna, chyba że pytanie brzmi „pełny program”. Normalnie nie byłbym pedantyczny w tej kwestii, ale problem jest bardzo prosty, a wykonanie programu byłoby znaczącym% wzrostem wyniku.
Dane wejściowe to dwa argumenty. Zwracana wartość to tablica zawierająca ciąg znaków ASCII i liczbę
#
w ścieżce.W programie testowym
Wynik
To tylko ciąg h-1 rzędów kropek w-1, po których następuje a
#
i nowa linia. Umieszczam#
na końcu, aby użyć pojedynczego#\n
literału zarówno dla#
nowej linii, jak i nowej linii (kod zawiera rzeczywistą nową linię zamiast sekwencji specjalnej). W ostatnim rzędzie następuje następnieX
w-1#
.Krótsze było zmniejszenie wartości wih podczas generacji sztuki ASCII, tak że końcowe obliczenia są proste
w+h
.źródło
JavaScript (ES6), 60 bajtów
Stosowanie
źródło
MATL ,
282625 bajtówEDYCJA (10 czerwca 2016 r.): Poniższy link zawiera modyfikację (
5L
zastępuje jąIL
), aby dostosować się do zmian w językuWypróbuj online!
Wyjaśnienie
źródło
Scala, 118 bajtów
źródło
Haskell, 64 bajty
Przykład użycia:
Jak to działa:
źródło
Java,
137132 bajtówźródło
Lua, 81 bajtów
Wypróbuj online!
Gra w golfa:
Nie golfowany:
źródło
Python, 48.
Aby go użyć, dodaj
f=
przed wierszem powyżej i nazwij go tak:Wynik:
źródło