Pertimbangkan transformasi Atbash :
A|B|C|D|E|F|G|H|I|J|K|L|M
Z|Y|X|W|V|U|T|S|R|Q|P|O|N
Di mana A ⇔ Z dan L ⇔ O, misalnya Ada properti menarik yang dibagikan oleh beberapa kata. Ketika beberapa string diterjemahkan ke atbash-equivalen mereka, kata terjemahan adalah kata aslinya dibalik. Saya menyebutnya Atbash Self Palindromes .
Sebagai contoh, mari terjemahkan WIZARD :
W → D
I → R
Z → A
A → Z
R → I
D → W
Hasilnya adalah DRAZIW , yang WIZARD terbalik. Jadi, WIZARD adalah palbrom self atbash.
Objective Diberikan string karakter ASCII yang dapat dicetak, mengeluarkan atau mengembalikan nilai kebenaran jika string tersebut adalah atbash self palindrome, dan nilai falsey sebaliknya. (Ini dilakukan melalui STDIN, setara terdekat, input fungsional, dll. Jika bahasa Anda tidak dapat melakukan semua ini, pertimbangkan untuk memilih bahasa yang berbeda Anda dapat meng-hardcode input tersebut.) Anda harus melakukan hal ini secara tidak sensitif. Jika inputnya adalah palindrome dan tidak terpengaruh oleh atbash seqeunce, Anda harus tetap menampilkan true, karena palindrom + sendiri adalah palindrom. Ini adalah kode-golf , jadi program terpendek dalam byte menang.
Uji kasus
"Input" => true, false
"WIZARD" => true
"Wizard" => true // case doesn't matter
"wIzArD" => true
"W I Z A R D" => true
"W IZ ARD" => false // the atbash of this is D RA ZIW, which is not a palindrome of W IZ ARD
"ABCXYZ" => true // ZYXCBA
"345 09%" => false // is not a palindrome
"ev" => true // ve
"AZGDFSSF IJHSDFIU HFIA" => false
"Zyba" => true
"-AZ" => false // -ZA is not a reverse of -AZ
"Tree vvig" => true // Givv eert
"$%%$" => true // palindrome
"A$&$z" => true // z$&$A
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=68757,OVERRIDE_USER=44713;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
code {Comment-symbol}{Atbash'ed Comment-symbol} Atbash'ed code
...Jawaban:
RX ,
98 byteSangat terinspirasi oleh Retina, saya membuatnya beberapa hari yang lalu. Kode:
Penjelasan:
Coba di sini !
sumber
Pyth,
109 byteCoba biola ini secara online atau verifikasi semua uji sekaligus.
Penjelasan
sumber
rz0
dua kali, bukankah lebih pendek untuk menyimpannya ke variabel?q_Jrz0XJG
satu byte lebih pendek.Julia, 96 byte
Ini adalah fungsi lambda yang menerima string dan mengembalikan string. Untuk menyebutnya, tetapkan ke variabel.
Tidak Disatukan:
sumber
Utilitas Bash + Linux, 56
Menghasilkan string kosong untuk Truthy dan sesuatu seperti
- /dev/fd/63 differ: byte 1, line 1
untuk Falsey. Jika ini tidak dapat diterima maka kita dapat menambahkan-s
3 byte tambahan dan menggunakan kode pengembalian Unix standar 0 untuk Sukses (Kebenaran) dan 1 untuk Kegagalan (Falsey).sumber
Retina , 44 byte
Cetakan
1
atau0
. Hitungan byte mengasumsikan bahwa file dikodekan sebagai ISO 8859-1.Cobalah online!
Jawaban ini sebagian besar terinspirasi oleh jawaban sed DigitalTrauma tapi sekali lagi saya kira tidak ada banyak pendekatan untuk tantangan ini di tempat pertama.
Penjelasan
Setiap kali Anda melihat
¶
, hal pertama yang Retina lakukan setelah memecah kode menjadi garis-garis adalah mengganti semua pilcrow tersebut dengan linefeeds. Ini memungkinkan pemasukan dari linefeeds untuk satu byte walaupun linefeeds adalah pemisah stage Retina.Kami mulai dengan menduplikasi input. Kami mencocokkan akhir input dengan
$
dan menyisipkan linefeed bersama dengan input itu sendiri (menggunakan$_
).Tahap transliterasi. Mari kita mulai dengan regex:
.+$
. Ini cocok dengan salinan input kedua (dengan memastikan kecocokan berlangsung hingga akhir string). Jadi hanya karakter dalam salinan kedua yang akan ditransliterasi. Transliterasi itu sendiri menggunakan beberapa fitur yang sangat baru.l
danL
kelas karakter untuk huruf kecil dan huruf besar, masing-masing.o
merujuk ke set karakter lain dari transliterasi danR
membalikkannya. Jadi dua set karakter berkembang ke:Anda akan melihat bahwa ini menukar case saat melakukan cypher Atbash, tetapi bagaimanapun kami akan melakukan perbandingan case-insensitive.
Sekarang kita membalikkan salinan kedua. Sayangnya, Retina belum memiliki cara yang mudah untuk melakukan itu, jadi kita harus memindahkan satu karakter dari ujung ke depan sekaligus. Ini dilakukan dengan repurposing pemisah linefeed sebagai penanda yang bagiannya belum terbalik. Kami mencocokkan bagian itu tetapi menangkap karakter terakhir secara terpisah. Karakter itu berjalan di depan, dan sisanya tidak berubah. The
+
memberitahu Retina untuk melakukan hal ini berulang-ulang sampai itu tidak mungkin lagi (karena¶
berada di akhir string).Akhirnya, kami memeriksa apakah kedua senarnya sama. The
i
membuat pola case-sensitive - nyaman, NET, ini berarti bahwa backreferences juga kasus-sensitif. Anda mungkin memperhatikan bahwa kami tidak lagi memiliki pemisah antara input asli dan salinan yang dimodifikasi. Kita tidak memerlukan satu, karena mereka memiliki panjang yang sama, dan jika string sekarang terdiri dari string yang sama persis dua kali (sesuai kasus), maka mereka harus yang asli dan string yang dimodifikasi. Jika Anda bertanya-tanya apa yang terjadi pada trafeed linefeeding yang kami gunakan sebagai marker, itu masih ada, tetapi dalam banyak rasa regex$
juga cocok sebelum karakter terakhir dari string jika karakter itu adalah linefeed.Karena tahap ini hanya terdiri dari satu baris, maka dianggap sebagai tahap pertandingan, yang menghitung jumlah pertandingan. Jika inputnya adalah palindrome Atbash, kami akan mendapatkan tepat satu kecocokan dan hasilnya adalah
1
. Jika tidak, maka regex ini tidak akan cocok dan hasilnya akan0
.sumber
\n
dalam regex dan$n
dalam substitusi, tetapi itu menghabiskan byte untuk bermain golf. ;)GNU Sed, 105
Output 1 untuk truey dan 0 untuk falsey.
Saya mencoba melakukan ini di Retina, tetapi tidak tahu bagaimana cara menyimpan string sebelum Atbash transliterasi untuk perbandingan terbalik dengan setelah. Mungkin ada cara yang lebih baik.
y
Perintah transliterasi Sed meninggalkan banyak hal yang diinginkan.sumber
T
- saya berasumsi itu diterapkan pada setiap karakter pada gilirannya, tetapi jika pemahaman saya benar, itu berlaku untuk seluruh ruang pola, yang jauh lebih berguna[\s\S]+
jadi dengan menghilangkannya, Anda mentransliterasi semuanya.-r
flag perdagangan untuk backslash di\(
dan\)
. Saya setuju dengan Anda paday
perintah!𝔼𝕊𝕄𝕚𝕟, 15 karakter / 30 byte
Try it here (Firefox only).
Penjelasan
sumber
Parenthetic, 658 byte
Hanya berfungsi untuk semua huruf besar tanpa spasi putih sekarang, menggunakan versi skrip yang dimodifikasi ini sehingga mendukung pembacaan dari stdin:
Penjelasan
sumber
Python 3,
9085 byteKami mengonversi input ke huruf besar, dan kemudian menghitung string Atbashed dengan mengurangi semua ordinals dari 155 jika mereka berada dalam kisaran alfabet huruf besar.
sumber
Garitan , 73 byte
Kerf adalah bahasa berpemilik dalam keluarga umum yang sama dengan APL, J dan K. Dimungkinkan untuk menulis oneliner yang samar dan ringkas dan menghindari penggunaan loop eksplisit:
Namun, menggunakan alias yang dieja untuk perintah alih-alih simbol steno dan menggunakan pengidentifikasi yang berarti membuat program lebih jelas, dan cukup mudah diikuti bahkan jika Anda tidak terbiasa dengan Kerf:
Dalam aksi:
Garitan mungkin tidak akan memenangkan satu ton kompetisi codegolf, terutama terhadap bahasa yang dibangun khusus, tetapi mungkin layak untuk bermain-main jika Anda menyukai gagasan bahasa keluarga APL tetapi menemukan sintaksinya terlalu aneh. ( Penafian: Saya penulis manual referensi untuk Kerf. )
sumber
Prolog, 121 byte
Ini disebut dengan atom sebagai input, mis
a('WIZARD').
.sumber
JavaScript (ES6), 91
UJI
sumber
C,
10197 byteSeperti pertanyaan yang ditentukan karakter ASCII, ini tidak menangani pengkodean lainnya.
Penjelasan
Kami membuat pointer
p
yang dimulai pada akhir string. Kami kemudian mengulang, menggerakkan keduanyas
danp
menuju satu sama lains
mencapai akhir. Ini berarti bahwa setiap pasangan karakter akan diperiksa dua kali, tetapi ini menghemat beberapa byte dibandingkan dengan berhenti begitu pointer melewati.Pada setiap iterasi, kami memeriksa apakah
*p
ada surat. Jika demikian, periksa bahwa*s
ada dalam kisaran huruf (ASCII 64 ke atas), dan itu*p
dan*s
tambahkan hingga 27 (mod 32). Non-huruf di atas 64 akan gagal dalam tes itu, jadi kami tidak perlu memeriksaisalpha(*s)
.Jika
*p
bukan huruf, maka kita cukup menguji apakah itu sama dengan*s
. Dalam kedua kasus, kami mengakhiri loop sebelums
danp
menyeberang.Jika
s
danp
telah menyeberang, maka setiap pasangan huruf cocok dengan benar, jadi kami mengembalikan true; kalau tidak kita kembali salah.Program uji
Lewati string yang akan diuji sebagai argumen baris perintah. Ini menghasilkan output yang benar untuk semua kasus uji. Tidak ada persyaratan yang disediakan untuk string kosong; implementasi saya mengembalikan false untuk input itu.
sumber
f
deklarasi tipe untuk prototipe gaya K&R:f(char*s)
Perl 5, 70 byte
Subrutin:
Lihat ini digunakan:
sumber
MATL, 23 byte
Menggunakan rilis saat ini .
Contohnya
sumber
CJam, 18 byte
Cobalah online
Bekerja dengan mengonversi input ke huruf besar, melakukan terjemahan huruf, membalik string, dan memeriksa kesetaraan.
sumber
Japt,
3027 byteCobalah online!
Bagaimana itu bekerja
Ini sebagian besar didasarkan pada jawaban Japt saya di Swap the Alphabet.
sumber
Python,
156112 bytePada dasarnya, ini membuat kamus terjemahan dengan huruf besar dan input ditulis dengan huruf besar (jika semuanya huruf kecil sebagai gantinya, itu akan menambah 5 byte). Kemudian, untuk setiap karakter dalam input huruf besar, lakukan terjemahan dan tambahkan ke daftar kecuali karakter tersebut tidak ada dalam alfabet, dalam hal ini tambahkan karakter apa adanya. Bergabunglah dengan seluruh daftar dan bandingkan dengan daftar terbalik.
Berteriaklah ke @Artyer karena memposting hampir persis seperti yang akan saya posting sebelumnya. Tapi saya perlu mengkonfirmasi, ini adalah pekerjaan saya dan saya melakukan ini secara mandiri .
Berdasarkan pada jawaban Julia oleh Alex A. Cobalah di sini
sumber
.get(i,i)
. +1.05AB1E , 8 byte (tidak bersaing)
Bahasa ini menggunakan fitur-fitur yang menunda tantangan dan karenanya tidak bersaing.
Kode:
Penjelasan:
Cobalah online!
sumber
Factor,
118113 byteIni adalah fungsi anonim.
Saya tidak tahu cara yang lebih pendek untuk menghasilkan array asosiatif dari alfabet: c
sumber
Clojure, 100 byte
Seharusnya dimungkinkan untuk memotongnya ke fungsi anonim tunggal, memotong sekitar 10 byte lebih (dari deklarasi) tapi saya belum menemukan cara.
sumber
Ruby,
7977 byteMenerima kata untuk diuji sebagai argumen baris perintah. Keluar dengan kode 0 (yang sesuai dengan shell) jika argumennya adalah atbash self palindrome, atau dengan kode 1 sebaliknya.
sumber
puts
hasilnya lebih pendek daripada keluar dengan terner?$*
adalah alias untukARGV
.Ruby, 56 byte
Ini adalah fungsi anonim yang mengambil string dan mengembalikan
true
ataufalse
. Agak canggung: Untuk menghemat beberapa byte, ia menggunakan varian destruktif dariupcase
(dengan!
setelahnya).upcase!
sayangnya kembalinil
jika tidak ada yang berubah (seperti semua input numerik), sehingga beberapa byte hilang saat mencoba untuk menghadapinya. Masih berfungsi :)sumber
MATLAB, 61 byte
Bukan solusi terpendek, tapi tetap menarik
sumber