Saya mendefinisikan operator berikut:
Manhattan Penambahan a + M b, untuk nomor satu digit, adalah hasil dari concatenating b ke a. Jadi, a + M b = 10a + b. Oleh karena itu, operator umum + M didefinisikan sebagai berikut:
a + M b = 10a + b
Manhattan Pengurangan a - M b, untuk nomor satu digit, adalah hasil dari menghapus yang terakhir b dari. Oleh karena itu, operator - M didefinisikan sebagai pseudocode:
a - M b = penghapusan terakhir b
Manhattan Perkalian × M b adalah hasil dari mengganti semua contoh b dalam dengan kasus b b. Ergo, × M didefinisikan dalam pseudocode sebagai:
a × M b = a -> s / b / <b salinan b> / g
Manhattan Divisi a ÷ M b didefinisikan dalam hal × M :
1 ÷ M b = karakter pertama dari b
a ÷ M b = a × M (1 ÷ M b)
Dengan semua ini dalam pikiran, buat juru bahasa yang akan mengevaluasi ekspresi infiks yang menggunakan operator berikut (yaitu a + b
, tidak a b +
atau + a b
)
+ Addition
- Subtraction
/ Division
* Multiplication
*M Manhattan Multiplication
/M Manhattan Division
+M Manhattan Addition
-M Manhattan Subtraction
Setiap operator Manhattan memiliki prioritas lebih tinggi daripada rekan normal mereka.
Kasus uji:
> 5 +M 10 + 3
63 // 5*10 + 10 + 3 => 60 + 3
> 10 *M 2
10 // no 2s in 10
> 10 *M 1
10 // one 1 in 10 replaced once
> 23 *M 3
2333 // 23 has one 3, which is replaced with three 3s
> 23 *M 2
223 // 23 has one 2, which is replaced with two 2s
> 232 *M 2
22322 // 232 has two 2s, which are replaced with two 2s
> 232 *M 23
23...(23 times)...232 // ...
> 123 *M 2 * 3
3669 // 1223 * 3 => 3669
> 5 + 3 +M 2
37 // 5 + (3 +M 2) => 5 + 32 => 37
> 150 /M 3
150 // 150 ÷M 3 => 150 ×M 3 => 150
> 150 /M 53
1555550 // 150 ÷M 53 => 150 ×M 5 => 1555550
> 50 -M 0
5
> 500 -M 0
50
> 5234 -M 5
234
> 12 +M 633 *M 3
6333453 // = 12 +M 6333333 = 120 + 6333333 = 6333453
Ini adalah kode-golf , sehingga program terpendek dalam byte menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
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 tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=59299,OVERRIDE_USER=8478;function answersUrl(e){return"http://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"http://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>
×
dan÷
bukannya ASCII*
dan/
?232 ×M 23
sama23232
? Bukankah seharusnya sama dengan 23 salinan23
diikuti oleh2
?Jawaban:
Dyalog APL ,
10481799375 byteSunting: Sekarang menangani
4342343 -M 34
→43423
dengan benar.Latar Belakang
Ini meluas APL untuk memasukkan operator Manhattan. Operator dalam terminologi APL adalah pengubah fungsi (misalnya
÷
). Contoh dari operator adalah⍨
yang memodifikasi fungsi untuk bertukar argumen mereka3 = 2 ÷⍨ 6
. Demikian juga,M
memodifikasi fungsi aritmatika dasar menjadi kerabat mereka di Manhattan. Perhatikan bahwa karena bahasa yang dihasilkan adalah perpanjangan APL, prioritas ketat ke kanan APL tetap.Penjelasan
Struktur menyeluruh adalah
M←{⍎(5|⌊⍺⍺2)⊃
...}
yang menerapkan fungsi (+
atau-
atau×
atau÷
) ke 2 dan menggunakan hasilnya untuk memilih string mana yang akan dievaluasi. Senar adalah:3 untuk -M:
(('(.*)',b←⍕⍵)⎕R'\1'⊢a←⍕⍺)
remove regex kejadian terakhir b (.. Tali rep dari arg kanan) dalam sebuah (string rep dari arg kiri..)
2 untuk + M:
'10⊥⍺⍵'
mengevaluasi argumen sebagai basis-10 digit
1 untuk × M:
(b⎕R(⍵⍴'&')⊢a)
ganti kemunculan b dengan b ampersand (mis. Regex untuk
0 untuk ÷ M:
'⍺×M⍣(⍺≠1)⍎⊃b'
⍎⊃b
digit pertama dari b⍺×M⍣(⍺≠1)
berlaku ⍺ × M jika ⍺ ≠ 1⊃
dari empat string di atas, pilih nomor:(5|⌊⍺⍺2)
mod-5 dari lantai fungsi diterapkan ke 2, yaitu:3 =
5 | ⌊-2
2 =
5 | ⌊+2
1 =
5 | ⌊×2
karena × 2 ⇔ sgn (2) ⇔ 10 =
5 | ⌊÷2
karena ÷ 2 ⇔ 1 ÷ 2 ⇔ 0,5Banyak terima kasih kepada teman saya ngn untuk serutan yang luar biasa.
sumber
Perl,
1009998 byte97 byte kode + 1 byte baris perintah
Contoh penggunaan:
sumber
*M
untukxM
dan/M
untuk<div>M
.Python, 644 byte
Menerima input pada STDIN (dibungkus dengan tanda kutip). Menggunakan regex untuk mencocokkan dan mengurai operasi. Semua pekerjaan dilakukan pada string, dan casting ke dan dari int hanya digunakan ketika melakukan operasi matematika normal.
Saya cukup yakin ini bisa golf lebih lanjut, jadi saya akan mengerjakannya selama beberapa hari ke depan.
sumber
c
atauf
.