3var adalah varian ikan mati yang menggunakan tiga variabel yang disebut A, B dan R. A dan B adalah akumulator, sedangkan R digunakan sebagai variabel hasil.
Dalam tantangan kode-golf ini , Anda perlu membuat juru bahasa untuk versi bahasa ini.
Perintah yang Diperlukan:
i Increments A
d Decrements A
s Squares A
p Prints A
P Prints the ASCII character of A
> Sets A to R
a Increments B
k Decrements B
m Squares B
o Prints B
O Prints the ASCII character of B
< Sets B to R
+ Adds A and B, stores in R
- Subtracts B from A, stores in R
* Multiplies A and B, stores in R
/ Divides A by B, stores in R
w Prints R
@ Resets A to 0
# Resets B to 0
e Resets R to 0
Segala sesuatu yang lain (termasuk ruang putih) diabaikan.
Klarifikasi
o
danp
harus menghasilkan tanpa apa pun setelahnya.- Divisi adalah divisi bilangan bulat.
- Angka di atas 255 dan angka di bawah 0 didukung.
- 'w' harus menampilkan spasi atau baris baru setelah R
- Pembagian dengan 0 berhenti tanpa kesalahan. (Tidak ada output ke STDERR)
- A, B dan R awalnya 0
Aturan
- Ini adalah kode-golf sehingga jawaban terpendek menang.
- Dalam hal seri, jawaban tertua menang.
- File akan disediakan melalui argumen baris perintah atau STDIN.
- Bahasa apa pun diizinkan.
- Eval diizinkan.
Uji Kasus
Hello world!
(diambil dari Esolangs)
iisssaa/>e
maa->e#
aamam->e#
dddddddddddddddddddddddddPiiiiiiiiiiiiiiiiiiiiiiiii
iiiiPiiiiiiiPPiiiP
@#e
iis
aamaaaa
*>P
@#e
iisssaa/>e
maa->e#
aamam->e#
iiiiiiiiiiiiiiiiiiiiiiP
ddddddddP
iiiP
ddddddP
ddddddddP
@#e
iiss
aa*>
iP
Output 20spooky22me
:
iipois+iis<-<aaaO<OkOOkkkkOP@#iippisa+<m+>PaO
Output 9P-1420 100 3Q-1 162 0
:
iiispsdPkokmo/w<+w#aaaommO-w@ii*wew
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 bisa 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=63008,OVERRIDE_USER=45220;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.0.3/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>
sumber
dddddp
menghasilkan -5 daniiiissp
menghasilkan 256 seperti yang Anda harapkan, bukan 0.r
dilakukan? itu tidak termasuk dalam daftar perintah yang valid@#e
.Jawaban:
CJam, 112
Cobalah online
Penjelasan:
Program ini membangun sebuah array potongan-potongan kode untuk dieksekusi, dan mengeksekusi potongan yang sesuai untuk setiap karakter. Menangani pembagian dengan nol lebih sulit, karena CJam belum memiliki operator "istirahat". Sebagai gantinya, program mendorong marker sebagai penanda (karena tidak ada angka floating point yang dapat muncul sebaliknya), dan pada akhirnya hanya menyimpan output sebelum yang pertama π.
Juga, program ini menggunakan variabel T, U dan V, bukannya A, B dan R, karena mereka diinisialisasi dengan 0 di CJam.
Implementasi perintah aktual (dibangun oleh program):
sumber
JavaScript (ES7) 208
213 223 237 241 311Sunting3 Menyalin satu sama lain, saya dan Dendrobium runtuh bersama.
Edit2 Menggunakan EcmaScript 7 untuk menyimpan hanya 2 byte, bergabung bersama-sama menangani A dan B
Edit Mengikuti perubahan aturan.
Catatan, saya menambahkanr
perintah yang tidak diperlukan dalam pertanyaan, hanya untuk menjalankan contoh lama Hello worldsumber
A=B=R=0,
dan menetapkan variabel yang menggunakan aktual 3var fungsi sebelum memproses string, seperti:[...'@#e'+p]
.GNU Sed (dengan opsi eval untuk mengevaluasi
dc
ekspresi), 254Deadfish memetakan dengan cukup baik ke subset dari
dc
. Jadi kami menggunakan sed untuk melakukan pemetaan itu:sumber
Javascript
ES6ES7,217215213208 byteTidak disatukan
sumber
A=B=R=0,
dan menetapkan variabel yang menggunakan aktual 3var fungsi sebelum memproses string, seperti:for(c of '@#e'+s)
.w
APL, 191
Ini adalah fungsi yang menganggap program sebagai argumen, misalnya:
Ini dapat digunakan sebagai fungsi anonim, saya hanya memberinya nama untuk kejelasan.
Penjelasan:
0::→
: jika kesalahan terjadi (katakanlah, pembagian dengan nol), berhentilah tanpa mencetak pesan kesalahanA B R←0
: menginisialisasi variabel{
...}¨⍵
: untuk setiap perintah:⍵∊G←'aikdms<>'
: Jika perintah adalah salah satu dari tipe var ← fn (var, x) , cari fn dan x yang tepat , gantikan dengan dan kemudian evaluasi:⍎
: evaluasi'AB'[1+2|G⍳⍵
:A
jika posisi⍵
dalam'aikdms<>'
genap,B
sebaliknya.'+-*∘'[M]
: tambahkan, kurangi, daya, atau tidak sama sekali, tergantung padaM
(ditentukan kemudian)'←'
: tetapkan'112R'[M←⌈2÷⍨G⍳⍵]
:1
(untuk menambah dan mengurangi),2
(untuk daya), danR
(untuk tidak ada, yaitu hanya mengatur variabel untukR
), tergantung padaM
, yang merupakan apakah perintah itu milik pasangan pertama, kedua, ketiga atau keempat.⍵∊G←'PpOo'
: output:⍞←
: output⎕UCS⍣(2|G⍳⍵)
: ASCII (well, Unicode) atau angka tergantung pada apakah perintah berada pada posisi ganjil atau genap dalamPpOo
,⊢A B[⌈2÷⍨G⍳⍵]
:A
atauB
, tergantung pada apakah perintah itu di babak pertama atau kedua.⍵∊G←'+-*/
: matematika:R∘←⌊A(⍎'+-×÷'[G⍳⍵])B
: diaturR
ke hasil menerapkan operator yang diberikan keA
danB
.⍵∊G←'@#e':
atur ulang:⍎
: evaluasi'ABR'[G⍳⍵]
: pilih variabel yang tepat'∘←0
': diatur ke nol⍵='w':⍞←R
: jika perintahnya adalahw
, outputR
.sumber
C,
253241 byteKode ini menggunakan string
id@s>ak#m<e+-*/wpoPO
sebagai tabel perintah. String diatur sesuai dengan tujuan ekspresi yang dihitung. Kebetulan ada 5 perintah yang memperbarui masing-masing variabel:id@s>
- perbaruia
ak#m<
- perbaruib
e+-*/
- perbaruir
wpoPO
- perbarui ... lokasi memori setelaha
,b
danr
. Semoga tidak terlalu penting :)Jadi setelah menemukan karakter input dalam string perintah, indeksnya berulang kali menurun, dan tergantung pada saat mencapai 0, ekspresi dipilih.
Jika tidak mencapai 0 setelah 15 pengurangan, itu
printf
dengan beberapa argumen yang dipilih dengan benar.Juga, ketika membaginya, ia menghindari pembagian dengan 0 dengan memanggil
exit()
.Kode ini harus dikompilasi tanpa optimasi, karena mengasumsikan itu
a
,b
danr
terletak di alamat yang berdekatan pada stack (bukan di register CPU).Juga, itu harus dikompilasi dalam mode 32-bit, karena itu mengkonversi pointer ke integer dan sebaliknya.
sumber
VBA,
484, 453380 BytesUntuk lama menang, tetapi cara super sederhana untuk melakukan sesuatu, tidak ada yang mewah hanya baik tua
Select Case
Menambahkan Divisi Integer dan Div 0 Penanganan Kesalahan Makan Banyak BytesRemoved Error Handling karena tampaknya penanganan kesalahan yang normal menghasilkan fungsi yang sama. Memperbaiki Divisi Int agar berfungsi seperti yang diharapkan. Juga lebih pendek.
sumber
DefInt A-Z
, sehingga menghilangkan kebutuhan untuk secara eksplisit menyatakanA
,B
danR
sebagaiInteger
:DefInt A-Z:Dim A, B, R
. Ini mungkin juga bekerja untuk hanya menetapkan mereka, tanpa deklarasi:A=0:B=0:R=0
. Perhitungannya juga harus bekerja pada varian.DefInt
Bukan Sesuatu yang saya gunakan setiap hari tetapi akan menjadi golf VBA yang sangat berguna di masa depan. SedihA=0
hanya akan membuatnya bertindak seperti dobel dari tes saya. Di sana untuk membuatiiiaa/w
menghasilkan hasil desimal daripada keseluruhan.PHP, 310 byte
Pertama kali dalam hidup saya menggunakan
:eval
Mengambil input baris perintah pertama:
Keluaran dari contoh:
sumber
C, 357
Makro FTW!
(Siapa aku bercanda - c tidak akan pernah memenangkan yang satu ini)
sumber
JavaScript (ES6),
293262 bytePemakaian
Penjelasan
Ada beberapa detail dari bahasa yang saya tidak yakin tentang (ukuran integer, menangani karakter yang tidak dikenal, dll) tetapi solusi ini tampaknya bekerja dengan cukup dan mengabaikan karakter spasi seperti baris baru dalam kasus uji.
sumber
:$=>
dengan$
, lalu menambahkan ganti untuk string.Simplex v.0.8 , 211 byte
(UTF-8 disandikan.)
Penjelasan
Karena ini adalah program simpleks terpanjang yang saya tulis sejauh ini, saya umumnya akan menjelaskan bagaimana ini bekerja dalam poin-poin.
h@u]
- mendefinisikan makro 0. Makro ini hanya menulis ke register dan membuat lambda mengembalikan apa-apa.u2
- pergi ke strip di atas dan menetapkan byte saat ini menjadi 2; ini mendefinisikan arity dari lambda yang harus didefinisikan.ƒ
- mulai ekspresi lambda; setelah selesai]
, akan mendorong fungsi lambda ke tumpukan lambda. Kerjanya dengan mengambil (arity) sel dari pointer ke strip lokalnya, dan, setelah selesai, akan mengatur strip lokalnya ke sel yang diambil, kecuali byte saat ini tidak tertulis. Pointer tidak terpengaruh. Makro 0 memungkinkan fungsi untuk kembali tanpa mengubah apa pun di strip.§
- Pindah ke sel tertulis pertama dalam jalur saat ini yaituA
.ð
- Pindah ke sel tertulis terakhir dalam jalur saat ini yaituB
.{"idspP>akmoO<+-*/w@#e"RlyG^u·u†vøÏ}
{...Ï}
ulangi sampai tumpukan input kosong"idspP>akmoO<+-*/w@#e"
- perintahnyaRly
- Masukkan strip ke dalam tupleG^u
- indeks input dalam tuple·
- memuat byte saat th ke evaluator lambdauRL
- Pergi ke strip memegangA
danB
(menulisA
danB
jika mereka tidak ada)†
- mengeksekusi lambda (ini adalah evaluator lambda)vø
- me-reset di bawah stripFiuh saya terkesan. Ini panjang untuk Simplex, tetapi singkat untuk yang lainnya.
;)
sumber
Minkolang 0,11 , 222 byte
Saya yakin ini bisa bermain golf lebih jauh, tapi itu menyenangkan. Juga, penerjemah Minkolang pertama dari bahasa lain!
Coba di sini.
Penjelasan
Sisa dari garis cukup sederhana, mungkin dengan pengecualian dari mereka yang
1$((dl%"0"+$rl:d)$Ok
, yang merupakan idiom yang mencetak angka tanpa spasi tambahan. (Saya belum mengimplementasikan fungsi convert-this-number-to-a-string, yang akan menjadi1Z
.) Oh, ya, mereka semua memilikiv
di awal, yang membawanya kembali ke awal.sumber
GNU Sed (dengan opsi eval untuk mengevaluasi ekspresi dc), 289
Terinspirasi oleh Digital Trauma yang sayangnya gagal untuk menyadari, bahwa a) karakter ilegal perlu diabaikan, b) dc membutuhkan seluruh program yang dikonversi dalam satu argumen dan c) pembagian dengan 0 harus menghentikan program tanpa kesalahan.
Jika semua aturan ini tidak berlaku, solusi saya hanya sepanjang 235 byte;)
sumber
AWK,
311309Tanda kurung TIL tidak diperlukan di sekitar printf. 2 byte disimpan!
Versi ungolfed untuk membaca lebih mudah:
sumber
Python 2, 272
sumber
print
Pernyataan Anda termasuk baris baru yang tertinggal.Ruby, 199 byte
5 byte dapat disimpan dengan menghapus
.read
dari baris kedua jika Anda dapat mentolerir peringatan yang dicetak untuk stderr pada versi Ruby yang lebih baru.sumber
Python, 244
Agak terlambat tetapi saya ingin mencobanya.
sumber
Prolog, 759 byte
Bukan program terpendek, tapi setidaknya itu terstruktur dan mudah dibaca.
Contoh input
Cobalah online di sini
sumber