Dada una cadena de entrada, de salida que cadena con todas las vocales a, e, i, oy ucambió 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

yvocales ...;)yuna vocal, pero el último desafío donde dijeyfue una vocal ¡Me preguntaron por qué elegí eso!Respuestas:
Jalea , 15 bytes
Pruébalo en línea!
Cómo funciona
fuente
/usr/share/dict/wordsde 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
-pCorre 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
ien el segundo ciclo?Arrays.shufflemí 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
-pbanderafuente
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 lacharconvierte como una matriz.Lo canalizamos en una
Where-Objectcláusula para extraer esos elementos que son-matchvocales, y los canalizamosSort-Objectcon{Get-Random}el mecanismo de clasificación. Las llamadasGet-Randomsin calificadores devolverán un número entero entre0y[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$ipara la próxima vez. De lo contrario, mostramos el carácter actual. Todo eso está encapsulado en parens y-joineditado 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
$nde los caracteres y haciendo coincidir cada vocal para obtener elcharconjunto 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