あなたの「KVZ」を知っていますか?


23

概念

英語のアルファベットをどのようにスクランブルして、曲を壊さずにトゥインクルトゥインクルリトルスターに合わせて歌うことができますか?

ルール

スワッピング

次の各セットに含まれる文字は、曲を損なわずにデフォルトで自由に交換できると仮定してみましょう。

  • {A、J、K}
  • {B、C、D、E、G、P、T、V、Z}
  • {I、Y}
  • {Q、U}
  • {S、X、F}
  • {M、N}
  • したがって、H、L、O、R、およびWは所定の位置にロックされます

出力

プログラムは、順序が上記の条件を満たしている限り、任意の順序で完全な英語のアルファベットを含む単一のランダム文字列(または文字のリスト)を出力する必要があります。プログラムがどの文字列を出力するかを予測する方法はないはずです(シードを無視する場合)。つまり、ハードコーディングすることはできません。

あなたのプログラムは、933222=104509440それぞれを生成するいくつかの正の確率(必ずしも均一ではない)を持っている必要があります3 3 2 2 2 = 104509440出力。

間隔、区切り文字、または大文字小文字に関する特定のフォーマットの制限はありません。一貫性を保ってください。

ゴール

最少バイト数が勝ちます!

例:

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

非例:

  • HLWROABCDEFZXYGIJKMNPQTSVU

概念実証:(Python3、529バイト)

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
Z「所定の位置にロック」されるべきではなく、他の人と韻を踏むことはありませんか?
シャギー

3
あなたがどこから来たのでしょうか。「zed」と言う場合はそれを取り出すのが理にかなっていますが、「zee」と言う場合はそのままにしておきます。最終的には、残りのセットと同様にあなた次第です。それらは厳密なルールに反対するガイドラインと出発点であることになっています:)
パンロード

3
一様にランダムな可能性、またはすべての可能性がゼロ以外の可能性、または他の何かを持っていますか?
jimmy23013

8
@PeterTaylor意図は、グループのメンバーをオリジナルの曲とリズムを維持しながら曲の途中で簡単に交換できるようにすることだと思います。歌のリズムが変わります。
ソク

2
(私のように)質問が何について話しているのかわからなかった人のために:en.wikipedia.org/wiki/Alphabet_song
anatolyg

回答:


6

05AB1E、28 バイト

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

単一の小文字の文字列として出力します。

n

説明:

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)

この05AB1Eのヒント(辞書の一部ではない文字列を圧縮する方法は?を参照して、なぜであるかを理解し.•¬=©ƶÓÄûkTVã”ØζÞ•てください"ajk bcdegptvz iy qu sxf mn"


7

Pythonの3140の 133 124 123バイト

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'])

オンラインでお試しください!

-1バイト、Jo Kingのおかげ


Pythonの2174の 170 158バイト

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

オンラインでお試しください!



3

Pyth59 57 56バイト

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

オンラインでお試しください!

出力は小文字の配列です。

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バイト

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

オンラインでお試しください!

引数を取らず、文字のリストを返す匿名コードブロック。

説明:

{                                                                          } # 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バイト

-77バイト-私自身で

-18バイト- @tsh@Geza Kerecsenyiに感謝します。@ tshが最初に指摘したものを見てくれました

-8バイト- @Geza Kerecsenyiに 感謝

-14バイト- @Geza Kerecsenyiの 助けを借りて

- 28バイト-私自身

-3バイト-再び@Geza Kerecsenyiの 助けを借りて

-1バイト-どうしてこうなるのか...

...

-100バイト- @Kaiidoがそれを殺し、この全体が崩壊する前にいくつかのステップを経て176のバイト

ゴルフ:

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),""))

またはオンラインで試してみてください


1
少なくとも['B'、 'C​​'、 'D'、 'E'、 'G'、 'P'、 'T'、 'V'、 'Z']を 'BCDEGPTVZ'.split``に置き換えることができますいくつかのバイトを保存するには
tsh

1
-2の'BCDEGPTVZ'.split``代わりに試してください.split('')
ゲザケレクセニ

1
また、あなたが定義することができy=q=>q.split``、あなたのコードの先頭に、そしてあなたに渡すことの配列の文字列のすべての作るy()-などa=['A','J','K']となっa=y("AJK")
下座Kerecsenyi

1
そして、置き換える'BCDEGPTVZ'.split('')y('BCDEGPTVZ')
下座Kerecsenyi

1
'abcdef'.includes(s)?r(eval(s)):l[i]
ゲザケレクセニー

2

ルーン文字のエンチャント、210バイト

>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͍

オンラインでお試しください!

Runicでそれを行う良い方法がないため、ランダム化は均一ではありません。代わりに、各文字のコレクション(たとえば[BCDEGPTVZ]、1つのグループ化)をランダムに回転させ(たとえば、上記のセットを4回転させ、スタックの上部が右側にある場合、結果は[BCDEGZPTV])、ランダムに決定しますスタックを逆にします。これらの操作を15回実行します。その結果、すべての可能な順序付けが可能ですが、等しくなる可能性はありません(これで十分でない場合は、さらに1 バイトのシャッフルループでゼロバイトのコストがかかります)。

これは、シャッフルを処理するコードのセクションです。

  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

残りのコードはこれに展開されます:

                     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

2バイトを変更することにより文字がシャッフルされていない(ただし、元に戻されている)場合、アルファベットは通常印刷されます。これを使用して、すべての文字グループが正しい場所に印刷されることを確認できます。Bコマンドの位相をずらすことにより、すべてのIPが衝突することなく関数ループを同時に使用できるようになり、それらを再び位相に戻すことができます。

ゴルフに、最初にすべての行に除去することができる任意のスペースをトリミングした後、各二つのスペースがに変換されたy、とのすべてのシーケンスyyyyに変換された̤ため̤yyyy遅延の同じ量がありますが、2は安いバイト。ループ出口はHLORW、間隔バイト(12バイト)を節約するために、メインプログラムセグメントとも結合されました。


2

パール5103の91 85バイト

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

オンラインでお試しください!

このコード(ab)は、Perlのハッシュキー(%l)の出力がランダムであるという事実を使用して%k、変更可能なすべての文字の対応するものの1つへのマッピング()を作成します。出力時には、存在しないキーは変更されていないと見なされます。


ハッシュキーのPerlの出力はまったくランダムではありません。これは完全に決定論的であり、予測が困難になるようにキー自体に影響されるだけです。そのため、このコードは実行ごとに同じ出力を生成します。ダンノは、それがこのアプローチを不適格とするかどうか。
ジョンボリンジャー

@JohnBollingerこれは、プログラムの実行中にのみ当てはまります。1回の実行内で、ハッシュが変更されていない場合、ハッシュの順序は同じになります。2回の実行に渡って、または変更を加えて、perlの各呼び出し中にランダムシードが作成されます。 参照
Xcali

わかりました、@ Xcali、訂正しました。ただし、「オンラインで試してみてください」という言葉に少なくとも部分的に誤解されています。リンク。同じ出力を繰り返し生成します。それはキャッシングか何かでなければなりません。
ジョンボリンジャー

使用することkeysは間違いなく良いアプローチですが、sort rand 2,...代わりに使用して6バイトを節約できます:( オンラインで試してください!
Dom Hastings



1

APL(Dyalog Extended)、55バイト

完全なプログラム。先頭と末尾にスペースを入れて大文字を出力しますが、中間スペースは出力しません。

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

オンラインでお試しください!

⎕A 大文字のアルファベット

'AjkBcdegptvzIyQuSxfMn'()  右引数として以下の匿名暗黙関数を適用し、左引数として指定された文字列を適用します。

 左引数の場合、

 それを分割し、新しいセグメントを開始します

 左引数の文字は右引数のメンバーです(つまり、大文字)

,⍨ 追記

 同封(単一の要素としてそれを治療するために)

 右引数

 すべて大文字

{}/ 次の匿名ラムダを減らして、…を与える"QU"λ("SXF"λ("MN"λ"A-Z"))

⊢⍵ 適切な引数(進行中のスクランブルアルファベット)

()@(∊∘⍺) 左引数(韻律グループ)のメンバーであるサブセットに次の匿名暗黙関数を適用します

   そのサブセットで

   並べ替える

  ?⍨ サブセット内の文字
   の長さの
  集計の ランダムな順列


1

、43バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。チャコールにはシャッフルオペレーターはありませんが、交換せずにサンプリングする方法を思いつきました。説明:

Fα

アルファベットの各文字をループします。

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

文字列AJK BCDEGPTVZ IY QU SXF MN H L O R Wをスペースで分割し、部分文字列をループします。

F№κι

現在の文字が部分文字列に表示される回数をループします。(条件else文には計算が必要になるため、ループを使用します。あるいは、同じバイト数の現在の文字を含む部分文字列でフィルター処理することもできます。)

‽Φκ¬№KAμ

ランダムな文字を印刷しますが、すでに印刷されているものを除外します。


0

網膜、80バイト

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

オンラインでお試しください!

おそらく最もゴルフの多い方法ではありませんが、とにかく提出します。

説明:

K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z

作業文字列をに設定し1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Zます。そこの数は、たとえば、グループ内の各文字の前にあるAJKすべてが持っている1彼らの前に。

~(

Retinaコードを生成するコードのセクションにマークを付けて、後で実行します。

K`123456

作業文字列を設定します 123456

.
?O`$&.¶

各文字を置き換えます ?O`{character}.¶

)`¶$
[blank line]

末尾の改行を削除し、グループを終了してコードを生成します。グループはコードを生成します:

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

{n}.nの後に文字が続くすべてのインスタンスに一致します。?O各インスタンスをランダムに並べ替えます。これはすべての文字セットに対して行われます。

\d
[blank line]

最後に、すべての数値を削除し、生成された文字列を暗黙的に出力します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.