Generar una palabra pronunciable

16

El desafío es simple:

generar una palabra

Especificaciones:

  • La palabra debe ser pronunciable.
    • Esto se define como "alternar entre una consonante y una vocal".
    • Una consonante es una de las siguientes letras: bcdfghjklmnpqrstvwxz
    • Una vocal es una de las siguientes letras: aeiouy
  • Word debe ser generado aleatoriamente.
  • Las palabras deben poder contener todas las consonantes y vocales. (No se puede usar solo bcdfpara consonantes y aeivocales).
  • La palabra debe contener 10 letras.
  • El código más corto (en el recuento de caracteres) gana.
Pomo de la puerta
fuente
77
Con esta tira xkcd en mente, el programa echo buxitiwymutécnicamente se ajusta a la especificación. Te aseguro que generé la palabra al azar: P
AardvarkSoup
1
@AardvarkSoup "Las palabras deben poder contener todas las consonantes y vocales"
Pomo de la puerta
1
@Kartik depende del contexto, en 'sí' es una consonante, en 'por qué' es una vocal, pero esto haría imposible definir una palabra pronunciable como alterna entre vocales y consonantes, por ejemplo. aaaaaaaa sería una palabra válida.
CJStuart
1
De hecho, hice un generador en Scratch hace un tiempo. Tenía reglas específicas para cuándo puedes tratar ycomo una vocal, dónde puedes usar qy x, y cuándo puedes usar combinaciones de dos letras como ngoea
Esolanging Fruit el

Respuestas:

7

GolfScript, 32 caracteres

['aeiouy'.123,97>^]5*{.,rand=}%+

Ejecútalo en línea .

Howard
fuente
8

Ruby: 56 caracteres

([v=%w(a e i o u y),[*?a..?z]-v]*5).map{|a|$><<a.sample}

Salidas de ejemplo:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz
Paul Prestidge
fuente
1
'aeiouy'.charsSería un char más corto.
Howard
@Howard luego sube el operador de restaTypeError: can't convert Enumerator into Array
John Dvorak
@ JanDvorak Lo siento, olvidé mencionar que necesitas Ruby 2.0 para este truco.
Howard
7

Python, 81

from random import*
print''.join(map(choice,["bcdfghjklmnpqrstvwxz","aeiouy"]*5))

Buena suerte al pronunciarlos.

grc
fuente
En realidad, son bastante fáciles de pronunciar, por ejemplo, la primera palabra que me dieron fue "viketuziwo":P
Pomo
@Pomo de la puerta tal vez sea solo mi suerte. Sigo recibiendo 'palabras' como "qijepyjyga". Los intentos de mi computadora para pronuncian compensan aunque :)
GRC
3
Me divertí mucho haciendo python grc.py | sayen mi máquina. Gracias por la idea
Kaya
7

COBOL, 255

Así que estoy aprendiendo COBOL en este momento. Usé esta pregunta como algo de práctica. Intenté jugar al golf.

Es 255 sin el espacio en blanco inicial y 286 bytes con.

Por lo que vale, esto se ejecuta en Microfocus COBOL para VS2012, y no tengo idea de si se ejecutará en otro lugar.

       1 l pic 99 1 s pic x(26) value'aeiouybcdfghjklmnpqrstvwxz' 1 r
       pic 99 1 v pic 9 1 q pic 99. accept q perform test after varying
       l from 1 by 1 until l>9 compute v=function mod(l,2) compute r=1+
       function random(q*l)*5+v*15+v*5 display s(r:1)end-perform exit
Cereal
fuente
6

APL (34)

,⍉↑(V[5?6])((⎕A~V←'AEIOUY')[5?20])
marinus
fuente
6

JavaScript, 74

for(a=b=[];a++-5;)b+="bcdfghjklmnpqrstvwxz"[c=new Date*a%20]+"aeiouy"[c%6]

No genera todas las combinaciones, pero creo que aparecen todas las consonantes y vocales.

JavaScript, 79

for(a=b=[];a--+5;)b+="bcdfghjklmnpqrstvwxz"[c=Math.random()*20^0]+"aeiouy"[c%6]

Más versión "al azar".

Copiar
fuente
¿Qué es la ^0de?
Alfa
1
@Alpha Math.randomda un flotador, necesitamos un número entero. ^0trunca el número
copie el
Truco inteligente. No he visto el ^operador en JavaScript antes y he oído hablar de usarlo para truncar un flotante. ¡Gracias!
Alpha
@copy me gusta el uso de^
Math chiller
4

Ruby: 70 66 caracteres

10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}

Ejecución de muestra:

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
izogoreroz

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
onewijolen

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
amilyfilil
hombre trabajando
fuente
Puedes usar 10.timespor un char menos.
Howard
1
Además, la pregunta no requiere que cada letra tenga la misma probabilidad. *10-> *4, omitir *3, rand 60-> rand 20y has guardado 3 caracteres.
Howard
Buena idea de la regla, @Howard. Gracias.
manatwork
4

R: 105 caracteres

a=c(1,5,9,15,21,25)
l=letters
s=sample
cat(apply(cbind(s(l[-a],5),s(l[a],5)),1,paste,collapse=""),sep="")
plannapus
fuente
4

J (51)

,|:>(<"1[5?6 20){&.>'aeiouy';'bcdfghjklmnpqrstvwxz'
marinus
fuente
4

Procesamiento, 100 99 93 87

int i=10;while(i-->0)"aeiouybcdfghjklmnpqrstvwxz".charAt((int)random(i%2*6,6+i%2*i*2));

Tras una inspección más cercana de la pregunta, veo que no requiere ningún resultado. He ajustado esto en consecuencia.

Cereal
fuente
3

Objetivo-C, 129

main(){int i=10;while(i-->0)printf("%c",[(i%2==0)?@"aeiouy":@"bcdfghjklmnpqrstvwxz"characterAtIndex:arc4random()%(6+(i%2)*14)]);}

Con la ayuda de Daniero

(Me encanta usar el tiende al operador (->)

jsedano
fuente
3

Java, también conocido como el lenguaje más detallado jamás creado, 176 con la ayuda de Doorknob, Daniero y Peter Taylor (¡gracias chicos!)

class w{public static void main(String[]a){int i=11;while(--i>0)System.out.print((i%2==0?"aeiouy":"bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6+(i%2)*14)));}}

Sin golf:

    class w {

        public static void main(String[] a) {
            int i = 11;
            while (--i > 0) {
                System.out.print((i % 2 == 0 ? "aeiouy" : "bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6 + (i % 2) * 14)));
            }
     }

}

jsedano
fuente
1
Mejoras sugeridas: cambio String a[]a String[]a(-1 caracteres), cambio w W = new w();a w W=new w();(-2 caracteres)
Pomo de la puerta
Sugerencias: Deje que la palabra siempre comience en una consonante (o enmarañada); ¡no es necesario aleatorizar esto cuando la pregunta no lo menciona! Por lo tanto, omita el booleano fy úselo en su i%2lugar. Además, el forbucle se puede acortar, y puede colocar ambas cadenas dentro del operador condicional (también, no es necesario utilizar parens aquí) y usar charAtel exterior. Aquí está todo, 195 CHARS, 38import java.util.*;class w{public static void main(String[]a){Random r=new Random();for(int i=0;++i<11;)System.out.print((i%2>0?"bcdfghjklmnpqrstvwxz":"aeiouy").charAt(r.nextInt(6+(i%2)*14)));}}
AHORRADOS
2
"Java, también conocido como el lenguaje más detallado jamás creado" - ¿Alguna vez has probado Shakespeare ? ;-)
manatwork
1
@manatwork, no olvides eliminar la importación una vez que la hayas usado solo en un lugar.
Peter Taylor
1
@manatwork tal vez nos gusta lisp ?? ok, lo siento, sacaré esos paréntesis cuando llegue a casa del trabajo
jsedano
3

Javascript, 85

for(r=Math.random,s="",i=5;i--;)s+="bcdfghjklmnpqrstvwxz"[20*r()|0]+"aeiouy"[6*r()|0]

Si se ejecuta desde la consola, se muestra la salida. La pantalla explícita agregaríaalert(s) 8 caracteres, aún más cortos que las otras soluciones JS.

Gracias C5H8NNaO4 y Howard!

tomsmeding
fuente
Agradable, guarda un personaje eliminando el último ';'
C5H8NNaO4
1
En lugar de ~~(###)usted puede escribir lo ###|0que ahorra 4 caracteres.
Howard
3

Javascript, 135 122 96 86 caracteres

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]
Pomo de la puerta
fuente
3

PHP, 100 caracteres

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>
Juan José Sedano
fuente
en realidad creo que son 100 caracteres de largo
Cristian Lupascu
3

Herramientas Unix: 73 bytes.

Y no se garantiza el tiempo de ejecución :)

</dev/urandom grep -ao '[aeiouy][bcdfghjklmnpqrstvwxz]'|head -5|paste -sd ''

El único problema es que la cadena generada comenzará con una "vocal" cada vez.

(editar: cambiado ' 'a ''en los argumentos de pegar) (otra edición: eliminado -P de las opciones de grep, gracias a manatwork )

pgy
fuente
Algo podría ajustarse en torno a los grepparámetros. Tengo "de e ap ag ak".
manatwork
Hmm ... extraño. No tengo nada de eso. Pensé -aque sería suficiente.
pgy
1
Mi prueba indica que esa -Pes la indicada . Parece que el hombre advierte sobre su estado altamente experimental con una razón. ( grep2.16) Pero de todos modos, funciona bien sin él -P.
manatwork
Tienes razón, gracias, no lo consideré. Ni siquiera sé por qué lo usé -Pen primer lugar. Editaré mi respuesta.
pgy
1
Por cierto, tr -d \\nes más corto para unir las líneas.
manatwork
3

Pyth, 26 caracteres

J-G"aeiouy"VT=k+kOJ=J-GJ;k

Puedes probarlo en el compilador en línea aquí.

Alguien publicó un desafío muy similar, pero se cerró después de que hice una solución. No me di cuenta, pero esta pregunta en realidad es anterior a la creación de Pyth. De todos modos, aquí está el desglose:

J                             Set string J equal to:
  G                            the entire alphabet (lowercase, in order)
 - "aeiouy"                    minus the vowels
           VT                 For n in range(1, 10):
             =k                   Set string k to:
                k                  k (defaults to empty string)
               + OJ                plus a random character from J
                   =J             Set J to:
                      G            the entire alphabet
                     - J           minus J
                        ;     End of loop
                         k    print k

Cada vez que se ejecuta el bucle, J cambia de ser una lista de consonantes a una lista de vocales. De esa manera, podemos elegir una letra aleatoria de J cada vez.
Puede haber una manera de inicializar J en el bucle o eliminar las asignaciones explícitas del bucle, pero aún no he tenido éxito con ninguno.

Mike Bufardeci
fuente
1
Topar viejas preguntas generalmente se considera bien. Sin embargo, cuando usa un lenguaje más nuevo que la pregunta (creé Pyth en 2014) debe tener esto en cuenta en su respuesta.
isaacg
Gracias por aclarar eso para mí. No me di cuenta de que Pyth fue creado después de esta pregunta y lo agregué a la respuesta.
Mike Bufardeci
3

APL 30 26

,('EIOUY'∪⎕A)[6(|,+)⍪5?20]

La explicación es muy similar a la versión anterior a continuación, solo se reordenó un poco para desarrollar la solución.

Nota: ⎕IO se establece en 0


('EIOUY'∪⎕A)[,6(|,(⍪+))5?20]

Explicación:

'EIOUY'∪⎕A    puts vowels in front of all letters.
5?20            for the indexes we start choosing 5 random numbers between 0 and 19
6(|,(⍪+))        then we sum 6 and the random numbers, convert to 5x1 matrix (⍪), add a column before this one containing 6 modulo the random numbers. 
                [[[ this one can be rewritten as: (6|n) , ⍪(6+n)  for easier understanding]]]
,6(|,(⍪+))5?20  the leading comma just converts the matrix to a vector, mixing the vowel and consonants indexes.

Tryapl.org

Moris Zucca
fuente
1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)pero es un byte más corto.
lstefano
1
Aplazamiento de 'A' para guardar ⎕Aotro byte:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám
¡Agradable! hasta 26. Gracias
Moris Zucca
2

PHP 79 bytes

<?for($c=bcdfghjklmnpqrstvwxz,$v=aeiouy;5>$i++;)echo$c[rand()%20],$v[rand()%6];

Bastante conciso.

primo
fuente
2

C: 101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}
Kevin
fuente
2

Javascript, 104 87

a="";for(e=10;e--;)a+=(b=e&1?"bcdfghjklmnpqrstvwxz":"aeiouy")[0|Math.random()*b.length]

jugó un montón de cosas simples e innecesarias, aún no tan bonitas como las de los copys

Ah, y ese solo funcionó durante el golf: "dydudelidu"

Ahora probé uno usando el enfoque de 2 caracteres a la vez. Resulta que es casi lo mismo que el segundo de las copias, así que no puedo contarlo, también en 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]

C5H8NNaO4
fuente
2

Brachylog , 9 bytes

Ḍ;Ẉṣᵐzh₅c

Pruébalo en línea!

Da salida como una lista de letras a través de la variable de salida.

   ṣ         Randomly shuffle
 ;  ᵐ        both
Ḍ            the consonants without y
  Ẉ          and the vowels with y,
     z       zip them into pairs,
      h₅     take the first five pairs,
             and output
        c    their concatenation.
Cadena no relacionada
fuente
1

F # , 166 caracteres

open System;String.Join("",(Random(),"aeiouybcdfghjklmnpqrstvwxz")|>(fun(r,s)->[0..5]|>List.collect(fun t->[s.Substring(6+r.Next()%20,1);s.Substring(r.Next()%6,1)])))
Shredderroy
fuente
1

K, 40 bytes

,/+5?/:("bcdfghjklmnpqrstvwxz";"aeiouy")

5?"abc" generará 5 letras al azar de la cadena dada.

5?/: generará 5 letras al azar de cada una de las cadenas a la derecha, produciendo dos listas.

+ transpone esas dos listas, dándonos una lista de tuplas con un carácter aleatorio de la primera lista y luego uno de la segunda lista.

,/ es "raze": fusiona todas esas tuplas en secuencia.

K5 puede hacer esto en 33 bytes construyendo el alfabeto de manera más inteligente y luego usando "excepto" ( ^) para eliminar las vocales, pero K5 es demasiado nuevo para ser legal en esta pregunta:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")
JohnE
fuente
1

R, 83 bytes

cat(outer((l<-letters)[a<-c(1,5,9,15,21,25)],l[-a],paste0)[sample(1:120,5)],sep="")

Genere todas las secuencias vocales-consonantes posibles en una matriz, luego muestree aleatoriamente 5 de ellas, produciendo una palabra de 10 letras.

rturnbull
fuente
0

Jalea , 13 bytes

Øy,ØYẊ€Zs5ḢŒl

Explicación:

Øy,ØYẊ€Zs5ḢŒl
Øy,ØY         Makes a list of two lists of characters: [[list-of-vowels-with-y], [list-of-consonants-without-y]]
     Ẋ€       Shuffle €ach.
       Z      Zip those two lists together. [[random-vowel, random-consonant],...]
        s5    Split them into chunks of five (because each pair contains two letters, this splits them into chunks of 10 letters)
          Ḣ   Take the list of 5 pairs.
           Œl Make each of the characters in it lowercase
              Implicit concatenation and print.

Pruébalo en línea!

Camarada SparklePony
fuente