Dyalog APL, 27 personaggi
⊃⌽∨.∧⍨⍣≡1≥+/¨|∘.-⍨,(~×⍳∘⍴)⎕
⎕input valutato. APL distingue tra una matrice e un vettore di vettori. Questo programma presuppone che l'ingresso sia una matrice.
(~×⍳∘⍴)Aè un fork equivalente a (~A) × ⍳⍴A. È necessario per evitare di menzionare ⎕due volte o introdurre una variabile.
⍴Aè la forma di A. Per una matrice 4 per 7 la forma è 4 7.
⍳è il generatore di indice. ⍳4lo è 1 2 3 4. ⍳4 7sono i vettori (1 1)(1 2)...(4 7)disposti in una matrice 4 per 7.
~Alancia i bit di A.
×moltiplicando ⍳⍴Aper i bit capovolti, conserviamo le coordinate di tutte le celle libere e trasformiamo tutte le pareti in 0 0.
,ravviva la matrice delle coppie di coordinate, cioè la linearizza in un vettore. In questo caso il vettore sarà composto da coppie.
∘.-⍨Ao A∘.-Asottrae gli elementi di Apairwise. Si noti che qui gli elementi di Asono essi stessi coppie.
| valore assoluto
+/¨somma ogni coppia di valori assoluti. Questo ci dà le distanze della griglia tra ogni coppia di celle nel labirinto, tranne che per i muri.
1≥siamo interessati solo nei vicini a una distanza non superiore a 1, questo esclude anche i muri. Ora abbiamo una matrice di adiacenza di un grafico.
∨.∧⍨⍣≡ Floyd - L'algoritmo di chiusura transitiva di Warshall
(f⍣n)A(non utilizzato qui) dove nè un numero intero è l'operatore di potenza. Essa si applica fa A nvolte: f f ... f A.
(f⍣g)Adove gè una funzione, è l'operatore punto fisso, noto anche come "limite di potenza". Continua a calcolare la serie A, f A, f f A, ... fino a quando ((f⍣i)A) g ((f⍣(i+1))A)ritorna vero per alcuni i. In questo caso usiamo match ( ≡) come g.
∨.∧⍨Ao A∨.∧Aè un passo nell'algoritmo di Floyd. f.gè una generalizzazione della moltiplicazione di matrici ( +.×), qui usiamo congiunzione ( ∧) e disjunction ( ∨) al posto di +e ×.
⊃⌽ Dopo ⍣≡aver applicato il passaggio abbastanza volte e raggiunto uno stato stabile, dobbiamo cercare l'angolo in alto a destra della matrice per ottenere il risultato, quindi capovolgilo ( ⌽) e prendiamo il primo elemento in alto a sinistra ( ⊃).
Visualizzazione dei ⍣≡passi