Tarea
- El usuario ingresa una oración, solo palabras. Cualquier entrada que no sean letras o espacios, incluidos los enteros y la puntuación, debe arrojar una excepción: "La oración solo debe usar letras".
- La salida tiene un patrón, donde algunas palabras se invierten y otras palabras son normales.
- El patrón comienza como una palabra normal, las siguientes dos palabras se invierten, luego las siguientes dos palabras son normales y el patrón continúa.
- A continuación se muestra un ejemplo de dónde deberían ser normales las palabras y dónde se invierten las palabras:
Normal - Invertido - Invertido - Normal - Normal - Invertido - Invertido - Normal ...
Ejemplo de entrada
Ella vende conchas marinas en la orilla del mar
Ejemplo de salida
Ella arroja conchas en cada orilla
Reglas Adicionales
- Si se utilizan letras mayúsculas, deben permanecer en la letra en la que se publicaron originalmente.
- Cualquier espacio múltiple inicialmente publicado en la entrada debe reducirse a un espacio. Por ejemplo se
Programming Puzzles and Code Golf
convierteProgramming selzzuP dna Code Golf
¡El código más corto gana!
Feliz codificación ...
code-golf
string
word
permutations
Belfield
fuente
fuente
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Significa implementar una tarea secundaria totalmente ajena al desafío de revertir palabras, cortar idiomas que no tienen excepciones, y requiere codificar o comprimir una cadena larga que ocupa gran parte del tiempo. recuento de bytes.Respuestas:
TeaScript , 55 bytes
58 60 69 76 78 80 87 89Esto es extremadamente corto, estoy muy feliz con eso.
Los últimos ~ 20 caracteres pueden parecer galimatías, pero eso es "La oración solo debe usar letras" codificada. Todos los caracteres tienen códigos de caracteres inferiores a 256, por lo que cada uno tiene un byte
Explicación
fuente
Haskell, 141 bytes
Casi 2/3 del código es para verificación de errores. Parece ser el primer desafío del mundo real.
El trabajo se realiza mediante el
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
cual divide la entrada en una lista de palabras, la comprime con la lista de funciones de ciclado[id,reverse,reverse,id,id,reverse...]
y une el resultado con espacios de vuelta a una sola cadena.Gracias a @Christian Irwan por 2 bytes.
fuente
r=reverse
?reverse
yr=reverse
tenía la misma longitud, debido a la faltaf=
. No volví a verificar cuando pasé a punto libre).JavaScript (ES6) 122
fuente
Retina , 103 bytes
Debería haber un solo espacio en la segunda línea, que SE parece estar tragando. Ejecute el código desde un único archivo con el
-s
bandera.Retina no tiene el concepto de excepciones, por lo que la salida simplemente se reemplaza por
Sentence must only use letters
si hay caracteres que no sean letras ni espacios en blanco en la entrada.fuente
Pyth, 61 bytes
Pruébalo en línea.
fuente
Pitón,
163160157145Se eliminaron 15 caracteres, ¡gracias Mego !
fuente
Bash + coreutils, 108
El último personaje de este programa es un espacio.
La entrada se toma de la línea de comando:
fuente
Pyth, 72
No supera la otra respuesta de Pyth, pero ya invertí tiempo en escribirla. Básicamente es una traducción de mi respuesta de Python .
Pruébalo en línea
fuente
Julia, 109 bytes
i=0
y(i+=1)%4>1
se usan para decidir si cada palabra recibereverse
d o no.isalpha
se aplica a las palabras después de dividirse usandosplit(s)
para determinar si hay caracteres que no son letras (los espacios ya se han eliminado en este punto).join
restaura la cadena después de la manipulación, a menos queerror
se lance.fuente
Julia,
150134 bytesSin golf:
Guardado 16 bytes gracias a Glen O!
fuente
r
su resultado? Es decir,r=ismatch(...)||error(...)
eliminará algunos caracteres e invertirá el condicional que usar
. Comentaré nuevamente con, sospecho, algunos ahorros más||
que lidiar con la negación, luego me di cuenta de que la negación no es necesaria. Invierta de nuevo a&&
. Y aún mejor, use?:
en su lugar para hacerlo aún mejor.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
por 144 bytes. Y creo que puedo hacerlo mejor por dentrojoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 bytes
Prestado el
%%k4 3
pedazo de Pietu1998. Se guardó un byte adicional.Pruébelo en línea: demostración o pruebas
Explicación
fuente
Perl 5
-ap
, 80 bytesPruébalo en línea!
fuente
Java, 215 bytes
Regex es divertido
Pruébalo en línea!
fuente
She slles aeS shells no the aeS shore
, pero debería serShe slles aeS shells on eht aeS shore
en su lugar (primero normal; luego alternando en pares de 2 invertidos o no). Dos problemas causan esto. Ahora aumentai
incluso si un elemento está vacío, yi++%2<1
debería estarloi++%4>1
en su lugar. Aquí una versión fija de 211 bytes .Jalea , 39 bytes
Pruébalo en línea!
Gracias a Erik the Outgolfer. Me salvó de unos pocos bytes adicionales y de muchas horas de frustración.
Aquí hay una solución de 46 bytes
En realidad, arroja un error de sintaxis de Python cuando la entrada contiene caracteres no válidos.
Pruébalo en línea!
fuente
Japt v2.0a0
-S
, 41 bytesIntentalo
fuente
05AB1E , 36 bytes
Pruébalo en línea.
Lanza el siguiente error cuando la entrada no solo contiene
[A-Za-z ]
:Explicación:
Ver este consejo 05AB1E mío (sección Cómo usar el diccionario? ) Para entender por qué
“¸–ƒ—€É€Å™ê“
es"sentence must only use letters"
.fuente
PHP , 147 bytes
Pruébalo en línea!
O si
die()
es aceptable como una "Excepción":PHP , 131 bytes
Pruébalo en línea!
fuente