Parole chiave descrittive (per la ricerca): Rendi equivalenti due matrici, Sovrapponi, Matrice, Trova
Sfida
Babbo Natale ha avuto una storia di elfi che hanno rubato regali dalla sua volta in passato, quindi quest'anno ha progettato una serratura che è molto difficile da decifrare, e sembra che abbia tenuto fuori gli elfi quest'anno. Sfortunatamente, ha perso la combinazione e non riesce nemmeno a capire come aprirla! Fortunatamente, ti ha assunto per scrivere un programma per trovare la combinazione. Non deve essere il più corto, ma deve trovarlo il più velocemente possibile!
Ha un programma molto rigido e non può permettersi di aspettare molto a lungo. Il tuo punteggio sarà il tempo di esecuzione totale del tuo programma moltiplicato per il numero di passaggi emessi dal tuo programma per l'input del punteggio. Il punteggio più basso vince.
specificazioni
Il lucchetto è una matrice quadrata di 1 e 0 secondi. È impostato su una disposizione casuale di 1 e 0 e deve essere impostato su un codice specificato. Fortunatamente, Babbo Natale ricorda il codice richiesto.
Ci sono alcuni passaggi che può eseguire. Ogni passaggio può essere eseguito su qualsiasi sott matrice secondaria contigua (vale a dire, è necessario selezionare una matrice secondaria interamente delimitata da un angolo superiore sinistro e inferiore destro) (può essere una matrice secondaria non quadrata):
- Ruota a destra di 90 gradi *
- Ruota a sinistra di 90 gradi *
- Ruota di 180 gradi
- Scorri ogni
n
elemento di riga a destra o a sinistra (avvolge) - Scorri gli
m
elementi di ogni colonna verso l'alto o verso il basso (avvolge) - Capovolgi orizzontalmente
- Capovolgi verticalmente
- Capovolgi sulla diagonale principale *
- Capovolgi l'anti-diagonale principale
* solo se la matrice secondaria è quadrata
Naturalmente, può anche eseguire questi passaggi sull'intera matrice. Dato che 1 e 0 possono essere scambiati solo sulla matrice ma il valore di un quadrato non può essere modificato direttamente, il numero di 1 e 0 è lo stesso per la configurazione iniziale e finale.
Formattazione di specifiche + regole
Ti verrà dato l'input come due matrici quadrate (posizione iniziale e posizione finale) in qualsiasi formato ragionevole tu voglia. L'output dovrebbe essere una sequenza di questi passaggi in qualsiasi formato leggibile. Poiché non si tratta di code-golf, rendilo un formato facilmente verificabile, ma non è un requisito rigoroso. Se lo desideri, puoi scegliere di prendere la lunghezza laterale delle matrici nell'input.
Il tuo programma verrà eseguito sul mio computer (Linux Mint, dettagli esatti della versione disponibili su richiesta se a qualcuno interessa: P) e lo farò in base al periodo di tempo che intercorre tra il momento in cui premo "invio" sulla riga di comando e quando il il comando termina.
Casi test
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Prendi l'intera matrice. Scorri verso l'alto ogni colonna 1.
- Prendi le due colonne centrali come sotto-matrice. Scorri verso il basso ogni colonna 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Prendi l'intera matrice. Scorri verso il basso ogni colonna 1.
- Prendi la colonna centrale. Abbassalo 2.
- Prendi le prime 2 file. Capovolgi verticalmente.
- Prendi i 2 elementi più a destra della riga superiore. Scambiali (ruota a destra / a sinistra 1, capovolgi orizzontalmente).
- Prendi i 2 elementi più a sinistra della riga superiore. Scambiali.
Potrebbero esserci metodi più efficienti, ma non importa. Sentiti libero di segnalarli nei commenti se ne trovi uno :)
Giudicare il caso di prova
Questo caso di test verrà utilizzato per giudicare la tua richiesta. Se credo che una risposta sia troppo specializzata per il caso di test, ho il diritto di ripetere un input casuale e di giudicare tutte le risposte con il nuovo caso. Il caso di test può essere trovato qui dove la parte superiore è l'inizio e la parte inferiore è la configurazione desiderata.
Se credo che le risposte si stiano specializzando troppo, l'MD5 del prossimo caso di test lo è 3c1007ebd4ea7f0a2a1f0254af204eed
. (Questo è scritto qui in questo momento per liberarmi dalle accuse di barare: P)
Si applicano scappatoie standard. Nessuna risposta sarà accettata. Buona programmazione!
Nota: ho tratto ispirazione per questa serie di sfide da Advent Of Code . Non ho affiliazione con questo sito
Puoi vedere un elenco di tutte le sfide della serie guardando la sezione "Linked" della prima sfida qui .
0
'e 641
' e ci sono256 choose 64 ≈ 1.9 × 10⁶¹
matrici raggiungibili totali . (che è paragonabile a una Megaminx, ed è più grande di una vendetta di Rubik, anche se molto meno di un cubo di un professore)