Jika Anda pernah mencoba untuk menulis kode palindromic sebelumnya, Anda akan tahu berapa banyak kurung cenderung menghalangi Anda. ()()
bukanlah palindrom, meskipun sepertinya sudah seharusnya, sementara ())(
dan ()(
keduanya palindrom dan keduanya terlihat sangat bodoh. Bukankah lebih nyaman jika sebaliknya?
Sebuah string adalah palindromic jika itu sama dengan string yang diturunkan ketika kebalikannya memiliki semua tanda kurung ( ()
), tanda kurung ( []
), dan kurung kurawal ( {}
) dibalik. Tidak ada karakter lain yang spesial dan memerlukan pembalikan. ( <>
Kadang-kadang berpasangan tetapi seringkali tidak begitu mereka ditinggalkan.)
Tugas Anda adalah menulis, dalam bahasa Anda, sebuah program (mengambil input pada STDIN) atau fungsi (mengambil argumen string tunggal) yang (a) memberikan nilai true yang konsisten * ketika argumennya dengan mudah palindromik dan berbeda, false konsisten nilai sebaliknya, dan (b) itu sendiri mudah palindromik.
Misalnya, input berikut mudah palindromik:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
Dan yang berikut ini bukan:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Anda tidak boleh bergantung pada status eksternal apa pun (nama file tertentu, struktur direktori, input pengguna lain, akses web, dll) kecuali flag juru bahasa / penyusun.
Selain itu, Anda tidak boleh menggunakan "trik komentar" di mana Anda berkomentar atau membuat sebagian kode yang tidak digunakan dengan memanfaatkan fasilitas komentar bahasa Anda. Misalnya, semua hal berikut ini tidak diperbolehkan, karena mengandung bagian-bagian yang tidak berfungsi yang dapat dengan aman dihilangkan atau dihancurkan (dengan mengorbankan kehilangan kemudahan palindromik):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Jelas ini mungkin tidak mencakup setiap kasus seperti itu, tetapi semangat tantangan di sini adalah tidak menggunakan komentar dan kode ** yang tidak diuraikan untuk mencapai palindrominess, alih-alih memanfaatkan paren dan kurung yang dikoreksi. Saya melihat Anda, LISP, Brainfuck.
Ini adalah kode-golf , sehingga kode terpendek menang, tetapi semua panjang kode diterima.
* Dengan nilai-nilai benar dan salah yang konsisten, maksud saya bahwa Anda dapat mengembalikan salah satu dari sepasang nilai, seperti 1
untuk true dan 0
false, atau False
untuk true dan "no"
false, selama nilai-nilai ini berbeda satu sama lain, dan tidak berubah dari menjalankan ke menjalankan program Anda. Gunakan apa pun yang menyelamatkan Anda karakter.
** Tidak perlu bingung dengan tidak dieksekusi : kode yang valid dan mungkin melakukan hal-hal aneh tetapi tidak pernah dipanggil baik-baik saja.
(eslaf)fi
, Anda bisa menggunakannya if(false)
.
()()
itu bukan palindrom
if(false){some code}
atau variabel yang tidak digunakan? Apakah mereka diizinkan?