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 yH
su 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
O
pezzo 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; ^)