Kelompok dihedral adalah kelompok simetri dari alun-alun, yang bergerak yang mengubah persegi untuk dirinya sendiri melalui rotasi dan refleksi. Ini terdiri dari 8 elemen: rotasi dengan 0, 90, 180, dan 270 derajat, dan refleksi melintasi sumbu horizontal, vertikal, dan dua diagonal.
Gambar-gambar tersebut semuanya berasal dari halaman indah oleh Larry Riddle.
Tantangan ini adalah tentang menyusun gerakan ini: diberi dua gerakan, mengeluarkan gerakan yang setara dengan melakukannya satu per satu. Misalnya, melakukan langkah 7 diikuti dengan langkah 4 sama dengan melakukan langkah 5.
Perhatikan bahwa beralih urutan untuk bergerak 4 lalu bergerak 7 menghasilkan langkah 6 sebagai gantinya.
Hasilnya ditabulasikan di bawah ini; ini adalah tabel Cayley dari grup . Jadi misalnya, input harus menghasilkan output .
Tantangan
Tujuan Anda adalah untuk mengimplementasikan operasi ini sesedikit mungkin byte, tetapi selain kode, Anda juga memilih label yang mewakili gerakan 1 hingga 8. Label harus terdiri dari 8 angka berbeda dari 0 hingga 255 , atau 8 karakter -byte mewakili titik kode mereka.
Kode Anda akan diberikan dua label dari 8 yang Anda pilih, dan harus menampilkan label yang sesuai dengan komposisi mereka di grup dihedral .
Contoh
Katakanlah Anda telah memilih karakter C, O, M, P, U, T, E, R untuk masing-masing bergerak 1 hingga 8. Kemudian, kode Anda harus mengimplementasikan tabel ini.
Diberikan input E dan P, Anda harus menampilkan U. Input Anda akan selalu dua huruf C, O, M, P, U, T, E, R, dan output Anda harus selalu salah satu dari huruf-huruf ini.
Tabel teks untuk disalin
1 2 3 4 5 6 7 8
2 3 4 1 8 7 5 6
3 4 1 2 6 5 8 7
4 1 2 3 7 8 6 5
5 7 6 8 1 3 2 4
6 8 5 7 3 1 4 2
7 6 8 5 4 2 1 3
8 5 7 6 2 4 3 1
Your choice of labels doesn't count against your code length.
keberatan menguraikan? Seperti berdiri, saya dapat mengubah kode matriks ke dalam kode saya dan mengklaim itu tidak dihitung terhadap skor saya.Jawaban:
Ruby , 18 byte
Tidak disatukan
Cobalah online!
Gunakan nomor kode berikut 0 hingga 7
Agar asli ke kode:
Agar per pertanyaan
Penjelasan
/
mewakili flip di garisy=x
dan|
mewakili flip di sumbu y.Dimungkinkan untuk menghasilkan salah satu simetri dari grup D4 dengan membalik secara bergantian dalam dua garis ini. Misalnya
/
diikuti dengan|
memberi/|
yang merupakan rotasi 90 derajat berlawanan arah jarum jam.Jumlah total flips berturut-turut memberikan representasi yang sangat nyaman untuk manipulasi aritmatika.
Jika langkah pertama adalah rotasi, kita cukup menambahkan jumlah flips:
Jika langkah pertama adalah refleksi, kami menemukan kami memiliki beberapa refleksi
/
dan|
simbol yang identik di sebelah satu sama lain. Karena refleksi adalah terbalik sendiri, kita dapat membatalkan membalik ini satu per satu. Jadi kita perlu mengurangi satu gerakan dari yang lainsumber
~0
dengan7
karena aritmatika modular.Bahasa Wolfram (Mathematica) , 31 byte
Menggunakan bilangan bulat0,5,2,7,1,3,6,4 sebagai label.
Cobalah online!
Penjelasan:
The Dihedral KelompokD4 isomorfis ke kelompok matriks unitriangular derajat tiga di atas lapangan F2 :
Dan kita mempunyai
yang dapat dengan mudah ditulis dalam operasi bitwise.
sumber
Bahasa Wolfram (Mathematica) , 51 byte
Cobalah online!
Menggunakan label
{228, 57, 78, 147, 27, 177, 198, 108}
.Ini ada
{3210, 0321, 1032, 2103, 0123, 2301, 3012, 1230}
di basis 4. Untungnya, 256 = 4 ^ 4.Implementasi tingkat bawah, juga 51 byte
Cobalah online!
sumber
Python 2 , 22 byte
Port jawaban Mathematica saya . Menggunakan bilangan bulat0 , 6 , 1 , 7 , 2 , 3 , 5 , 4
Cobalah online!
sumber
Python 2 ,
262321 byteCobalah online! Port jawaban saya untuk Cayley Table dari Grup DihedralD3 . Sunting: Disimpan 3 byte berkat @NieDzejkob. Disimpan 2 byte berkat @xnor untuk menyarankan operator
and
(bukanxnor
). Gunakan pemetaan berikut:sumber
(-1)
dengan7
karena aritmatika modular untuk -3 byte.y+x*7**y&7
TI-BASIC, 165 byte
Input adalah daftar panjang dua in
Ans
.Output adalah angka pada
(row, column)
indeks dalam tabel.Mungkin ada metode kompresi yang lebih baik yang akan menghemat byte, tetapi saya harus memeriksanya.
Contoh:
Penjelasan:
(Baris baru telah ditambahkan untuk dibaca.)
Berikut ini adalah solusi 155 byte , tetapi hanya hardcodes matriks dan mendapat indeks.
Saya merasa ini lebih membosankan, jadi saya tidak membuatnya sebagai pengajuan resmi:
Catatan: TI-BASIC adalah bahasa tokenized. Jumlah karakter tidak sama dengan jumlah byte.
sumber
0-7
ke1-8
Jelly , 6 byte
Tautan diad menerima transformasi pertama di kanan dan transformasi kedua di sebelah kiri yang menghasilkan transformasi komposit.
Di mana transformasi adalah:
Cobalah online! ... Atau lihat tabel dipetakan kembali ke label pada pertanyaan .
(Argumen dapat diambil dalam urutan lain menggunakan 6 byter,
_+Ḃ?%8
)Bagaimana?
Setiap label adalah panjang urutan bolak-balik
hor
dan+ve
transformasi yang setara dengan transformasi (misalnya180
setara denganhor, +ve, hor, +ve
).Komposisi
A,B
ini setara dengan gabungan dari dua sekuens yang setara, dan memungkinkan penyederhanaan untuk pengurangan atau penambahan modulo delapan ...Menggunakan contoh pertanyaan yang
7, 4
kami miliki+ve, 90c
yaitu:hor, +ve, hor, +ve, hor, +ve, hor , hor, +ve, hor, +ve, hor, +ve
... tapi karena
hor, hor
iniid
kita memiliki:hor, +ve, hor, +ve, hor, +ve , +ve, hor, +ve, hor, +ve
... dan karena
+ve, +ve
ituid
kita punya:hor, +ve, hor, +ve, hor , hor, +ve, hor, +ve
... dan kami dapat mengulangi pembatalan ini ke:
hor
..setara dengan pengurangan panjang (
7-6=1
).Ketika tidak ada pembatalan mungkin kami hanya menambahkan panjangnya (seperti→ →
90a, 180
2+4=6
90c
).Terakhir, perhatikan bahwa urutan panjang delapan adalah
id
sehingga kita dapat mengambil panjang urutan yang dihasilkan modulo delapan.Ini juga 1 byte lebih pendek dari implementasi ini menggunakan indeks permutasi leksikografis:
... Tautan monadik yang menerima
[first, second]
, dengan label:sumber
JavaScript (Node.js) ,
2217 byteCobalah online! Port jawaban saya untuk Cayley Table dari Grup DihedralD3 tapi menggunakan saran pada jawaban Python saya. Gunakan pemetaan berikut:
Versi JavaScript yang lebih lama dapat didukung dalam beberapa cara selama 22 byte:
sumber
x=>y=>(y&1?y-x:y+x)&7
lalu panggil fungsi Anda menggunakanf(x)(y)
.Karat , 16 byte
Cobalah online!
Port jawaban Python alephalpha. Tapi lebih pendek.
sumber
Elm ,
42 byte19 bytePort versi Neode Node.js
Cobalah online
Versi sebelumnya:
sumber
f x
merupakan pemanggilan fungsi, sama seperti apaf(x)
artinya dalam bahasa mirip-C. Dan Anda tidak dapat menahannya. Tapi itu bisa sangat bagus dan kurang berantakan di banyak skenario non-golf. Elm tidak memiliki operator bitwise (seperti &) sehinggaand x y
hanya fungsi panggilan biasa di sini.<|
daripada tanda kurung. Terima kasih telah mempertanyakan itu!Python,
8271 byte0-7
-11 byte berkat ASCII saja
TIO
sumber
f=
dapat dihapus karena tidak rekursifint.from_bytes
dan penyandian non-UTF, tapi ... tidak yakin bagaimana melakukannya di TIOScala , 161 byte
Memilih KOMPUTER sebagai label.
Cobalah online!
sumber
Scala , 70 byte
Memilih 0-7 bilangan bulat asli sebagai label.
Dikompresi matriks menjadi string ASCII 32 byte, masing-masing pasangan angka n0, n1 menjadi 1 karakter c = n0 + 8 * n1 + 49. Mulai dari 49 hingga yang kita tidak miliki \ dalam string yang disandikan.
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 17 byte
Port jawaban Python alpehalpha.
Cobalah online!
sumber
Perl 6 , 19 byte
Pelabuhan Solusi Neil's Python .
Cobalah online!
sumber
Bahasa Wolfram (Mathematica), 7 byte (pengodean UTF-8)
Fungsi murni mengambil dua argumen. Simbol yang diberikan di sini sebagai
⊙
adalah simbol Unicode pribadi milik Fatic (3 byte), yang mewakili fungsiPermutationProduct
.Mathematica tahu tentang kelompok dihedral, dan itu mewakili elemen dari berbagai kelompok sebagai permutasi, ditulis menggunakan
Cycles
perintah. Misalnya, menjalankan perintahmenghasilkan output:
PermutationProduct
adalah fungsi yang mengalikan elemen grup ketika ditulis dalam formulir ini.Karena kami diizinkan memilih label kami sendiri, fungsi ini mengasumsikan label ini untuk elemen grup; hubungan antara label-label ini dan label-label di pos masalah diberikan oleh:
tl; dr Ada bawaan.
sumber