Latar Belakang
Terinspirasi oleh saya seorang palindrome. Apakah kamu? , di mana disajikan fakta yang mengejutkan bahwa " ()()
bukan palindrome, tapi ())(
", saya bertanya pada diri sendiri apa yang ada ()()
dan jawabannya adalah sederhana: itu adalah string dengan sumbu simetri vertikal!
Tugas
Tulis program atau fungsi yang menggunakan string S (atau padanan yang sesuai dalam bahasa Anda) sebagai input, memeriksa simetri di sepanjang sumbu vertikal, dan mengembalikan nilai yang benar atau salah . Anda dapat menggunakan segala cara yang masuk akal untuk mengambil input dan memberikan output.
Simetri reflektif
Simetri reflektif di sekitar sumbu vertikal (atau simetri kiri-kanan) berarti bahwa jika Anda meletakkan cermin secara vertikal di tengah tepat string, gambar yang dipantulkan pada paruh pertama string identik dengan paruh kedua string.
Misalnya, string berikut simetris reflektif di sekitar sumbu vertikal:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
sedangkan yang berikut ini tidak:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Aturan kontes
• Program atau fungsi Anda hanya akan menerima karakter ASCII yang dapat dicetak. Anda dapat memasukkan atau tidak string kosong, (yang tentu saja simetris!) Sebagai masukan hukum, yang lebih baik untuk Anda.
• Karakter ASCII yang dapat dianggap simetris sehubungan dengan sumbu vertikal adalah sebagai berikut (perhatikan ruang awal, dan perbedaan antara huruf besar dan kecil):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Karakter ASCII yang dapat dianggap "dicerminkan" dan karakter yang sesuai adalah:
()<>[]{}qpbd/\
Perhatikan bahwa, karena mereka dicerminkan, Anda dapat memiliki keduanya ()
juga )(
, /\
dan \/
, dll.
Semua karakter ASCII yang dapat dicetak lainnya harus dianggap asimetris dan tanpa karakter yang sesuai dengan cermin.
• Ini adalah tantangan kode-golf : semakin pendek program Anda, diukur dalam byte, semakin baik, dalam bahasa pemrograman apa pun.
• Pujian kepada orang-orang yang akan menghasilkan program simetris!
Catatan : pertanyaan ini bukan merupakan duplikat dari "Convenient Palindrome" , yang mengharuskan untuk memeriksa string palindrom di mana tanda kurung dibalik. Pertanyaan ini berbeda karena dua alasan:
1) itu adalah pembatasan pertanyaan lain untuk apa yang menyangkut karakter non-kurung, karena hanya karakter simetris yang dapat muncul dalam urutan terbalik.
2) Karena didasarkan pada konsep simetri, dan bukan pada konsep "palindrom nyaman", karakter cermin dapat muncul dalam kedua urutan, yaitu []
dan ][
, dan ini membuat program untuk menyelesaikannya berbeda dari program yang memecahkan masalah lainnya. .
8
dianggap "simetris"?Jawaban:
JavaScript (ES6),
130125113 byteSunting: Disimpan 5 byte berkat @Arnauld. Menyimpan 11 byte lebih lanjut berkat @YairRand.
sumber
includes()
? Seperti/[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
.[...s].reverse().map(...)
ke:s::[].map().reverse()
jika Anda setuju dengan menggunakan fitur ES-next baru. tautanJelly ,
6962 byteCobalah online!
Semua uji kasus
-7 byte terima kasih kepada @JonathanAllan
Bagaimana itu bekerja
sumber
¢FiЀ;1Ạðaµ¢yU⁼
->¢Ff@ð¢yU⁼
...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
bisa dibilang lebih baik)Python 3,
211208195 byteDisimpan 13 byte berkat Jonathan Allan.
sumber
2*x
danrange(7)
; 3. gunakan perkalian untuk menghindari>2
tes; 4. gunakan bitwise bukan padalen(S)
untuk menghindarinot
darinot len(S)%2
; 5. menggunakan fakta bahwa''in'blah'
adalahTrue
untuk memungkinkan perkalian tali~len(S)%2*s[len(S)//2]in s
.SOGL V0.12 , 88 byte
Coba Di Sini!
~ 24 byte untuk menambahkan
qpbd
mirroring dan 6 byte untuk(x-1 XOR 1) + 1
: /sumber
Kotlin 1.1,
201199 byteYg diperindahkan
Uji
Tidak dapat berjalan di TIO karena 1.1 tidak didukung
sumber
Python 2 ,
182167163162160158 byteCobalah online!
Disimpan 2 byte berkat Jonathan Allan
Penjelasan Pertama, kita perlu membuat daftar semua karakter yang tidak memiliki simetris (karakter itu sendiri:,
A
... atau karakter lain(
untuk)
, ...):m("","")
mengembalikan string dengan semua karakter yang tersedia.m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
menghapus dari semua karakter yang tersedia karakter yang memiliki simetris.Kemudian, kami memetakan setiap char ke char simetris dan menghapus karakter yang tidak memiliki simetris
s.translate(m(t+w,w+t),<chars that don't have a symmetric>)
Jika hasilnya sama dengan string terbalik, kami memiliki string simetris.
sumber
t
danw
Anda dapat melepaskannya, misalnyaw="(<]{\pb"
. Simpan byte lain denganfrom string import*;m=maketrans
(saya pribadi mencari baris baru ketika;
tidak menyimpan byte meskipun). Anda juga tidak perlu menyebutkan nama fungsinya asalkan itu dapat digunakan kembali dan tidak bersifat rekursif, yang akan menyelamatkan 2.f=
, tetapi versi Anda lebih bersih.Perl 5 , 102 + 1 (-p) = 103 byte
Cobalah online!
sumber
Scala , 140 byte
Cobalah online!
sumber