Cremallera más grande, mejor (rota)

9

(Inspirado bastante por este desafío )

En el desafío original, tenías que hacer una cremallera horizontal, sin embargo, al mirar mi sudadera con capucha, mi cremallera es mucho más vertical (y un poco rota): P

Entrada

Se le dará una sola cadena ( s) y un par de enteros ( ay b) en cualquier formato. Dónde:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

Salida y puntuación

Su programa puede ser un programa completo o una función que produce una sola cadena con el formato correcto o una matriz (un elemento por línea) que elija. Los espacios iniciales y finales y las nuevas líneas son opcionales siempre que los caracteres de la salida se alineen. p.ej.

["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   "

son salidas aceptables para el caso de prueba 1

Las lagunas estándar están prohibidas y gana el código más corto en bytes. Cualquier respuesta sin explicación no podrá ganar.

Explicación

Para hacer una cremallera, primero debe eliminar cualquier espacio en blanco o caracteres de nueva línea de la cadena. Y luego dóblelo por la mitad así (vea el caso de prueba 1 para más información)

abcde fgh ij klmnopqr se convierte en las dos cadenas de abajo, observe que la segunda mitad se invierte.

abcdefghi y rqponmlkj

Luego, al comienzo de cada cadena, colocamos el mismo carácter indexado de cada subcadena en una línea con el espacio determinado de la siguiente manera:

[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...

Eso hace que la base de nuestra cremallera. Ahora los enteros ay b.

aes la ubicación de nuestro zip. Para determinar dónde está ubicada la cremallera, utilizamos el índice de nuestras líneas de salida como el punto para cerrar nuestra cremallera. Por ejemplo, el cuadrado entre corchetes [3]en mi ejemplo anterior es donde está el zip.

Antes de que nuestra cremallera llegue a un cierre, la cremallera anterior debe permanecer en un espacio de cinco espacios hasta que llegue a a-2donde se cierra a 3 espacios y a-1donde se cierra a 1 espacio. Para ser claros, en el ejemplo anterior a = 3(indexado 0)


bes la cantidad de agujeros en mi cremallera. Para crear un agujero en la cremallera, dividimos la cuerda nuevamente con algo de espacio.

Comenzando con el índice del agujero de ejemplo a medida hque aumentamos el espacio de h-1un espacio, ha 3 espacios y de h+1regreso a un espacio, dejando h-2y h+2con solo un carácter por línea, ya que se cuentan como parte del agujero.

Después del cierre y entre cada uno de los agujeros debe haber un espacio de un carácter para que nuestro cierre se vea completamente conectado entre los agujeros.

Puedes elegir los índices de los agujeros, pero todos deben estar presentes dentro de la sección 'cerrada' de la cremallera.

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

Espero que todo tenga sentido, si no preguntar. En previsión de preguntas, puede notar que el personaje pen mi segundo ejemplo está presente en la segunda subcadena, sin embargo, aparece al comienzo de su línea, esto es lo que se pretende, debe seguir la secuencia de 1-2-1-2- 1-2, tomando un personaje de cada medio turno independientemente de su posición en la salida.

Casos de prueba

"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
  • Columna 1: "cremallera intacta estúpidamente larga que no debería existir en ninguna sudadera con capucha decente", 24, 0
  • Columna 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

EDITAR: Casos de prueba agregados

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j
MysticVagabond
fuente
1
Creo que me gusta este desafío, pero lo he leído tres veces y todavía no estoy al 100% exactamente en lo que se supone que debo hacer. Creo que valdría la pena hacer las reglas y especificaciones más cortas y claras en lugar de párrafos completos.
TheLethalCoder
Puedo
intentarlo
Alguno más claro? @TheLethalCoder
MysticVagabond
Hola, eliminé la etiqueta imprimible-ascii , ya que se usa para desafíos de fuente restringida en lugar de diseño de salida.
AdmBorkBork
Vi que gracias @AdmBorkBork lo volví a editar para ordenar alfabéticamente la explicación y espero que sea más claro ver de dónde vienen los personajes.
MysticVagabond

Respuestas:

1

PHP 7.1, 421412218195192191195 bytes

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]:"
";

Ejecutar -nro probarlo en línea .
Imprime una nueva línea inicial, pero no posterior, y un espacio inicial en cada línea.

Tito
fuente
TIO me da este error:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond
@Xynos Configure la versión PHP en 7.1
Titus
su respuesta coloca el agujero demasiado cerca del zip, agregaré la salida correcta para su entrada como un caso de prueba :)
MysticVagabond
@Xynos brechas agregadas
Titus