Genera una parola pronunciabile


16

La sfida è semplice:

genera una parola.

specifiche tecniche:

  • La parola deve essere pronunciabile.
    • Questo è definito come "alternanza tra una consonante e una vocale".
    • Una consonante è una delle seguenti lettere: bcdfghjklmnpqrstvwxz
    • Una vocale è una delle seguenti lettere: aeiouy
  • La parola deve essere generata casualmente.
  • Le parole devono essere in grado di contenere ogni consonante e vocale. (Non puoi usare solo bcdfper consonanti e aeivocali.)
  • Word deve contenere 10 lettere.
  • Vince il codice più breve (nel conteggio dei caratteri).


7
Con questa striscia xkcd in mente, il programma echo buxitiwymuè conforme alle specifiche tecnicamente. Ti assicuro, ho generato la parola in modo casuale: P
— AardvarkSoup

1
@AardvarkSoup "Le parole devono essere in grado di contenere ogni consonante e vocale"
— Maniglia della porta

1
@Kartik dipende dal contesto, in "sì" è una consonante, in "perché" è una vocale, ma ciò renderebbe impossibile definire una parola pronunciabile come alternata di vocali e consonanti, ad es. yyyyyyyy sarebbe una parola valida.
— CJStuart,

1
In realtà ho creato un generatore su Scratch qualche tempo fa. Aveva regole specifiche per quando puoi trattare ycome una vocale, dove puoi usare qe x, e quando puoi usare combinazioni di due lettere come ngoea
— Esolanging Fruit

Risposte:


7

GolfScript, 32 caratteri

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

Eseguilo online .


8

Rubino: 56 caratteri

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

Esempi di output:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz

1
'aeiouy'.charssarebbe un carattere più corto.
— Howard,

@Howard poi l'operatore di sottrazione sollevaTypeError: can't convert Enumerator into Array
— John Dvorak il

@JanDvorak Siamo spiacenti, ho dimenticato di dire che hai bisogno di Ruby 2.0 per questo trucco.
— Howard,

7

Python, 81

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

Buona fortuna pronunciandoli.


In realtà sono abbastanza facili da pronunciare, ad esempio la prima parola che ho ricevuto è "viketuziwo":P
— Maniglia della porta

@Doorknob forse è solo la mia fortuna. Continuo a ricevere "parole" come "qijepyjyga". I tentativi del mio computer di pronunciarli compensano però :)
— GRC

3
Mi sono appena divertito molto a fare python grc.py | saysulla mia macchina. Grazie per l'idea
— Kaya,

7

COBOL, 255

Quindi sto imparando COBOL al momento. Ho usato questa domanda come pratica. Ho provato a golf.

È 255 senza lo spazio bianco iniziale e 286 byte con.

Per quello che vale, questo funziona con Microfocus COBOL per VS2012 e non ho idea se funzionerà altrove.

       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

6

APL (34)

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

6

JavaScript, 74

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

Non genera tutte le combinazioni, ma penso che appaiano tutte le consonanti e la vocale.

JavaScript, 79

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

Versione più "casuale".


A cosa serve ^0?
— Alpha,

1
@Alpha Math.randomdà un float, abbiamo bisogno di un numero intero. ^0tronca il numero
— copia il

Trucco intelligente. Non ho mai visto l' ^operatore in JavaScript prima e meno sentito parlare di usarlo per troncare un float. Grazie!
— Alpha,

@copy mi piace l'uso di^
— Math chiller

4

Rubino: 70 66 caratteri

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

Esecuzione di esempio:

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

È possibile utilizzare 10.timesper un carattere in meno.
— Howard,

1
Inoltre, la domanda non richiede che ogni lettera abbia la stessa probabilità. *10-> *4, salta *3, rand 60-> rand 20e hai salvato 3 caratteri.
— Howard,

Buona cattura della regola, @Howard. Grazie.
— arte

4

R: 105 caratteri

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="")

4

J (51)

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

4

Elaborazione, 100 99 93 87

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

A un esame più attento della domanda, vedo che non richiede alcun output. L'ho adattato di conseguenza.


3

Obiettivo-C, 129

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

Con l'aiuto di Daniero

(Adoro usare le tende per l' operatore (->)


3

Java AKA è il linguaggio più prolisso mai creato, 176 con l'aiuto di Doorknob, Daniero e Peter Taylor (grazie ragazzi!)

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

Ungolfed:

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

}


1
Miglioramenti suggeriti: modifica String a[]in String[]a(-1 caratteri), modifica w W = new w();in w W=new w();(-2 caratteri)
— Maniglia della porta

Suggerimenti: lascia che la parola inizi sempre su una consonante (o su una pala); non c'è bisogno di randomizzare questo quando la domanda non lo menziona! Quindi, salta il booleano fe usa i%2invece. Inoltre, il forloop può essere abbreviato e puoi inserire entrambe le stringhe all'interno dell'operatore condizionale (anche qui non sono necessarie parentesi) e utilizzare charAtl'esterno. Ecco il tutto, 195 CHARS, 38 SALVATI :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 è il linguaggio più prolisso mai creato" - Hai mai provato Shakespeare ? ;-)
— arte

1
@manatwork, non dimenticare di rimuovere l'importazione dopo averla utilizzata per essere utilizzata in un solo posto.
— Peter Taylor,

1
@manatwork forse ci piace lisp ?? ok, scusa,
— porterò

3

Javascript, 85

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

Se eseguito dalla console, viene mostrato l'output. La visualizzazione esplicita aggiungerebbe alert(s)8 caratteri, ancora più breve rispetto alle altre soluzioni JS.

Grazie C5H8NNaO4 e Howard!


Bello, salva un personaggio rimuovendo l'ultimo ';'
— C5H8NNaO4,

1
Invece di ~~(###)te puoi scrivere ###|0che salva 4 caratteri.
— Howard,

3

Javascript, 135 122 96 86 caratteri

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


3

Strumenti Unix: 73 byte

E tempo di esecuzione non garantito :)

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

L'unico problema è che la stringa generata inizierà ogni volta con una "vocale".

(modifica: cambiato ' 'in ''in args of paste) (un'altra modifica: rimosso -P dalle opzioni grep, grazie a manatwork )


Qualcosa potrebbe essere messo a punto intorno ai grepparametri. Ho ricevuto "of a ap ap ak".
— arte

Hmm ... strano. Non ho niente del genere. Ho pensato che -asarebbe bastato.
— Pgy

1
Il mio test indica che -Pè quello. Sembra che l'uomo metta in guardia sul suo stato altamente sperimentale con una ragione. ( grep2.16) Ma funziona bene anche senza -P.
— arte

Hai ragione, grazie, non l'ho considerato. Non so nemmeno perché l'ho usato -Pin primo luogo. Modificherò la mia risposta.
— Pgy

1
A proposito, tr -d \\nè più breve per unire le linee.
— arte

3

Pyth, 26 caratteri

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

Puoi provarlo nel compilatore online qui.

Qualcuno ha pubblicato una sfida molto simile ma è stata chiusa dopo che avevo fatto una soluzione. Non me ne sono reso conto, ma questa domanda precede la creazione di Pyth. Comunque, ecco la ripartizione:

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

Ogni volta che viene eseguito il ciclo, J passa dall'essere un elenco di consonanti a un elenco di vocali. In questo modo possiamo semplicemente scegliere una lettera casuale da J ogni volta.
Potrebbe esserci un modo per inizializzare J nel loop o rimuovere le assegnazioni esplicite dal loop, ma non ho ancora avuto successo con nessuno dei due.


1
Generalmente le vecchie domande vengono considerate valide. Tuttavia, quando usi un linguaggio più recente della domanda (ho creato Pyth nel 2014) dovresti notare questo nella tua risposta.
— Isaacg

Grazie per avermi chiarito. Non mi ero reso conto che Pyth fosse stato creato dopo questa domanda e l'ho aggiunto alla risposta.
— Mike Bufardeci,

3

APL 30 26

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

La spiegazione è molto simile alla versione precedente, appena riordinata un po 'per golfare la soluzione.

Nota: ⎕IO è impostato su 0


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

Spiegazione:

'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


1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)ma è più corto di un byte.
— lstefano,

1
Rimandare "A" per ⎕Asalvare un altro byte:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
— Adám,

Bello! fino al 26. Grazie
— Moris Zucca il

2

PHP 79 byte

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

Abbastanza conciso.


2

C: 101

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

2

Javascript, 104 87

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

ho giocato a golf un sacco di cose semplici e superflue, non ancora belle come quelle di Copys

Oh, e quello appena opposto durante il golf: "dydudelidu"

Ora ne ho provato uno usando l'approccio dei 2 personaggi contemporaneamente. Si scopre che è quasi lo stesso del secondo di Copys, quindi non posso contarlo, anche a 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog , 9 byte

Ḍ;Ẉṣᵐzh₅c

Provalo online!

Fornisce l'output come un elenco di lettere attraverso la variabile di output.

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

1

F # , 166 caratteri

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)])))

1

K, 40 byte

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

5?"abc" genererà 5 lettere casuali dalla stringa specificata.

5?/: genererà 5 lettere casuali da ciascuna delle stringhe a destra, producendo due elenchi.

+ traspone quelle due liste, dandoci una lista di tuple con un carattere casuale dal primo elenco e poi uno dal secondo elenco.

,/ è "raze" - fonde insieme tutte quelle tuple in sequenza.

K5 può farlo in 33 byte costruendo l'alfabeto in modo più intelligente e quindi usando "tranne" ( ^) per rimuovere le vocali, ma K5 è troppo nuovo per essere legale in questa domanda:

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

1

R, 83 byte

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

Genera tutte le possibili sequenze consonanti vocaliche in una matrice, quindi campionane a caso 5, producendo una parola di 10 lettere.



0

Gelatina , 13 byte

Øy,ØYẊ€Zs5ḢŒl

Spiegazione:

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.