Introduzione:
Quando pensiamo alle coccinelle, di solito pensiamo a un insetto rosso o arancione scuro con macchie nere. Anche se questo non è necessariamente vero, dal momento che ci sono anche neri con coccinelle rosse / arancioni o coccinelle senza macchie , principalmente immaginiamo coccinelle qualcosa come questa coccinella asiatica:
Un'altra cosa da notare è che le macchie sulle coccinelle sono quasi sempre simmetriche. Ed è qui che arriva questa sfida.
Sfida:
Dato un numero intero n( >= 0), emette una o più volte la seguente coccinella di arte ASCII, con punti simmetrici divisi uniformemente tra i due lati, così come le due o più coccinelle.
Ecco il layout predefinito della coccinella:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Se n=0, abbiamo emesso la coccinella sopra com'è.
Quando nè maggiore di zero, riempiamo gli spazi del bug di arte ASCII con una lettera minuscola oo sostituiamo |il centro con una maiuscola O. L'obiettivo è faren modifiche alle coccinelle 'vuote', pur producendo un risultato simmetrico (per coccinella) e producendo il minor numero possibile di coccinelle.
Quindi gli output validi per n=1sono:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Ma questo non sarebbe valido:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Le uscite valide per n=2sono:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Il primo nche non è più possibile inserire in una singola coccinella è n=24. Nel qual caso dovrai dividerlo il più uniformemente possibile in due coccinelle (puoi scegliere se riprodurle una accanto all'altra o una sotto l'altra - opzionalmente con uno spazio o una nuova riga tra di loro). Per esempio:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
O:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Regole della sfida:
nsarà nella gamma di0-1000.- È possibile scegliere di eseguire l'output su STDOUT, tornare come stringa o array / elenco di caratteri 2D, ecc. La chiamata.
- Non sono consentite nuove righe o spazi bianchi non necessari. Sono consentiti spazi vuoti finali e una sola nuova riga finale.
- Come accennato in precedenza, quando sono necessarie due o più coccinelle, è possibile scegliere se riprodurle una accanto all'altra o una sotto l'altra (o una combinazione di entrambe ..)
- Quando due o più coccinelle sono stampate una accanto all'altra, è consentito un solo spazio opzionale in mezzo. Quando due o più coccinelle sono stampate l'una sull'altra, è consentita una singola nuova riga opzionale in mezzo.
- Puoi scegliere il layout delle coccinelle in qualsiasi momento della sequenza, purché simmetriche e uguali all'input
n. - Poiché l'obiettivo è quello di avere
ncambiamenti E il minor numero possibile di coccinelle, inizierai a utilizzare più di una coccinella quando sopran=23. Il layout di queste coccinelle non deve necessariamente essere lo stesso. In realtà, questo non è nemmeno possibile per alcuni input, comen=25on=50per nominarne due. - Inoltre, a volte non è possibile dividere uniformemente i punti tra due o più coccinelle. In tal caso dovrai dividerli il più uniformemente possibile, con al massimo una differenza di 1 tra di loro.
Quindi n=50, tenendo a mente le ultime due regole, questo sarebbe un output possibile valido (dove il primo bug ha 16 punti e gli altri due ne hanno 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice.
- Inoltre, si prega di aggiungere una spiegazione, se necessario.
oe Oinvece. Ho cambiato un po 'le parole.
n=50esempio, credo che tu intenda che il primo bug ha 16 punti e gli altri due ciascuno 17.


Iniziamo inizializzando la nuova riga e il
Quindi leggiamo il numero di punti da stdin e calcoliamo il numero di coccinelle richieste.
Possiamo quindi avviare il ciclo esterno per l'insieme di bug, calcolando il numero di punti per il rendering della coccinella successiva.
Per ogni coccinella, calcoliamo se deve essere mostrato (se
Allo stesso modo, calcoliamo se è necessario mostrare (se
La parte finale dell'inizializzazione della tabella di ricerca è un ciclo che calcola quale dei piccoli punti deve essere visualizzato. In sostanza l'algoritmo è: if
Quindi spingiamo la rappresentazione di stringa codificata della coccinella sullo stack. Questa è essenzialmente solo una semplice stringa, ma è diventata un po 'contorta mentre cercavo di comprimerla negli spazi del codice in modo che l'origine formasse un rettangolo.
A questo punto, siamo pronti per iniziare il ciclo di output, elaborando i caratteri uno per uno, convertendo i casi speciali (punti, interruzioni di riga, ecc.) Tramite la tabella di ricerca precedentemente costruita.
Infine controlliamo se abbiamo visualizzato tutte le coccinelle richieste, altrimenti torniamo all'inizio del ciclo esterno.