Dada una cadena, primero cuadrácela de la siguiente manera:
Primero, escribe la cadena.
abcde
A continuación, escriba la cadena girada una izquierda.
abcde
bcdea
Siga haciendo esto hasta que haya escrito líneas len (cadena) .
abcde
bcdea
cdeab
deabc
eabcd
Ahora, lee de la cadena así:
----+
+--+|
|+>||
|+-+|
+---+
Lo que da:
abcdeabcdcbaedcbcdeabaede
Imprime esta cadena.
Casos de prueba
abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
->
Comente si un caso de prueba es incorrecto.
Recuerde, este es el código de golf , por lo que gana el código con el menor número de bytes.
cena!
Está Mal. Debe coincidir con su ejemploabcde
ya que ambas son 5 letras:cena!cenanec!anena!cec!a!
Respuestas:
JavaScript (ES7),
83807877 bytesPrograma adicional compatible con ES3:
Explicación
Esto aprovecha el hecho de que la salida para, por ejemplo, una cadena de longitud 5 se puede representar como:
donde cada dígito representa un índice en la cadena (comenzando en 0), modula la longitud de la cadena. En otras palabras, si n es la longitud de la cadena, incrementamos el índice 2n - 1 veces, luego lo disminuimos 2 (n - 1) - 1 veces, luego lo incrementamos 2 (n - 2) - 1 veces, etc. Esto se puede simplificar con el siguiente algoritmo:
Esto funciona porque floor (sqrt (x)) cambia las paridades después de 2n - 1 iteraciones, luego 2 (n - 1) - 1 iteraciones, etc.
fuente
Pyth , 15 bytes
Un programa que toma la entrada de a
"quoted string"
e imprime el resultado.Pruébalo en línea! o verificar todos los casos de prueba (modificado para entrada múltiple).
Cómo funciona
fuente
Python 2.7 (en CMD.EXE), 91 bytes
Esto requiere un terminal con un espacio de retroceso que funcione (
\b
), y no funcionará en repl.it o ideone.com . Una declaración de impresión que termina en una coma separa más resultados con espacio en lugar de una nueva línea o retorno. El retroceso nos permite sobrescribir el espacio de separación.Python 2.7, 96 bytes
Pruébelo en ideone.com o repl.it (gracias a Oliver). La entrada debe ser una cadena de Python, por ejemplo
'cena!'
.Los cuatro rebanadas adjuntas por el bucle (
s[i:]
,s[:n-i]
,r[i+2:]
,r[:n-i]
) se toman de cuatro bordes de la espiral. Por ejemplo con01234
el cuadrado es:Así que tomamos
01234
,0123
,210
,4321
. La variablei
es el índice del valor superior izquierdo en cada paso del proceso. En la espiral final, varias de las rodajas pueden estar vacías.fuente
S=''
,print S
yS+=
, y envolver todo antes de lai+=2
en unaprint()
declaración consep=''
, usted puede ahorrar 2 bytes.i<=n
an>i
"a string of odd length."
Jalea ,
1110 bytesTryItOnline! o todas las pruebas
¿Cómo?
El cuadrado sin espiral es una serie de corridas de "borde superior más borde derecho" y "borde inferior más borde izquierdo", cada una de las cuales es el reverso de la ejecución anterior sin la primera y la última letra, y la primera de las cuales es la entrada más la entrada sin la última letra (por ejemplo, la entrada
"abcde"
tiene una salida de"abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e"
).fuente
05AB1E, 12 bytes
Pruébalo en línea!
Explicación:
fuente
MATL , 27 bytes
La entrada vacía sale con un error (produciendo la salida correcta).
Pruébalo en línea! O verificar todos los casos de prueba .
fuente
C,
9594 bytesInspirado por la respuesta de @ETHproductions.
fuente
Perl, 99 bytes
El espacio en blanco no es parte del programa y se proporciona para facilitar la lectura.
Código no extremadamente eficiente. Debería poder acortar las tres primeras líneas de alguna manera, pero todo lo que intenté hacer falló. Ese operador ternario también debe repararse de alguna manera, pero tenerlo de esta manera hizo posible acortar mi código en unos 10 bytes porque podía cortar mucho.
El código funciona compilando una lista de palíndromos, separados por números pares, que representan los valores de posición de la cadena que se extraerá.
fuente
-F
cual reemplazará las líneas 1 y 3. Ingrese la entradaecho -n
para eliminarchop
. (eso debería darle alrededor de 81 bytes)En realidad ,
2113 bytesEste algoritmo se basa en gran medida en la respuesta Jelly de Jonathan Allan . Hay dos formas de imprimir el resultado como una cadena. El enfoque utilizado aquí duplica un paso intermedio y luego lo agrega a un total acumulado en el registro 1 (una cadena vacía por defecto);
;╕
en la función, luego╛
al final. El otro enfoque es duplicar un paso intermedio, dejar esos pasos duplicados en la pila y sumarlos en una cadena al final;;
en la función, luegokΣ
al final.Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
Python 3, 59 bytes
repl.it
Un puerto directo de mi respuesta Jelly ; solo un programa completo que toma datos (en lugar de una función).
El
print(x,end='')
es una declaración de impresión que no imprimirá la nueva línea predeterminada.fuente
Python 3, 93 bytes
Pruébalo en línea!
fuente
print(...,end='')
hacerloprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
abcde
, le falta unae
al final.i<=n
lugar den-i
su condición.