Gdzie jest strzałka?
W tym wyzwaniu Twoim celem jest podążanie za strzałką i generowanie postaci, na którą wskazuje.
Przykłady
Wkład:
d S------+ b
|
|
c +--->a
Wydajność: a
Wkład:
S-----+---a->c
|
V
b
Wydajność: b
Strzała nie wskazuje, c
ponieważ jest podzielona przez a
, co oznacza, że ta ścieżka nigdy nie prowadzi do główki strzały.
Wkład:
a S s
| |
V V
b c
Wydajność: b
Wkład:
d s<+S+--V
||| Q
-++
Wydajność: Q
Ta ścieżka zaczyna się od S
, idzie w dół, w prawo, idzie w górę, w prawo, a następnie wskazuje w dół na Q. Zauważ, że ścieżka nie prowadzi prosto od S
do +
.
Wkład:
d s-+ +-S +--+
+-->b | | |
| | +--+ |
+--+ A<----+
Wydajność: A
Wkład:
S-----+
| +-^
+---+->B
+---^
Wydajność: B
Ponieważ poprawna linia nigdy nie będzie prowadzić do spacji. Jedyna linia, która nie prowadzi do białych znaków, prowadzi doB
Wyzwanie
Dane wejściowe będą ciągiem zawierającym wiele wierszy, w którym musisz znaleźć znak, na który wskazuje strzałka. Będzie tylko jedna poprawna strzałka. Prawidłowa strzałka wskazuje tylko znaki alfanumeryczne, z wyłączeniem S
. Linia nigdy się nie pokryje. na przykład-|-
S
(kapitał) wskazuje, gdzie zaczyna się strzałka.-
reprezentuje linię poziomą+
oznacza możliwą zmianę osi. Prawidłowa strzała nigdy nie zaczyna się od+
.|
reprezentuje linię pionową> < V ^
którekolwiek z nich przedstawiają strzałkę. Te nigdy nie połączą się z+
.
W ciągu będzie tylko jeden S
. Dane wejściowe zostaną również wypełnione, aby były prostokątem (niekoniecznie kwadratem).
S
.” Prawdopodobnie należy przeformułować na „To nigdy nie będzie pierwszy znak strzałki”. (PonieważQ
przykład ma+
sąsiadujące zS
.) „+
Reprezentuje zmianę osi”. może lepiej być „+
reprezentuje możliwą zmianę osi”. (PonieważB
przykład pokazuje, że możesz poruszać się+
bez zmiany kierunku.) W przeciwnym razie miłe wyzwanie. :)---^
? Innymi słowy, jeśli w przykładzie B B może pozostać w pierwszym rzędzie?S>a
ważny?Odpowiedzi:
JavaScript (ES6), 195
245 231 242 246 250Edit4 Teraz jedna funkcja rekurencyjna. Prawdopodobnie nie można więcej grać w golfa
Edycja3 Testuj linię prostą i test grotu scalonego w funkcji T, funkcje S i H. usunięte.
Edit2 poprawiona i już :( po to to wyjaśnienie
Edytuj Małe ulepszenia, odcinając trochę znaków tu i tam, czekając, aż CJammers wkroczy
Przetestuj poniższy fragment kodu w przeglądarce zgodnej z EcmaScript 6. (działa w przeglądarce Firefox. Chrome wciąż nie ma operatora rozprzestrzeniania
...
)źródło
JavaScript 2016,
264 263 249 240 235234 bajtówUruchom go w przeglądarce Firefox:
Rozproszone w niektórych moich notatkach:
źródło
o = 'indexOf'
a następnie robiąc,q[o](e)
kiedy chcesz go użyć.for(;;)
pętle są zwykle najbardziej wydajne. W tym przypadku może być źle, ale wypróbuj to.a<-+S->b
Myślę, że powinien daćb
tylko, ponieważ Prawidłowa strzałka nigdy nie rozpocznie się od +JavaScript 2016
(stiil poprawną i dobrą odpowiedź, nie ma z tym problemu)VBA Excel 2007, 894 bajtów
Cóż, zaczęło się o wiele lepiej, niż się skończyło. Mam wrażenie, że moja logika jest wadliwa i mógłbym zaoszczędzić tonę bajtów, jeśli zmieniłem porządek mojej logiki, ale zbyt wiele czasu zostało w to zatopione = P
Dane wejściowe to kolumna A dowolnego arkusza, na którym jesteś. Ta metoda wykorzystuje fakt, że Excel ma tę ładną siatkę i rozbija wszystko, aby lepiej widzieć, co robi.
Sub m()
po prostu bierze skopiowane wklejone dane z kolumny A i rozdziela je char. Jeśli zezwolimy na zmodyfikowane dane wejściowe, to jeśli wstępnie sformatujesz labirynt na 1 znak na komórkę, możesz zaoszczędzić kilka bajtów, usuwającsub m()
Wklej labirynt do Excela dowolnego rozmiaru do 99 wierszy o szerokości 27 znaków. Jeśli chcesz większych labiryntów, to tylko 2 dodatkowe bajty zwiększają zasięg do 999 wierszy i kolumn ZZ
Może także potrzebować wezwania sędziów do sprawdzenia, czy arkusz Excel jest prawidłowym „standardowym wejściem” dla odpowiedzi VBA. Jeśli nie, to prawie niemożliwe jest, aby VBA wprowadziło do wielu linii VIA okno Natychmiastowe
Aby uruchomić ten kod, po prostu wklej ten kod do modułu Excela, Wklej labirynt do A1 i uruchom
sub j()
źródło
Python 3, 349 bajtów
Ugh, tyle bajtów.
Essentially a breadth-first search. Bonus: this actually exits gracefully instead of using
exit()
, which is longer anyway.źródło
input()
? It's problematic for me.Perl 5
The solution turned out longer than other solutions.
Even after golfing it. So this is the ungolfed version.
It prints the map so that you can follow the cursor.
The way it works? At each step it puts possible moves on the stack. And it keeps on running till there's nothing left on the stack, or a solution is found.
It can be easily modified to find all solutions and choose the nearest --> while(@_){...
Test
źródło
PHP version (comments are french, sorry)
źródło
Haskell, 268 bytes
Congratulations to the Javascripters! Gave up the bounty, but here is what I got. May/Might not work in all cases, but actually handles arrows starting in and arrowheads conncting to
+
es, as far as I know. Didn't even include searching for theS
, is just(0,0)
for now.źródło
I would like to see an APL version in spirit of https://www.youtube.com/watch?v=a9xAKttWgP4
As a start, a vectorized Julia solution which I think can be translated 1:0.3 to APL or J. It takes a string R representing a L x K arrowgram. It first translates the matrix of symbols into a matrix of small 3x3 matrices whose patterns are the binary expansions of the letters of the string "\0\x18\fH\t]]\x1cI". For example '+' is encoded as reshape([0,digits(int(']'),2,8)],3,3)
In this representation, the path consists of 2's and gets flooded by 3's from the starting point.
To test,
By the way, I think the clause "Another + may be adjacent but the arrow should prioritize going on a - or | first." puts a vector approach at a disadvantage. Anyway, I just ignored it.
źródło