Bạn có biết 'KVZ của bạn?


23

Khái niệm

Bằng cách nào bạn có thể xáo trộn bảng chữ cái tiếng Anh để nó vẫn có thể được hát theo giai điệu Twinkle Twinkle Little Star mà không làm hỏng giai điệu?

Quy tắc

Trao đổi

Giả sử các chữ cái trong mỗi bộ sau đây có thể được hoán đổi tự do mà không làm hỏng giai điệu:

  • {A, J, K}
  • {B, C, D, E, G, P, T, V, Z}
  • {Tôi, Y}
  • {Q, U}
  • {S, X, F}
  • {M, N}
  • Do đó, H, L, O, R và W bị khóa tại chỗ

Đầu ra

Chương trình cần xuất ra một chuỗi RANDOM (hoặc danh sách các ký tự) có chứa bảng chữ cái tiếng Anh hoàn chỉnh theo bất kỳ thứ tự nào với điều kiện là thứ tự đó thỏa mãn các điều kiện trên. Không có cách nào để bạn dự đoán chuỗi nào chương trình của bạn sẽ xuất ra (nếu chúng tôi bỏ qua việc gieo hạt), có nghĩa là bạn không thể mã hóa chuỗi đó.

Chương trình của bạn phải có một số xác suất dương (không nhất thiết phải thống nhất) để tạo ra mỗi trong số đầu ra.9!3!3!2!2!2!= =104509440

Không có hạn chế định dạng cụ thể về khoảng cách, dấu phân cách hoặc trường hợp, chỉ cần nhất quán.

Mục tiêu

Ít byte nhất sẽ thắng!

Ví dụ:

  • 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

Không có mẫu nào:

  • HLWROABCDEFZXYGIJKMNPQTSVU

Bằng chứng về khái niệm: (Python3, 529 byte)

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
Không nên Z"khóa tại chỗ", nó không vần với những người khác?
Xù xì

3
Tôi phụ thuộc vào nơi bạn đến từ tôi cho rằng. Nếu bạn nói 'zed' thì sẽ có ý nghĩa khi lấy nó ra nhưng nếu không, nếu bạn nói 'zee' thì hãy để nó lại. Cuối cùng, điều đó tùy thuộc vào bạn, cũng như các bộ còn lại. Chúng được cho là hướng dẫn và xuất phát điểm trái ngược với các quy tắc nghiêm ngặt :)
tịch

3
Thống nhất ngẫu nhiên hoặc mọi khả năng có xác suất khác không, hoặc cái gì khác?
jimmy23013

8
@PeterTaylor Tôi nghĩ rằng ý định là các thành viên của các nhóm có thể dễ dàng hoán đổi ở giữa bài hát trong khi duy trì giai điệu và nhịp điệu của bản gốc - vì vậy trong khi họ thực hiện vần điệu, W dài 3 âm tiết trong khi U chỉ 1, mà sẽ thay đổi nhịp điệu của bài hát.
Sok

2
Đối với những người (như tôi) không biết câu hỏi đang nói về cái gì: en.wikipedia.org/wiki/Alph.us_song
anatolyg

Câu trả lời:


6

05AB1E , 28 byte

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

Đầu ra dưới dạng một chuỗi chữ thường.

n

Giải trình:

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)

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để chuỗi nén không nằm trong từ điển? ) Để hiểu tại sao .•¬=©ƶÓÄûkTVã”ØζÞ•"ajk bcdegptvz iy qu sxf mn".


7

Python 3 , 140 133 124 123 byte

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

Hãy thử trực tuyến!

-1 byte, nhờ Jo King


Python 2 , 174 170 158 byte

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

Hãy thử trực tuyến!



3

Pyth , 59 57 56 byte

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

Hãy thử trực tuyến!

Đầu ra là một mảng các chữ cái viết thường.

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 byte

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

Hãy thử trực tuyến!

Khối mã ẩn danh không có đối số và trả về một danh sách các ký tự.

Giải trình:

{                                                                          } # 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 byte

-77 Byte - theo cách riêng của tôi

-18 Byte - cảm ơn @tsh@Geza Kerecsenyi , người đã cho tôi thấy những gì @tsh ban đầu chỉ ra

-8 Byte - cảm ơn @Geza Kerecsenyi

-14 Byte - với sự giúp đỡ của @Geza Kerecsenyi

- 28 Byte - trên byte của riêng tôi

- một lần nữa với sự giúp đỡ của @Geza Kerecsenyi

-1 Byte - làm sao điều này có thể xảy ra ...

...

-100 Byte - @Kaiido đã giết nó và qua một số bước trước khi toàn bộ sự việc xảy ra đến 176 byte

Chơi gôn

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

hoặc thử trực tuyến !


1
Ít nhất bạn có thể thay thế ['B', 'C', 'D', 'E', 'G', 'P', 'T', 'V', 'Z'] bằng 'BCDEGPTVZ'.split`` để lưu một số byte
tsh

1
Hãy thử 'BCDEGPTVZ'.split``thay vì .split('')cho -2.
Geza Kerecsenyi

1
Ngoài ra, bạn có thể xác định y=q=>q.split``ở đầu mã của mình và tạo tất cả các chuỗi mảng mà bạn chuyển vào y()- ví dụ: a=['A','J','K']trở thànha=y("AJK")
Geza Kerecsenyi

1
Và thay thế 'BCDEGPTVZ'.split('')bằngy('BCDEGPTVZ')
Geza Kerecsenyi

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

2

Bùa mê , 210 byte

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

Hãy thử trực tuyến!

Sự ngẫu nhiên không đồng nhất vì không có cách nào tốt để làm điều đó trong Runic. Thay vào đó, nó xoay ngẫu nhiên mỗi bộ sưu tập các chữ cái (ví dụ: [BCDEGPTVZ]một nhóm) theo một số lượng (ví dụ: xoay tập hợp ở trên bằng 4, trong đó đỉnh của ngăn xếp ở bên phải, kết quả sẽ là [BCDEGZPTV]) và sau đó quyết định ngẫu nhiên có hay không đảo ngược ngăn xếp. Nó thực hiện các hoạt động này 15 lần. Kết quả là, tất cả các thứ tự có thểcó thể nhưng không có khả năng như nhau. (Trong trường hợp điều này là không đủ, việc tăng thêm chi phí bằng 0 byte , tối đa 15000 vòng xáo trộn).

Đây là phần của mã xử lý việc xáo trộn:

  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

Phần còn lại của mã không đăng ký vào đây:

                     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

Nếu các chữ cái không bị xáo trộn (nhưng bị đảo ngược một lần) bằng cách thay đổi hai byte, bảng chữ cái được in bình thường , có thể được sử dụng để xác minh rằng tất cả các nhóm chữ in ở đúng vị trí. Khoảng trắng chuyển các Blệnh ra khỏi pha là để tất cả các IP có thể sử dụng vòng lặp chức năng cùng một lúc mà không bị va chạm, và sau đó đưa chúng trở lại pha.

Đối với golf, trước tiên, bất kỳ khoảng trống nào có thể được loại bỏ trên tất cả các dòng đều được cắt bớt, sau đó mỗi khoảng trắng được chuyển đổi thành a yvà mỗi chuỗi yyyyđược chuyển đổi thành ̤̤yyyycó cùng độ trễ, nhưng rẻ hơn 2 byte. Lối ra vòng lặp cũng được kết hợp với HLORWphân đoạn chương trình chính để lưu các byte khoảng cách (12 byte).


2

Perl 5 , 103 91 85 byte

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

Hãy thử trực tuyến!

Mã này (ab) sử dụng thực tế là đầu ra của các khóa băm ( %l) của Perl là ngẫu nhiên để tạo ánh xạ ( %k) của tất cả các chữ cái có thể sửa đổi cho một trong các đối tác có thể có của chúng. Tại thời điểm đầu ra, bất kỳ khóa nào không tồn tại được coi là không thay đổi.


Ngoại trừ đầu ra của các khóa băm của Perl hoàn toàn không ngẫu nhiên. Nó hoàn toàn mang tính quyết định, chỉ bị ảnh hưởng bởi chính các phím theo cách gây khó dự đoán. Đó là lý do tại sao mã này tạo ra cùng một đầu ra trên mỗi lần chạy. Cho dù điều đó không đủ điều kiện tiếp cận này hay không.
John Bollinger

@JohnBollinger Điều đó chỉ đúng trong khi chạy chương trình. Trong một lần chạy, thứ tự băm sẽ giống nhau nếu hàm băm không được sửa đổi. Qua hai lần chạy hoặc với một sửa đổi, có một hạt giống ngẫu nhiên được tạo ra trong mỗi lần gọi perl. Tham khảo
Xcali

Ok, @Xcali, tôi đứng sửa. Tôi đã ít nhất bị nhầm lẫn một phần, tuy nhiên, bởi "Hãy thử trực tuyến!" liên kết, liên tục tạo ra cùng một đầu ra cho tôi. Nó phải được lưu trữ, hoặc một cái gì đó.
John Bollinger

Sử dụng keyschắc chắn là một cách tiếp cận tốt, nhưng sort rand 2,...thay vào đó , bạn có thể tiết kiệm 6 byte :( Hãy thử trực tuyến!
Dom Hastings


1

Python 3 , 149 byte

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

Hãy thử trực tuyến!

Ngẫu nhiên bằng cách sử dụng pop () cho bộ chữ


1

APL (Dyalog mở rộng) , 55 byte

Chương trình đầy đủ. In chữ hoa với một không gian hàng đầu và dấu, nhưng không có không gian trung gian.

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

Hãy thử trực tuyến!

⎕A bảng chữ cái viết hoa

'AjkBcdegptvzIyQuSxfMn'(... ) áp dụng các chức năng ngầm ẩn danh sau đây với điều đó như là đối số đúng và chuỗi chỉ định như là đối số bên trái:

 cho đối số bên trái,

 phân vùng nó, bắt đầu một phân khúc mới trong đó

 các ký tự đối số bên trái là thành viên của đối số bên phải (nghĩa là trên các chữ cái viết hoa)

,⍨ chắp thêm

 kèm theo (để đối xử với nó như một yếu tố duy nhất)
 các
 lập luận đúng

 viết hoa mọi thứ

{... }/ giảm bởi lambda anonymous sau, cho ... "QU"λ("SXF"λ("MN"λ"A-Z")):

⊢⍵ vào đúng đối số (bảng chữ cái đang xáo trộn)

(... )@(∊∘⍺) áp dụng các chức năng ngầm ẩn danh sau vào tập hợp con đó là một thành viên của lập luận trái (một nhóm vần)

   trên tập hợp con đó

   sắp xếp lại nó để được

  ?⍨ một hoán vị ngẫu nhiên
   về chiều dài
   kiểm đếm các chữ cái trong tập hợp con


1

Than , 43 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Than không có người vận hành xáo trộn, nhưng tôi đã đưa ra một phương pháp lấy mẫu mà không cần thay thế. Giải trình:

Fα

Lặp lại trên mỗi chữ cái của bảng chữ cái.

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

Tách chuỗi AJK BCDEGPTVZ IY QU SXF MN H L O R Wtrên khoảng trắng và lặp qua các chuỗi con.

F№κι

Lặp lại số lần chữ hiện tại xuất hiện trong chuỗi con. (Tôi sử dụng một vòng lặp vì một điều kiện sẽ cần một elsecaluse. Ngoài ra, tôi có thể đã lọc trên chuỗi con có chứa chữ cái hiện tại cho cùng một số byte.)

‽Φκ¬№KAμ

In một ký tự ngẫu nhiên nhưng loại trừ những ký tự đã được in.


0

Võng mạc , 80 byte

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

Hãy thử trực tuyến!

Có lẽ không phải là phương pháp chơi gôn nhất, nhưng dù sao tôi cũng sẽ gửi nó.

Giải trình:

K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z

Đặt chuỗi làm việc thành 1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z. Có một số trước mỗi chữ cái trong một nhóm, ví dụ A, JKtất cả đều có 1trước chúng.

~(

Đánh dấu một phần mã sẽ tạo ra một số mã võng mạc, sau đó chạy nó sau đó.

K`123456

Đặt chuỗi làm việc thành 123456

.
?O`$&.¶

Thay thế từng nhân vật bằng ?O`{character}.¶

)`¶$
[blank line]

Xóa dòng mới và kết thúc nhóm để tạo mã. Nhóm sẽ tạo mã:

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

{n}.phù hợp với tất cả các trường hợp của số n theo sau là một ký tự. ?Osắp xếp ngẫu nhiên từng trường hợp và điều này được thực hiện cho tất cả các bộ ký tự.

\d
[blank line]

Cuối cùng, loại bỏ tất cả các số và ngầm xuất chuỗi đã tạo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.