Konsep
Dengan cara apa Anda dapat mengacak alfabet bahasa Inggris sehingga masih dapat dinyanyikan dengan nada Twinkle Twinkle Little Star tanpa merusak nada itu?
Aturan
Bertukar
Anggap saja huruf-huruf yang terkandung dalam masing-masing set berikut dapat ditukar secara bebas tanpa merusaknya:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {I, Y}
- {Q, U}
- {S, X, F}
- { M N }
- Karenanya H, L, O, R, dan W terkunci pada tempatnya
Keluaran
Program perlu mengeluarkan string RANDOM (atau daftar karakter) tunggal yang berisi alfabet Inggris lengkap dalam urutan apa pun asalkan pesanan memenuhi persyaratan di atas. Seharusnya tidak ada cara bagi Anda untuk memprediksi string mana yang akan dihasilkan oleh program Anda (jika kami mengabaikan seeding), artinya Anda tidak bisa hanya melakukan hardcode.
Program Anda harus memiliki beberapa probabilitas positif (tidak harus seragam) untuk menghasilkan masing-masing dari keluaran.
Tidak ada batasan pemformatan tertentu tentang spasi, pembatas atau kasus, hanya konsisten.
Tujuan
Bytes paling sedikit menang!
Contoh:
- 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
- pwfyz jcdebxthikalnmogursvq
- ABCDEFGHIJKLMNOPQRSTUVWXYZ
Tidak ada contoh:
- HLWROABCDEFZXYGIJKMNPQTSVU
Bukti Konsep: (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])
Z
boleh "terkunci di tempat", tidak bersajak dengan yang lain?Jawaban:
05AB1E , 28 byte
Output sebagai string huruf kecil tunggal.
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa
.•¬=©ƶÓÄûkTVã”ØζÞ•
adalah"ajk bcdegptvz iy qu sxf mn"
.sumber
Python 3 ,
140133124123 byteCobalah online!
-1 byte, terima kasih kepada Jo King
Python 2 ,
174170158 byteCobalah online!
sumber
Ruby , 102 byte
Cobalah online!
sumber
Pyth ,
595756 byteCobalah online!
Output adalah array huruf kecil.
sumber
R ,
9391 byteCobalah online!
sumber
Perl 6 , 76 byte
Cobalah online!
Blok kode anonim tanpa argumen dan mengembalikan daftar karakter.
Penjelasan:
sumber
JavaScript -
421344328320306280277276... 176 Bytes-77 Bytes - pada saya sendiri
-18 Byte - terima kasih kepada @tsh dan @Geza Kerecsenyi yang membuat saya melihat apa yang awalnya ditunjukkan oleh @tsh juga
-8 Bytes - terima kasih kepada @Geza Kerecsenyi
-14 Bytes - dengan bantuan @Geza Kerecsenyi
- 28 Bytes - pada saya sendiri
-3 Bytes - lagi dengan bantuan @ Geza Kerecsenyi
-1 Bytes - bagaimana ini bisa terjadi ...
...
-100 Bytes - @ Kaiido membunuhnya dan melalui beberapa langkah sebelum semua ini turun hingga 176 Bytes
Golf:
atau coba online !
sumber
'BCDEGPTVZ'.split``
alih-alih.split('')
untuk -2.y=q=>q.split``
di bagian atas kode Anda, dan membuat semua string array yang Anda lewatiy()
- misalnyaa=['A','J','K']
menjadia=y("AJK")
'BCDEGPTVZ'.split('')
dengany('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Pesona Runic , 210 byte
Cobalah online!
Pengacakan tidak seragam karena tidak ada cara yang baik untuk melakukannya di Runic. Alih-alih itu secara acak merotasi setiap kumpulan huruf (mis.
[BCDEGPTVZ]
Adalah satu pengelompokan) dengan jumlah tertentu (mis. Memutar set di atas dengan 4, di mana bagian atas tumpukan berada di sebelah kanan, hasilnya adalah[BCDEGZPTV]
) dan kemudian secara acak memutuskan apakah akan membalikkan tumpukan. Ia melakukan operasi ini 15 kali. Akibatnya, semua pemesanan mungkin dimungkinkan tetapi kemungkinannya tidak sama. (Dalam hal ini tidak cukup, meningkatkannya lebih lanjut biaya nol byte , hingga 15000 loop acak).Ini adalah bagian dari kode yang menangani pengocokan:
Sisa kode membuka gulungan ke ini:
Jika huruf-huruf dibiarkan tidak teracak (tetapi sekali terbalik) dengan mengubah dua byte alfabet dicetak secara normal , yang dapat digunakan untuk memverifikasi bahwa semua pengelompokan huruf dicetak di tempat yang benar. Ruang putih menggeser
B
perintah keluar dari fase sehingga semua IP dapat menggunakan loop fungsi pada saat yang sama tanpa bertabrakan, dan kemudian membawanya kembali ke fase lagi.Untuk bermain golf, pertama-tama setiap ruang yang dapat dihapus pada semua baris telah dipangkas, kemudian masing-masing dua ruang dikonversi menjadi
y
, dan setiap urutanyyyy
dikonversi menjadi̤
karena̤
danyyyy
jumlah penundaan yang sama, tetapi 2 byte lebih murah. Loop keluar juga digabungkan denganHLORW
segmen program utama untuk menghemat spasi byte (12 byte).sumber
Perl 5 ,
103 9185 byteCobalah online!
Kode ini (ab) menggunakan fakta bahwa output Perl kunci hash (
%l
) adalah acak untuk membuat pemetaan (%k
) dari semua huruf yang dapat dimodifikasi untuk salah satu rekan mereka yang mungkin. Pada waktu output, setiap kunci yang tidak ada diasumsikan tidak berubah.sumber
keys
jelas merupakan pendekatan yang baik, tetapi Anda dapat menghemat 6 byte menggunakansort rand 2,...
:( Cobalah secara online!Jelly , 34 byte
Cobalah online!
sumber
Python 3 , 149 byte
Cobalah online!
Pengacakan dengan menggunakan pop () untuk set huruf
sumber
APL (Dyalog Extended) , 55 byte
Program lengkap. Mencetak huruf besar dengan ruang depan dan belakang, tetapi tanpa ruang perantara
Cobalah online!
⎕A
alfabet huruf besar'AjkBcdegptvzIyQuSxfMn'(
...)
terapkan fungsi diam-diam anonim berikut dengan argumen yang benar dan string yang ditunjukkan sebagai argumen kiri:⊣
untuk argumen kiri,⊂
mempartisi itu, memulai segmen baru di mana∊
karakter argumen kiri adalah anggota argumen kanan (yaitu pada huruf besar),⍨
menambahkan⊂
melampirkan (memperlakukannya sebagai satu elemen)⍤
yang⊢
argumen yang tepat⌈
huruf besar semuanya{
...}/
kurangi dengan lambda anonim berikut, memberi ..."QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
pada argumen yang benar (abjad berebut sedang berlangsung)(
...)@(∊∘⍺)
menerapkan fungsi diam-diam anonim berikut ke subset yang merupakan anggota dari argumen kiri (grup sajak)⊢
pada bagian itu⊇
menyusun ulang menjadi?⍨
permutasi acak penghitungan∘
panjang≢
huruf dalam himpunan bagiansumber
Arang , 43 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Charcoal tidak memiliki operator pengocokan, tetapi saya menemukan metode pengambilan sampel tanpa penggantian. Penjelasan:
Ulangi setiap huruf alfabet.
Pisahkan string
AJK BCDEGPTVZ IY QU SXF MN H L O R W
pada spasi dan loop di atas substring.Ulangi jumlah kali huruf saat ini muncul di substring. (Saya menggunakan loop karena conditional akan membutuhkan
else
caluse. Atau saya bisa saja memfilter pada substring yang berisi huruf saat ini untuk jumlah byte yang sama.)Cetak karakter acak tetapi kecualikan yang sudah dicetak.
sumber
Retina , 80 byte
Cobalah online!
Mungkin bukan metode yang paling golf, tapi saya tetap akan mengirimkannya.
Penjelasan:
Setel string yang berfungsi ke
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Ada nomor sebelum setiap huruf dalam grup, misalnyaA
,J
danK
semua ada1
sebelum mereka.Tandai bagian kode yang akan menghasilkan beberapa kode retina, kemudian jalankan sesudahnya.
Setel string yang berfungsi ke
123456
Ganti setiap karakter dengan
?O`{character}.¶
Hapus baris baru yang tertinggal dan selesaikan grup untuk menghasilkan kode. Grup akan menghasilkan kode:
{n}.
cocok dengan semua contoh nomor n diikuti oleh karakter.?O
mengurutkan setiap instance secara acak, dan ini dilakukan untuk semua set karakter.Akhirnya, hapus semua angka dan secara implisit mengeluarkan string yang dihasilkan.
sumber