El programa debe tomar una cadena como entrada e invertir las consonantes, manteniendo el orden de las vocales. Todas las letras estarán en minúsculas, por lo que no tiene que preocuparse por la carcasa. Siguen ejemplos.
Entrada:
a test case
.
Las consonantes aquí sont,s,t,c,s
. Ellos deben entrar en orden inverso, es decir,s,c,t,s,t
y de vuelta insertado en la secuencia de las mismas posiciones en las que se encontraban los personajes pre-invertido:a sect sate
.Entrada:
well-done
. Salida:nedl-lowe
.- Entrada:
reverse the consonants
. Salida:setenne sne cohtosarvr
.
Este es el código de golf, gana la solución más corta.
Y
debe considerarse vocal independientemente de lo que sea y no invertida.
Cualquier cosa, así como números, signos de puntuación, comillas y otros símbolos ( @#$%^&*(){}[]\|/<>~-_+=`
), podrían aparecer en la entrada.
-[...]
específico de la retina, o específico de las expresiones regulares de .net o es una característica general de expresiones regulares que he pasado por alto hasta ahora?[...&&[^...]]
.<[b..z] - [eiouy]>
o<:Ll - [aeiouy]>
para hacer la diferencia establecidaPython 2, 86 bytes
Toma la entrada como una cadena entre comillas. Itera a través de la entrada, reemplazando cada consonante con
%s
ins
. La tuplac
almacena las consonantes encontradas en orden inverso. Luego, el formato de cadena reemplaza el%s
's ins
con las consonantes enc
.Gracias a Sp3000 por la verificación de consonantes, que ahorró 4 bytes al enumerar las consonantes.
fuente
Jalea ,
2220 bytesPruébalo en línea!
Cómo funciona
fuente
JavaScript ES6,
82818078 bytes¡Ahorré un byte gracias a cada uno de Martin y Leaky Nun, y 2 bytes a Neil!
Pruebas
fuente
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
?_
, que es un símbolo que el OP quiere mantener en su lugar.q.onchange=q.onkeydown=q.onkeyup=
a soloq.oninput=
...Python 2, 106 bytes
Espera entrada
"quotes"
, lo que creo que está permitido.fuente
Pyke, 18 bytes
Pruébalo aquí!
o 16 bytes con la nueva versión:
(Cambie así si for devuelve toda la salida de cadena y tuvo entrada de cadena, devuelva cadena en lugar de una lista)
Pruébalo aquí!
~c
contiene las consonantes:bcdfghjklmnpqrstvwxz
fuente
GNU sed, 73
La puntuación incluye +1 para la
-r
bandera pasada a sed.Ideona
Cambia repetidamente la primera y la última consonante en minúsculas y las convierte a mayúsculas, hasta que no haya más coincidencias. Luego convierta toda la cadena de nuevo a minúsculas.
fuente
J, 53 bytes
Quizás no sea la mejor manera, pero quería usarlo,
C.
ya que esto se puede resolver mediante permutaciones.Uso
Explicación
fuente
MATL,
182221 bytes1 byte guardado gracias a @Luis
Desafortunadamente, la parte más larga de esto es obtener la lista de consonantes (
2Y211Y2'y'hX-
).Pruébalo en línea!
Explicación
fuente
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 bytes)
+4 de penalización por correr con
-0777
bandera, lo que configura a Perl en modo sorber para manejar correctamente las nuevas líneas.Acepta entradas a través de STDIN e imprime en STDOUT.
Explicación
fuente
JavaScript (ES6), 72 bytes
Al dividir los
/([^\W\d_aeiouy])/
resultados, las consonantes caen en las entradas impares de la matriz. Entonces es suficiente cambiar esas entradas con la entrada equivalente contando desde el final de la matriz y unir el resultado.fuente
JavaScript (ES6), 57
70Editar Amazing 20% thx @Neil ahorro
Tarde a la fiesta, pero parece que todas las personas de JavaScript se perdieron algo
Prueba
fuente
c.pop()
.Perl 5,
926855 bytesGuardado 37 bytes gracias a @manatwork ayuda 's. ;-)
Una traducción de la solución @Lynn Python a Perl.
fuente
g
fuerza " " ayudaría allí:@s=split//;
→@s=/./g;
yfor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Quiero decir,m//
con elg
modificador devuelve una matriz de todas las coincidencias.@b=@a=…
. También elfor
tener una única instrucción en el bloque (en cuyo caso el;
no es necesario después de él), puede transformarla en modificador de declaración y piezas de los delimitadores:print$_~~@b?pop@a:$_ for/./g
. (Yepp, lo siento, se perdió que: no hay necesidad de almacenar@s
valor en una variable.)Pyth,
26252423 bytesBanco de pruebas.
fuente
Julia, 53 bytes
Esto toma una matriz de caracteres como entrada e invierte sus consonantes en el lugar. Pruébalo en línea!
El crédito va a @ Sp3000 para la verificación de consonantes en minúsculas.
Cómo funciona
i=find(...,s)
produce todos los índices de s para los cuales el predicado ... devuelve verdadero y los guarda en la variable i .c->'}'>c∉"aeiouy"<"$c"
realiza tres pruebas y devuelve verdadero si y solo si todas son positivas.'}'>c
comprueba si el carácter c viene antes de { ."aeiou"
comprueba si la cadena c viene después de a .c∉"aeiouy"
verifica que c no es una vocal.Finalmente,
s[i]
produce todas las consonantes y lass[flipud(i)]=s[i]
asigna a posiciones en s que corresponden a los índices invertidos en en i .fuente
∉
)?Java,
319305261188 bytesGracias a @ Leaky Nun por ayudar con esto :-)
Antiguo:
Inspiración tomada de aquí ❤
Sin golf
fuente
0
como personaje especial (null
se garantiza que no estará en la Cadena), y puede verificarlos[i]<1
(no hay caracteres negativos)char
pedazos. :)Ruby,
5350 bytes-3 bytes de @manatwork
Pruébalo aquí
fuente
Python 2,
10398100bytesPuerto de mi respuesta de JavaScript. Editar: ahorré 5 bytes gracias a @ Dennis ♦, de los cuales tuve que pasar rápidamente dos dígitos fijos.
fuente
R, 120 bytes
Nueva respuesta:
toma una cadena de caracteres como x
La respuesta anterior a continuación (110 bytes) fue deficiente por mi parte, lo que acaba de revertir las consonantes:
fuente
APLX, 31 bytes
⎕a~'aeoiuy'
el alfabeto en minúsculas sin vocalest←⍞
almacena la entrada de caracteres como tc←(
...)∊
almacena la "consonante booleana"? como ct/⍨
extract (consonantes) de t⌽
reverse(c/t)←
reemplaza consonantes con (los invertidos)t
devuelve la cadena modificadafuente
Python 2.7, 144 bytes
Este primero crea una lista invertida de las consonantes, luego inserta cada uno de los otros caracteres en su índice original.
Sin golf:
https://repl.it/C30O
fuente
Mathematica 216 bytes
fuente
Haskell,
157131 bytesActualizar
La solución de @ atlasologist me hizo darme cuenta de que solo necesito una lista de las consonantes en lugar de pares (aunque no es necesario revertirlas ya que estoy usando el pliegue derecho).
Sin golf
Antiguo
Crea una lista de pares de consonantes, luego camina a través de la cuerda reemplazando cada consonante usando dicha lista.
Un poco primitivo, pero quería resolver esto sin mirar primero las respuestas. :)
fuente
if ... then ... else
. b)f
se escribe mejor como operador infijo, por ejemplo%
. c) No hay necesidad para el par interno de()
en((r:q),s)
. d) reemplazar""
con_
en la 2da línea def
. Todo en todos (k
se mantiene igual):c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 bytes (no competitivos)Se guardó un byte porque s-lang ya no requiere el último paréntesis de argumento
Pruébalo en línea!
Comencé a trabajar en un lenguaje de golf de manipulación de cuerdas (he estado esperando hacer esto por un tiempo ahora), y pensé que sería una pregunta divertida para trabajar.
Explicación:
r
invierte la cadena con una coincidencia de caracteres regex dada (si no se proporciona ningún argumento regex, el valor predeterminado será.
)[
comienza el argumento opcional regex parar
(?![aeiouy])\w
la expresión regular para que coincida con cualquier carácter consonante excluyendo y (desafortunadamente JavaScript no permite la resta de la clase de caracteres)]
generalmente finaliza el argumento opcional regex parar
, pero no lo necesitamos ya que es la última función y el último argumentofuente
Matlab, 67 caracteres
Para una entrada
'this is a string of- stuff.'
produce
s = ffit is a fgnirt os- ssuht.
si
son los índices de las consonantes en la cadena de entrada. La declaración final reemplaza esos caracteres con los mismos caracteres pero en orden inverso mediante indexación.fuente
-
. La pregunta dice que cualquier puntuación es una entrada válida y debe ignorarse. Además, deberá usarinput('')
para tomar la entrada o escribir una función anónima porque no podemos aceptar una variable como entrada como esta.flip
para invertir la cadena.ans
, ya que a eso se le asigna una entrada predeterminada a la consola Matlab?s=input('')
o de alguna manera crear esto en una función anónima@(s)
PowerShell , 81 bytes
Pruébalo en línea!
Menos golfizado:
PowerShell , 88 bytes, -f
Pruébalo en línea!
fuente
q / kdb +, 45 bytes
Solución:
Explicación:
Encuentre índices de las consonantes y reemplácelas con las consonantes invertidas:
Notas:
Tenía 3 formas de construir la lista de consonantes, la de la solución es ligeramente mejor que las alternativas:
"bcdfghjklmnpqrstvwxz"
por 22 caracteres (lo más aburrido).Q.a _/0 3 6 11 16 19
por 21 caracteres (algo genial, suelte cada índice).Q.a except"aeiouy"
por 19 caracteres (el segundo más aburrido)fuente
Jq 1.5 ,
289263 bytesExplicación
Ejecución de la muestra
Pruébalo en línea
fuente
Java 8, 157 bytes
Pruébalo en línea!
Nota: imprime advertencias del compilador en stderr.
Explicación:
No voy a mentir, mi único objetivo era superar esta respuesta
fuente
APL (Dyalog Extended) , 22 bytes
Pruébalo en línea!
fuente