Drunkard's Journey Home
W tym wyzwaniu masz napisać program, który symuluje pijaka potykającego się z baru do domu.
Wkład:
Dane wejściowe będzie macierzą przyległości (reprezentującą skierowany wykres), która reprezentuje ścieżki, którymi może podążać pijak. W każdej lokalizacji pijak wybiera losowo jedną ścieżkę (każda opcja ma w przybliżeniu jednakową szansę i jest niezależna od wcześniejszych wyborów), którą należy podążać.
Załóż, że pijak zawsze zaczyna się od paska (pierwszy rząd w macierzy przylegania).
Jeśli pijak wejdzie w ślepy zaułek, można założyć, że albo udał się do domu, albo został aresztowany za publiczne zatrucie, a program powinien powrócić.
Można założyć, że wykres zawsze będzie zawierał przynajmniej jeden ślepy zaułek.
Można również założyć, że pijak zawsze będzie mógł wyjść z paska (pierwszy rząd nie będzie wszystkich zer) i że jeśli pijak utknie w miejscu, rząd będzie reprezentowany przez wszystkie zera.
Wydajność:
Wynikiem będzie ścieżka, którą pijak podjął, próbując wrócić do domu. Wartości lokalizacji mogą być zerowe lub zindeksowane.
Przykłady:
Input
[1,0,1,1]
[0,0,0,0]
[1,0,0,0]
[1,1,1,1]
Possible Outputs
[0,2,0,3,2,0,0,3,1]
[0,3,0,3,1]
Input
[0,1,1,1,0,1]
[1,0,1,0,1,1]
[0,0,0,0,0,0]
[0,0,0,0,0,1]
[1,0,0,0,0,0]
[0,0,0,0,0,0]
Possible outputs
[0,1,5]
[0,5]
[0,1,4,0,2]
[0,3,5]
[0,3,0,1,4,0,5]
Deterministic path:
Input
[0,0,1,0]
[0,0,0,1]
[0,1,0,0]
[0,0,0,0]
Output
[0,2,1,3]
źródło
[ '1011', '0000', '1000', '1111' ]
?i
ze wszystkimi zerami oprócz kolumnyi
?0
linki do1,2,3,5
, ale ostatni wyjściowa idzie od0
do4
Odpowiedzi:
Mathematica, 72 bajty
Ta funkcja przyjmuje macierz jako argument i zwraca listę i wykorzystuje indeksowanie 1.
Podstawową ideą jest zacząć
która wielokrotnie stosuje regułę, która następuje po liście,
{1}
aż przestanie się zmieniać. Reguła pasuje do wzorcaco oznacza „listę zawierającą zero lub więcej wywoływanych elementów,
r
po których następuje element o nazwiex
”. Daje tox
jako ostatni element na bieżącej liście, a my zastępujemy listęktóra jest oryginalną listą z
<stuff>
dołączonym. Chodzi o toktóry przyjmuje
#[[x]]
(x
th element macierzy wejściowej) jako listę wag i odwzorowuje jen++&/@#
, co jest skrótemRange@Length@#
(tj.{1,2,3,...}
o odpowiedniej długości). Spowoduje to błąd, jeśli wszystkie odważniki są zerowe, dlatego jest zawinięte w aktóry zwróci,
##&[]
jeśli zostanie wygenerowany komunikat o błędzie. To tylko fantazyjny sposób pisaniaSequence[]
, który działa jako element „nic” ({1,2,Sequence[],3}
ocenia na{1,2,3}
) i dlatego pozostawia listę bez zmian, powodując, że//.
przestaje się zamieniać.źródło
R ,
726966 bajtówWypróbuj online!
Pobiera dane wejściowe jako
logical
macierz i drukuje na konsoli indeksy oparte na 1.źródło
Perl 5
-a0
,5351 bajtówPodaj macierz wejściową jako osobne ciasne łańcuchy w STDIN
Wypróbuj online!
Uszkodzenia
@F
w korpusie pętli, ale zostają naprawione przezredo
źródło
MATL , 15 bajtów
Wyjście jest oparte na 1.
Wypróbuj online! Pierwsze wejście . Drugie wejście . Trzecie wejście .
Wyjaśnienie
źródło
Perl 6 , 38 bajtów
Wypróbuj online!
źródło
Python, 136 bajtów
Przy użyciu zerowego indeksowania, zakładając, że randrange został zaimportowany. Przyjmuje dane wejściowe m jako macierz przylegania
113 brak importu
s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],randrange(len(m)))or s(m,c,p,randrange(len(m))))or p
136 z importem
import random as r;s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],r.randrange(len(m)))or s(m,c,p,r.randrange(len(m))))or p
źródło
Rubinowy ,
70 6765 bajtówDzięki benj2240 za oszczędność 2 bajtów!
Wypróbuj online!
źródło
m[i].sum<1?:[]
.sum
został wprowadzony w wersji 2.4. Robiłem.reduce(0, :+)
...JavaScript (ES6), 87 bajtów
Wypróbuj online!
Wersja alternatywna, 81 bajtów
Pobiera dane wejściowe jako tablicę ciągów binarnych. Maksymalny obsługiwany rozmiar to 16 x 16.
Wypróbuj online!
źródło
Java 10, 135 bajtów
0-indeksowane
Wyjaśnienie:
Wypróbuj online.
źródło
Haskell ,
123118 bajtówWypróbuj online!
źródło
APL (Dyalog Unicode) , 32
34bajtyWypróbuj online!
Pobiera zagnieżdżoną tablicę binarną jako dane wejściowe. Wyświetla każdą iterację w osobnych wierszach.
źródło
Pyton ,
9794 bajtyWypróbuj online!
Zobacz tę odpowiedź, aby uzyskać więcej wyjaśnień na temat generatora liczb losowych:
źródło