Создайте произносимое слово

16

Задача проста:

создать слово.

Характеристики:

  • Слово должно быть произносимым.
    • Это определяется как «чередование согласных и гласных».
    • Согласный - это одно из следующих букв: bcdfghjklmnpqrstvwxz
    • Гласный - это одно из следующих букв: aeiouy
  • Слово должно генерироваться случайным образом.
  • Слова должны содержать все согласные и гласные. (Вы не можете использовать только bcdfдля согласных и aeiгласных.)
  • Слово должно содержать 10 букв.
  • Самый короткий код (в количестве символов) выигрывает.
Дверная ручка
источник
7
Учитывая эту полосу xkcd , программа echo buxitiwymuтехнически соответствует спецификации. Уверяю вас, я произвел слово случайно: P
AardvarkSoup
1
@AardvarkSoup «Слова должны содержать каждый согласный и гласный»
Doorknob
1
@Kartik зависит от контекста, в «да» это согласный, в «почему» это гласный, но это делает невозможным определение произносимого слова как чередующихся между гласными и согласными, например. yyyyyyyy будет правильным словом.
CJStuart
1
Я на самом деле сделал генератор на Scratch некоторое время назад. В нем были определенные правила для yqxngea
случаев,

Ответы:

8

Рубин: 56 символов

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

Пример выходов:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz
Пол Престиж
источник
1
'aeiouy'.charsбудет на один символ короче.
Говард
@ Как тогда поднимается оператор вычитанияTypeError: can't convert Enumerator into Array
Джон Дворак
@JanDvorak Извините, забыл упомянуть, что вам нужен Ruby 2.0 для этого трюка.
Говард
7

Python, 81

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

Удачи, произнося их.

GRC
источник
Их на самом деле довольно легко произнести, например, первое слово, которое я получил, было «viketuziwo»:P
дверная ручка
@ Doorknob может быть, это просто моя удача. Я продолжаю получать «слова», как «qijepyjyga». Хотя попытки моего компьютера произнести их восполняют это :)
grc
3
Я просто очень повеселился python grc.py | sayна своей машине. Спасибо за идею.
Кая
7

КОБОЛ, 255

Так что сейчас я изучаю COBOL. Использовал этот вопрос как некоторую практику. Пытался в гольф это.

Это 255 без начальных пробелов и 286 байтов с.

Для чего это стоит, это работает в Microfocus COBOL для VS2012, и я не знаю, будет ли он работать в другом месте.

       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]

Не генерирует все комбинации, но я думаю, что все согласные и гласные появляются.

JavaScript, 79

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

Более «случайная» версия.

копия
источник
Для чего ^0?
Альфа
1
@ Альфа Math.randomдает число, нам нужно целое число. ^0усекает число
скопируйте
Хитрый трюк Я не видел ^оператора в JavaScript раньше и меньше слышал об использовании его для сокращения числа с плавающей точкой. Благодарность!
Альфа
@ Копия мне нравится использование^
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
manatwork
источник
Вы можете использовать 10.timesна один символ меньше.
Говард
1
Также вопрос не требует, чтобы каждая буква имела одинаковую вероятность. *10-> *4, пропустить *3, rand 60-> rand 20и вы сохранили 3 символа.
Говард
Хороший улов правила, @Howard. Спасибо.
Манатворк
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="")
plannapus
источник
4

J (51)

,|:>(<"1[5?6 20){&.>'aeiouy';'bcdfghjklmnpqrstvwxz'
Мэринус
источник
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)]);}

С помощью Даньеро

(Я люблю использовать тенденцию к оператору (->)

jsedano
источник
3

Java AKA - самый многословный язык, когда-либо созданный, 176 с помощью Doorknob, Daniero и Peter Taylor (спасибо, ребята!)

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

}

jsedano
источник
1
Предлагаемые улучшения: Изменить String a[]на String[]a(-1 символ), изменить w W = new w();на w W=new w();(-2 символа)
Ручка двери
Предложения: Пусть слово всегда начинается с согласного (или wovel); нет необходимости рандомизировать это, когда вопрос не упоминает об этом! Итак, пропустите логическое значение fи используйте i%2вместо него. Кроме того, forцикл может быть сокращен, и вы можете поместить обе строки в условный оператор (кроме того, здесь нет необходимости в скобках) и использовать charAtих снаружи. Вот и все, 195 ЧАРСОВ, 38 СОХРАНЕНО :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)));}}
Даниеро
2
«Java AKA - самый многословный язык, который когда-либо создавался» - когда-нибудь пробовал Шекспира ? ;-)
manatwork
1
@manatwork, не забудьте удалить импорт, как только он будет использован только в одном месте.
Питер Тейлор
1
@ Manatwork может быть, нам нравится LISP? хорошо, извините, собираюсь убрать эти скобки, когда я вернусь домой с работы
jsedano
3

Javascript, 85

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

Если запустить из консоли, вывод отображается. Явное отображение добавило бы alert(s)8 символов, все еще короче, чем другие решения JS.

Спасибо C5H8NNaO4 и Говарду!

tomsmeding
источник
Хороший, сохранить символ, удалив последний ';'
C5H8NNaO4
1
Вместо этого ~~(###)вы можете написать, ###|0что экономит 4 символа.
Говард
3

Javascript, 135 122 96 86 символов

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]
Дверная ручка
источник
3

PHP, 100 символов

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>
Хуан Хосе Седано
источник
на самом деле я думаю, что это 100 символов в длину
Кристиан Лупаску
3

Инструменты Unix: 73 байта

И не гарантируется время работы :)

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

Единственная проблема заключается в том, что сгенерированная строка будет начинаться с «гласной» каждый раз.

(редактирование: изменено ' 'на ''в аргументах пасты) (другое редактирование: удаленный -P из вариантов Grep, благодаря manatwork )

PGY
источник
Что-то может быть точно настроено вокруг grepпараметров. Я получил «изо всех сил».
manatwork
Хм ... странно. У меня ничего такого нет. Я думал, -aчто будет достаточно.
pgy
1
Мой тест показывает, что -Pэто тот самый. Кажется, человек предупреждает о своем крайне экспериментальном статусе с разумом. ( grep2,16) Но в любом случае, это работает отлично без -P.
manatwork
Вы правы, спасибо, я не учел это. Я даже не знаю, почему я использовал -Pв первую очередь. Я отредактирую свой ответ.
pgy
1
Кстати, tr -d \\nкороче для объединения линий.
manatwork
3

Pyth, 26 символов

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

Вы можете попробовать это в онлайн-компиляторе здесь.

Кто-то отправил очень похожий вызов, но он был закрыт после того, как я принял решение. Я не осознавал этого, но этот вопрос на самом деле предшествовал созданию Пита. Во всяком случае, вот разбивка:

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

Каждый раз, когда запускается цикл, J переключается с списка согласных на список гласных. Таким образом, мы можем просто выбрать случайную букву от J каждый раз.
Может быть способ инициализировать J в цикле или удалить явные назначения из цикла, но я пока не добился успеха.

Майк Буфардечи
источник
1
Поднять старые вопросы, как правило, считается нормальным. Однако, когда вы используете язык, более новый, чем вопрос (я создал Pyth в 2014 году), вы должны отметить это в своем ответе.
Исаак
Спасибо за разъяснение этого для меня. Я не понял, что Pyth был создан после этого вопроса, и я добавил это к ответу.
Майк Буфардечи
3

APL 30 26

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

Пояснения очень похожи на предыдущую версию ниже, просто немного изменили порядок решения.

Примечание: ⎕IO установлено на 0


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

Объяснение:

'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)но это на один байт короче.
Стефано
1
Отсрочка «А» для ⎕Aсохранения другого байта:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Адам
Ницца! до 26. Спасибо
Морис Зукка
2

PHP 79 байт

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

Довольно лаконично.

Примо
источник
2

С: 101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}
Kevin
источник
2

Javascript, 104 87

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

играли в гольф много простых ненужных вещей, все еще не так хорошо, как копи

Ох, и тот, кто только что выступил против во время игры в гольф: "dydudelidu"

Теперь я попробовал один, используя подход 2 символов одновременно. Оказывается, это почти то же самое, что и вторая копия, так что я не могу сосчитать, также на 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]

C5H8NNaO4
источник
2

Брахилог , 9 байт

Ḍ;Ẉṣᵐzh₅c

Попробуйте онлайн!

Дает вывод в виде списка букв через выходную переменную.

   ṣ         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 символов

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
источник
1

К, 40 байт

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

5?"abc" сгенерирует 5 случайных букв из заданной строки.

5?/: сгенерирует 5 случайных букв из каждой строки справа, создав два списка.

+ транспонирует эти два списка, давая нам список кортежей с одним случайным символом из первого списка, а затем один из второго списка.

,/ is "raze" - объединяет все эти кортежи в последовательности.

K5 может сделать это в 33 байта, построив алфавит более умно, а затем используя «кроме» ( ^), чтобы удалить гласные, но K5 слишком нов, чтобы быть законным в этом вопросе:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")
Johne
источник
1

R, 83 байта

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

Генерация всех возможных гласных-согласных последовательностей в матрице, затем случайная выборка из 5 из них, получая слово из 10 букв.

rturnbull
источник
0

Желе , 13 байт

Øy,ØYẊ€Zs5ḢŒl

Объяснение:

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

Попробуйте онлайн!

Товарищ Спаркл Пони
источник