L'altro giorno, il nostro team è andato in una stanza di fuga. Uno dei puzzle riguardava una scheda di sei interruttori meccanici in cui dovevi trovare la corretta combinazione di accensione e spegnimento per sbloccare una scatola, un po 'così:
-v-v-v-
-v-v-v-
Essendo sviluppatori, abbiamo deciso che sarebbe stato più efficiente provare ciascuna delle combinazioni 2 ^ 6 = 64 che risolvere effettivamente il puzzle. Quindi abbiamo incaricato un poveraccio di fare un conteggio binario:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
e così via.
La sfida
Scrivere un programma che, dati tutti gli interruttori in posizione off come una stringa formattata come sopra, genera tutte le combinazioni di on e off in qualsiasi ordine.
È possibile scrivere un programma completo o una funzione. Pertanto, il programma può accettare input tramite stdin, un file o come singolo argomento stringa e restituire o stampare l'output. Se restituito, l'output potrebbe trovarsi in un elenco / array / ecc. piuttosto che una singola stringa. Se l'output è una singola stringa, le schede dovrebbero essere separate da newline (sono consentite le newline finali).
Le stringhe di input corrisponderanno al regex r'((-v)+-)(\n(-v)+-)*'
e rappresenteranno una scheda con tutti gli interruttori spenti. Ciò significa che non è presente alcun caso zero e che gli interruttori sono allineati a sinistra. Ogni riga potrebbe non avere lo stesso numero di switch.
Ogni scheda di output deve avere lo stesso identico formato dell'input, tranne per il fatto che le v possono essere sostituite da ^ come richiesto. Le schede di output possono essere separate da un numero qualsiasi di newline.
Poiché il runtime è naturalmente O (2 ^ n) nel numero di switch, il tuo codice non verrà testato su più di 10 switch in nessuna disposizione.
Questo è code-golf, quindi vince il codice più breve nel numero di byte.
Ingressi e uscite di esempio
Ingresso:
-v-
Uscita possibile:
-v-
-^-
Ingresso:
-v-
-v-
Uscita possibile:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
Dal momento che è estremamente noioso controllare la tua risposta per un numero maggiore di switch, ecco uno script Python come strumento di controllo di integrità. (Ho incluso uno snippet attualmente commentato per generare l'output previsto da un determinato file di input nel caso in cui desideri più casi di test.) Purtroppo è un po 'meno flessibile in termini di input e output rispetto alle specifiche; metti la stringa di input in un file chiamato 'input' e l'output separato da newline (scusa, nessuna formattazione dell'elenco) in un file chiamato 'output' nella stessa directory ed esegui python3 sanitycheck.py
.