Bulgarian Solitaire è un gioco per giocatore singolo reso popolare da Martin Gardner nella sua rubrica matematica in Scientific American .
Hai N
carte identiche, divise in pile. Prendi una carta da ogni pila e formi una nuova pila con le carte rimosse. Ripeti questo processo fino a raggiungere uno stato che hai già visto e quindi continuare ripetendo il ciclo.
Ad esempio, supponi di avere 8
carte, divise in una pila di 5
e una pila di 3
. Scriviamo le dimensioni pila in ordine decrescente: 5 3
. Ecco una trascrizione del gioco:
5 3
4 2 2
3 3 1 1
4 2 2
Per prima cosa rimuovi una carta da ciascuna delle due pile, lasciando pile di 4
e 2
, e una pila appena creata di 2
, dare 4 2 2
. Nel passaggio successivo, questi diminuiscono a 3 1 1
seguito con una nuova pila di 3
. Infine, l'ultimo passaggio svuota le pile di dimensioni 1
e produce ciò 4 2 2
che è già apparso, quindi ci fermiamo.
Si noti che la somma delle dimensioni della pila rimane invariata.
Il tuo obiettivo è stampare una tale trascrizione del gioco da una determinata configurazione iniziale. Questo è il golf del codice, quindi vince meno byte.
Ingresso
Un elenco di numeri positivi in ordine decrescente che rappresentano le dimensioni iniziali della pila. Accetta input tramite STDIN o input funzione. Puoi usare qualsiasi struttura simile a una lista che desideri.
Non ottieni il numero totale di carte N
come input.
Produzione
Stampa la sequenza delle dimensioni delle pile che attraversa il gioco del solitario bulgaro. Si noti che è richiesta la stampa, non di ritorno. Ogni passaggio dovrebbe essere la sua linea.
Ogni riga dovrebbe avere una sequenza di numeri positivi in ordine decrescente senza numeri 0
. Potresti avere separatori e token di inizio e fine (ad esempio, [3, 3, 1, 1]
). I numeri potrebbero avere più cifre, quindi dovrebbero essere separati in qualche modo.
Stampa le spaccature di dimensioni della pila che vedi fino a e compreso il raggiungimento di una ripetizione. Quindi, la prima riga dovrebbe essere l'input e l'ultima riga dovrebbe essere una ripetizione di una riga precedente. Non dovrebbero esserci altre ripetizioni.
Casi test
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$
conQ
. 2. Se si memorizza l'elenco in ordine decrescente, non è necessarioN
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q