Générer un mot prononçable

16

Le défi est simple:

générer un mot.

Caractéristiques:

  • Le mot doit être prononçable.
    • Ceci est défini comme «alternant entre une consonne et une voyelle».
    • Une consonne est l'une des lettres suivantes: bcdfghjklmnpqrstvwxz
    • Une voyelle est l'une des lettres suivantes: aeiouy
  • Le mot doit être généré de manière aléatoire.
  • Les mots doivent pouvoir contenir chaque consonne et voyelle. (Vous ne pouvez pas simplement utiliser bcdfpour les consonnes et les aeivoyelles.)
  • Le mot doit contenir 10 lettres.
  • Le code le plus court (en nombre de caractères) gagne.
Poignée de porte
la source
7
Avec cette bande xkcd à l'esprit, le programme echo buxitiwymuest techniquement conforme aux spécifications. Je vous assure, j'ai généré le mot au hasard: P
AardvarkSoup
1
@AardvarkSoup "Les mots doivent pouvoir contenir chaque consonne et voyelle"
Poignée de porte
1
@Kartik dépend du contexte, en «oui» c'est une consonne, en «pourquoi» c'est une voyelle, mais cela rendrait impossible de définir un mot prononçable comme alternant entre voyelles et consonnes, par exemple. yyyyyyyy serait un mot valide.
CJStuart
1
J'ai fait un générateur sur Scratch il y a quelque temps. Il y avait des règles spécifiques pour quand vous pouvez traiter ycomme une voyelle, où vous pouvez utiliser qet x, et quand vous pouvez utiliser des combinaisons de deux lettres comme ngouea
Esolanging Fruit

Réponses:

7

GolfScript, 32 caractères

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

Exécutez-le en ligne .

Howard
la source
8

Ruby: 56 caractères

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

Exemples de sorties:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz
Paul Prestidge
la source
1
'aeiouy'.charsserait un caractère plus court.
Howard
@Howard alors l'opérateur de soustraction relanceTypeError: can't convert Enumerator into Array
John Dvorak
@JanDvorak Désolé, j'ai oublié de mentionner que vous avez besoin de Ruby 2.0 pour cette astuce.
Howard
7

Python, 81

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

Bonne chance pour les prononcer.

grc
la source
Ils sont en fait assez faciles à prononcer, par exemple le premier mot que j'ai reçu était "viketuziwo":P
Poignée de porte
@ Doorknob c'est peut-être juste ma chance. Je reçois toujours des «mots» comme «qijepyjyga». Les tentatives de mon ordinateur pour les prononcer compensent cependant :)
grc
3
Je me suis juste beaucoup amusé à faire python grc.py | saysur ma machine. Merci pour l'idée.
Kaya
7

COBOL, 255

J'apprends donc COBOL en ce moment. Utilisé cette question comme pratique. J'ai essayé de jouer au golf.

C'est 255 sans le premier espace blanc et 286 octets avec.

Pour ce que ça vaut, cela fonctionne dans Microfocus COBOL pour VS2012, et je n'ai aucune idée si cela fonctionnera ailleurs.

       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
Céréale
la source
6

APL (34)

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

JavaScript, 74

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

Ne génère pas toutes les combinaisons, mais je pense que toutes les consonnes et voyelles apparaissent.

JavaScript, 79

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

Version plus "aléatoire".

copie
la source
À quoi ça ^0sert?
Alpha
1
@Alpha Math.randomdonne un flottant, nous avons besoin d'un entier. ^0tronque le nombre
copie le
Astuce. Je n'ai jamais vu l' ^opérateur en JavaScript auparavant et j'ai moins entendu parler de son utilisation pour tronquer un flottant. Merci!
Alpha
@copy j'aime l'utilisation de^
Math chiller
4

Ruby: 70 66 caractères

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

Exemple d'exécution:

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
homme au travail
la source
Vous pouvez utiliser 10.timespour un caractère de moins.
Howard
1
De plus, la question n'exige pas que chaque lettre ait la même probabilité. *10-> *4, ignorer *3, rand 60-> rand 20et vous avez enregistré 3 caractères.
Howard
Bonne prise sur la règle, @Howard. Je vous remercie.
manatwork
4

R: 105 caractères

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
la source
4

J (51)

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

Traitement, 100 99 93 87

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

En examinant de plus près la question, je vois qu'elle ne nécessite aucune sortie. J'ai ajusté cela en conséquence.

Céréale
la source
3

Objectif-C, 129

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

Avec l'aide de Daniero

(J'adore utiliser l' opérateur de tendance (->)

jsedano
la source
3

Java AKA la langue la plus verbeuse jamais créée, 176 avec l'aide de Doorknob, Daniero et Peter Taylor (merci les gars!)

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)));}}

Non 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
la source
1
Améliorations suggérées: passer String a[]à String[]a(-1 caractères), passer w W = new w();à w W=new w();(-2 caractères)
Poignée de porte
Suggestions: que le mot commence toujours par une consonne (ou une pelle); pas besoin de randomiser cela quand la question ne le mentionne pas! Donc, sautez le booléen fet utilisez à la i%2place. De plus, la forboucle peut être raccourcie, et vous pouvez placer les deux chaînes à l'intérieur de l'opérateur conditionnel (également, pas besoin de parens ici), et utiliser le charAtà l'extérieur. Voici le tout, 195 CHARS, 38 ENREGISTRÉS :import 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)));}}
daniero
2
«Java AKA, la langue la plus verbeuse jamais créée» - Avez-vous déjà essayé Shakespeare ? ;-)
manatwork
1
@manatwork, n'oubliez pas de supprimer l'importation une fois que vous ne l'avez utilisée qu'à un seul endroit.
Peter Taylor
1
@manatwork peut-être que nous aimons lisp ?? ok, désolé, je vais retirer ces parenthèses quand je rentre du travail
jsedano
3

Javascript, 85

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

S'il est exécuté à partir de la console, la sortie est affichée. L'affichage explicite ajouterait alert(s)8 caractères, encore plus court que les autres solutions JS.

Merci C5H8NNaO4 et Howard!

tomsmeding
la source
Bien joué, enregistrez un personnage en supprimant le dernier ';'
C5H8NNaO4
1
Au lieu de cela, ~~(###)vous pouvez écrire ###|0ce qui enregistre 4 caractères.
Howard
3

Javascript, 135 122 96 86 caractères

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]
Poignée de porte
la source
3

PHP, 100 caractères

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>
Juan José Sedano
la source
en fait, je pense que cela fait 100 caractères
Cristian Lupascu
3

Outils Unix: 73 octets

Et le temps de fonctionnement n'est pas garanti :)

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

Le seul problème est que la chaîne générée commencera à chaque fois par une "voyelle".

(edit: changé ' 'en ''dans les args de paste) (un autre edit: supprimé -P des options grep, grâce au manatwork )

pgy
la source
Quelque chose pourrait être affiné autour des grepparamètres. J'ai obtenu «de e ap ag ak».
manatwork
Hmm ... étrange. Je n'ai rien de tel. Je pensais que ce -aserait suffisant.
pgy
1
Mon test indique que -Pc'est celui-là. Semble que l'homme met en garde contre son statut hautement expérimental avec une raison. ( grep2.16) Mais de toute façon, cela fonctionne très bien sans -P.
manatwork
Vous avez raison merci, je n'y ai pas pensé. Je ne sais même pas pourquoi je l'ai utilisé -Pen premier lieu. Je vais modifier ma réponse.
pgy
1
Par ailleurs, tr -d \\nest plus court pour rejoindre les lignes.
manatwork
3

Pyth, 26 caractères

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

Vous pouvez l'essayer dans le compilateur en ligne ici.

Quelqu'un a posté un défi très similaire, mais il a été clôturé après avoir trouvé une solution. Je ne m'en étais pas rendu compte, mais cette question est antérieure à la création de Pyth. Quoi qu'il en soit, voici la répartition:

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

Chaque fois que la boucle est exécutée, J passe d'une liste de consonnes à une liste de voyelles. De cette façon, nous pouvons simplement choisir une lettre aléatoire de J à chaque fois.
Il peut y avoir un moyen d'initialiser J dans la boucle ou de supprimer les affectations explicites de la boucle, mais je n'ai pas encore réussi avec les deux.

Mike Bufardeci
la source
1
Remplacer les anciennes questions est généralement considéré comme correct. Cependant, lorsque vous utilisez un langage plus récent que la question (j'ai créé Pyth en 2014), vous devez le noter dans votre réponse.
isaacg
Merci d'avoir clarifié ça pour moi. Je ne savais pas que Pyth avait été créé après cette question et je l'ai ajouté à la réponse.
Mike Bufardeci
3

APL 30 26

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

L'explication est très similaire à la version précédente ci-dessous, juste réorganisée un peu pour jouer au golf avec la solution.

Remarque: ⎕IO est défini sur 0


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

Explication:

'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
la source
1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)mais c'est un octet plus court.
lstefano
1
Le report de 'A' pour ⎕Aenregistrer un autre octet:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám
Agréable! jusqu'à 26. Merci
Moris Zucca
2

PHP 79 octets

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

Assez concis.

primo
la source
2

C: 101

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

Javascript, 104 87

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

golfé beaucoup de choses inutiles simples, toujours pas aussi belles que celles de copys

Oh, et celui-là vient de se produire pendant le golf: "dydudelidu"

Maintenant, j'en ai essayé un en utilisant l'approche des 2 caractères à la fois. Il s'avère que c'est presque le même que le deuxième copys, donc je ne peux pas le compter, également à 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]

C5H8NNaO4
la source
2

Brachylog , 9 octets

Ḍ;Ẉṣᵐzh₅c

Essayez-le en ligne!

Donne la sortie sous forme de liste de lettres via la variable de sortie.

   ṣ         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.
Chaîne indépendante
la source
1

F # , 166 caractères

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
la source
1

K, 40 octets

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

5?"abc" générera 5 lettres aléatoires à partir de la chaîne donnée.

5?/: générera 5 lettres aléatoires à partir de chacune des chaînes de droite, produisant deux listes.

+ transpose ces deux listes, nous donnant une liste de tuples avec un caractère aléatoire de la première liste, puis un de la deuxième liste.

,/ est "raze" - fusionnez tous ces tuples en séquence.

K5 peut le faire en 33 octets en construisant l'alphabet plus intelligemment puis en utilisant "except" ( ^) pour supprimer les voyelles, mais K5 est beaucoup trop nouveau pour être légal dans cette question:

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

R, 83 octets

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

Générez toutes les séquences de voyelles-consonnes possibles dans une matrice, puis échantillonnez au hasard 5 d'entre elles, ce qui donne un mot de 10 lettres.

rturnbull
la source
0

Gelée , 13 octets

Øy,ØYẊ€Zs5ḢŒl

Explication:

Ø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.

Essayez-le en ligne!

Camarade SparklePony
la source