Questa domanda è ispirata alla domanda di Kevin Cruijssen .
Ora che il tappeto è steso, vogliamo arrotolarlo. Il tuo compito è scrivere un programma che prende una stringa e restituisce una spirale fatta da questa stringa (che rappresenta un tappeto arrotolato visto di lato).
La procedura per un passaggio del tappeto è la seguente. C'è un esempio per illustrare cosa intendo. Si noti che l'esempio inizia con un tappeto parzialmente arrotolato per una migliore comprensione:
ac
rpet
- separare la "testa" dalla "coda" del tappeto: la testa è ciò che è stato rotolato finora, la coda è ciò che resta da rotolare.
Head: ac Tail:
rp et
- Ruota la testa di 90 °, in senso orario.
Rotated head: ra Tail (unchanged):
pc et
- se la larghezza della nuova testa (qui
2) è inferiore o uguale alla lunghezza della coda (qui2)- quindi, mettilo sopra la coda
- altrimenti, il tappeto (com'era all'inizio del gradino) è stato arrotolato
New carpet: ra
pc
et
Ripeti la procedura tutte le volte che è necessario.
Due esempi che mostrano tutti i passaggi del rotolamento del tappeto:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
Alcune precisazioni:
- Non è necessario mostrare tutti i passaggi intermedi, solo il tappeto arrotolato (ad es. Se si trova un modo non iterativo per calcolare il risultato, è perfetto). Inoltre, non è necessario stampare spazi bianchi iniziali, negli esempi sopra, li mostro solo per allineare le cose.
- L'input è una stringa, un elenco / matrice di caratteri
- L'output viene stampato su stdout o su un file.
- L'input è buono: la lunghezza è di almeno 1 carattere e al massimo una costante sufficientemente piccola da non causare problemi, ma non è possibile utilizzare quella costante nel programma; il contenuto della stringa è costituito solo da simpatici caratteri ([a-zA-Z0-9]), codificabili secondo le proprie preferenze.
- 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.
- Le scappatoie predefinite sono vietate.
- Se possibile, aggiungi un link con un test per il tuo codice.
- Inoltre, aggiungi una spiegazione per la tua risposta se ritieni che sia necessaria.
ProgrammingPuzzlesAndCodeGolf- la lunghezza finale della coda maggiore di 1 mi ha fatto inciampare.
printall'interno di a lambda.