Di recente ho ottenuto una nuova app Sudoku che produce Sudoku davvero difficili, che non possono essere risolti utilizzando le strategie standard. Quindi ho dovuto imparare alcuni nuovi. Una di queste strategie è la strategia Y-Wing . È classificato in "Strategie difficili", ma in realtà non è poi così difficile.
Esempio
Per questa strategia sono importanti solo 4 celle. Pertanto ho ignorato tutte le altre celle nelle immagini.
Guardiamo tutti i candidati per ogni cella. Nell'esempio seguente abbiamo una cella con i candidati 3 7(ciò significa che abbiamo già rifiutato i candidati 1 2 4 5 6 8 9, ad esempio perché è presente una 1stessa riga, una 2nella stessa casella 3x3, ...), una cella con i candidati 6 7, una cella con i candidati 3 6e una cella con i candidati 2 6. La strategia dell'ala Y suggerirà che il 6può essere rimosso dai candidati della cella vera e propria, lasciando solo un 2candidato, che puoi compilare. Quindi abbiamo trovato un numero corretto e siamo un passo avanti nella risoluzione del Sudoku completo.

Perché può 6essere rimosso?
Spiegazione
Supponiamo che 6sia il numero corretto per la cella vera e propria. Ora c'è un 6in questa colonna, quindi possiamo rimuovere il 6dai candidati della cella in alto a destra, lasciando solo un 7, che possiamo compilare. Lo stesso accade con la cella in basso a sinistra. Possiamo rimuovere 6e compilare il file 3. Ora se osserviamo la cella in alto a sinistra otteniamo una contraddizione. Perché ora c'è già un 7nella stessa riga e un 3nella stessa colonna, quindi possiamo rimuovere il 7e il 3dei candidati, senza lasciare alcun candidato. Ciò che chiaramente non è possibile. Pertanto il 6 non può essere il numero corretto della cella verticale.
Più precisamente: se abbiamo 4 celle con i candidati [A B] [A C] [C D] [B C](in questo ordine o ruotate circolarmente) e le celle sono collegate (tramite la stessa riga, la stessa colonna o la stessa casella 3x3) in un cerchio (la cella 1 è collegata alla cella 2, che è collegato alla cella 3, che è collegata alla cella 4, che è collegata alla cella 1), che è possibile rimuovere Cdalla [C D]cella. E 'fondamentale, che le tre celle [A B], [A C]e [B C]contengono solo due candidati ciascuno. Diversamente la cella [C D], che può contenere più o meno ( Dpuò essere zero, uno o anche più candidati).

Si noti che ho esplicitamente detto che possono essere collegati in entrambi i modi. Nel prossimo esempio puoi vedere di nuovo la strategia applicata. Ma questa volta le 4 celle non formano un rettangolo. Le celle verso il basso a sinistra e verso il basso sono semplicemente collegate, perché sono nella stessa scatola 3x3. Y-Wing dice che possiamo rimuovere il 1candidato della cella in alto a sinistra. Questa volta ci sono ancora 2 candidati in questa cella, quindi non abbiamo trovato un nuovo numero corretto. Tuttavia, la rimozione della 1lattina apre le porte a diverse strategie.

Se vuoi maggiori informazioni sulla strategia o vuoi qualche altro esempio, visita sudokuwiki.org .
Specifiche della sfida
Riceverai 4 liste come input, che rappresentano i candidati delle celle. Le quattro celle sono collegate come un cerchio (la cella 1 è collegata alla cella 2, che è collegata alla cella 3, che è collegata alla cella 4, che è collegata alla cella 1). Puoi presumere che ogni elenco sia ordinato in ordine crescente.
Il tuo compito è rimuovere un candidato (applicando la strategia Y-Wing) e restituendo le liste dei candidati risultanti nello stesso ordine. Se non riesci ad applicare la strategia, restituisci le stesse liste di candidati.
Se ci sono due possibili soluzioni (è possibile rimuovere A della cella B o rimuovere C della cella D), quindi restituire solo una soluzione. Non importa quale.
L'input può essere in qualsiasi elenco nativo o formato array. È inoltre possibile utilizzare un elenco di elenchi o qualcosa di simile. È possibile ricevere l'input tramite STDIN, argomento della riga di comando, argomento prompt o funzione e restituire l'output tramite il valore restituito o semplicemente stampando su STDOUT.
Questo è code-golf. Vince il codice più breve (in byte).
Casi test
[3 7] [6 7] [2 6] [3 6] => [3 7] [6 7] [2] [3 6] # Example 1
[6 7] [2 6] [3 6] [3 7] => [6 7] [2] [3 6] [3 7] # Example 1, different order
[2 6] [3 6] [3 7] [6 7] => [2] [3 6] [3 7] [6 7] # Example 1, different order
[3 6] [3 7] [6 7] [2 6] => [3 6] [3 7] [6 7] [2] # Example 1, different order
[1 2 8] [1 8] [8 9] [1 9] => [2 8] [1 8] [8 9] [1 9] # Example 2
[3 8] [4 8] [3 4 8] [3 4] => [3 8] [4 8] [3 8] [3 4]
[1 3 6 7 8] [3 8] [3 4] [4 8] => [1 3 6 7] [3 8] [3 4] [4 8]
[7 8] [7 8] [4 7] [4 8] => [7 8] [8] [4 7] [4 8] or [7] [7 8] [4 7] [4 8]
[4 7] [7 8] [4 8] [4] => [4 7] [7 8] [4 8] [] # Fictional example
[3 7] [2 6] [6 7] [3 6] => [3 7] [2 6] [6 7] [3 6] # Y-Wing can't be applied here
[4 7] [2 7 8] [4 8] [1 4] => [4 7] [2 7 8] [4 8] [1 4] # -||-
7 8sono i candidati per la prima e la seconda cella. La strategia dell'ala Y può ancora essere applicata.