(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 ( a
y 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 a
y b
.
a
es 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-2
donde se cierra a 3 espacios y a-1
donde se cierra a 1 espacio. Para ser claros, en el ejemplo anterior a = 3
(indexado 0)
b
es 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 h
que aumentamos el espacio de h-1
un espacio, h
a 3 espacios y de h+1
regreso a un espacio, dejando h-2
y h+2
con 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 p
en 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
Respuestas:
PHP 7.1,
421412218195192191195bytesEjecutar
-nr
o probarlo en línea .Imprime una nueva línea inicial, pero no posterior, y un espacio inicial en cada línea.
fuente
<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />