En el chat, a menudo somos personas que escriben rápido y realmente no miramos el orden de las letras antes de publicar un mensaje. Como somos flojos, necesitamos un programa que intercambie automáticamente las dos últimas letras de nuestras palabras, pero como no queremos responder demasiado tarde, el código debe ser corto.
Su tarea, si desea aceptarla, es escribir un programa que invierta las dos últimas letras de cada palabra en una cadena dada (de modo que la palabra se Thansk
convierta en Thanks
). Una palabra es una secuencia de dos o más letras en el alfabeto inglés delimitadas por un solo espacio.
Se garantiza que la cadena / lista de caracteres que recibe como entrada solo contiene caracteres alfabéticos y espacios (ASCII [97 - 122], [65 - 90] y 32).
Puede tomar entradas y proporcionar salidas a través de cualquier método estándar , en cualquier lenguaje de programación , mientras toma nota de que estas lagunas están prohibidas de forma predeterminada.
La salida puede tener un espacio final y / o una nueva línea final.
La entrada siempre contendrá solo palabras (y el espacio en blanco correspondiente) y consistirá en al menos una palabra.
Este es el código de golf, por lo que gana la presentación más corta (puntuada en bytes) en cada idioma.
Casos de prueba
Tenga en cuenta que las cadenas están entre comillas para facilitar la lectura.
Entrada -> Salida "Thansk" -> "Gracias" "Youer welcoem" -> "De nada" "Esto es una manzana" -> "Thsi si na appel" "Flippign Lettesr Aroudn" -> "Voltear letras alrededor" "EL ANTIGUO RETO CON LAS LETRAS DE INTERCAMBIO" -> "EL RETO EXTRAÑO CON LAS LETRAS CAMBIADAS"
O, para conveniencia del conjunto de pruebas, aquí están las entradas y sus salidas correspondientes por separado:
Thansk Youer welcoem Esto es una manzana Flippign Lettesr Aroudn EL ANTIGUO RETO CON CAMBIO DE LETRAS
Gracias De nada Este si na appel Voltear letras alrededor EL RETO EXTRAÑO CON LETRAS CAMBIADAS
Gracias a DJMcMayhem por el título. Este fue originalmente un CMC .
Respuestas:
V , 4
5bytesPruébalo en línea!
||
denota el cursorEl búfer comienza con
|w|ord and more words
y el cursor está en el primer carácter.Recursivamente
ò
ir al final
e
de una palabrawor|d| and more words
eliminar
X
el caracter a la izquierda del cursorwo|d| and more words
p
mira sobre el siguiente personajewod|r| and more words
Final implícito
ò
, repita el mismo proceso para otras palabras hasta llegar al final del búferfuente
ò
comando github.com/DJMcMayhem/V/wiki/Normal-Mode-CommandsJalea , 7 bytes
Un enlace monádico que toma y devuelve listas de personajes
Pruébalo en línea!
¿Cómo?
fuente
Ḳ2œ?ЀK
también funciona y utiliza un solo rápido.Brain-Flak , 122 bytes
Pruébalo en línea!
El peor idioma para el trabajo :)
LegibleVersión ligeramente más legible:fuente
Haskell , 40 bytes
Pruébalo en línea! Ejemplo de uso:
(f=<<).words $ "abc xyz"
rendimientos"acb xzy "
.fuente
Retina , 13 bytes
Pruébalo en línea! El enlace incluye casos de prueba.
fuente
Python 3 , 50 bytes
Pruébalo en línea!
Esta respuesta abusa del comportamiento de impresión de Python 3: se imprimen varios argumentos con un solo espacio entre ellos. Por supuesto, no podemos simplemente darle múltiples argumentos porque no sabemos cuántas palabras habrá en la entrada. Entonces usamos el operador splat . Básicamente
es exactamente lo mismo que
El abuso que hace que un programa completo resulte más corto que una función / lambda donde tendríamos que usar
' '.join
o algo similar.fuente
for w in input().split():print w[:-2]+w[:-3:-1],
. En Python 3, la extracción de los dos últimos caracteres funcionaría bien,print(*(''.join(a)+c+b for*a,b,c in input().split()))
excepto quea
es necesario rehacerlos en una cadena.Matlab (R2016b),
5150 bytesAhorró
4950 (!) Bytes gracias a @Giuseppe.Y mi respuesta anterior:
Matlab (R2016b), 100 bytes
(Solo por diversión: P)
Explicación:
fuente
regexprep
trabajar aquí? Algo comoregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
?$1
, y no\1
, así seríaregexprep(a,'(\w*)(\w)(\w)','$1$3$2')
.function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')
¡Es otro byte más corto!C,
625854 bytes¡Gracias a @Dennis por guardar
cuatroocho bytes!Pruébalo en línea!
fuente
Prólogo (SWI) , 60 bytes
Pruébalo en línea!
Explicación
Primero definimos el caso base:
Esto significa que las dos últimas letras siempre se intercambiarán.
Luego definimos qué sucede si estamos justo al lado de un espacio:
Dos cadenas coinciden si justo antes de un espacio se intercambian las letras antes del espacio y el resto si las cadenas coinciden. Luego usamos
!
para cortar.Nuestro último caso es si no estamos al lado de un espacio, las dos primeras letras deben coincidir.
fuente
Wolfram Language , 117 bytes
Pruébalo en línea!
Aplicado a las cadenas de prueba.
fuente
R ,
1115141 bytesCortesía de @Giuseppe, un enfoque de expresiones regulares que elimina mi antiguo método del agua.
fuente
APL (Dyalog Classic) , 28 bytes
⎕ML
y⎕IO
son a la vez1
,Pruébalo en línea!
Explicación
... (,⊂⍨⊣=,) ...
Dividir (manteniendo los bordes y agregando un borde al principio) ...... ⍞
... la entrada ...... ' ' ...
... en los espacios.... ( ... )¨ ...
Luego, a cada elemento de eso:... , ...
Concatenar ...... (¯2↓⊢) ...
... cada artículo excepto los dos últimos ...... 2↑⌽ ...
... con el reverso de los dos últimos elementos.1↓∊ ...
Finalmente, devuelva todos menos el primer elemento del resultado aplanado.fuente
Funky , 34 bytes
Pruébalo en línea!
fuente
Haskell , 45 bytes
-2 bytes gracias a H.PWiz.
Pruébalo en línea!
fuente
J ,
20 1911 bytesCrédito a @Bolce Bussiere
Pruébalo en línea!
fuente
(1&A.&.>)&.;:
Alice , 24 bytes
Pruébalo en línea!
Explicación
Esto forma un bucle donde el cuerpo del bucle es un fragmento ordinal lineal y ejecutamos
' o
en modo Cardinal entre cada dos iteraciones del bucle. Este último solo imprime un espacio.Al desplegar la estructura en zigzag del código ordinal, el cuerpo del bucle lineal realmente se ve así:
Desglosando esto:
fuente
h~Z
) en lugar de cuatro (e10x
), pero no veo una forma de ajustar el diseño para realmente guardar un byte en general con eso.cerebro ,
109100 bytesEditar: no tiene que manejar palabras de una letra
Pruébalo en línea!
Imprime un espacio final
Cómo funciona
Versión anterior, 109 bytes
Pruébalo en línea!
fuente
QuadR , 8 bytes
Pruébalo en línea!
fuente
PHP ,
119107bytesEditar: gracias a totalmente humano
Pruébalo en línea!
fuente
$word
un nombre de variable de un solo carácter?fgets(STDIN)
se puede omitir o reemplazar$x
, como no todas las respuestas cuentan la entrada a sus respuestastrim()
Debería ser innecesario.Haskell , 41 bytes
Pruébalo en línea!
Salidas con un espacio final.
La repetida
' ':r
parece un derroche. Peroa%(b:t@(' ':r))=b:a:t
tiene la misma longitud ya%(b:t)|' ':_<-t=b:a:t
es un byte más largo.Haskell , 41 bytes
Pruébalo en línea!
fuente
sed ,
2017 + 1 (-r) = 18 bytesPruébalo en línea!
fuente
|$
. No está haciendo nada. (Para que haga lo que espera que necesitaría(.)(.)(\b|$)
, pero eso no es necesario porque\b
ya coincide con el final de la cadena).PHP, 65 bytes
requiere PHP 7.1 (o posterior)
toma la oración como argumentos de línea de comando separados. Corre con
-nr
.trabajando en una sola cadena, 77 + 1 bytes :
Ejecutar como tubería con
-nR
.... o pruébalos en línea .
fuente
Java 8, 35 bytes
Puerto de la respuesta de Google Sheets de @TaylorScott, después de jugar dos bytes. EDITAR: veo que ahora es un puerto de respuesta Retina de Neil después de mis dos bytes de golf.
Explicación:
Pruébalo en línea.
fuente
Hojas de cálculo de Google, 33 bytes
Función de hoja de trabajo anónima que toma la entrada de la celda
A1
y las salidas a la celda que llama-2 Bytes Gracias a @KevinCruijssen por el uso de
(.)
over(\w)
fuente
(\w)
pueden jugar golf(.)
si no me equivoco. El\b
ya es una indicación para buscar solo palabras. (Sin embargo, no del todo seguro, pero funciona en Java.)JavaScript (Node.js) ,
383632 bytesPruébalo en línea!
Enfoque de RegExp cortesía de @Giuseppe (aunque pensé en esto de forma independiente), suponiendo que las palabras estén separadas por un solo espacio
-2 por solo considerar 1 espacio y agregar espacio final
-4 Gracias @Shaggy
fuente
s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")
.s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
ab abc abcd abcde abcdef
ciervasab_
,bc_
,cd_
,de_
,___
,ef_
,___
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")
misma longitudK (oK) ,
2322 bytesPruébalo en línea!
Ejemplo:
Explicación:
La solución del puerto de FrownyFrog para ahorrar 1 byte .
Volveré a esto.
Solución previa:
" "/-2{(x_y),|x#y}'" "\
23 bytesfuente
05AB1E , 7 bytes
Pruébalo en línea!
-1 gracias a Magic Octopus Urn .
Imprime un espacio final.
fuente
`
.Jalea , 10 bytes
Pruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) ,
136119 bytesPruébalo en línea!
Imprime con un espacio final.
Sabes que has hecho algo mal cuando un idioma es un backronym para StriNg Oriented and symBOlic Language y tu código es más largo que Brain-Flak :(ahora es un poco mejor.La línea
B
tomaI
y reemplaza(alphabetic characters saved as Y)(some number of spaces)
con la cadena vacía.La siguiente línea extrae los últimos 2 caracteres de
Y
asZ
y los reemplaza comoZ
invertidos, luego la siguiente línea concatenaO
,Y
y un único carácter de espacio.Finalmente, imprime cuando
I
ya no coincide con el patrón requerido en líneaB
.fuente
Perl 5 , 19 + 1 (
-p
) = 20 bytesPruébalo en línea!
fuente