KVZ'lerinizi biliyor musunuz?


23

kavram

İngiliz alfabesini hangi yollarla çırpın, böylece melodiyi bozmadan hala Twinkle Twinkle Little Star'a şarkı söylesin?

kurallar

Değişim

Aşağıdaki kümelerin her birinde bulunan harflerin, ayar parçalarını bozmadan, varsayılan olarak serbestçe değiştirilebileceğini varsayalım:

  • {A, J, K}
  • {B, C, D, E, G, P, T, V, Z}
  • {I, Y}
  • {Q, U}
  • {S, X, F}
  • {M, N}
  • Bu nedenle H, L, O, R ve W yerine kilitlenir

Çıktı

Programın, yukarıdaki şartların yerine getirilmesi koşuluyla İngilizce alfabenin tamamını içeren tek bir RANDOM dizesi (veya karakter listesi) çıkarması gerekir. Programınızın hangi dizginin çıkacağını (ekim görmezden gelirsek) ne olacağını tahmin etmenizin bir yolu olmamalıdır, yani onu sadece kodlayamazsınız.

Programınızın, 9!3!3!2!2!2!=104509440 her birini oluşturma olasılıkları (mutlaka tek biçimli değil) olması gerekir ! 3 ! 3 ! 2 ! 2 ! 2 ! = 104509440 çıkışlar.

Boşluk, sınırlayıcılar veya dava ile ilgili özel bir formatlama kısıtlaması yoktur, sadece tutarlı olun.

Hedef

En az bayt kazanır!

Örnekler:

  • KCDBPSVHIAJLMNOZQRXGUEWFYT
  • A, G, Z, V, W, X, C, H, Y, K, J, L, N, E, O, T, U, R, S, D, Q, B, W, F, I, E
  • KVTDCFBHIJALNMOPURSZQGWXYE
  • jcdebxthikalnmogursvq pwfyz
  • ABCDEFGHIJKLMNOPQRSTUVWXYZ

Nonexample:

  • HLWROABCDEFZXYGIJKMNPQTSVU

Kavram İspatı: (Python3, 529 bytes)

import random
g1 = ['A', 'J', 'K']
g2 = ['B', 'C', 'D', 'E', 'G', 'P', 'T', 'V', 'Z']
g3 = ['I', 'Y']
g4 = ['Q', 'U']
g5 = ['S', 'X', 'F']
g6 = ['M', 'N']
random.shuffle(g1)
random.shuffle(g2)
random.shuffle(g3)
random.shuffle(g4)
random.shuffle(g5)
random.shuffle(g6)
print(g1[0] + g2[0] + g2[1] + g2[2] + g2[3] + g5[0] + g2[4] + 'H' + g3[0] + g1[1] + g1[2] + 'L' + g6[0] + g6[1] + 'O' + g2[5] + g4[0] + 'R' + g5[1] + g2[6] + g4[1] + g2[7] + 'W' + g5[2] + g3[1] + g2[8])

5
Olmamalı Z, başkalarıyla kafiye yok "yerinde kilitlenmesini"?
Shaggy,

3
Sanırım nereli olduğuna bağlı. Eğer 'zed' derseniz onu çıkarmak mantıklı olacaktır fakat aksi takdirde, 'zee' derseniz içeride bırakın. Sonuçta setlerin geri kalanı gibi size kalmış. Kurallar ve katı kuralların aksine başlangıç ​​noktaları olması gerekiyordu :)
breadlord

3
Tekdüze rastgele veya sıfır olmayan bir olasılık veya başka bir şey olan her olasılık?
jimmy23013

8
@PeterTaylor Niyetimin orjinalinin ritmini ve ritmini koruyarak grup üyelerinin kolayca şarkının ortasına alınabilmesi olduğunu düşünüyorum - bu yüzden U sadece 1 iken W 3 uzun heceli, bu şarkının ritmini değiştirirdi.
Sok

2
(Benim gibi) olanlar için sorunun ne hakkında konuştuğu hakkında hiçbir fikri yoktu: en.wikipedia.org/wiki/Alphabet_song
anatolyg

Yanıtlar:


6

05AB1E , 28 bayt

A.•¬=©ƶÓÄûkTVã”ØζÞ•Dás#€.rJ‡

Tek küçük harfli bir dizge olarak çıkar.

Çevrimiçi deneyin ya da doğrulayın n defada rastgele çıkışlar .

Açıklama:

A                    # (a) Push the lowercase alphabet
 .•¬=©ƶÓÄûkTVã”ØζÞ•  # Push compressed string "ajk bcdegptvz iy qu sxf mn"
  Dá                 # (b) Duplicate it, and only keep the letters (removing the spaces)
    s#               # Swap to get the string again, and split it by spaces
      €.r            # Shuffle each substring randomly
         J           # (c) Join it back together to a single string
                    # Transliterate all characters from (b) to (c) in string (a)
                     # (and output the result implicitly)

Bu 05AB1E madenin ucu bakın (bölüm kompres dizeleri sözlükte parçası olmayan nasıl? ) Anlamak için .•¬=©ƶÓÄûkTVã”ØζÞ•olduğunu "ajk bcdegptvz iy qu sxf mn".


7

Python 3 , 140 133 124 123 bayt

d=*map(set,'AJK BCDEGPTVZ IY QU SXF MN H L O R W'.split()),
print([d[int(c,16)].pop()for c in'0111141620075581394131a421'])

Çevrimiçi deneyin!

Jo King sayesinde -1 bayt


Python 2 , 174 170 158 bayt

from random import*
s=''
for c in'abbbbebHcaaLffObdRebdbWecb':s+=choice(list(set(('AJK BCDEGPTVZ IY QU SXF MN '+c).split()['abcdef'.find(c)])-set(s)))
print s

Çevrimiçi deneyin!



3

Pyth , 59 57 56 bayt

hMeD,Vs.SMJc"ajk bcdegptvz iy qu fsx mn h l o r w"dxLGsJ

Çevrimiçi deneyin!

Çıktı bir küçük harf dizisidir.

hMeD,Vs.SMJc"ajk bcdegptvz iy qu fsx mn h l o r w"dxLGsJ   Implicit: d=" ", G=<lowercase alphabet>
          Jc"ajk bcdegptvz iy qu fsx mn h l o r w"d        Chop the grouping string on spaces, store in J
                                                      sJ   Concatenate J into single string
                                                   xLG     Find the index of each letter in grouping string in the unaltered alphabet
       .SMJ                                                Shuffle each group in J
      s                                                    Concatenate into a single string
    ,V                                                     Pair the shuffled string with their 'correct' positions in the alphabet
  eD                                                       Order the pairs by the derived positions (last element of each pair)
hM                                                         Keep the letter from each pair (the first element)
                                                           Implicit print


3

Perl 6 , 76 bayt

{my@a='A'..'Z';<AJK BCDEGPTVZ IY QU SXF MN>>>.&{@a[.ords X-65].=pick(*)};@a}

Çevrimiçi deneyin!

İsimsiz kod bloğu argüman almayan ve bir karakter listesi döndüren.

Açıklama:

{                                                                          } # Anonymous code block
 my@a='A'..'Z';      # Initialise @a as a list of the alphabet
               <AJK BCDEGPTVZ IY QU SXF MN>   # For each of the sets of letters
                                           >>.&{@a[.ords X-65].=       }  # Set those indexes
                                                                pick(*)   # To a random order
                                                                        ;@a  # And return

3

JavaScript - 421 344 328 320 306 280 277 276 ... 176 Bayt

-77 Bytes - kendi başıma

-18 Byte - @tsh ve @ Geza Kerecsenyi sayesinde beni ilk önce @tsh'nin neye işaret ettiğini gördürdü

- 8 Bytes - @Geza Kerecsenyi sayesinde -

14 Bytes - @Geza Kerecsenyi

- 28 Byte - başıma

-3 Bayt - yine yardımıyla birlikte @Geza Kerecsenyi

-1 Bayt - bu nasıl ... olabilirdi

...

-100 Byte - @Kaiido bütün bunları aşağı gelmeden önce onu öldürdü ve bazı adımlar yoluyla için 176 bayt

golfed:

c=[,'AJK','BCDEGPTVZ','IY','QU','SXF','MN'].map(s=>[...s]);alert([...'1222252H311L66O24R5242W532'].reduce((o,v)=>o+(+v?(p=>p.splice((Math.random()*p.length)|0,1))(c[v]):v),""))

veya çevrimiçi deneyin !


1
En azından '' B ',' C ',' D ',' E ',' G ',' P ',' T ',' V ',' Z ']' BCDEGPTVZ'.split`` ile değiştirebilirsiniz. bazı baytları kurtarmak için
tsh

1
-2 'BCDEGPTVZ'.split``yerine dene .split('').
Geza Kerecsenyi

1
Ayrıca, y=q=>q.split``kodunuzun üst kısmında tanımlayabilir ve içine girdiğiniz dizilerin tümünü yapabilirsiniz y()- örneğin a=['A','J','K'],a=y("AJK")
Geza Kerecsenyi,

1
Ve yerini 'BCDEGPTVZ'.split('')iley('BCDEGPTVZ')
Geza Kerecsenyi

1
'abcdef'.includes(s)?r(eval(s)):l[i]
Geza Kerecsenyi

2

Runik Büyüleri , 210 bayt

>yy `AJK`06B$̤$@
>`BCDEGPTVZ`06B$$$$ $̤$y $ $y @
>̤`IY`06Byyy$yyy̤ @
> ̤`QU`06Byy̤ $y @
> ̤`FSX`06B $yy̤$yy@
>y̤ `MN`06Byyy $@
}}f}l3-[r\
3-[2'RA?rR1Kl'RAs]{1-:0)?\}l
> ̤`HLORW`06Bo$y $y$y$yy@ \~{{B͍

Çevrimiçi deneyin!

Runik'te bunu yapmanın iyi bir yolu olmadığı için randomizasyon tek tip değildir. Bunun yerine, her bir harf koleksiyonunu (ör [BCDEGPTVZ]. Bir gruplama) rastgele bir miktar (örneğin, yukarıdaki küme 4'ün üst üste, kümenin üstünün sağda olduğu durumda olacak şekilde döndürerek) döndürerek rasgele döndürür [BCDEGZPTV]. yığını tersine çevirin. Bu işlemleri 15 defa gerçekleştirir. Sonuç olarak, tüm olası siparişler mümkündür, ancak eşit derecede muhtemel değildir . (Bunun yeterli olmaması durumunda, arttırılması daha fazla sıfır bayt , 15000 karışık döngüe kadar gider).

Bu, kodlamayı karıştıran bölümdür:

  v              vvvv           Loop counter

}}f}l3-[r\                      < Loop entry
[2'RA?r1KRl'RAs]{1-:0)?\}l3-
                       \~{{B͍    < loop exit

 ^^^^^^                         Randomly reverse
          ^^^^^                 Rotate by a random an amount

Kodun geri kalanı şunun içinde açılır:

                     ABCDEFGHIJKLMNOPQRSTUVWXYZ
>      `AJK`08B      $        $$;
> `BCDEGPTVZ`08B      $$$$ $        $   $ $   $;
>         `IY`08B            $               $;
>          `QU`08B                   $   $;
>          `FSX`08B       $            $    $;
>            `MN`08B             $$;
>          `HLORW`08Bo      $   $  $  $    $;

^                                                   Create IPs
 ^^^^^^^^^^^^^^^^                                   Set letter groupings
                  ^^^                               Call shuffle function
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^    Print letters
                     ^                              Last letter group needs to be sorted

Harfler iki bayt değiştirilerek karıştırılmaz (ancak bir kez tersine çevrilir) bırakılırsa, alfabe normal olarak yazdırılır ; bu, tüm harf gruplarının doğru yerlerde yazdırıldığını doğrulamak için kullanılabilir. BKomutları faz dışına kaydıran boşluk , tüm IP'lerin fonksiyon döngüsünü aynı anda çarpışmadan kullanabilmesi ve tekrar tekrar faza sokabilmesidir.

Golf için, ilk olarak tüm hatlarda çıkarılabildi bir boşluk kesilmiş, daha sonra, her iki boşluk, bir dönüştürüldü yve her sekansı yyyydönüştürüldü ̤için ̤ve yyyygecikme aynı miktarda olan, fakat 2 ucuz bayt. Döngü çıkışı, HLORWaralık baytlarından (12 bayt) tasarruf etmek için ana program segmentiyle de birleştirildi .


2

Perl 5 , 103 91 85 bayt

map{my%l;@l{/./g}++;@k{/./g}=keys%l}AJK,BCDEGPTVZ,SXF,IY,QU,MN;say map$k{$_}||$_,A..Z

Çevrimiçi deneyin!

Bu kod (ab), Perl'in hash tuşlarının ( %l) çıktısının %k, değiştirilebilen tüm harflerin olası eşlerinden birine eşlenmesi ( ) için rastgele olduğu gerçeğini kullanır . Çıkış zamanında, var olmayan herhangi bir anahtarın değişmediği varsayılır.


Ancak Perl'in karma tuşlarının çıktısı hiç rastgele değil. Tamamen belirleyicidir, sadece anahtarların kendileri tarafından tahmin edilmesini zorlaştıracak şekilde etkilenir. Bu yüzden bu kod her çalıştırmada aynı çıktıyı üretir. Dunno, bu yaklaşımı diskalifiye edip etmeyeceği konusunda.
John Bollinger

@JohnBollinger Bu sadece bir programın çalışması içinde geçerlidir. Tek bir çalıştırmada, karma değiştirilmemişse karma sırası aynı olacaktır. İki tur boyunca veya bir modifikasyon ile perl her çağırma sırasında oluşturulan rastgele bir tohum vardır. Referans
Xcali

Tamam, @Xcali, düzeltilmiş duruyorum. Ancak, en azından kısmen "Çevrimiçi deneyin!" sürekli benim için aynı çıktıyı üreten bağlantı. Önbelleğe alma veya başka bir şey olmalı.
John Bollinger

Kullanımı keyskesinlikle iyi bir yaklaşımdır, ancak 6 bayt sort rand 2,...yerine bunun yerine tasarruf edebilirsiniz :( Çevrimiçi deneyin!
Dom Hastings


1

Python 3 , 149 bayt

a,b,i,q,s,m,h,l,o,r,w=(set(s)for s in["AJK","BCDEGPTVZ","IY","QU","SXF","MN",*"HLORW"])
print([eval(c).pop()for c in[*"abbbbsbhiaalmmobqrsbqbwsib"]])

Çevrimiçi deneyin!

Harf kümesi için pop () kullanarak randomizasyon


1

APL (Dyalog Genişletilmiş) , 55 bayt

Tam program Baştaki ve sondaki boşlukla büyük harfe basar, ancak ara boşluk olmaz.

{(?⍨∘≢⊇⊢)@(∊∘⍺)⊢⍵}/⌈'AjkBcdegptvzIyQuSxfMn'(⊂⍤⊢,⍨∊⊂⊣)⎕A

Çevrimiçi deneyin!

⎕A büyük harfli alfabe

'AjkBcdegptvzIyQuSxfMn'() Aşağıdaki anonim tacit işlevini bunun sağ argüman ve belirtilen dize sol argüman olarak uygulayın:

 Sol argüman için,

 bölümlere ayırın, yeni bir bölüme başlayın

 sol argümanlar karakterleri sağ argümanın üyeleridir (büyük harflerle)

,⍨ ekleme

 kuşatmaktadırlar (tek bir eleman olarak tedavi etmek için)  doğru bir argüman

 her şey büyük harf

{}/ Aşağıdaki anonim lambdayı azaltarak,… "QU"λ("SXF"λ("MN"λ"A-Z")):

⊢⍵ doğru argümanda (devam eden karışık alfabesi)

()@(∊∘⍺) Aşağıdaki anonim tacit işlevini sol argümanın bir üyesi olan alt kümeye uygulayın (bir kafiye grubu)

   bu alt kümede

   olması için yeniden düzenle

  ?⍨ altkümedeki harflerin
   uzunluk
  tallyinin  rastgele bir permütasyonu


1

Kömür , 43 bayt

FαF⪪”&↖(vJf#S»↖ιηa↷N↖⪪νP´↑x‖υ” F№κι‽Φκ¬№KAμ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Kömürün karıştırma operatörleri yoktur, ancak değiştirilmeden örnekleme yöntemi kullandım. Açıklama:

Fα

Alfabedeki her harfin üzerine gelin.

F⪪”&↖(vJf#S»↖ιηa↷N↖⪪νP´↑x‖υ” 

Dizgiyi AJK BCDEGPTVZ IY QU SXF MN H L O R Wboşluklara bölün ve alt dizgilerin üzerine döngü yapın.

F№κι

Geçerli mektubun alt dize içinde görünme sayısı üzerinde döngü. (Koşullu bir elsekoşutun gerekmesi nedeniyle bir döngü kullanıyorum. Alternatif olarak, aynı bayt sayısı için geçerli harfi içeren alt dizeyi de filtreleyebilirdim.)

‽Φκ¬№KAμ

Rasgele bir karakter yazdırın, ancak daha önce yazdırılmış olanları hariç tutun.


0

Retina , 80 bayt

K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
~(K`123456
.
?O`$&.¶
)`¶$
[blank line]
\d
[blank line]

Çevrimiçi deneyin!

Muhtemelen en golf yöntemi değil, ama yine de göndereceğim.

Açıklama:

K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z

Çalışma dizesini olarak ayarlayın 1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z. Örneğin A, bir gruptaki her harften önce bir rakam vardır Jve Khepsinde 1onlardan önce bulunur.

~(

Bazı retina kodu üretecek bir kod bölümünü işaretleyin, ardından daha sonra çalıştırın.

K`123456

Çalışma dizesini olarak ayarla 123456

.
?O`$&.¶

Her karakteri ile değiştir ?O`{character}.¶

)`¶$
[blank line]

Sondaki yeni satırı kaldırın ve grubu oluşturmak için grubu tamamlayın. Grup kodu üretecek:

?O`1.
?O`2.
?O`3.
?O`4.
?O`5.
?O`6.

{n}.n sayısının tüm örneklerini ve ardından bir karakteri izler. ?Oher örneği rasgele sıralar ve bu, tüm karakter kümeleri için yapılır.

\d
[blank line]

Son olarak, tüm sayıları kaldırın ve dolaylı olarak oluşturulan dizgeyi çıktılayın.

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.