Hasilkan kata yang bisa diucapkan

16

Tantangannya sederhana:

menghasilkan kata.

Spesifikasi:

  • Kata harus dapat diucapkan.
    • Ini didefinisikan sebagai "bergantian antara konsonan dan vokal."
    • Konsonan adalah salah satu dari surat-surat berikut: bcdfghjklmnpqrstvwxz
    • Vokal adalah salah satu dari surat-surat berikut: aeiouy
  • Kata harus dibuat secara acak.
  • Kata-kata harus dapat mengandung setiap konsonan dan vokal. (Anda tidak bisa hanya menggunakan bcdfuntuk konsonan dan aeiuntuk vokal.)
  • Kata harus mengandung 10 huruf.
  • Kode terpendek (dalam jumlah karakter) menang.
Gagang pintu
sumber
7
Dengan mempertimbangkan xkcd ini , program secara echo buxitiwymuteknis sesuai dengan spesifikasi. Saya yakinkan Anda, saya menghasilkan kata secara acak: P
AardvarkSoup
1
@AardvarkSoup "Kata-kata harus dapat mengandung setiap konsonan dan vokal"
Doorknob
1
@Kartik tergantung pada konteksnya, di 'ya' itu konsonan, di 'mengapa' itu adalah vokal, tetapi ini akan membuat tidak mungkin untuk mendefinisikan kata yang dapat diucapkan sebagai bolak-balik antara vokal dan konsonan, misalnya. yyyyyyyy akan menjadi kata yang valid.
CJStuart
1
Saya sebenarnya membuat generator di Scratch beberapa waktu lalu. Itu memiliki aturan khusus untuk kapan Anda dapat memperlakukan ysebagai vokal, di mana Anda dapat menggunakan qdan x, dan ketika Anda dapat menggunakan kombinasi dua huruf seperti ngatauea
Buah Esolanging

Jawaban:

7

GolfScript, 32 karakter

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

Jalankan secara online .

Howard
sumber
8

Ruby: 56 karakter

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

Output contoh:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz
Paul Prestidge
sumber
1
'aeiouy'.charsakan menjadi satu char lebih pendek.
Howard
@ Howard maka operator pengurangan menaikkanTypeError: can't convert Enumerator into Array
John Dvorak
@ JanDvorak Maaf, lupa menyebutkan bahwa Anda memerlukan Ruby 2.0 untuk trik ini.
Howard
7

Python, 81

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

Semoga berhasil mengucapkannya.

grc
sumber
Kata-kata itu sebenarnya cukup mudah diucapkan, misalnya kata pertama yang saya dapat adalah "viketuziwo":P
Doorknob
@ Doorknob mungkin hanya keberuntunganku. Saya terus mendapatkan 'kata-kata' seperti "qijepyjyga". Namun, upaya komputer saya untuk mengucapkan make-up make up untuknya :)
grc
3
Saya baru saja bersenang-senang mengerjakan python grc.py | saymesin saya. Terima kasih untuk idenya.
Kaya
7

COBOL, 255

Jadi saya sedang belajar COBOL saat ini. Menggunakan pertanyaan ini sebagai latihan. Mencoba bermain golf.

Ini 255 tanpa spasi putih terkemuka, dan 286 byte dengan.

Untuk apa nilainya, ini berjalan di Microfocus COBOL untuk VS2012, dan saya tidak tahu apakah itu akan berjalan di tempat lain.

       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
Sereal
sumber
6

APL (34)

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

JavaScript, 74

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

Tidak menghasilkan semua kombinasi, tetapi saya pikir semua konsonan dan vokal muncul.

JavaScript, 79

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

Lebih banyak versi "acak".

salinan
sumber
Untuk apa ini ^0?
Alpha
1
@Alpha Math.randommemberikan float, kita perlu integer. ^0memotong nomor
salin
Trik cerdas. Saya belum pernah melihat ^operator dalam JavaScript sebelumnya dan kurang mendengar tentang menggunakannya untuk memotong float. Terima kasih!
Alpha
@ copy saya suka penggunaan^
Math chiller
4

Ruby: 70 66 karakter

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

Contoh dijalankan:

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
manatwork
sumber
Anda dapat menggunakan 10.timessatu char lebih sedikit.
Howard
1
Juga pertanyaannya tidak mengharuskan setiap huruf harus memiliki probabilitas yang sama. *10-> *4, lewati *3, rand 60-> rand 20dan Anda telah menyimpan 3 karakter.
Howard
Bagus menangkap aturan, @Hard. Terima kasih.
manatwork
4

R: 105 karakter

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
sumber
4

J (51)

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

Memproses, 100 99 93 87

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

Setelah memeriksa pertanyaan ini lebih dekat, saya melihat itu tidak memerlukan output. Saya telah menyesuaikan ini sesuai.

Sereal
sumber
3

Objective-C, 129

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

Dengan bantuan Daniero

(Saya suka menggunakan kecenderungan untuk operator (->)

jsedano
sumber
3

Java AKA bahasa paling verbose yang pernah dibuat, 176 dengan bantuan Doorknob, Daniero dan Peter Taylor (terima kasih kawan!)

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

Tidak Terkumpul:

    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
sumber
1
Perbaikan yang disarankan: Ubah String a[]ke String[]a(-1 karakter), ubah w W = new w();ke w W=new w();(-2 karakter)
Gagang Pintu
Saran: Biarkan kata selalu dimulai dengan konsonan (atau goyangan); tidak perlu mengacak ini ketika pertanyaan tidak menyebutkannya! Jadi, lewati boolean fdan gunakan i%2saja. Juga, forloop dapat dipersingkat, dan Anda dapat meletakkan kedua string di dalam operator kondisional (juga, tidak perlu untuk parens di sini), dan gunakan charAtdi luar. Inilah semuanya, 195 CHARS, 38 DISELAMATKAN :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 bahasa paling verbose yang pernah dibuat” - Pernah mencoba Shakespeare ? ;-)
manatwork
1
@manatwork, jangan lupa menghapus impor setelah Anda menggunakannya hanya di satu tempat.
Peter Taylor
1
@manatwork mungkin kita suka cadel ?? ok, maaf, akan mengambil kurung itu ketika saya pulang kerja
jsedano
3

Javascript, 85

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

Jika dijalankan dari konsol, output ditampilkan. Tampilan eksplisit akan menambah alert(s)8 karakter, masih lebih pendek dari solusi JS lainnya.

Terima kasih C5H8NNaO4 dan Howard!

tommeding
sumber
Bagus, simpan karakter dengan menghapus ';' yang terakhir
C5H8NNaO4
1
Alih-alih ~~(###)Anda dapat menulis ###|0yang menyimpan 4 karakter.
Howard
3

Javascript, 135 122 96 86 karakter

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

PHP, 100 Karakter

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>
Juan José Sedano
sumber
sebenarnya saya pikir itu panjangnya 100 karakter
Cristian Lupascu
3

Alat Unix: 73 byte

Dan waktu dijamin tidak berjalan :)

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

Satu-satunya masalah adalah bahwa string yang dihasilkan akan mulai dengan "vokal" setiap kali.

(edit: diubah ' 'menjadi ''dalam argumen tempel) (edit lain: dihapus -P dari opsi grep, terima kasih kepada manatwork )

pgy
sumber
Sesuatu dapat disesuaikan di sekitar grepparameter. Saya mendapat "of e ap ag ak".
manatwork
Hmm ... aneh. Saya tidak mendapatkan yang seperti itu. Saya pikir -asudah cukup.
pgy
1
Tes saya menunjukkan itu -Padalah satu. Tampaknya pria itu memperingatkan tentang statusnya yang sangat eksperimental dengan suatu alasan. ( grep2.16) Tapi bagaimanapun, itu berfungsi dengan baik tanpa -P.
manatwork
Anda benar, terima kasih, saya tidak mempertimbangkan itu. Aku bahkan tidak tahu kenapa aku menggunakannya -P. Saya akan mengedit jawaban saya.
pgy
1
By the way, tr -d \\nlebih pendek untuk bergabung dengan garis.
manatwork
3

Pyth, 26 karakter

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

Anda dapat mencobanya di kompiler online di sini.

Seseorang memposting tantangan yang sangat mirip tetapi ditutup setelah saya membuat solusi. Saya tidak menyadarinya, tetapi pertanyaan ini sebenarnya mendahului penciptaan Pyth. Bagaimanapun, ini adalah rinciannya:

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

Setiap kali loop dijalankan, J beralih dari daftar konsonan ke daftar vokal. Dengan begitu kita bisa mengambil surat acak dari J setiap kali.
Mungkin ada cara untuk menginisialisasi J dalam loop atau menghapus tugas eksplisit dari loop, tetapi saya belum berhasil dengan baik.

Mike Bufardeci
sumber
1
Menabrak pertanyaan lama umumnya dianggap baik-baik saja. Namun, ketika Anda menggunakan bahasa yang lebih baru dari pertanyaan (Saya membuat Pyth di 2014) Anda harus mencatat ini dalam jawaban Anda.
isaacg
Terima kasih telah menjelaskannya untuk saya. Saya tidak menyadari bahwa Pyth dibuat setelah pertanyaan ini dan saya menambahkannya ke jawabannya.
Mike Bufardeci
3

APL 30 26

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

Penjelasannya sangat mirip dengan versi sebelumnya di bawah ini, hanya memesan sedikit untuk golf solusinya.

Catatan: ⎕IO diatur ke 0


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

Penjelasan:

'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
sumber
1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)tapi satu byte lebih pendek.
lstefano
1
Menunda 'A' untuk ⎕Amenyimpan byte lain:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám
Bagus! ke 26. Terima kasih
Moris Zucca
2

PHP 79 byte

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

Cukup singkat.

primo
sumber
2

C: 101

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

Javascript, 104 87

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

bermain golf banyak hal-hal sederhana yang tidak perlu, masih tidak sebagus yang copys '

Oh, dan yang baru saja bermain golf: "dydudelidu"

Sekarang saya mencoba satu menggunakan 2 karakter sekaligus pendekatan. Ternyata itu hampir sama dengan yang kedua copys, jadi saya tidak bisa menghitungnya, juga di 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]

C5H8NNaO4
sumber
2

Brachylog , 9 byte

Ḍ;Ẉṣᵐzh₅c

Cobalah online!

Memberikan output sebagai daftar huruf melalui variabel 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.
String yang tidak terkait
sumber
1

F # , 166 karakter

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
sumber
1

K, 40 byte

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

5?"abc" akan menghasilkan 5 huruf acak dari string yang diberikan.

5?/: akan menghasilkan 5 huruf acak dari masing-masing string di sebelah kanan, menghasilkan dua daftar.

+ mentranspos kedua daftar itu, memberi kami daftar tupel dengan satu karakter acak dari daftar pertama dan kemudian satu dari daftar kedua.

,/ is "raze" - menyatukan semua tuple secara berurutan.

K5 dapat melakukan ini dalam 33 byte dengan membangun alfabet lebih cerdik dan kemudian menggunakan "kecuali" ( ^) untuk menghapus vokal, tetapi K5 terlalu baru untuk dianggap legal dalam pertanyaan ini:

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

R, 83 byte

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

Hasilkan semua barisan konsonan-vokal yang mungkin dalam sebuah matriks, kemudian sampel secara acak 5 dari mereka, menghasilkan kata 10 huruf.

rturnbull
sumber
1

05AB1E , 10 byte

5FžPΩ?žOΩ?

Cobalah secara online atau keluarannjumlah kata acak .

Penjelasan:

Cukup mudah:

5F      # Loop 5 times:
  žP    #  Push string "bcdfghjklmnpqrstvwxz"
    Ω   #  Pop and push a random character from this string
     ?  #  Output it without newline
  žOΩ?  #  Do the same with string "aeiouy"
Kevin Cruijssen
sumber
0

Jelly , 13 byte

Øy,ØYẊ€Zs5ḢŒl

Penjelasan:

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

Cobalah online!

Kamerad SparklePony
sumber