Haga un programa que tome la palabra que ingresó y agregue esa palabra al reverso de sí misma menos su primera letra, luego repita hasta que todas las letras hayan desaparecido. Por ejemplo, cat
se convertiría catatt
y hello
se volvería helloellolloloo
.
Ingrese
cualquiera de las 26 letras del alfabeto inglés. Puede haber varias palabras separadas por espacios, y el cambio debe aplicarse a cada palabra.
Salida
La (s) palabra (s) ingresada (s), con cada palabra colocada después de sí misma con su primera letra faltante, y luego con su segunda letra faltante, y así sucesivamente hasta que no haya más letras para agregar.
Más ejemplos:
ill eel
salidas illlll eelell
laser bat
salidas laserasersererr batatt
darth vader
salidas dartharthrththh vaderaderdererr
Este es el código de golf, por lo que gana el código más corto.
Aclaración:
puede tratar la entrada o salida como una lista. Puede separar palabras usando nueva línea en lugar de espacio. Puede agregar un espacio final a la entrada.
1.
Actualice la especificación con las nuevas asignaciones (E / S de matriz, espacio final, etc.)2.
Informe las soluciones existentes en caso de que alguna pueda ahorrar bytes al aprovecharlas.Respuestas:
Japt
-m
,63 bytesEntrada y salida son matrices de palabras.
Intentalo
Explicación
fuente
£
dos bytes en UTF-8?brainfuck ,
6056 bytesPruébalo en línea!
Requiere un espacio final e imprime un espacio inicial. Ambos podrían ser evitados, pero eso termina en 112 bytes .
Explicación
fuente
Haskell,
3621 bytesPruébalo en línea!
Editar: -15 bytes, debido al nuevo formato IO (lista de palabras en lugar de palabras separadas por espacios)
fuente
scanr (:) ""
contails
.import Data.List
que agregue 17 bytes a la puntuación.Perl
-p
,362523 bytesPruébalo en línea!
Este es un registro único. Primero, coincide con todos los límites de palabras o caracteres que no son espacios:
Tenga en cuenta que cada una de estas coincidencias debe reemplazarse con el resto de la palabra:
Podemos lograr esto con la variable especial
$'
, que almacena la parte de la cadena después de la coincidencia. Sin embargo, debemos aplicarle el registro anidados/ .*//
, que elimina todo lo que haya pasado el primer espacio$'
, para eliminar las palabras restantes en la entrada.Gracias a @nwellnhof por 2 bytes.
fuente
[^ ]
con\S
.Python 3 , 49 bytes
¡Pruébelo en línea!
Esto aprovecha el hecho de que
"".split()
devuelve una matriz vacía para que actúe como la comprobación del caso base en la recursividad.fuente
Jalea , 3 bytes
Pruébalo en línea!
K
Ya no necesito la s ya que la entrada / salida de matriz ahora está permitida.fuente
ḊƬẎ)
(oḊƬF)
, si lo prefieres).APL (Dyalog),
199 bytes{⌽∊,\⌽⍵}¨
gracias a @ H.PWiz por activar mi cerebro
Esto funciona porque todas las cadenas en APL son matrices de caracteres.
TIO
fuente
JavaScript (ES6), 33 bytes
Guardado 1 byte gracias a @ShieruAsakoto
Formato de E / S: conjunto de palabras.
Pruébalo en línea!
JavaScript (ES6), 35 bytes
Formato de E / S: conjunto de palabras.
Pruébalo en línea!
fuente
s=>s.replace(/\S+/g,g=s=>s&&s+g(s.slice(1)))
$'
(o$<backtick>
).R ,
827567 bytesPruébalo en línea!
Varios bytes guardados gracias a JayCe
Separa la salida con nuevas líneas.
La
sapply(...)
expresión genera un vector matriz / columna de las subcadenas apropiadas, rellenando con las""
necesarias.write
luego imprime los elementos de la matriz,y
por línea, separándolos con""
.fuente
...substring,1:1e6,1e6)...
o similarbrainfuck ,
9493 bytesPruébalo en línea!
.[-]>[.>]<[<]>
to[.>]<[<]>[-]>
.Explicación
Pruébalo en línea!
Atribución
La colección constante Brainfuck de Esolang se utilizó para la carga espacial inicial.
fuente
05AB1E , 5 bytes
Pruébalo en línea!
Explicación
fuente
í€ηJí
(dado que los prefijos son un byte incorporado de 1 byte en lugar de sufijos similares a 2 bytes; sin embargo, aún requiere un reverso adicional cada uno al inicio, por lo que el conteo de bytes sigue siendo 5).Vim , 47 bytes (38 pulsaciones de teclas)
Comience con su entrada como la única línea en un búfer Vim.
Explicación
Esto pone cada palabra en su propia línea, itera sobre cada línea y luego las une a todas. Se rompe si las palabras tienen más de 99 caracteres o si su entrada tiene más de 99 palabras.
:s/<Space>/\r/g<CR>
reemplaza espacios con nuevas líneas (\r
)gg
coloca el cursor al comienzo de la primera líneaqa
comienza a grabar macro a :yw
tira del resto de la palabraP
lo pone detrás del cursorlx
elimina la primera letra de la última palabraq
deja de grabar macro aqb
comienza a grabar macro b :99@a
macro ejecuta un noventa y nueve veces (introduce el límite de caracteres)j0
posiciona el cursor al comienzo de la siguiente líneaq
deja de grabar macro b99@b
ejecuta macro b noventa y nueve veces (introduce el límite de palabras)gg
coloca el cursor en la primera línea99J
une las siguientes noventa y nueve líneas con espacios (palabra límite de nuevo)Para otros 2 bytes (2 pulsaciones de teclas) puede extender el límite de palabras a 999. Otros 4 bytes, 9999, etc.
fuente
Casco ,
64 bytes-2 bytes gracias a Jonathan Allan (tomando la entrada como una lista)!
Pruébalo en línea!
Explicación
Toma la entrada como una lista de cadenas y asigna la siguiente función:
fuente
Retina 0.8.2 , 15 bytes
Pruébalo en línea! Nota: espacios finales. Explicación:
Split en espacios.
Agregue su sufijo a cada letra. Los
%
medios que sólo obtenemos el sufijo de la palabra.Únete con espacios.
fuente
Pepe ,
167153 bytesPruébalo en línea!
fuente
Código de ensamblado x86 de 16 bits, 24 bytes
Llame con si = puntero a la cadena de origen, di = puntero al búfer de salida.
La cadena de origen requiere un byte cero para finalizarla.
El código es el mismo en 16 o 32 o 64 bits (si / di se convierte en esi / edi o rsi / rdi).
El código de 32 bits es dos bytes más grande debido a la llamada expandida.
El código de 64 bits es aún tres bytes más grande porque el inc / dec de rsi / rdi atrae un prefijo (pero si se sabe que están dentro del espacio de memoria de 32 bits, entonces pueden ser esi / edi nuevamente para evitar esa penalización) .
fuente
MATL ,
1816 bytesLa entrada es una matriz de celdas de palabras. Pruébalo en línea!
Explicación
fuente
K4 / K (oK) , 9 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
C ++ (clang) , 174 bytes
Pruébalo en línea!
Es mi primer envío, y no sabía si devolver la cadena en lugar de imprimir está bien :)
fuente
return w!=""?
puede serreturn""!=w?
.Stax , 3 bytes
Ejecutar y depurarlo
Explicación:
fuente
Carbón , 14 bytes
Pruébalo en línea! Nota: espacio final. El enlace es a la versión detallada del código. Explicación:
fuente
C (gcc) , 79 bytes
Pruébalo en línea!
fuente
Pip
-s
, 11 bytesToma la lista de palabras separadas por espacios de stdin. Pruébalo en línea!
Explicación
fuente
Ruby , 42 bytes
Pruébalo en línea!
fuente
Python 2 , 63 bytes
Pruébalo en línea!
fuente
Lienzo , 6 bytes.
Pruébalo aquí!
5 bytes con un formato de salida loco
fuente
C #,
11190 bytesPruébalo en línea!
Al cambiar la entrada y la salida a las matrices, guardé algunos bytes:
Pruébalo en línea!
fuente
K (oK) ,
1713 bytesPruébalo en línea!
Prefijo de la función anónima; La entrada se toma como una lista de cadenas, que a su vez son listas de caracteres.
Gracias @streetster por 4 bytes.
Cómo:
fuente
{|,/,\|x}'
Lisp común , 179 bytes
Pruébalo en línea!
Este es mi primer intento de jugar al golf. Cualquier edición es bienvenida.
fuente
car
lugar defirst
y encdr
lugar derest
seguir jugando su presentación.Lua , 70 bytes
Pruébalo en línea!
Explicación
Los argumentos en Lua se almacenan en la tabla que
arg
comienza en el índice 1. El operador unario#
devuelve el tamaño de la tabla y la funcións:sub(a,b)
devuelve una subcadena basada en una cadenas
delimitada por enterosa
yb
, si no se pasa b, devolverá el resto de la cadena.Tuve que usar en
io.write()
lugar deprint()
evitar el salto de línea, y agreguéprint()
al final por la razón opuesta.fuente