(Ispirato abbastanza pesantemente da questa sfida )
Nella sfida originale dovevi creare una cerniera orizzontale, tuttavia, guardando la mia felpa con cappuccio, la mia cerniera è molto più verticale (e un po 'rotta): P
Ingresso
Ti verrà data una singola stringa ( s) e una coppia di numeri interi ( ae b) in qualsiasi formato. Dove:
a < (length-of-s / 2)
b <= ((length-of-s / 2) - (a + 1)) / 6
Output e punteggio
Il tuo programma può essere un programma completo o una funzione che produce una singola stringa con la formattazione corretta o un array (un elemento per riga) che scegli. Spazi iniziali e finali e newline sono opzionali purché i caratteri dell'output siano tutti allineati. per esempio.
["f r"],["u e"],["l p"],["l p"],["y i"],[" o z "],[" p n "],[" e "]
o
"f r\nu e\nl p\nl p\ny i\n o z \n p n \n e "
sono uscite accettabili per il test case 1
Le scappatoie standard sono vietate e vince il codice più breve in byte. Qualsiasi risposta senza spiegazione non sarà in grado di vincere.
Spiegazione
Per creare una cerniera devi prima rimuovere qualsiasi spazio bianco o carattere di nuova riga dalla stringa. E poi piegalo a metà in questo modo (vedi il caso 1 per ulteriori informazioni)
abcde fgh ij klmnopqr diventa le due stringhe sottostanti, notare che la seconda metà è invertita.
abcdefghi e rqponmlkj
Quindi a partire dall'inizio di ogni stringa posizioniamo lo stesso carattere indicizzato da ciascuna sottostringa su una riga con la spaziatura determinata come segue:
[0] a r -- (a-3) five spaces
[1] b q -- (a-2) three spaces
[2] c p -- (a-1) one space
[3] d -- (a)
[4] o
[5] e
[6] n
etc...
Ciò costituisce la base per la nostra cerniera. Ora i numeri interi ae b.
aè la posizione della nostra zip. Per determinare dove si trova la cerniera utilizziamo l'indice delle nostre linee di output come punto per chiudere la nostra zip. ad esempio il quadrato tra parentesi [3]nel mio esempio sopra è dove si trova la zip.
Prima che la nostra cerniera si chiuda, la cerniera sopra deve rimanere in uno spazio di cinque spazi fino a quando non raggiunge a-2dove si chiude a 3 spazi e a-1dove si chiude a 1 spazio. Giusto per essere chiari, nell'esempio sopra a = 3(indicizzato 0)
bè il numero di fori nella mia cerniera. Per creare un buco nella zip, abbiamo diviso di nuovo la stringa con una certa spaziatura.
A partire dall'indice della buca di esempio hquando aumentiamo la spaziatura di h-1uno spazio, ha 3 spazi e di h+1nuovo a uno spazio, lasciando h-2e h+2con un solo carattere per riga poiché vengono contati come parte del foro.
Dopo la zip e tra ciascuno dei fori deve esserci uno spazio di un carattere in modo che la nostra zip appaia completamente collegata tra i fori.
Puoi scegliere gli indici dei fori, ma devono essere tutti presenti nella sezione "chiusa" della cerniera.
Again using 'abcdefghi' and 'rqponmlkj'
[0] a r -- (open)
[1] b q -- (closing)
[2] c p -- (closing)
[3] d -- zip
[4] o -- gap
[5] e -- start of hole (h-2)
[6] n f -- one space (h-1)
[7] m g -- three spaces (hole h)
[8] l h -- one space (h+1)
[9] k -- end of hole (h+2)
[10] i -- gap
[11] j
Spero che tutto abbia un senso, se non chiedere via. In previsione di domande, potresti notare che il personaggio pnel mio secondo esempio è presente nella seconda sottostringa, tuttavia, appare all'inizio della sua riga, questo è inteso, devi seguire la sequenza di 1-2-1-2- 1-2, prendendo un personaggio da ogni metà a turno indipendentemente dalla sua posizione nell'output.
Casi test
"fully open zipper", 7, 0 | "fully closed zipper", 0, 0
fullyope reppizn | fullyclos reppizde
|
f r *Note: i particularly like this | f
u e example as it shows the reversing | r
l p of the second half of the string | u
l p causes the words to wrap from top | e
y i left to the bottom and back up | l
o z the right side | p
p n | l
e | p
| y
| i
| c
| z
| l
| d
| o
| e
| s
- Colonna 1: "cerniera ininterrottamente stupidamente lunga che non dovrebbe esistere su qualsiasi felpa con cappuccio decente", 24, 0
- Colonna 2: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris faucibus molestie mi. Aliquam nec fringilla ipsum", 15, 5
:
s e | L m
t i | o u
u d | r s
p o | e p
i o | m i
d h | i a
l t | p l
y n | s l
l e | u i
o c | m g
n e | d n
g d | o i
u y | l r
n n | o f
b a | r c
r n | s
o o | e
k t | i
e s | n t
n i | m a
z x | a m
i e | u
p t | e
p n | q
e | t
d | i
r | ,
l | l c
t | A o
u | . n
h | i
o | s
a | m
h | e e
t | c i
s | t t
| e
| s
| t
| s
| u
| l
| r
| o
| a
| m
| d
| s
| i
| u
| p
| b i
| i s
| c c
| u
| i
| a
| n
| f
| g
| s
| e
| i
| l r
| i u
| t a
| .
| M
EDIT: Aggiunti casi di test
"abcde fgh ij klmnopqr","3","1"
a r
b q
c p
d
o
e
n f
m g
l h
k
i
j