Dada una cadena de entrada, de salida que cadena con todas las vocales a
, e
, i
, o
y u
cambió al azar entre sí.
Por ejemplo, en la cadena this is a test
, hay 4 vocales: [i, i, a, e]
. Por lo tanto, una combinación válida de esas vocales podría estar [a, i, e, i]
produciendo la salida thas is e tist
.
Sobre barajar
Todas las mezclas serán igualmente probables si consideramos que las vocales iguales son distintas . Para el ejemplo anterior, esos 24 shuffles son posibles:
[i 1 , i 2 , a, e] [i 1 , i 2 , e, a] [i 1 , a, i 2 , e] [i 1 , a, e, i 2 ] [i 1 , e, i 2 , a] [i 1 , e, a, i 2 ] [i 2 , i 1 , a, e] [i 2 , i 1 , e, a] [i 2 , a, i 1 , e] [i 2 , a, e, i 1 ] [i 2 , e, i 1 , a] [i 2 , e, a, i 1 ] [a, i 1 , i 2 , e] [a, i 1 , e, i 2 ] [a, i 2 , i 1 , e] [a, i 2 , e, i 1 ] [a, e, i 1 , i 2 ] [a, e, i 2 , i 1 ] [e, i 1 , i 2 , a] [e, i 1 , a, i 2 ] [e, i 2 , i 1 , a] [e, i 2 , a, i 1 ] [e, a, i 1 , i 2 ] [e, a, i 2 , i 1 ]
Cada uno debe ser igualmente probable.
No puede intentar barajar aleatoriamente la cadena completa hasta encontrar una donde todas las vocales estén en el lugar correcto. En resumen, el tiempo de ejecución de su código será constante si la entrada es constante.
Entradas y salidas
Puede suponer que todas las letras en la entrada serán minúsculas o mayúsculas. También puede admitir carcasa mixta, aunque esto no le dará ninguna bonificación.
La entrada siempre consistirá en caracteres ASCII imprimibles. Todos los caracteres que están en la entrada deben estar en la salida, solo las vocales deben mezclarse y nada más.
La entrada puede estar vacía. No hay garantía de que la entrada contendrá al menos una vocal o al menos una no vocal.
Puede tomar la entrada de
STDIN
, como parámetro de función, o algo similar.Puede imprimir el resultado
STDOUT
, devolverlo desde una función o algo similar.
Casos de prueba
La primera línea es la entrada dada. La segunda línea es una de las salidas posibles.
<empty string>
<empty string>
a
a
cwm
cwm
the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.
abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz
programming puzzles & code golf
pregromming pezzlos & coda gulf
fatalize
fitaleza
martin ender
mirten ander
Tanteo
Este es el código de golf , en cambio, la lista de camisas se gana en bytes .
fuente
y
vocales ...;)y
una vocal, pero el último desafío donde dijey
fue una vocal ¡Me preguntaron por qué elegí eso!Respuestas:
Jalea , 15 bytes
Pruébalo en línea!
Cómo funciona
fuente
/usr/share/dict/words
de mi computadora y lo incluí en el intérprete Jelly.R,
9291No puedo comentar todavía, así que estoy agregando mi propia respuesta, aunque muy similar a la respuesta de @ Andreï Kostyrka (lo creas o no, pero se me ocurrió de forma independiente).
Sin golf
Guardado un byte gracias a @Vlo
fuente
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
lugar de[[1]]
.R,
999889 bytes¡Parece ser la primera solución legible para humanos! ¡Gracias a Giuseppe por guardar 9 bytes!
Casos de prueba:
Parece que no hay forma de hacer una asignación de variable interna (dentro, como,
cat
), y nuevamente algunas personas van a demostrar que estoy equivocado ...fuente
letters[c(1,5,9,15,21)]
es 1 byte más largo, y OEIS A161536 y A215721 parecen ser de poca o ninguna ayuda tampoco.z=grepl("[aeiou]",x)
sería más corto?CJam, 23 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 17 bytes
Explicación
Pruébalo en línea!
fuente
Python 3, 109 bytes
Solo admite vocales en minúsculas.
Gracias a @Alissa por guardar un byte adicional.
Ideone it!
fuente
a.pop(random.randrange(0,len(a)))
lugar de barajar unTSQL, 275 bytes
Golfizado:
Sin golf:
Violín
fuente
Perl, 38 bytes
Incluye +1 para
-p
Corre con la frase en STDIN
vawols.pl
:fuente
Java 7,
243241 bytesSí, esto probablemente se puede jugar bastante, pero Java no tiene ninguna función integrada para este afaik ... Además, olvidé un poco la variante de matriz codegolf para
Collections.shuffle
...Sin golf y casos de prueba:
Pruébalo aquí
Salida posible:
fuente
i
en el segundo ciclo?Arrays.shuffle
mí me detuvo allí ...import java.util.*;String c(char[]z){List l=new ArrayList();int i=0,j=z.length;for(;i<j;i++)if("aeiou".indexOf(z[i])>=0){l.add(z[i]);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<j;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}
Perl 6 , 65 bytes
Función anónima. Asume una entrada en minúscula.
( pruébalo en línea )
fuente
Ruby 45 + 1 = 46 bytes
+1 byte para
-p
banderafuente
Brachylog , 39 bytes
Pruébalo en línea!
Explicación
Predicado principal:
Predicado 1:
Predicado 2:
fuente
Javascript (ES6),
7876 bytesGuardado 2 bytes gracias a apsillers
Versión alternativa propuesta por apsillers (76 bytes también)
Prueba
fuente
l=...
completamente y usar la función enlazada[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
como segundo argumento parareplace
(en lugar de una función de flecha). Tal vez haya una mejora en ese camino, pero aún no he encontrado una. Si utilizó un lenguaje JS-superset que tiene el operador de enlace::
, creo que podría hacerlo(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 bytes
Pruébalo en línea!
Explicación
fuente
Japt v2.0a0,
1413 bytesIntentalo
Explicación
fuente
Pyth, 26 bytes
Un programa que toma la entrada de una cadena entre comillas e imprime la cadena aleatoria.
Pruébalo en línea
Cómo funciona
fuente
PHP,
144129 bytesUsando entrada minúscula
Explicación:
fuente
En realidad, 24 bytes
Pruébalo en línea!
Explicación:
fuente
Bash, 75 bytes
Toma la cadena como argumento e imprime el resultado en stdout.
P.ej
huellas dactilares
fuente
Bash, 89
Asume que todas las entradas están en minúsculas.
fuente
PowerShell v3 +,
15599 bytesGrandes apoyos a @ Ben Owen para el golf de 56 bytes
Toma entrada
$n
, esperando todas las minúsculas, inmediatamente lachar
convierte como una matriz.Lo canalizamos en una
Where-Object
cláusula para extraer esos elementos que son-match
vocales, y los canalizamosSort-Object
con{Get-Random}
el mecanismo de clasificación. Las llamadasGet-Random
sin calificadores devolverán un número entero entre0
y[int32]::MaxValue
, es decir, asignar pesos aleatorios a cada elemento sobre la marcha. Almacenamos las vocales aleatorias en$a
.Finalmente, nos conectamos
$n
. Para cada elemento,|%{...}
si el carácter actual está en alguna parte-in
$a
, mostramos el siguiente elemento$a
, después del incremento$i
para la próxima vez. De lo contrario, mostramos el carácter actual. Todo eso está encapsulado en parens y-join
editado en una cadena. Esa cadena se deja en la tubería, y la salida está implícita al final del programa.Casos de prueba
fuente
$n
de los caracteres y haciendo coincidir cada vocal para obtener elchar
conjunto de vocales. Algo así como:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 bytes
Solo en minúsculas.
fuente
PHP> = 5.3 ,
139136 bytes (y sin errores)fuente
K (oK) , 29 bytes
Solución:
Pruébalo en línea!
Ejemplos:
Explicación:
Encuentre ubicaciones de las vocales y reemplácelas con las vocales dibujadas en un orden aleatorio.
fuente
APL (Dyalog Unicode) , 21 bytes
Pruébalo en línea!
Asume mayúsculas.
fuente
{⍵∊'AEIOU'}
Funcionaría∊∘'AEIOU'
?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Kotlin ,
122118 bytesPruébalo en línea!
fuente