Bulgarian Solitaire è un gioco per giocatore singolo reso popolare da Martin Gardner nella sua rubrica matematica in Scientific American .
Hai Ncarte 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 8carte, divise in una pila di 5e 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 4e 2, e una pila appena creata di 2, dare 4 2 2. Nel passaggio successivo, questi diminuiscono a 3 1 1seguito con una nuova pila di 3. Infine, l'ultimo passaggio svuota le pile di dimensioni 1e produce ciò 4 2 2che è 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 Ncome 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