발음하기 쉬운 단어 생성


16

도전은 간단하다 :

단어를 생성하십시오.

명세서:

  • 단어는 발음 할 수 있어야합니다.
    • 이것은 "자음과 모음 사이의 대체"로 정의됩니다.
    • 자음은 다음 문자 중 하나입니다. bcdfghjklmnpqrstvwxz
    • 모음은 다음 문자 중 하나입니다. aeiouy
  • 단어는 무작위로 생성되어야합니다.
  • 단어는 모든 자음과 모음을 포함 할 수 있어야합니다. ( bcdf자음과 aei모음 에만 사용할 수는 없습니다 .)
  • 단어는 10 글자를 포함해야합니다.
  • 가장 짧은 코드 (문자 수)가 이깁니다.


7
함께 이 XKCD 스트립 을 염두에두고, 프로그램은 echo buxitiwymu기술적 사양을 준수합니다. 내가 당신을 확신, 나는 무작위로 단어를 생성 : P
AardvarkSoup

1
@AardvarkSoup "단어는 모든 자음과 모음을 포함 할 수 있어야합니다"
Doorknob

1
@Kartik은 문맥에 따라 달라집니다. '예'에서는 자음이고, '왜'는 모음이지만, 모음과 자음을 번갈아 발음하는 단어를 정의하는 것은 불가능합니다. yyyyyyyy는 유효한 단어입니다.
CJStuart

1
나는 실제로 스크래치에서 생성기를 만들었습니다. 그것은 당신이 처리 할 수 있습니다시기에 대한 구체적인 규칙이 있었다 y사용할 수있는 모음으로 q하고 x, 그리고 당신이 좋아하는 두 문자 조합을 사용할 수없는 경우 ng또는ea
Esolanging 과일

답변:



8

루비 : 56 자

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

출력 예 :

  • itopytojog
  • 우마 푸 죠짐
  • 이 파고다
  • yfoqinifyw
  • ebylipodiz

1
'aeiouy'.chars하나의 문자가 짧을 것입니다.
Howard

@Howard 다음 빼기 연산자 제기TypeError: can't convert Enumerator into Array

@JanDvorak 죄송합니다.이 트릭에는 Ruby 2.0이 필요하다는 것을 언급하지 않았습니다.
Howard

7

파이썬, 81

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

그들을 발음하는 행운을 빕니다.


그들은 예를 들어 내가 가진 첫 번째 단어는 "viketuziwo"이었다, 발음하기 아주 쉽게 사실이야:P
손잡이

@Doorknob 어쩌면 내 행운일지도 모른다 "qijepyjyga"와 같은 '단어'를 계속 받고 있습니다. 내 컴퓨터는 그들을 발음하려고 시도하지만 그것을 보완합니다 :)
grc

3
나는 python grc.py | say내 컴퓨터에서 많은 재미를 보았습니다 . 아이디어 주셔서 감사합니다.
카야

7

코볼, 255

그래서 나는 현재 COBOL을 배우고 있습니다. 이 질문을 연습으로 사용했습니다. 그것을 골프하려고했다.

선행 공백이 없으면 255이고 286 바이트입니다.

가치가있는 것은 VS2012의 Microfocus COBOL에서 실행되며 다른 곳에서 실행 될지 전혀 모릅니다.

       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

자바 스크립트, 74

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

모든 조합을 생성하지는 않지만 모든 자음과 모음이 나타납니다.

자바 스크립트, 79

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

더 "무작위"버전.


무엇입니까 ^0?
Alpha

1
@Alpha Math.random는 float를 제공하며 정수가 필요합니다. ^0숫자를 자릅니다.
복사

영리한 트릭. 나는 ^JavaScript 에서 연산자를 보지 못했고 float를 자르기 위해 그것을 사용하는 것에 대해 덜 들었습니다. 감사!
Alpha

@copy 나는 사용을 좋아합니다^
Math chiller

4

루비 : 70 66 자

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

샘플 실행 :

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

You can use 10.times for one char less.
Howard

1
또한 질문은 각 문자가 동일한 확률을 가져야한다고 요구하지 않습니다. *10-> *4, 건너 뛰기 *3, rand 60-> rand 203자를 저장했습니다.
Howard

@Howard 규칙을 잘 잡으십시오. 감사합니다.
manatwork

4

R : 105 자

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

가공, 100 99 93 87

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

질문을 면밀히 조사하면 출력이 필요하지 않습니다. 이에 따라 조정했습니다.


3

Objective-C, 129

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

With the help of Daniero

(I love to use the tends to operator (-->)


3

Java AKA the most verbose language ever created, 176 with help of Doorknob, Daniero and Peter Taylor (thanks guys!)

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
제안 된 개선 사항 : 변경 String a[]String[]a(-1 자), 변화 w W = new w();w W=new w();(-2 자)
손잡이

제안 : 단어는 항상 자음 (또는 삽)에서 시작합니다. 질문에 언급되지 않은 경우 이것을 무작위로 지정할 필요가 없습니다! 그래서, 부울을 생략 f하고 사용 i%2하는 대신. 또한 for루프를 단축 할 수 있으며 조건 연산자 안에 두 문자열을 모두 넣고 (여기서 parens 필요 없음) charAt외부를 사용할 수 있습니다 . 여기에 모든 것이 있습니다, 195 CHARS, 38 SAVED :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에서 가장 장황한 언어"– 셰익스피어를 사용해 본 적이 있습니까? ;-)
manatwork

1
@manatwork, don't forget to remove the import once you've got it down to being used only in one place.
Peter Taylor

1
@manatwork maybe we like lisp ?? ok, sorry, gonna take those parenthesis out when I get home from work
jsedano

3

Javascript, 85

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

If run from the console, output is shown. Explicit display would add alert(s) at 8 chars, still shorter than the other JS solutions.

Thanks C5H8NNaO4 and Howard!


Nice one, save a character by removing the last ';'
C5H8NNaO4

1
Instead of ~~(###) you can write ###|0 which saves 4 chars.
Howard

3

Javascript, 135 122 96 86 characters

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

3

PHP, 100 Characters

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>

acually I think that's 100 chars long
Cristian Lupascu

3

Unix tools: 73 bytes

And not guaranteed running time :)

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

Only problem is that the generated string will start with a "vowel" every time.

(edit: changed ' ' to '' in the args of paste) (another edit: removed -P from grep options, thanks to manatwork)


Something could be fine tuned around the grep parameters. I got “of e� ap ag ak”.
manatwork

Hmm... strange. I got nothing like that. I thought -a would be enough.
pgy

1
My test indicates that -P is the one. Seems the man warns about its highly experimental status with a reason. (grep 2.16) But anyway, it works fine without -P.
manatwork

You are right thank you, I didn't consider that. I don't even know why I used -P in the first place. I'll edit my answer.
pgy

1
By the way, tr -d \\n is shorter for joining the lines.
manatwork

3

Pyth, 26 characters

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

You can try it in the online compiler here.

Someone posted a very similar challenge but it was closed after I had made a solution. I didn't realize it, but this question actually predates the creation of Pyth. Anyway, here is the breakdown:

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

Every time the loop is run, J switches from being a list of consonants to a list of vowels. That way we can just pick a random letter from J each time.
There may be a way to initialize J in the loop or remove the explicit assignments from the loop, but I have not had success with either yet.


1
Bumping old questions is generally considered fine. However, when you use a language newer than the question (I created Pyth in 2014) you should note this in your answer.
isaacg

Thanks for clearing that up for me. I didn't realize that Pyth was created after this question and I've added that to the answer.
Mike Bufardeci

3

APL 30 26

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

Explanation is very similar to the past version below, just reordered a bit to golf the solution.

Note: ⎕IO is set to 0


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

Explanation:

'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) but it's one byte shorter.
lstefano

1
Deferring 'A' to ⎕A saves another byte: ,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám

Nice! down to 26. Thanks
Moris Zucca

2

PHP 79 bytes

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

Fairly concise.


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]

golfed a whole lot of simple unnecessary stuff, still not nearly as nice as copys' one

Oh, and that one just opped up during golfing: "dydudelidu"

Now I tried one using the 2 characters at once approach. Turns out it's almost the same as copys' second one, so I can't count it, also at 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog, 9 bytes

Ḍ;Ẉṣᵐzh₅c

Try it online!

Gives output as a list of letters through the output variable.

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

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 bytes

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

5?"abc" will generate 5 random letters from the given string.

5?/: will generate 5 random letters from each of the strings on the right, producing two lists.

+ transposes those two lists, giving us a list of tuples with one random character from the first list and then one from the second list.

,/ is "raze"- fuse together all those tuples in sequence.

K5 can do this in 33 bytes by building the alphabet more cleverly and then using "except" (^) to remove the vowels, but K5 is much too new to be legal in this question:

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

1

R, 83 bytes

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

Generate all possible vowel-consonant sequences in a matrix, then randomly sample 5 of them, yielding a 10-letter word.



0

Jelly, 13 bytes

Øy,ØYẊ€Zs5ḢŒl

Explanation:

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

Try it online!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.