Uzun bir Belirgin Saçmalık Kelime


15

Göreviniz, belirtilen sayıda 'hece' ile mantıklı bir şekilde anlaşılır bir kelime oluşturmaktır. Program her çalıştırıldığında muhtemelen farklı bir saçma kelime ile sonuçlanır.

Pronounceability

Belirgin bir kelime, muhtemelen iki ünsüz grup arasında sandviçlenmiş bir sesli harf grubundan oluşan hecelerden oluşur. Tüm sesler tüm konumlarda belirgin değildir ve bu dile bağlı olduğundan, İngilizce konuşanların anlayabileceği desenler kullanacağız

Başlangıç ​​ünsüz grupları:

b c d f g h j k l m n p r s t v w y z bl br ch cl cr dr fl fr gh gl gn gr kn ph pl pr qu sc sh sk sl sm sn sp st th tr wh wr sch scr shm shr squ str thr

Sesli Harf Grupları:

a e i o u ae ai ao au ea ee ei ab ia yani io oa oe oi oo ou ue ui

Ünsüz grupları sonlandırma:

bcdfglmnprstxz bt ch ck ct ft gh gn lb ld lf lk ll lm ln lp lt mb mn mp nk ng nt ph pt rb rc rd rf rg rk rl rm rn rp rt rv rz sh sk sp ss st zz lch lth rch rsh rst rth sch tch

Heceleri Birleştirmek

Hem başlangıç ​​hem de bitiş ünsüz grupları genel olarak isteğe bağlıdır, ancak bir sesli harfle başlamadan hemen önce bir sesli harfle hece bir bitiş koyamazsınız.

feragat

Basitlik adına, vakum, ksilofon, anımsatıcı, pterodaktil, güzel, falan, onlar, vay ve çoğu çoğul gibi bazı İngilizce kelimeler aslında bu şekilde üretilemez.

genel bakış

Bu anahtarı kullanarak olası hece desenleri:

(SC) = başlangıç ​​ünsüz; (V) = ünlü grubu; (EC) = bitiş ünsüz

Bir hece için:

  • (SC), (V) (AT)
  • (V) (AT)
  • (SC), (V)
  • (V)

İki heceli:

  • (SC), (V) (AT) (SC), (V) (AT)
  • (SC), (V) (AT) (SC), (V)
  • (SC), (V) (AT) (V) (AT)
  • (SC), (V) (AT) (V)

  • (SC), (V) (SC), (V) (AT)

  • (SC), (V) (SC), (V)

  • (V) (AT) (SC), (V) (AT)

  • (V) (AT) (SC), (V)
  • (V) (AT) (V) (AK)
  • (V) (AT) (V)

  • (V) (SC), (V) (AT)

  • (V) (SC), (V)

... ve bunun gibi

Örnekler

1 hece

  • charst
  • Tigh'ı
  • shriegn
  • EESS
  • Shue
  • oo
  • cheezz

2 hece

  • jazzcrap
  • whylprog
  • yemek yiyor
  • umba
  • ola
  • Sahip olmak
  • ingsoc
  • greespheurz
  • bleuspoo

3 hece

  • brokiompic
  • squirdshlicker
  • Başkent
  • opengtrass
  • doublethink
  • büyük kardeş
  • phoebliaptmoo
  • skolfblauquent

4 hece

  • strawishoepick
  • patchworkzombie
  • prearneajoomie
  • slephotoschou
  • doubleplusgood

Kodlama

Girdi: oluşturulacak hece sayısı için bir tam sayı

Çıktı: birçok hecenin uzun olduğu (muhtemelen) saçma bir kelime

kurallar

  • Bir çeşit (psuedo) rastgelelik gereklidir. Hecelerin tüm kombinasyonlarının (teorik olarak) oluşturulması mümkün olmalıdır, ancak dağılım tekdüzen olmak zorunda değildir.
    • Jeneratörünüzün periyodik olmadığını varsayabilirsiniz, bu nedenle olası her sözcüğü oluşturmak için matematiksel olarak mümkün olması gerekmez (Gerçekte yeterince uzun bir süre olmayabilir) ve herhangi bir kanıt sunmanıza gerek yoktur. jeneratör aslında her olası kelimeyi üretebilir.
    • Jeneratörünüz aslında en az 255 farklı değer üretebilmelidir, böylece jeneratör her çağrıldığında 4 değerini döndüremezsiniz .
    • Nihayetinde önemli olan, yukarıdaki tüm harf gruplarını bir şekilde kodunuza dahil etmeniz, her harf grubunun sıfırdan farklı bir olasılık olasılığına sahip olması ve her hece deseninin sıfır olmayan bir olasılık olasılığına sahip olmasıdır (gerçek rastgele olma durumunda).
  • 16 adede kadar hece kelimesini desteklemelisiniz
  • Hecelerin birleştirilmesine ilişkin kurallara ek olarak, çıkış kelimesi aşağıdakilere sahip olmamalıdır:
    • 3 ardışık sesli harf ( a e i o u; bu qukelimeler için olabilir )
    • 3 ardışık eşleşen ünsüz

İyi şanslar!


Bunun birkaç nedenden dolayı belirgin bir kelime üretmekten farklı olduğunu unutmayın :

  • Sıkı 10 harfli bir gereksinim yerine girdiyle belirtilen değişken hece sayısı.
  • Bu meydan okuma (akıllıca) kodlanması gereken ayrıntılı olmayan harf grupları ekler ve daha fazla heceye izin verir, bu nedenle kod sadece diğer meydan okumadan kopyalanamaz
  • Squirdshlicker. Daha da anlatmalı mıyım?

Ben de dupe kontrol unuttum, ama bu önemli değil tablo için yeterince yeni getiriyor. Sonuçta, yüzlerce kine varyant zorluğu var.


2
"Ben de dupe kontrol unuttum, ama bu önemli değil tablo için yeterince yeni getiriyor." Birisi bunu onayladı mı? Bunun her zaman doğru olmadığını hissediyorum ...
Quintec

2
3 uzun ünsüz ve ünlüler listeniz göz önüne alındığında büyük miktarda "sabit kodlama" için indirildi
Stephen

1
Bu zorluğun kalitesine uyması için örnek olarak doubleplusgood eklemeyi önerin.

1
Neden "squirds c hlicker" olmasın? Ardışık ünsüzler üzerinde "güçlü" yendi :)
16'da Punintended

Yanıtlar:


4

JavaScript (ES6),  407  403 bayt

f=n=>/[aeiou]{3}|(.)\1\1/.test(s=(h=k=>k?(g=s=>p=s.match(/.[a-z]*/g)[Math.random()*99|0]||(s>x&&p?'':g(s)))(x+'lBrClCrDrFlFrGlGrHJKKnPlPrQuScScrShmShrSlSmSnSquStrThThrTrVWWhWrY')+g('AAeAiAoAuEEaEeEiEuIIaIeIoOOaOeOiOoOuUUeUi')+g(x+'tCkCtFtLbLchLdLfLkLlLmLnLpLshLtLthMbMnMpNgNkNtPtRbRcRchRdRfRgRkRlRmRnRpRshRstRtRthRvRzSsTchXZz')+h(k-1):'')(n,p=x='BCChDFGGhGnLMNPPhRSSchShSkSpStTZB').toLowerCase())?f(n):s

Çevrimiçi deneyin!


[^aeiou]{3}Doğru olduğundan emin misiniz ? 'Eşleştirme' kelimesine ve squirdshlickeriçeren 3 hece örneğine göre rdshl, OP bbbgenel olarak 3 bitişik ünsüz yerine sadece aynı bitişik ünsüzlerin 3'ü anlamına gelir (yani izin verilmez).
Kevin Cruijssen

2
@KevinCruijssen Zorluğun ikinci okumasında, yorumunuzun doğru olduğuna dair çok az şüphe var. Kodumu buna göre güncelledim.
Arnauld

3

05AB1E , 237 234 230 228 bayt

.•O0¦"ÐD›ô:ΓF9—∊‘àÕGÌ•3LŽZв₂в×S£V[1U.µ\µTΩiY.•1θ₆Ω–¸‡ÊΔιÃмº³ô»ÝAïG3_@|å“₄bÒs₃l¬t©ïÙK:≠•3LŽII₂в×S£«Ω1U}XižM•·Áy&ŒGηΩ¼αŸKq•6вèJ•Λ1"•bS>£Ω¼0U}TΩiY.•E–æƵHl¨åñyBY±(ú,ā]JùË‚aEuŒ—[K³|C~ôÙŸ„#¼ÑûĀdš+¢zsÄΘä¹ÊÌ₅ôθ•3LŽAE₆в×S£«Ω1U}J}Dγ€g3‹P#

@MagicOctopusUrn sayesinde -2 bayt .

Çevrimiçi deneyin veya birkaç çıktı daha alın .

Açıklama:

.•O0¦"ÐD›ô:ΓF9—∊‘àÕGÌ•
                  "# Push compressed string "bcdfglmnprstzchghgnphshskspstsch"
  3L               # Push list [1,2,3]
    ŽA;            # Push compressed integer 8997
       ₂в          # Converted to Base-26 as list: [13,8,1]
         ×         # Repeat the digits [1,2,3] that many times: ["1111111111111","22222222","3"]
          S        # Convert it to a list of flattened digits
           £       # Split the string into parts of that size
            V      # Pop and store this string-list in variable `Y`
[                  # Start an infinite loop:
 1U                #  Reset variable `X` to 1
                 #  Reset the counter_variable to 0
 \                 #  Discard the top of the stack (if any)
 µ                 #  Loop while the counter_variable is not equal to the (implicit) input:
  TΩi              #   If a random boolean is truthy:
     Y             #    Push the string-list we stored in variable `Y`
     .•1θ₆Ω–¸‡ÊΔιÃмº³ô»ÝAïG3_@|å“₄bÒsl¬t©ïÙK:≠•
                   #    Push compressed string "hjkvwyblbrclcrdrflfrglgrknplprquscslsmsnthtrwhwrscrshmshrsqustrthr"
       3L          #    Push list [1,2,3]
         ŽII       #    Push compressed integer 4608
            ₂в     #    Converted to Base-26 as list: [6,21,6]
              ×    #    Repeat the digits [1,2,3] that many times: ["111111","222222222222222222222","333333"]
               S   #    Convert it to a list of flattened digits
                £  #    Split the string into parts of that size
     «             #    Merge it with list `Y`
      Ω            #    Pop and push a random starting consonant group from this list
     1U            #    And set variable `X` to 1
    }              #   Close the if-statement
  Xi               #   If variable `X` is 1:
    žM             #    Push builtin string "aeiou"
      •·ÁyGηΩ¼αŸKq
                   #    Push compressed integer 13814931869773709280202935082102
        6в         #    Converted to Base-6 as list: [1,0,1,1,1,2,1,4,0,1,0,2,0,3,0,4,2,0,2,1,2,3,3,0,3,1,3,2,3,3,3,4,4,1,4,2,0,1,2,3,4]
          èJ       #    Index each into the string "aeiou", and join together: "aeaiaoaueaeeeieuiaieiooaoeoiooouueuiaeiou"
      •Λ1"•       "#    Push compressed integer 8388576
           b       #    Converted to binary: "11111111111111111100000"
            S>     #    Split into a list of digits, and each increased by 1
              £    #    Split the string into parts of that size
               Ω   #    Pop and push a random vowel group from this list
    ¼              #    Increase the counter_variable by 1
    0U             #    And then set variable `X` to 0
   }               #   Close the if-statement
  TΩi              #   If a random boolean is truthy:
     Y             #    Push the string-list we stored in variable `Y`
     .•E–æƵHl¨åñyBY±(ú,ā]JùË‚aEuŒ—[K³|C~ôÙŸ„#¼ÑûĀdš+¢zsÄΘä¹ÊÌ₅ôθ•
                   #    Push compressed string "xbtckctftlbldlflklllmlnlpltmbmnmpnkngntptrbrcrdrfrgrkrlrmrnrprtrvrzsszzlchlshlthrchrshrstrthtch"
       3L          #    Push list [1,2,3]
         ŽAE       #    Push compressed integer 2564
            ₆в     #    Converted to Base-36 as list: [1,35,8]
              ×    #    Repeat the digits [1,2,3] that many times: ["1","222...222","33333333"]
               S   #    Convert it to a list of flattened digits
                £  #    Split the string into parts of that size
     «             #    Merge it with list `Y`
      Ω            #    Pop and push a random ending consonant group from this list
     1U            #    And set variable `X` to 1
    }              #   Close the if-statement
  J                #   Join all strings on the stack together
 }D                #  After the while-loop: duplicate the resulting string
   γ               #  Split the copy into chunks, with adjacent characters that are
                   #  the same grouped together
    g             #  Get the length of each chunk
      3           #  Check for each length if it's smaller than 3
        P          #  Check if all are truthy by taking the product, and if it is:
         #         #   Stop the infinite loop
                   # (after which the string at the top of the stack is output implicitly)

Benim bu 05AB1E ucunu (Bknz kompres dizeleri sözlükte parçası olmayan için? Nasıl , büyük tamsayılar sıkıştırmak için nasıl? Ve kompres tamsayı listelerine? Nasıl ) sıkıştırma parçaları eserleri anlamak.


1
Ayrıca žM•ô#‰¦λu¢!¡°gU€•6BS<èJ4'ten daha küçüktür .•!m1±P1Ÿ6ºZ dâ4∍m–G¢”ãÔ2g•(AEIOU için yerleşik olan 6 taban dönüşüm ve değiştirme). TIO Bağlantısı çok uzun.
Sihirli Ahtapot Urn

@MagicOctopusUrn Teşekkürler! Ve ile 2 bayt daha kaydetti žM•·Áy&ŒGηΩ¼αŸKq•6вèJ. :) Not: tinyurl.com gibi url kısaltıcılarını kullanabilirsiniz diğer çoğu SE adlı aksine PPCG üzerinde. :)
Kevin Cruijssen

1

Jöle , 231 bayt

e€ØẹŒrḢƇ,ŒɠF>2Ẹ
“yŒʠT¬ḅɼṬɦṀUżGv¶æɲCĊQ>ṙȦẇɼṄ0IḤhDẋDċṀĊṪɗĖƇẊ;1JƒṾỊżỵhṖ8>Ȯ⁶]¦Qṭ|Ṛṇẹm⁵ØKƈBNɦÇȯ¢ṣḟPṇMʠ¬YėĊÇẒỊĿXJÑḷÞeȮȮɼ$ỴœeṂṠɲẓḊ⁺ċŻ⁽⁶Ẓ⁹<>#nẇṬ⁴\¤ÐṡḞF5ƙẇwḶȤYḍ¡¢~ṚⱮ-ṃƲ⁻Ṙ6ɱṬ?İẆḌỊþEØ»Ḳµe€ØẹIkḣ3)Z;€“squ“qu”$1¦
“ئµ£‘ḃ3$Xµ³Ð¡ḊFµ⁺wØ2$¿ịÇX€Fß¹Ñ?

Çevrimiçi deneyin!

Tek bir argüman alan tam bir program, gerekli hece sayısı.

açıklama

Bunun çekirdeği 66 kelimelik sıkıştırılmış sözlük dizesidir. Sözcükler ünsüz ve sesli harf gruplarına ve her sözcük için alınan ilk 3 gruba ayrılırsa, sorudan istenen başlangıç, sesli ve bitiş gruplarını oluştururlar. İstisnalar quvesqu bir sesli harfleri olduğundan, bunlar manuel olarak eklenir. Kelime listesi, bir Python betiği kullanılarak Jelly sözlüğünden algoritmik olarak oluşturuldu. Bazı harf gruplarının tekrarlandığına dikkat edin, ancak soru çıktıların olası her bir kombinasyonu eşit olarak göstermemesine izin verir. Bu tercih edildiyse, her bir grubu iki bayt ( Q€) pahasına benzersiz kılmak kolay olurdu .

Yardımcı bağlantı 1: Arka arkaya 3'ten fazla sesli harf veya arka arkaya aynı harfin 3'ten fazla olup olmadığını kontrol edin
                | Sample input: branggag
e€Øẹ            | For each letter, is it a vowel? [0, 0, 1, 0, 0, 0, 1, 0]
    Œr          | Run-length encode [[0, 2], [1, 1], [0, 3], [1, 1], [0, 1]]
      ḢƇ        | Filter only those with true first value, popping first value [[1], [1]]
        ,       | Pair with
         Œɠ     | Run lengths of input [[[1], [1]], [1, 1, 1, 1, 2, 1, 1]
           F    | Flatten [1, 1, 1, 1, 1, 1, 2, 1, 1]
            >2  | Greater than 2 [0, 0, 0, 0, 0, 0, 0, 0, 0]
              Ẹ | Any 0
Yardımcı bağlantı 2: Üç dize grubu
“yŒʠ...þEØ»                          | Compressed string: shmooze gaolbird hailshot shriech waeful furze ghaut cruelness stealthier gneiss shoeshine wheelchair wring build priorship knosp spoilfive karst through coalpit teschenite schoolkid theurgic zabtieh skiamachies yirth snazzier slimnastics scripted smirch droskies strift blepharism chaulmoogra glegness scarf fratch clerk brank jarvey flourless vorpal grex nard plumb larn philter sorbo tractabilities parcel mart damp rearm back bast bag bant baba boll bad bap becap basal ban bail bare
           Ḳ                         | Split at spaces
            µ        )               | For each word: e.g. hailshot
             e€Øẹ                    |   Check whether each character is a vowel [0, 1, 1, 0, 0, 0, 1, 0]
                 I                   | Increments of this [1, 0, -1, 0, 0, 1, -1]
                  k                  |   Split word at truthy values of this [h, ai, lsh, o, t]
                   ḣ3                |   Take the first three [h, ai, lsh]
                      Z              | Transpose (so now have three lists, start consonants, vowels, end consonants)
                        €        $1¦ | For the first group
                       ; “squ“qu”    | Append squ and qu
Ana bağlantı
          µ³Ð¡                     | Repeat the following the input number of times, collecting results:
“ئµ£‘                             |   18, 5, 9, 2
      ḃ3$                          |   bijective base 3: [1,2,3],[1,2],[2,3],[2]
         X                         |   Take one at random
              Ḋ                    | Remove first item (which will be the input to the link because if the way С works
               F                   | Flatten; we now have e.g. [1,2,3,2,3,1,2,3,2]. This corresponds to SC V EC V EC AC V EC V
                µ⁺    ¿            | Do everything so far once and then repeat while:
                  wØ2$             |   The output contains two twos (i.e. vowel-vowel)
                       ịÇ          | Look these up in the previous link, so we now have a group of letter groups for each position
                         X€F       | Pick a random letter group for each position
                            ß¹Ñ?   | If helper link 1 is true, retry the whole of this link again. Otherwise implicitly output

1
Açıklamayı görmek merak ediyor ama doğru olduğuna emin misin? gnuignaalfbiGiriş için bir çıktı alıyorum 4, ancak aazorluğu doğru anladıysam mümkün olmamalı.
Heceleri

@KevinCruijssen bunu kaçırdı. Şimdi de bu şartı yerine getirmeli. İşaret
Nick Kennedy

1
Güzel cevap, tüm grupları yapmak için kullandığınız sözlük dizelerini seviyorum. Jelly'in sözlüğünün neden böyle kelimeler içerdiğinden emin olmasam da shmooze gaolbird hailshot shriech waeful furze ghaut, haha. xD Jelly'in sözlüğü ne kadar büyük?
Kevin Cruijssen

1
@KevinCruijssen Büyük. 645'ten küçük 20453 kelime ve 227845 büyük kelime vardır.
Nick Kennedy

0

Python 2 , 522 510 bayt

from random import*
import re
c=choice
S,V,E=[map(str.lower,re.findall('[A-Z][a-z]*',x))for x in'BCDFGHJKLMNPRSTVWYZBlBrChClCrDrFlFrGhGlGnGrKnPhPlPrQuScShSkSlSmSnSpStThTrWhWrSchScrShmShrSquStrThr','AeAiAoAuEaEeEiEuIaIeIoOaOeOiOoOuUeUiAEIOU','BCDFGLMNPRSTXZBtChCkCtFtGhGnLbLdLfLkLlLmLnLpLtMbMnMpNkNgNtPhPtRbRcRdRfRgRkRlRmRnRpRtRvRzShSkSpSsStZzLchLshLthRchRshRstRthSchTch']
def f(n):w=c(['',c(S)]);exec"e=c(E);w+=c(V)[-(w[-1:]in V):]+c([c(S),e,e+c([x for x in S if x[0]*2!=e])])*(n>1);n-=1;"*n;return w+c(['',e])

Çevrimiçi deneyin!


0

Pyth, 346 335 bayt

McG.u+NYr9,VHSlH1smjOgs@L"eaiou"jC" ¤E̽]¢¨¦l#"5,4 17*Vd,Og"bcdfghjklmnprstvwyzblbrchclcrdrflfrghglgngrknphplprquscshskslsmsnspstthtrwhwrschscrshmshrsqustrthr"[18 29 6)Og"bcdfglmnprstxzbtchckctftghgnlbldlflklllmlnlpltmbmnmpnkngntphptrbrcrdrfrgrkrlrmrnrprtrvrzshskspssstzzlchlshlthrchrshrstrthschtch"[13 43 8)tuaGO<W!eeG^,1Z2 2Q]1

Burada çevrimiçi deneyin .


0

Yakut , 381 379 375 bayt

Ünsüz grupları almak için dağınık normal ifade eşleşmelerini kullanır. Muhtemelen optimize edilebilir.

->n,w=?a..s='zzz',a=[1]{s=(1..n).map{a=[w.grep(/^([^aeiouq]|[bcfgp][lr]|s?ch|dr|gn|kn|ph|s?qu|s[ct]r?|sh[mr]?|th?r?|s[klmnp]|wh|wr|gh)$/)+(a[-1]?[p]:[]),w.grep(/^[aeiou]{,2}$/),w.grep(/^([^aeiouqhjkvwy]|[bcflnprs]t|ck|gh|gn|l[bdfk-np]|m[bnp]|nk|ng|ph|r[bcdfgk-npvz]|[lr]?[stc]h|s[kps]|zz|rst|[st]ch)$/)<<p].map(&:sample)}*''while s=~/[aeiou]{3}|(.)\1\1|aa|eo|ii|iu|u[aou]/;s}

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.