Twój program musi wziąć ciąg z wieloma liniami, taki jak ten:
#############
# #
# p #
# #
#############
p
jest graczem i #
jest blokiem.
Teraz pod terminalem powinien znajdować się wiersz wejściowy z napisem:
How do you want to move?
Jeśli typ gracza l
musi iść w lewo, gdy nie ma bloku, inaczej, gdy jest blok, nie może przejść i oczywiście się nie porusza, teraz wyjście w terminalu musi zostać zaktualizowane ( a poprzednie dane wyjściowe zostały wyczyszczone / zastąpione):
#############
# #
# p #
# #
#############
Może pisać l
w lewo, r
w prawo, u
w górę i d
w dół.
Dane wejściowe zawsze będą wielowierszowe, ale nie zawsze będą wypełnione spacjami w idealny prostokąt. Ponadto skróty mogą znajdować się w dowolnym miejscu ciągu i nie zawsze będą ze sobą połączone. Na przykład:
## ##
# #
## p
#
jest ważnym lochiem. (zwróć uwagę na brak spacji końcowych w każdej linii)
Jeśli gracz wyjdzie poza ciąg, nie musi być wyświetlany. Ale jeśli wróci później, musi zostać ponownie wyświetlony.
I granice „na zewnątrz” struny są length(longest_line)
przez number_of_lines
prostokąta, więc nawet jeśli jedna linia nie jest spacjami z prawej strony, że lokalizacja nie jest uznawany poza granicami. Przykład użycia wcześniejszego lochu:
## ##
# #p
##
#
Druga linia nie miała spacji, w której znajduje się teraz p, ale to nie ma znaczenia.
Wreszcie twój program musi zapętlać się na zawsze, przyjmując dane wejściowe.
Przypadki testowe
Przypadek testowy 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Przypadek testowy 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Oczywiście nie są one kompletne. Twój kod powinien zapętlać się w nieskończoność i czyścić ekran między każdym wyjściem .
Twój wynik może pytać o dane wejściowe jako How do you want to move?\n<input>
lub How do you want to move?<input>
(tj. Nie potrzebujesz danych wejściowych w pustej linii) i nie potrzebujesz pustej linii między ostatnią linią lochu a pytaniem. (nie mogą być na tej samej linii)
Standardowe luki są niedozwolone! To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach!
l
,r
,u
, lubd
) może być cokolwiek, a nie tylko „Jak chcesz przenieść”? To naprawdę nie wpływa na odpowiedzi, z wyjątkiem golfisty.Odpowiedzi:
MATLAB,
268247246 bajtówPrawdopodobnie nie konkurencyjny, ale było fajnie. Wersja golfowa:
Wersja do odczytu:
Te
try
bloki są, aby zapobiec funkcję z upaść na poza granicami błędów. Jestem pewien, że dwa z nich to przesada, ale nie mogę pograć w golfa lepiej.Warto zauważyć, że MATLAB rozszerzy tablicę w dół i w prawo, ale gracz zniknie, gdy po raz pierwszy przejdzie do „niezbadanego” obszaru. Na przykład, jeśli przejdziesz poza bieżące granice lochu w prawo o jedną spację, znikniesz, ale w następnej turze MATLAB rozszerzy tablicę o nową kolumnę (lub rząd, jeśli poruszasz się w dół).
'#'==d(y,x)
oszczędza bajt w porównaniu dod(y,x)=='#'
, ponieważ nie potrzebujesz spacji międzyif
i'#'
źródło
Skrypt kawy: 580 bajtów
Wycisnąłem wszystko, co mogłem, z tego konkretnego algorytmu i mojego zmęczonego mózgu. Potrzebuję wakacji.
źródło