Diciamo che hai visto il tuo amico inserire la sua password nel proprio telefono Android. Non ricordi come hanno fatto il modello ma ricordi come appare il modello. Essendo l'amico preoccupato che sei, vuoi sapere quanto è sicura la loro password. Il tuo compito è calcolare tutti i modi in cui è possibile realizzare un modello particolare.
Come funzionano i modelli Android
I motivi sono disegnati su una griglia di nodi 3x3. In uno schema si visita una serie di nodi senza mai alzare il dito dallo schermo. Ogni nodo che visitano è collegato al nodo precedente da un bordo. Ci sono due regole da tenere a mente.
Non è possibile visitare alcun nodo più di una volta
Un bordo non può passare attraverso un nodo non visitato
Nota che, sebbene in genere sia molto difficile da eseguire e quindi non molto comune nelle combinazioni di blocchi Android reali, è possibile muoversi come un cavaliere . Cioè, è possibile spostarsi da un lato a un angolo non adiacente o viceversa. Ecco due esempi di modelli che utilizzano tale mossa:
Ecco una gif animata che viene eseguita.
Risolvere uno schema
Un modello tipico potrebbe assomigliare a questo:
Con un modello semplice come questo, ci sono due modi in cui due disegnano il modello. Puoi iniziare da una delle due estremità libere e viaggiare attraverso i nodi evidenziati verso l'altro. Mentre questo è vero per molti modelli, in particolare quelli che gli esseri umani impiegano in genere, questo non è vero per tutti i modelli.
Considera il seguente modello:
Esistono due soluzioni immediatamente riconoscibili. Uno a partire in alto a sinistra:
E uno a partire dal centro in basso:
Tuttavia, poiché una linea è autorizzata a passare attraverso un punto una volta che è già stata selezionata, esiste un motivo aggiuntivo che inizia in alto al centro:
Questo particolare modello ha 3 soluzioni ma i modelli possono avere ovunque tra 1 e 4 soluzioni [citazione necessaria] .
Ecco alcuni esempi di ciascuno:
1.
2.
3.
4.
I / O
Un nodo può essere rappresentato come numeri interi compresi tra zero e nove inclusi, i loro equivalenti di stringa o i caratteri da a a i (o da A a I). Ogni nodo deve avere una rappresentazione univoca da uno di questi set.
Una soluzione sarà rappresentata da un contenitore ordinato contenente le rappresentazioni dei nodi. I nodi devono essere ordinati nello stesso ordine in cui vengono passati.
Un modello sarà rappresentato da un contenitore non ordinato di coppie di nodi. Ogni coppia rappresenta un bordo che inizia collegando i due punti nella coppia. Le rappresentazioni dei motivi non sono uniche.
Prenderai una rappresentazione di pattern come input tramite metodi di input standard e otterrai tutte le possibili soluzioni che creano lo stesso pattern tramite metodi di output standard.
Puoi presumere che ogni input avrà almeno una soluzione e collegherà almeno 4 nodi.
Puoi scegliere di usare un contenitore ordinato al posto di uno non ordinato, se lo desideri o se sei costretto dalla selezione della lingua.
Casi test
Con i nodi disposti nel seguente schema:
0 1 2
3 4 5
6 7 8
Lascia che {...}
sia un contenitore non ordinato, [...]
sia un contenitore ordinato ed (...)
essere una coppia.
I seguenti ingressi e uscite devono corrispondere
{(1,4),(3,5),(5,8)} -> {[1,4,3,5,8]}
{(1,4),(3,4),(5,4),(8,5)} -> {[1,4,3,5,8]}
{(0,4),(4,5),(5,8),(7,8)} -> {[0,4,5,8,7],[7,8,5,4,0]}
{(0,2),(2,4),(4,7)} -> {[0,1,2,4,7],[1,0,2,4,7],[7,4,2,1,0]}
{(0,2),(2,6),(6,8)} -> {[0,1,2,4,6,7,8],[1,0,2,4,6,7,8],[8,7,6,4,2,1,0],[7,8,6,4,2,1,0]}
{(2,3),(3,7),(7,8)} -> {[2,3,7,8],[8,7,3,2]}
{(0,7),(1,2),(1,4),(2,7)} -> {[0,7,2,1,4],[4,1,2,7,0]}
{(0,4),(0,7),(1,3),(2,6),(2,8),(3,4),(5,7)} -> {[1,3,4,0,7,5,8,2,6]}
{(1,3),(5,8)} -> {}
Un album imgur di tutti i casi di test come immagini può essere trovato qui . I motivi sono in soluzioni blu in rosso.
punteggio
Questo è il codice golf. Vince il minor numero di byte.