Cerniera più grande, migliore (rotta)


9

(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

1
Penso che questa sfida mi piaccia, ma l'ho letta tre volte e non sono ancora del 100% su quello che dovrei fare esattamente. Penso che varrebbe la pena di rendere le regole e le specifiche più brevi e chiare piuttosto che i paragrafi completi.
TheLethalCoder

Posso
provarlo

più chiaro? @TheLethalCoder
MysticVagabond

Ciao, ho rimosso il tag stampabile-ascii , in quanto viene utilizzato per le sfide con origini limitate anziché per il layout di output.
AdmBorkBork,

Ho visto che grazie a @AdmBorkBork ho modificato di nuovo in ordine alfabetico la spiegazione per rendere sperabilmente più chiaro vedere da dove provengono i personaggi.
MysticVagabond

Risposte:


1

PHP 7.1, 421 412 218 195 192 191 195 195 byte

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

Corri con -nro provalo online .
Stampa una nuova riga iniziale, ma non trascinata e uno spazio iniziale in ogni riga.


TIO mi dà questo errore:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos Imposta la versione di PHP su 7.1
Titus

la tua risposta pone il buco troppo vicino allo zip, aggiungo l'output corretto per il tuo input come test case :)
MysticVagabond

@Spazio di xynos aggiunto
Tito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.