Tetris mi piace molto, ma non sono molto bravo. Solo una volta mi piacerebbe vedere quell'astronave decollare davanti ai miei occhi! E dato che i computer sono davvero fantastici in tutto, l'unica soluzione possibile è creare un programma per riprodurlo per me ... tranne per il fatto che farai quel qualcosa per me!
Dato un tetromino (forma composta da quattro quadrati) e una mappa del campo di gioco, devi posizionare il tetromino in modo tale da segnare il maggior numero di linee (rende il maggior numero di righe completamente pieno di blocchi) e crea il minor numero di nuovi buchi (uno spazio vuoto che non può "vedere" la parte superiore del campo di gioco 1 ).
Ingresso
L'input conterrà un carattere su una sola riga che rappresenta il tetromino in caduta, seguito da una griglia 10 * 18 2 di spazi ( ) e segni più ( +).
Il personaggio rappresenta uno dei sette tetromini base trovati in Tetris. Tutti i pezzi possono essere ruotati di 90 gradi, ma non capovolti. Tutti i tetromini e le loro rotazioni sono i seguenti:
#
S = ## ##
## #
#
Z = ## ##
## #
# ### ##
L = # # # #
## # ###
# ### ##
J = # # # #
## # ###
# # #
T = ### ## ### ##
# # #
O = ##
##
#
I = # ####
#
#
La griglia rappresenta il campo di gioco di Tetris, con +blocchi precedentemente posizionati. Pertanto, un input di esempio potrebbe essere il seguente:
I
+ ++
+ +++++
++ +++++++
++ +++++++
++ +++++++
++ +++++++
++++++ +++
Produzione
L'output sarà identico all'input, ma con il tetromino nella posizione ideale. Il tetromino dovrebbe essere rappresentato con #per differenziarli dai blocchi pre-posizionati. Inoltre, devi anche generare quante linee / buchi crea il posizionamento nel modulo xL yHsu una nuova linea.
L'output dell'esempio sopra riportato sarebbe il seguente 3 :
I
+ ++
+ +++++
++#+++++++
++#+++++++
++#+++++++
++#+++++++
++++++ +++
4L 0H
Devi produrre solo i migliori risultati; nel caso in cui due o più casi forniscano lo stesso punteggio, devi emetterli tutti (separati da una riga vuota). I risultati migliori devono essere determinati ordinando prima il numero di linee segnate (in ordine decrescente), quindi il numero di nuove buche create (in ordine crescente). Quindi, 1L 1Hè un punteggio migliore di 0L 0H.
Lavorerò sulla creazione di un elenco di vari input e output previsti su cui è possibile testare il programma. Guarda questo spazio.
Regole e chiarimento delle ambiguità
- Questo è code-golf , quindi vince l'implementazione corretta più breve.
- L'input / output può essere su qualsiasi supporto adatto alla lingua di destinazione (ad es. File, stdin / stdout, area di testo).
- Se la tua lingua di destinazione non supporta l'immissione di più righe (o è scomodo farlo), puoi invece delimitare ciascuna riga dell'input con virgole (
,). - È possibile omettere l'output di eventuali righe vuote nella griglia.
- Ricorda che il tetromino cade dall'alto: non puoi posizionare il pezzo "sottoterra". Si può quindi presumere che tutti i possibili posizionamenti del pezzo saranno a "livello di superficie" (cioè non ci sono blocchi tra il pezzo e la parte superiore della tavola).
- Supponi che non ci sarà mai una situazione in cui sei costretto a una partita (il tetromino piazzato tocca il centro del campo).
- Le soluzioni identiche nell'output devono essere omesse (ad es. Ci sono 3 output di soluzioni se si ruota il
Opezzo in modo ingenuo ).
1 Sono consapevole che ciò creerà alcuni falsi positivi, ma è una semplificazione.
2 Questa è la dimensione della griglia utilizzata nella versione Game Boy.
3 Sì, 0Hè corretto. Ricontrolla, ho detto nuovi buchi; ^)