Il gioco
Di recente, gran parte del mio tempo è stato occupato da un gioco avvincente sul mio telefono, chiamato Logic Dots, che mi ha ispirato a scrivere questa sfida. È più facile spiegare le regole se ti mostro la visualizzazione del gioco, quindi ecco uno screenshot di un puzzle irrisolto e risolto:

Ora qui, ci sono tre cose principali da notare.
- Il tabellone (la griglia 4x4 di quadrati al centro)
- Le forme richieste (i punti collegati nella seconda barra dall'alto, sotto il punteggio e il menu, ecc.), Che sono tutte linee o
adi 1 rettangolo - I numeri sopra le righe e le colonne, che indicano quanti punti devono essere presenti nella colonna, per una soluzione
L'obiettivo del gioco è quello di adattare le forme richieste alla griglia. Puoi ruotare le forme, ma non possono entrare in diagonale.
Nella soluzione, notare che tutte le forme vengono create esattamente una volta (perché sono solo nelle forme richieste una volta) e in questo caso sono tutte orizzontali ma possono anche essere verticali. I quadrati rosa riempiti indicano quadrati non utilizzati.
Ecco una griglia più grande e leggermente più complicata:

Nota che nel puzzle irrisolto, ci sono già alcuni quadrati riempiti. I quadrati in grigio indicano quadrati bloccati su cui NON PUOI posizionare un punto. I punti con la coda indicano che un punto si trova in quel punto e si collega ad almeno un altro punto nella direzione della coda, ma non in qualsiasi altra direzione (compresa la direzione opposta).
Notazione
Per il resto di questo post, farò riferimento alla lavagna usando i seguenti simboli:
- <,>, ^, v - Indica un punto pre-posizionato con una coda che si estende nella direzione del punto
- * - Indica un punto. Se indicato su una griglia non risolta (input), è una forma individuale. Se in uscita, è collegato ai punti circostanti.
- #: Indica un quadrato della griglia bloccato (dove non è possibile posizionare un punto)
- -, | (trattino e barra): indica un punto con una coda destra e una sinistra e un punto con una coda su e giù rispettivamente
- ** (carattere spazio) - ** Indica uno spazio vuoto
Utilizzando questi simboli, l'ultimo caso di esempio (non risolto) può essere rappresentato come segue:
<
#
^ #
E la soluzione può essere rappresentata come:
*< * *
*
*
* *
* *#*
^ # *
Nota che non è possibile toccare due forme orizzontalmente, verticalmente o diagonalmente , quindi il seguente caso non è valido:
***
**
**
Sfida
La tua sfida è risolvere qualsiasi puzzle di punti logici, da 4x4 a 9x9 inclusi. Riceverai quattro righe di input, quindi il tabellone. Le linee saranno le seguenti:
- 1a linea, Forme - Le forme da trovare, ognuna data nella forma
sizexquantity(ad es.3x2Per due forme di lunghezza tre) e separate da uno spazio. Riga di esempio:3x1 2x1 1x1 - 2nd line, Columns - Un elenco separato da spazi del conteggio dei punti richiesti per ogni colonna. Riga di esempio:
1 1 2 2 - 3a riga, Righe: un elenco separato da spazi del conteggio dei punti richiesti per ogni riga. Riga di esempio:
3 0 3 0 - 4a riga, Dimensione scheda - Un singolo numero intero, la dimensione della scheda,
B
Viene quindi data la scheda, ed è Blinee di input che rappresentano la scheda utilizzando la notazione sopra menzionata. Ad esempio, l'input completo per quest'ultimo caso di esempio è il seguente:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Il programma emetterà quindi la scheda risolta, nella stessa notazione. L'output corrispondente per l'input sopra è il seguente:
** * *
*
*
* *
* *#*
* # *
Nota che un tabellone di gioco può avere più soluzioni. In questo caso, emetti solo una soluzione valida. Inoltre, il programma deve produrre una soluzione corretta entro 10 secondi su un computer desktop ragionevole per una griglia 10x10 complicata.
Questo è il golf del codice, quindi vince meno byte.
Casi test
Ingresso 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Uscita 1
*** *
***#
#
* * *
Ingresso 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Uscita 2
* * *
*
* *
* #
* *
Ingresso 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Uscita 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally(questo dovrebbe essere all'inizio, non perso quasi alla fine, ma comunque ...)