Tantangan
Tulis program atau fungsi yang mengembalikan atau mencetak matriks persegi-acak-simetris.
Memasukkan
N : Ukuran dari matriks yaitu6 x 6
Keluaran
Matriks. Anda dapat mencetaknya, mengembalikannya sebagai string (dengan baris baru) atau sebagai daftar / array daftar / array.
Aturan
Anda harus menggunakan setidaknya
N
karakter yang berbeda, di manaN
ukuran matriks kuadrat (input). Karena kita hanya menggunakan huruf [a, z] [A, Z] dan digit [0, 9] (dan hanya 1 digit pada saat itu) Anda dapat mengasumsikan ituN < 27
danN > 2
, itu karenaN <= 2
Anda tidak dapat memiliki kedua huruf dan digit. Terakhir tetapi tidak kalah pentingnya, setiap huruf / digit harus memiliki probabilitas yang tidak nol untuk terjadi (distribusi seragam bukanlah keharusan). Namun, hasilnya harus memiliki setidaknyaN
huruf / digit yang berbeda.Matriks tersebut harus simetris horizontal dan vertikal.
Tepat 2 baris dan 2 kolom harus berisi satu digit angka tunggal (posisinya juga harus acak). Baris / cols lainnya hanya akan berisi huruf. Pertimbangkan huruf sebagai [a, z] dan [A, Z] dan tentu saja angka satu digit sebagai [0, 9].
Hanya untuk menjadi lebih mudah, Anda dapat mengasumsikan bahwa kasus surat-surat tidak masalah, asalkan kasus simetris yang berarti:
a=A, b=B, etc
.Setiap output yang mungkin harus memiliki probabilitas yang tidak nol terjadi. Distribusi acak tidak perlu seragam.
Contoh
Input : 8
Keluaran :
c r p s s p r c
r k o z z o k r
u t 2 a a 2 t u
y n q z z q n y
y n q z z q n y
u t 2 a a 2 t u
r k o z z o k r
c r p s s p r c
Jawaban:
Arang , 30 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Jika
n
selalu genap, maka selama 23 byte:Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukan .n
Buat olehnn2 array huruf kecil acak. Ini dicetak secara implisit sebagai kotak.n2
Lompat ke posisi acak di kotak.
Cetak angka acak.
Merefleksikan secara horizontal dan vertikal untuk melengkapi matriks.
sumber
R ,
124118 byteCobalah online!
Dalam R, hal-hal yang terlihat seperti operator hanyalah fungsi yang mendapatkan perlakuan khusus dari parser.
Jika Anda mendefinisikan ulang operator (seperti
-
) menjadi beberapa fungsi lain, itu membuat perlakuan khusus dari parser. Karena-
keduanya adalah awalan dan infiks, dan saya perlu memanggilsample
fungsi dengan argumen satu dan dua, saya dapat menggunakanuntuk mendapatkan apa yang saya inginkan.
Jadi, kode
-letters
diterjemahkansample(letters)
, yang secara acak mengocokletters
built-in. Tetapij-1
diterjemahkan kesample(j,1)
, yang secara acak sampel1
item dari vektor1:j
.(Perilaku
sample
fungsi ini tergantung pada jumlah parameter dan apa parameter pertama adalah, sangat menyebalkan dalam kode produksi, jadi saya senang menemukan banyak penggunaan sifat buruknya di sini!)Kalau tidak, kode hanya membuat kuadran kiri atas dari hasil yang diperlukan, menggantikan elemen acak (
j-1
,j-1
bit) dengan digit acak (0:9-1
bit), dan melipatnya untuk simetri yang diperlukan. Dibutuhkani
danj
untuk menangani kasus genap dan ganjil.sumber
Python3, 287 byte
Percobaan pertama saya di golf sesuatu di sini; Saya yakin seseorang dapat melakukan jauh lebih baik:
Cobalah secara Online!
Berkat HyperNeurtrino, Ourous dan Heiteria ini menyusut menjadi 193 byte (lihat komentar). Namun, TFeld dengan benar menunjukkan bahwa beberapa panggilan
sample
tidak menjamin setidaknyaN
karakter yang berbeda.Yang perlu diingat, coba versi baru ini yang harus menjamin setidaknya
N
karakter yang berbeda per kali.Python3,
265260 byte, setidaknyaN
karakter yang berbedaCobalah online!
sumber
a[:-1][::-1]
secara fundamental setara dengana[:-2::-1]
, dan Anda dapat mengimporrandom
sebagair
gantirn
, dan Anda dapat memindahkanfor
loop ke ekspresi inline. Cobalah secara Online!math
impor dengan menggunakan-(-a // 2)
alih-alihmath.ceil(a / 2)
yang pada dasarnya adalah lantai negatif dari negatif (efektif plafon). tio.run/##XY7LagMxDEX3/…sample()
s tidak menjamin bahwa Anda mendapatkan setidaknyaN
karakter yang berbeda. Saya berhasil mendapatkan[['g', 'x', 'x', 'g'], [7, 'x', 'x', 7], [7, 'x', 'x', 7], ['g', 'x', 'x', 'g']]
untukN=4
, yang hanya memiliki 3 karakter yang berbedaAPL (Dyalog Classic) ,
45444340 byteterima kasih @ Adm untuk -1 byte
Cobalah online!
menggunakan
⌈
(maks) dari matriks dengan refleksinya untuk membuatnya simetris, sehingga bias terhadap bagian terakhir dari alfabetdigit dipilih secara seragam dari 0 ... 25 mod 10, sehingga memiliki bias kecil ke nilai yang lebih rendah
sumber
⌊2⍴⍵÷2)?⍵ ⍵⍴26]}
→⌊⍺⍵÷2)?⍺⍵⍴26]}⍨
⌊⍺⍵÷2
→⍺⍵
.Japt , 31 byte (Posisi digit tetap)
Cobalah online!
Japt , 41 byte (Posisi digit acak)
Cobalah online!
Penjelasan
sumber
Python 2 , 259 byte
Cobalah online!
sumber
05AB1E ,
294038 byte11 byte untuk memperbaiki angka berada di posisi acak sambil tetap aturan 3 dalam pikiran untuk input aneh ..
-2 byte berkat @MagicOctopusUrn , mengubah
îï
keò
dan mengubah posisi»
.Cobalah online untuk memverifikasi beberapa kasus uji lagi .
Tua (
2927 byte ) menjawab di mana digit posisi di mana selalu di sudut:Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
sumber
»
ï
itu dilakukan secara implisit juga. Sayangnya ini tidak berlaku untuk versi 40-byte karena∊
akan memasukkan alih-alih ganti.2
, input dijamin3 <= N <= 26
.n
huruf pertama dari alfabet, bukann
huruf alfabet acak. Dan pertama kali bergabung dengan baris baru dan hanya kemudian melakukan mirror menghemat byte juga di tambang. Terima kasih untuk -2 byte! :) PS: Satu byte dapat disimpan di byter 28 Anda dengan menghapus trailing}
. :)C (gcc) ,
198197196 byteDisimpan 2 byte berkat ceilingcat.
Cobalah online!
Penjelasan:
sumber
JavaScript (ES6),
213209206 byteCobalah online!
Berkomentar
sumber
Bersih ,
346312 byteakan bermain golf lebih banyak besok
Cobalah online!
sumber
Python 3 , 197 byte
Seperti yang disebutkan oleh @Emigna, tidak bekerja untuk nilai aneh
N
(saya tidak mengerti pertanyaan dengan benar)Cobalah online!
Saya pikir panggilan ke
randint()
+sample()
+shuffle()
yang terlalu banyak, dan menyingkirkan menyeret di tempat akan menjadi besar :)Saya cukup yakin bagian ini (yang memilih huruf & angka) dapat di-golf sedikit lebih.
sumber
N
.N
akan selalu menjadi sejak saya tidak mengerti bagaimana matriks bisa simetris jika itu aneh!Python 2 ,
275266 byteCobalah online!
Mengembalikan array sebagai daftar daftar karakter. Untuk memenuhi Aturan 1, kami menyiapkan kumpulan karakter:
Bit rumit berikutnya adalah aturan 3: harus ada tepat 2 kolom dan baris memiliki angka; ini berarti
n
aneh, bahwa digit yang dipilih mungkin tidak muncul di kolom tengah atau baris tengah. Karena kita membangun array menggunakan sub array persegi dua kalis
, yang dilakukan di sini dengan menggunakan:yaitu, kocok setidaknya satu kali; dan kemudian, jika
n
ganjil, teruskan perulangan jika digitnya ada di kolom terakhir atau baris terakhirs
.sumber
Pyth , 48 byte
Cobalah online di sini .
Program ini dalam 3 bagian - definisi fungsi palindromisation, memilih lokasi numerik, dan fungsi utama.
Menggunakan beberapa huruf acak akan memastikan bahwa jumlah karakter unik selalu lebih dari jumlah input.
sumber
Python 2 / Python 3, 227 byte
ungolfing sedikit:
Lebih tua, hampirVersi yang benar di bawah:
Python2, Python3, 161 byte
Sepertinya N elemen yang berbeda hanya hampir dijamin.
Python 2 / Python 3, 170 byte
Sepertinya saya lupa aturan 3. Juga entah bagaimana [: n * n] menyelinap masuk
sumber
n = 3
, Anda tidak akan pernah memiliki output yang mengandung a'z'
, jadi tidak setiap output mungkin).