Me encanta este simple cifrado, es muy divertido leer palabras que no son del todo legibles para los humanos y llenar los vacíos ...
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
Las reglas son súper simples:
- Acepte texto como entrada (caracteres ascii, letras mayúsculas / minúsculas y puntuación).
- Para cada vocal, gírela a la siguiente vocal o regrese al inicio.
- a => e
- e => i
- i => o
- o => u
- u => a
- Las vocales mayúsculas permanecen en mayúsculas, las vocales minúsculas permanecen en minúsculas.
- Salida del texto después de estas conversiones.
- No es necesario admitir acentos.
- Los demás personajes deben permanecer sin cambios.
- Intenta hacerlo en el menor número de bytes.
- Cualquier idioma antiguo que te guste.
Casos de prueba
It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.
Fuera:
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
En:
The quick brown fox jumps over the lazy dog.
Fuera:
Thi qaock bruwn fux jamps uvir thi lezy dug.
En:
Home is where the heart is.
Fuera:
Humi os whiri thi hiert os.
En:
Boaty McBoatface
Fuera:
Buety McBuetfeci
En:
AEIOUaeiou
Fuera:
EIOUAeioua
En:
Programming Puzzles And Code Golf
Fuera:
Prugremmong Pazzlis End Cudi Gulf
code-golf
text-processing
AJFaraday
fuente
fuente
Respuestas:
Stax , 7 bytes
Ejecutar y depurarlo
Pruébalo en línea!
Explicación (sin embalaje)
Podría ahorrar más, seguirá intentándolo.
fuente
MS-SQL, 51 bytes
Funciona en SQL 2017 o superior:
La nueva función
TRANSLATE
realiza el reemplazo de personajes individuales, por lo que es ideal para este desafío.La entrada es a través de una tabla t preexistente con la columna varchar v , según nuestras reglas de IO .
En este caso, la tabla debe crearse utilizando una intercalación entre mayúsculas y minúsculas , ya sea ejecutándose en un servidor sensible a mayúsculas o minúsculas o utilizando la
COLLATE
palabra clave (sin contar para el total de caracteres):EDITAR : SSMS puede cortar la larga cita anterior al devolver el resultado en una ventana de "resultados a texto", esta es una configuración del cliente, no un error en mi programa .
Para solucionarlo, vaya
Tools > Options > Query Results > SQL Server > Results to Text
y aumente el "Número máximo de caracteres que se muestran en cada columna".fuente
REPLACE
para algunos trucos:REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')
para eliminar todos los números de una cadena, por ejemplo. Todavía largo, pero mucho más corto que 10REPLACE
s anidados .Bash + coreutils , 24
Pruébalo en línea!
fuente
Haskell , 52 bytes
Pruébalo en línea!
Lynn me ahorró dos bytes al señalar que
!!0
es más corto quehead
.Explicación
Si nunca ha codificado en Haskell, esto probablemente se verá como un montón de bromas. Así que primero eliminemos el golf y luego analicemos:
Primero tenemos una función
!
, que toma una cadenas
y un carácterc
. Nuestras primeras capturas de coincidencia de patrones aceptan entradas si la cadena no está vacía. Si la cadena no está vacía, comparamos su primer carácter conc
. Si su primer carácter no es igual a loc
tiramos y llamamos!
nuevamente con el resto de la cadena yc
. Si es igual, devolvemos el segundo carácter en la cadena.Nuestra próxima coincidencia de patrones atrapa la cadena en todos los demás casos, es decir, si la cadena está vacía. En este caso acabamos de regresar
c
.En general, esta función toma un carácter
c
y una cadenas
y devuelve el carácter después de la primera aparición dec
ins
. Si pasamos esto conaeiouaAEIOUA
él, realizaremos nuestro cifrado en un solo personaje. Para hacer toda nuestra función, debemos mapear esto a través de la cadena.fuente
Retina ,
109 98 bytesPruébalo en línea!
¡Guardado 1 byte gracias a Neil! ¡Y otro byte gracias a Martin!
La nueva versión de retina tiene clases de vocales, lo que hace que el resultado sea un poco más corto. La transliteración también hace uso de la clase "otro". Entonces la
to
clase se ve como "aeiouAEIOUA" mientras que lafrom
clase se ve como "uaeiouAEIOUA"Esto no causa ningún problema ya que la segunda
u
asignaciónA
nunca se realizará ya queu
ya se asignóa
.fuente
T`_o`uvUV
._
conjunto from lo trataría literalmente, pero parece que no lo hace.Y
mucho, así que lo intentaré mañana.Perl 5 + -p,
2423 bytesPruébalo en línea
-1 byte gracias a @DomHastings
fuente
-p
como +1, sino que consideramos que esta respuesta está en "Perl 5 +-p
".;
como delimitador, puede guardar un byte.Python 3, 62 bytes
Haga una tabla de traducción (diccionario) con
str
elstr.maketrans
método estático . Traducir caracteres relevantes a su carácter de destino.fuente
x
parámetro. En python, las funciones lambda no necesitan una declaración de devolución.C,
8576676564 bytesLa respuesta Java del puerto de Kevin Cruijssen . Pruébelo en línea aquí .
Gracias a Kevin Cruijssen por jugar al golf 9 bytes, a Christoph por jugar al golf 11 bytes y a ceilingcat por jugar al golf 1 byte.
Versión sin golf:
fuente
\0
. Además, esto no funciona cuando se compila con clang: tio.run/##S9ZNzknMS///…const char *res = strchr("AEIOU...", 0)
devuelve un puntero al terminador en la cadena literal.putchar(res[1])
lee más allá del final de la cadena literal. Aparentemente, con gcc encuentra otro byte cero y funciona, pero con el sonido metálico se obtiene un73 'I'
(probablemente delmain
literal de la cadena, "Fue ...", pero no verifiqué el asm). Porputchar
lo tanto , no devuelve 0, y eventualmente nos desconectamos cuando*c++
lee una página sin asignar.f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}
. Eso es todo por ahora, supongo.a[b]==*(a+b)==*(b+a)==b[a]
. Por lo tanto1[...]==(...)[1]
R , 43 bytes
Pruébalo en línea!
Aquí está mi solución envuelta en una
cat
para que se imprima mejor: ¡ Pruébelo en línea!fuente
Jalea , 11 bytes
Pruébalo en línea!
fuente
Python 2 ,
796867 bytes-1 byte gracias a @ArnoldPalmer
Pruébalo en línea!
fuente
JavaScript (ES6), 60 bytes
Pruébalo en línea!
fuente
s=>s.replace(/./g,c=>'auoieaAUOIEA'.match(".(?=${c})")||c)
only.
=>unlya
Ruby
-p
, 31 bytesPruébalo en línea!
fuente
Pyth, 17 bytes
Pruébalo aquí
fuente
Japt 2.0,
2521 bytesMe divertí jugando al golf con Shaggy.
Ejecútalo aquí.
fuente
S.p(f)
usado.Java 10,
9787 bytes-10 bytes después de inspirarse en la respuesta JavaScript de @Arnauld (su versión de 60 bytes) .
Pruébalo en línea.
Explicación:
fuente
05AB1E ,
141311 bytesPruébalo en línea!
fuente
|
y»
: Pruébelo en línea: 11 bytes .Retina 0.8.2 , 20 bytes
Pruébalo en línea! El enlace incluye casos de prueba.
fuente
APL + WIN, 55 bytes
Solicitudes de cadena de entrada:
fuente
Paperas, 38 bytes
Las paperas normalmente no agregan un retorno de carro, ya que no vi un requisito para separar la entrada de la salida, se ve un poco extraño en la primera ejecución. Por ejemplo, la salida para el último caso de prueba se ve así:
Si desea agregar un retorno de carro, agregue dos bytes de esta manera:
fuente
Vim + tpope / vim-abolish , 30 bytes
Solución alternativa, también 30 bytes:
Según meta , las respuestas de vim pueden usar complementos sin penalización de bytes. Esta no es una respuesta vim, sino una respuesta vim + abolir .
Abolir es un complemento extremadamente útil. Esta sección de README describe muy bien cómo funciona este comando (el
Subvert
comando).fuente
CJam,
2919 bytesTry it online!
-10 bytes thanks to @Peter Taylor
Explicación:
fuente
q
lugar del
tomarla. El primer caso de prueba parece ser de varias líneas. También puedes acortar"eioua"
a_1m<
. De hecho, puedes ir más lejos y jugar golf a estoq"aeioua"_eu+_1m<er
AutoHotkey, 24 bytes
AuotHotkey reemplaza automáticamente las letras en mayúsculas y minúsculas.
fuente
PHP, 90 bytes
Pruébalo en línea
Código
Explicación
75 bytes si se ejecuta con el
php -r
uso$argv
fuente
J, 33 bytes
Try it online!
fuente
str, 18 bytes
Try it online!
Explanation
fuente
PHP, 38 bytes
Quite simple, not very creative, uses
strtr
to replace the vowels:Run with
echo '<input>' | php -nF <filename>
or Try it online.fuente
argn
? If so then that's not valid; you'd need to pass the string as an argument and use$argv1]
instead.-F
flag, then it works with input on the command line. From the PHP docs on options:-F --process-file PHP file to execute for every input line. Added in PHP 5.
The Try it online variable defining is just because some people don't have PHP installed locally, and I couldn't get the-F
flag working in TIO.q/kdb+,
3633 bytesSolution:
Examples:
Explanation:
Figure out index of vowels, add one to push along to the next and index in. Still think this approach can be significantly improved...
Bonus:
My old **36 byte(()) solution which I think is quite cool, but need to golf down the lists to make it competetive:
fuente
Charcoal, 35 bytes
Try it online!
Naive method.
Explanation:
fuente
PHP, 76 bytes.
Check it out!
This was the shortest I was able to do this in PHP.
fuente