Le caselle ASCII si presentano così:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Ecco alcuni esempi delle stesse caselle ASCII, implose:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Ecco un link a tutte queste caselle di test in un formato più facile da copiare. L'ordine è composto da tutti gli input seguiti da tutti gli output nello stesso ordine.
Il tuo obiettivo è prendere una casella ASCII come input e restituire la casella implosa. Le regole dell'implosione sono:
- "+" non cambia mai; né "-" o "|" direttamente adiacente a "+"
- A partire dagli angoli, il "-" e "|" spostarsi verso l'interno di uno spazio in più rispetto allo stesso personaggio più vicino all'angolo. Se un "-" e "|" si sposterebbe mai nello stesso punto, né si muove.
- Se un "-" e "-" si spostano nello stesso punto, metti un "=" in quel punto. Se un "|" e "|" spostati nello stesso punto, metti un "in quel punto. Questi contano come due dei loro rispettivi personaggi nello stesso punto muovendosi in direzioni opposte.
- Due "-" o due "|" possono spostarsi l'uno accanto all'altro, come mostrato nell'esempio in basso a sinistra.
- Se la scatola è abbastanza magra, inizierà a espandersi verso l'esterno allo stesso modo, allontanandosi sempre dal lato da cui è iniziata parte.
- Il risultato dovrebbe essere simmetrico lungo la linea centrale in entrambe le direzioni xey (ignorando le nuove linee); questo include gli spazi, quindi potrebbe essere necessario riempire il risultato di spazi per soddisfarlo.
Dettagli regola:
- Questo è code-golf, quindi vince il programma più breve in byte.
- Si applicano scappatoie standard.
- Puoi presumere che ogni riga termini con un carattere di nuova riga.
- Gli unici caratteri nella stringa di input saranno "+", "-", "|", "" e "\ n" (newline) e la stringa di output dovrebbe seguire le stesse regole, con l'aggiunta di "=" e "come possibili personaggi.
- Opzionalmente potresti avere una sola nuova riga finale alla fine dell'ultima riga.
- La casella ASCII più piccola che devi gestire è l'esempio in alto a sinistra. Ogni casella ASCII avrà esattamente 4 "+" s, esattamente ai suoi angoli.
- Dovrai gestire caselle di dimensioni
m x nper qualsiasi numero interom,ntale2<=m,n<256(la dimensione della stringa più grande possibile di255*(255+1)) - Puoi presumere che otterrai sempre una singola casella ASCII valida come input.
||in quell'esempio debba essere un "o qualcosa del genere ...
"? Immagino "che appaia solo su 3 di larghezza o superiore?
"? A sinistra o a destra? Non può essere entrambi, ma non può essere neanche perché il risultato è simmetrico.