Bentuk adalah kiral jika tidak ada jumlah rotasi yang membuatnya tampak seperti gambar cermin. Dalam teka-teki ini kita akan menulis program komputer kiral.
Untuk puzzle ini kita akan menganggap sebuah program sebagai matriks karakter persegi panjang. Karena itu, semua solusi untuk tantangan ini harus berbentuk persegi panjang (yaitu semua garis harus memiliki panjang yang sama). Kita dapat memutar program-program ini dalam peningkatan seperempat putaran. Misalnya programnya
The quickish fish
lept deftly
rightwards
Ketika diputar seperempat putaran searah jarum jam terlihat seperti
T
h
r e
i
glq
heu
tpi
wtc
a k
rdi
des
sfh
t
lf
yi
s
h
Kami juga dapat mencerminkan program-program ini. Berikut adalah program yang sama tercermin pada sumbu vertikal:
hsif hsikciuq ehT
yltfed tpel
sdrawthgir
Program kiral adalah program yang ketika diputar berapa kali akan selalu menghasilkan " left
". Namun ketika direfleksikan menghasilkan program yang menghasilkan " right
" tidak peduli berapa kali ia diputar.
Tugas Anda adalah menulis program chiral dalam beberapa byte mungkin.
Aturan tambahan
Keluaran tidak peka huruf besar-kecil tetapi harus konsisten. (mis. Anda dapat menampilkan "
LEFT
" dan "rIgHt
" tetapi casing ini harus konsisten di bawah rotasi)Garis harus dipisah pada baris baru atau baris baru dan baris baris.
Program Anda harus berbentuk persegi panjang, Anda dapat menambahkannya dengan spasi atau komentar tetapi setiap baris harus memiliki panjang yang sama.
Secara opsional, Anda dapat memiliki baris tambahan (atau baris baru dan umpan baris) pada semua program Anda jika diinginkan.
sumber
:set virtualedit=all
mode blok Vim .Bool
Output awal memeriksa apakah input sama dengan rotasi sendiri, yang menyederhanakan banyak hal. Menghapus{-
membuatnya mencetak input yang dipantulkan.Jawaban:
Pascal (FPC) ,
2161755349 byteCoba ke kiri
Coba yang benar
@ tsh memotivasi saya untuk mencoba lagi ketika saya melihat programnya (dalam komentar) dan ini dia!
Sebelumnya dengan 755 byte:
Coba ke kiri
Coba yang benar
Jika Anda melihat kiriman saya sebelumnya, lupakan saja :)
Semua rotasi untuk program kiri dan kanan adalah sama.
sumber
Klein (000) ,
10987 byteCobalah online!
Seharusnya dimungkinkan untuk mendapatkan versi yang lebih pendek dari jawaban ini, semoga berhasil!
Jawaban ini terinspirasi oleh spiral. Secara khusus idenya adalah dua spiral yang saling bertautan, satu untuk kiri dan satu untuk kanan. Ini memiliki dua simetri lipat, Jadi kita dapat memeriksa program-program berikut untuk mengetahui kerjanya:
Perempat putaran
Cobalah online!
Dicerminkan
Cobalah online!
Cermin dan Perempat putaran
Cobalah online!
sumber
Klein (000) ,
2725 byteCobalah online! Diputar sekali! Diputar dua kali! Diputar tiga kali!
Dan membalik: Coba online! Diputar sekali! Diputar dua kali! Diputar tiga kali!
Satu-satunya yang memberi saya sedikit masalah adalah yang terbalik dan diputar sekali, yang terlihat seperti:
Ini adalah satu-satunya alasan untuk dua set
((
.sumber
Klein (211) , 37 byte
Ini memiliki program yang berbeda untuk setiap rotasi.
Penjelasan
Perhatikan bahwa masing-masing program ini diisi ke kotak dengan no-ops sebelum eksekusi
Tidak ada perubahan
Cobalah online!
!
membuat eksekusi melompati\
dan"left"@
memuat string"left"
ke stack dan mengakhiri program pencetakan stackPerempat putaran
Cobalah online!
Eksekusi berjalan dari sudut kanan atas alun-alun, berlanjut di sudut kiri bawah dan sekali lagi
!\"left"@
dicetak"left
.Setengah putaran
Cobalah online!
Di sini, jalur eksekusi keluar dari sisi Utara, masuk kembali melalui sisi Barat, keluar lagi dari Timur Sebelum masuk di selatan.
\
memantulkan jalur ke"left"@
untuk mencetaknya.Giliran tiga perempat
Cobalah online
Eksekusi keluar dari sudut kanan atas kemudian masuk kembali di kiri bawah. Sekali lagi mirror
/\
mengarahkan jalur ke"left"@
untuk mencetaknya.Refleksi
Ini pada dasarnya sama dengan yang tersisa di semua rotasi.
sumber
JavaScript (Node.js) ,
1481599505461341305271 byteDicerminkan
Cobalah online!
(Silakan lihat TIO Link untuk semua kasus uji, termasuk versi cermin)
Meskipun lebih lanjut
22x22 -> 21x21
bermain golf , ukuran kredit @JoKing!Ukuran
38x3824x2422x2221x2118x1817x1716x16, simetri 4 kali lipat.Ada pertanyaan - apakah mungkin untuk memiliki 15x15 atau lebih kecil untuk JS? Tampaknya yang paling saya butuhkan adalah pemisah komentar antara dua sub-blok dan di tepi, jadi setidaknya 7 + 2 + 2 + 5 = 16 baris?
sumber
Kanvas ,
1098971 byteCoba di sini | Coba dibalik! Hanya ada dua program yang mungkin, karena program ini simetris secara rotasi.
Dibuat dalam hal ini .
sumber
Gol> <> , 23 byte
Cobalah online!
Ini adalah format yang sama dengan jawaban Klein saya , tetapi 2 byte lebih pendek. Mungkin ada bahasa 2D lain di luar sana yang dapat melepaskan 2 byte terakhir ... Tapi untuk saat ini, ini sesingkat mungkin.
sumber
Alice , 25 byte
Kiri: Normal , 1/4 putaran searah jarum jam , 1/2 putaran , 1/4 putaran berlawanan arah jarum jam
Kanan: merefleksikan sumbu horizontal , diagonal kanan bawah , sumbu vertikal , diagonal kanan atas
Penjelasan
Program ini memiliki tiga bagian. Bagian pertama adalah tiga
{
dan satu}
di sudut. The{
gilirannya IP kiri sampai mencapai}
, di mana titik itu ternyata benar. Dalam versi yang direfleksikan, IP berada di baris paling atas dalam program asli. Pada versi asli, berbelok ke kanan akan langsung menekan yang berdekatan{
, mengarahkan IP di sepanjang baris bawah dalam program asli.Berikutnya adalah dua garis miring di kolom kedua. Jika program berorientasi horizontal, salah satu jenis slash hanya akan berubah ke mode ordinal, mengirimkan IP dalam arah kiri / kanan yang sama dengan yang sudah berjalan. Jika program ini berorientasi vertikal, IP memantul sedikit lebih banyak, tetapi membuat keduanya memajukan garis miring memberikan hasil akhir yang sama. (Dua garis miring terbalik akan memberikan hasil yang berlawanan, dan masing-masing akan menciptakan loop tak terbatas.)
Sisa dari program ini sangat mudah. IP dalam mode ordinal memantul secara diagonal, sehingga salah satu
"left"o@
atau"right"o@
akan dijalankan tergantung pada bagaimana bagian ini dimasukkan.sumber
Hexagony , 98 byte
Cobalah online! | Diputar 90 ° | Diputar 180 ° | Diputar 270 °
Terbalik | Diputar 90 ° & Terbalik | Diputar 180 ° & Terbalik | Diputar 270 ° & Terbalik
Hexagony menyenangkan untuk tantangan ini, karena rotasi atau pembalikan dapat secara drastis mengubah program yang sebenarnya. Setiap Rotasi / Pembalikan adalah program uniknya sendiri. Beberapa jalur eksekusi program jauh lebih menarik daripada yang lain.
Aku akan mengakui bahwa untuk menyelesaikan ini butuh waktu lebih lama daripada yang seharusnya. Saya cukup yakin jawaban yang lebih singkat dapat dilakukan di Hexagony, semoga beruntung!
sumber
Ruby , 131 byte
Cobalah online!
sumber
APL (dzaima / APL) , 181 byte
Program ini memiliki simetri rotasi sehingga hanya dua kasus yang perlu diperiksa
Kiri
Cobalah online!
Baik
Cobalah online!
Penjelasan
Ini adalah program APL pertama saya jadi sangat sederhana. Hanya menggunakan satu trik yang menurut saya menarik.
Jika kita mulai dengan menghilangkan semua komentar kita mendapatkan program berikut
Kiri
Baik
Mulai dari program kiri kami melakukan tiga hal.
Tetapkan
'lef'
ke variabelt
Cetak variabel
t
dan suratnya't'
Tetapkan
'righ'
ke variabelt
Sekarang karena itu adalah program yang tepat cermin melakukan tiga langkah ini tetapi dalam urutan yang berlawanan. Ini berarti kami mencetak
'left'
untuk program kiri dan'right'
untuk program kanan.Satu trik di sini adalah bahwa
't'
sebenarnya berasal dari salinan kode yang diputar. Jika Anda melihat kolom ketiga kode kami, Anda akan melihatnya't'
. Kami menggunakan kembali ini't'
dalam versi yang dirotasi untuk menambahkant
yang diperlukan.sumber
Haskell ,
461379 byte82 byte disimpan oleh Ørjan Johansen
Cobalah online!
Karena yang ini memiliki simetri 4 kali lipat, Anda hanya perlu menguji cermin:
Cobalah online!
Ini awal. Ini jauh dari ideal, tetapi ada beberapa hal menarik yang terjadi di sini. Haskell jelas merupakan bahasa yang menarik untuk tantangan ini. Saya menantikan jawaban yang mengalahkan ini baik milik saya atau milik orang lain.
sumber
Prolog (SWI) ,
649188 byteTidak diputar, Tidak diputar
Cobalah online!
Tidak Diputar, Diputar
Cobalah online!
Terbalik, Tidak diputar
Cobalah online!
Terbalik, Diputar
Cobalah online!
sumber
Prolog (SWI) ,
239223209181 byteCobalah online!
Karena program memiliki 4 simetri lipat, Anda hanya perlu memeriksa cermin:
Cobalah online!
sumber
Python 2 , 209 byte (14 x 14)
Normal (kiri):
Cobalah online!
Tercermin (kanan):
Cobalah online!
sumber
Bersih ,
13311055 byte-276 byte berkat Ørjan Johansen
Coba "kiri" online!
Coba "benar" secara online!
Ini sulit karena banyak alasan:
module <filename>
hadir di awal, dan hanya di awal file. Sayangnya, ini berarti agar rotasi dari program yang dicerminkan valid, itu juga harus muncul di bagian bawah file. Untuk memperburuk ini,module ..
tidak valid untuk globallet .. in
,,where ..
danwith ..
definisi; dan token yangmodule
muncul jika belum didefinisikan menyebabkan kesalahan./* /* */
membiarkan satu tingkat komentar terbuka, dan begitu juga/* // */
(juga mengomentari sisa baris lainnya).Untungnya, kita dapat mendefinisikan
module
sebagai sesuatu dalam#..
ekspresi (sebelum) yang kita butuhkan. Karena Clean tidak mengetik-periksa alternatif yang tidak pernah digunakan (dan berbagai hal lain yang sama sekali tidak digunakan), definisi kedua yang diperlukan dariStart
bisa menjadi sampah lengkap. Hal ini memungkinkan kita untuk menggunakan keduaStart
untuk mengkonsumsi header modul di bagian bawah file karena memperlakukan Bersihm module m
seperti memanggil fungsim
padamodule
danm
(yang karena kita telah mendefinisikanmodule
danm
, tidak menyebabkan kesalahan). Tidak masalah itum
adalah string dan bukan fungsi, karenaStart
alternatif tidak pernah diperiksa jenisnya.Ini lebih mudah dilihat jika Anda melihatnya melalui mata kompiler:
sumber
m
dans
.Brachylog , 341 byte
Cobalah online!
! enilno ti thn
Mengambil keuntungan dari Brachylog mengambil predikat utama untuk menjadi yang ada di baris pertama dan tidak terlalu peduli dengan jalur lain di luar mengharuskan mereka dapat dikompilasi. Tidak direfleksikan, ia mencetak string kosong diikuti oleh "kiri" pada baris yang sama, dan memantulkannya mencetak string kosong diikuti oleh "kanan" pada baris yang sama. Saya tergoda untuk berpikir mungkin ada cara untuk membuat versi non-square (bermanfaat) menggunakan
ṇ
, tetapi itu mungkin banyak rumit tanpa mencoba membuatnya bekerja secara berbeda di bawah refleksi.sumber
Ruby , 181 byte
Cobalah online!
Ini adalah port jawaban Python Curtis Bechtel untuk Ruby, bermain golf lebih banyak.
Sebenarnya, program Python-nya adalah polyglot dan berjalan di Ruby juga, jadi jawaban pertama saya adalah salin-tempelnya, tetapi sepertinya tidak adil. Jadi saya menulis skrip yang menghasilkan jawaban baru mulai dari skrip dasar. Anda dapat mencobanya di sini:
Bangun sendiri
sumber
Batch,
438321 bytePenjelasan: A
:
digunakan untuk menunjukkan label, yang sebagus komentar, sehingga program memiliki simetri rotasi, satu-satunya perbedaan antara dua versi adalah@
baris mana yang lebih dulu, dalam hal ini salah satuleft
atauright
merupakan output sebelum skrip keluar.Saya memang mencoba secara kreatif tumpang tindih garis yang diputar satu sama lain tetapi usaha saya benar-benar berakhir dengan grid yang lebih besar.
Sunting: Disimpan 117 byte berkat @ ØrjanJohansen.
sumber
&rem
dengan&:
.test.bat
pada command prompt Win10.CMD.EXE
atau sesuatu.05AB1E (legacy) ,
8955 bytePendekatan yang sangat mendasar. Output dalam huruf kecil penuh.
Cobalah secara online atau coba tercermin secara online (setiap rotasi adalah sama).
Penjelasan:
Terbalik:
Lihat tip tambang 05AB1E ini (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
'…¸
ini"left"
dan'ĩ
itu"right"
.sumber
q
?(legacy)
versi 05AB1E.Stax , 131 byte
Jalankan dan debug itu
Ini adalah varian "benar".
sumber
Pesona Rise , 116 byte
Cobalah online!
Dan terbalik
Tidak persis port, tetapi digunakan jawaban Kiri Kiri Garf Hunter's Klein 000 sebagai titik awal, mengingat kompatibilitas hampir khas dari dua bahasa (kebanyakan perintah adalah sama dan tepi pembungkus dalam Runic identik dengan Klein 000). Satu-satunya masalah adalah Klein IP selalu mulai dari kiri atas dan Runic tidak. Karena itu
.
semua adalah bagian dari kode asli dan masih diperlakukan sebagai NOP oleh Runic, sedangkanNOP adalah saya harus menambahkan sebagai bagian dari mengendalikan aliran.
Mencetak
"left"
di semua 4 rotasi dan"right"
ketika dicerminkan (dan dalam keempat rotasi tersebut). Dua kolom tengah sama sekali tidak digunakan setelah modifikasi saya, jadi saya bisa menghapusnya.Secara teori, rotasi dengan banyak spasi spasi tambahan dapat digunakan untuk jumlah byte yang lebih rendah (mis. Varian ini ), namun ruang diperlukan untuk memutar struktur dengan benar menggunakan alat eksternal dan jadi saya memasukkannya.
Varian di bawah ini berisi potongan yang tidak digunakan yang dihapus, tetapi sebaliknya identik:
Keempat kiri . Keluaran
leftleftleftleft
(fakta bahwa keempatnya dapat dijalankan seperti ini adalah kebetulan).Kanan 1 , Kanan 2 , Kanan 3 , Kanan 4
sumber
Gol> <> , 342 byte
Wow! Itu membutuhkan waktu lebih lama daripada yang saya harapkan, di tengah jalan saya menyadari bahwa refleksi itu secara vertikal , tidak secara horizontal seperti yang saya lakukan sebelumnya! Saya cukup yakin ini berhasil, tetapi jika saya membuat kesalahan, tolong beri tahu saya. Ini kemungkinan besar bisa bermain golf dalam jumlah yang lebih konyol, saya hanya mengambil metode brute force yang ekstrim untuk melakukannya. Bentuknya sendiri sebenarnya adalah bujur sangkar, secara teknis simetris, kecuali pada sumbu x, jadi ketika terbalik, ia mengembalikan "KANAN" sebagai gantinya !!!
Karakter yang memungkinkan program ini adalah 'A', yang memungkinkan teleportasi ke awal baris tertentu!
Cobalah online!
sumber