Tulis program atau fungsi yang menggunakan kisi-kisi teks 4 × 4 yang terdiri dari tepat 4 A
's, 4 B
' s, 4 C
's, dan 4 D
' s, seperti:
ACDC
BBCA
BADD
ABCD
The ABCD
's mungkin dalam pengaturan apapun tetapi akan selalu ada 4 masing-masing. Anda dapat menganggap input tersebut valid. Jika diinginkan, Anda juga dapat menganggap itu memiliki baris baru dan / atau bahwa itu datang sebagai satu baris dalam urutan membaca, misalnya ACDCBBCABADDABCD
. Anda juga dapat mengganti karakter ABCD
dengan 0123
atau 1234
masing - masing, jika diinginkan (tapi hanya itu).
Keluarkan nilai kebenaran jika kotak teks memiliki segala bentuk simetri reflektif atau rotasi. Secara khusus:
Jika ada garis simetri horizontal tengah. misalnya
BACD BACD BACD \___ bottom mirrors top BACD /
Jika ada garis vertikal pusat simetri. misalnya
BCCB DAAD CAAC BDDB \/___ right mirrors left
Jika ada garis simetri diagonal (di kedua arah). misalnya
___ diagonally mirrored / ABDC BACD DCAB CDBA \___ diagonally mirrored
Jika ada simetri rotasi 90 °. misalnya
BDAB ACCD same if rotated 90 degrees (or 180 or 270) DCCA BADB
Jika ada simetri rotasi 180 °. misalnya
DBCA BDCA same if rotated 180 degrees ACDB ACBD
(Perhatikan bahwa simetri translasi tidak ikut berperan di sini.)
Keluarkan nilai palsu jika grid tidak memiliki salah satu simetri yang disebutkan di atas. contoh grid contoh pertama.
Kode terpendek dalam byte menang.
Jawaban:
CJam, 16 byte
Blok tanpa nama yang mengharapkan input sebagai daftar empat string di atas tumpukan dan meninggalkan
0
(falsy) untuk input asimetris dan integer positif (benar) untuk input simetris.Uji di sini. Atau jalankan test suite lengkap.
Penjelasan
Simetri alun-alun adalah unsur-unsur dari kelompok dihedral orde 8 (yang hanya merupakan 4 rotasi persegi dan 4 rotasi yang sama dari beberapa versi kuadrat yang dipantulkan). Itu tidak mungkin untuk menghasilkan grup ini dari aplikasi berulang permutasi tunggal. Tetapi dua refleksi selalu memberikan rotasi. Oleh karena itu, seluruh kelompok dapat dihasilkan dengan bergantian antara dua refleksi empat kali. (Kita hanya perlu memastikan bahwa kedua pantulan memberikan rotasi 90 derajat atau 270 derajat, bukan 0 atau 180.)
Tantangannya bertanya apakah kotak input sama dengan salah satu dari 7 simetri lainnya. Jadi jawaban ini hanya menghasilkan semuanya dan kemudian memeriksa apakah inputnya ada di antara yang lain.
Untuk melihat bagaimana aplikasi berulang
z
danW%
menghasilkan semua simetri, lihat "diagram" ini:sumber
z
transpos danW%
membalikkan garis, jadi saya hanya membuat semua simetri dengan aplikasi berulang dari mereka.Pyth, 11 byte
Suite uji
Ini menggunakan teknik transpos dan balik Martin, tetapi dengan twist. Sementara solusi lain telah secara eksplisit menghasilkan semua 8 simetri, kemudian menghitung jumlah kemunculan aslinya, program ini menggunakan
.u
fungsi Pyth .The
.u
Fungsi adalah "Terapkan sampai berulang ditemukan". Dalam hal ini, kami secara bergantian memindahkan dan membalikkan hingga terjadi pengulangan, lalu mengakumulasikan hasilnya ke dalam daftar. Lalu, saya menghapus 7 nilai terakhir, jadi hanya akan ada nilai yang tersisa jika tidak ada simetri, dan pengulangan pertama terjadi setelah semua 8 refleksi dan pengulangan dihasilkan.Penjelasan:
sumber
05AB1E , 13 byte
Penjelasan
Menggunakan metode yang secara ahli dijelaskan oleh Martin dalam jawaban CJam-nya .
Cobalah online
sumber
Perl,
6160 byteTermasuk +3 untuk
-p0a
Berikan kotak input pada STDIN, cetak 0 tanpa simetri, jika tidak bilangan positif
symmetry.pl
:sumber
Dyalog APL ,
371917 byte@ ngn menguranginya hingga 20 byte!
TryAPL online!
sumber
⍉¨
bukannya⌽∘⍉¨
bekerja juga.Brachylog ,
3836 byteCobalah online!
Ini mengharapkan daftar string sebagai input. Ini mencetak salah satu
true.
ataufalse.
.Penjelasan
Predikat utama:
Predikat 1: Output adalah salah satu dari 8 simetri input.
sumber
TSQL, 229 byte
Sadarilah TSQL tidak memiliki built-in untuk memutar, jadi ini termasuk dalam kode.
Golf:
Tidak Disatukan:
Biola
sumber
Python 2,
154146 byteCek apakah ada transformasi yang diperlukan setara dengan yang asli menggunakan array numpy. Input diambil sebagai daftar empat string.
Cobalah online
Mengambil input sebagai string tunggal lebih lama, dengan
A=array(list(input())).reshape(4,4)
.A[:,::-1]
sama denganfliplr(A)
.A[::-1]
sama denganflipud(A)
.sumber
map(list,input())
sebagai ganti[list(r)for r in input()]
any
mengambil ekspresi generator, sehingga Anda dapat menghemat beberapa byte dengan menjatuhkan pasangan terluar kurung.print
pernyataan tidak berfungsi. Coba forking kode online saya dan jalankan dengan cara itu untuk melihat.print
.Python 3, 99 byte
Fungsi yang mengambil input, melalui argumen, daftar string dan kembali
True
atau yangFalse
relevan.Ini menggunakan pendekatan yang sama dengan jawaban @ MartinEnder .
Bagaimana itu bekerja
Cobalah di Ideone
sumber
JavaScript (ES6), 131 byte
17 byte dapat dihapus jika Anda melewatkan array 4 string secara langsung. Saya mencoba bit-twiddling (input dalam
"0123301223011230"
format) tetapi saya butuh 199 byte:sumber