Tantangan:
Tugas Anda adalah membuat juru bahasa sederhana untuk bahasa golf yang sederhana.
Memasukkan:
Input akan berupa string yang dipisahkan oleh spasi.
Anda dapat mengganti pemisahan ruang dengan apa yang Anda inginkan
Keluaran:
Keluarkan hasil (angka atau string) yang diperoleh setelah melakukan semua operasi. Jika ada lebih dari satu output, gabung bersama untuk memberikan hasil tunggal (tanpa pemisah). Nilai awal variabel selalu nol. yaitu: Mulai dari0
Sintaks Bahasa:
Bahasa ini memiliki operator berikut:
inc ---> add one to variable
dec ---> remove one from variable
mult ---> multiply variable by 2
half ---> divide the variable by 2
Pri ---> print the variable to console (or whatever your language has)
exit ---> end the program (anything after this is ignored)
Contoh:
inc inc inc dec Pri exit ---> 2
dec inc mult inc inc Pri ---> 2
inc inc inc mult half Pri exit inc ---> 3
inc Pri inc Pri inc Pri exit half mult ---> 123
Pri exit ---> 0
inc half Pri exit ---> 0.5
Larangan:
Ini adalah kode-golf sehingga kode terpendek dalam byte untuk setiap bahasa akan menang.
catatan:
- Masukan akan selalu valid. (string operator dipisahkan dengan ruang)
- Anda dapat membulatkan ke bilangan bulat terdekat jika Anda tidak ingin tempat desimal.
code-golf
math
interpreter
Muhammad Salman
sumber
sumber
Jawaban:
Bash , 61 byte
Cobalah online!
Mengubah program menjadi program dc, lalu mengevaluasinya sebagai kode dc. Ini mengambil input yang dipisahkan oleh baris baru. Perhatikan bahwa dc berbasis stack dan menggunakan notasi polish terbalik.
Input pertama disalurkan ke sed
1i0
pada baris pertama input, masukkan (tambahkan) a 0, ini akan menjadi akumulators/.//2g
hapus semuanya kecuali karakter pertama pada setiap barisy"idmhe"+-*/q"
transliterateidmhe
ke+-*/q
masing - masing, + - * / adalah perintah aritmatika dan q keluar dari program/+\|-/
pada setiap baris yang mengandung + atau -,i1
masukkan 1/*\|\//
pada setiap baris yang mengandung * atau /,i2
masukkan 2/P/
pada setiap baris yang berisi P,cdn
ubah menjadidn
, sama dengan duplikat dan keluaran tanpa baris baru di dcSekarang ini dievaluasi sebagai ekspresi dc.
sumber
sed
sintaks menjadi lebih asing daripada yang diperkirakan sebelumnya ketika bermain golf.Jelly , 21 byte
Cobalah online!
Perhatikan bahwa nilai ASCII dari karakter pertama (
idmhPe
) modulo 11 adalah modulo 6 yang unik.Menggunakan modulo 16:
Jelly , 21 byte
Cobalah online!
String yang digunakan untuk mengindeks adalah
ḤH‘’IȮ
dalam kasus ini. Tidak‘’
lagi di batas.sumber
“”
membutuhkan 2 byte,¤
membutuhkan 1 byte, data itu sendiri membutuhkan 6 byte, masih ada 2 byte yang tersisa untuk melakukan sesuatu. Saat ini⁾
danj
, tetapiịØJ
atauṃØJ
jauh lebih buruk, danỌ
tidak berfungsi (karena Unicode).R ,
128125 byteCobalah online!
Harus dipanggil dengan
source(echo=FALSE)
agar nilai pengembalian tidak dicetak secara otomatis. Alternatifnya adalah untuk membungkus semuanyainvisible
tapi itu jauh lebih tidak golf (dan merusak jumlah byte saya yang masih bagus).sumber
05AB1E , 25 byte
Cobalah online!
Memetakan setiap fungsi bahasa dengan fungsi 05AB1E yang sesuai (menggunakan karakter pertama dari masing-masing fungsi), dan kemudian mengeksekusi string yang dihasilkan sebagai kode 05AB1E.
sumber
Merah , 121 byte
Cobalah online!
Dapat dibaca:
sumber
Python 2 ,
131125122121118117115 byteCobalah online!
-6 dan -3 dengan terima kasih kepada @Rod
-3 dan -2 dengan terima kasih kepada @etene
-1 dengan mengganti
"Pri"==x
dengan"P"in x
sumber
split
pada"exit"
dan mendapatkan blok 1, bukanbreak
ing menyimpan 4 bytes'idmh'
dan menggunakanfind
alih-alihindex
, yang akan menghemat beberapa byteex
untuk menyimpan 2v=(v+1,v-1,v*2,v/2.)
denganv+=(1,-1,v,-v/2.)
itu seharusnya bekerja, tidak diujihalf
. Sangat sederhana! Terima kasih.Python 3 ,
1109182 byteexit
akan menyebabkan program keluar dengan kesalahan.Cobalah online!
sumber
i='x+=1';d='x-=1';...
dan kemudian dalamexec
panggilan Anda , ubah keexec(eval(c[0]))
print
pernyataan itu!JavaScript (ES6),
8379 byteDisimpan 4 byte berkat @ l4m2
Iteratif mengganti instruksi dengan output atau string kosong.
Cobalah online!
Berkomentar
sumber
s=>s.replace(/\S+./g,w=>k<s?'':w<{}?k:(k+={d:-1,e:w,i:1,m:k}[w[0]]||-k/2,''),k=0)
w<{}
benar jahat: ps=>s.replace(/\S+./g,e=>m<s?'':e<{}?m:(m+={d:-1,e,i:1,m}[e[0]]||-m/2,''),m=0)
juga bekerjaArang ,
3735 byteCobalah online!Tautan adalah untuk mengucapkan versi kode. Terinspirasi oleh jawaban @ RickHitchcock. Penjelasan:
Kosongkan variabel.
Pangkas input di
x
jika ada, kemudian putar balik dan aktifkan setiap karakter dari (sisa) input.n
i n menurunkan variabel.d
d menambahkan variabel.m
m ultiplies variabel dengan dua (yaitu ganda).h
h mengubah variabel.r
p r int cast variabel string.sumber
JavaScript (ES6),
7775 byte(Dipinjam ( mencuri ) @ Trik Arnauld menggunakan
m
sebagai nama variabel, menghemat 2 byte.)Secara rekursif menyusuri string, mencari huruf berbeda per instruksi dan mengabaikan sisanya:
Mengambil keuntungan dari fakta bahwa
undefined
ini tidak lebih besar dari atau kurang dari'x'
, menyebabkan rekursi untuk berhenti di akhir string atau ketika menemukan'x'
di pintu keluar .Tampilkan cuplikan kode
sumber
JavaScript (Node.js) , 107 byte
Cobalah online!
sumber
f=
JavaScript (Node.js) , 91 byte
Cobalah online!
JavaScript (Node.js) , 96 byte
Cobalah online!
JavaScript (Node.js) , 99 byte
Cobalah online!
sumber
JavaScript, 107 byte
sumber
Haskell , 93 byte
Cobalah online!
Pada dasarnya terjemahan dari jawaban Python mbomb007 .
sumber
Lua, 207 byte
sumber
Python 3 ,
114110109116 byteSebenarnya akan mengambil dua byte lebih sedikit di Python 2 karena
exec
merupakan pernyataan dan tidak perlu tanda kurung ...Disimpan 4 byte tambahan berkat @ElPedro
Menyimpan byte ekstra dengan mengambil keuntungan dari fakta yang
find
mengembalikan -1 pada kesalahan, yang kemudian dapat digunakan sebagai indeks+7 byte karena saya tidak memperhatikan aturan no-newlines :(
Cobalah online!
Memetakan karakter pertama dari setiap kata input ke sepotong kode Python. Ini kemudian digabungkan dan
exec
diedit.Pendekatan yang cukup mudah, yang mungkin bisa bermain golf sedikit lebih. Kesulitan sebagian besar berada dalam menemukan bentuk terpendek dari banyak yang mungkin ...
sumber
print(i,end='')
. Lihat test case ke-4.Ruby +
-na
,817365 byteCobalah online!
Cukup mudah. Untuk huruf pertama dari setiap kata, temukan string perintah yang sesuai dan
eval
itu. Menggunakan divisi integer, danexits
dengan melempar aZeroDivisionError
.-5 byte: Gunakan
.ord%11%6
alih-alih pencarian string. Kredit menjadi pengguna202729-3 byte:
.ord
hanya mempertimbangkan karakter pertama dari string, jadi saya bisa melewatkan a[0]
.-8 byte: Gunakan
-a
flag untuk membagi input secara otomatis, terima kasih kepada Kirill L.sumber
-a
opsi untuk melakukan autosplit untuk Anda, seperti iniEmojicode , 270 byte
Cobalah online!
sumber
SNOBOL4 (CSNOBOL4) , 165 byte
Cobalah online!
Kotor.
sumber
C # (.NET Core), 186 Bytes
sumber
i
denganv
, berkonsultasi dengan tabel ASCII sehingga Anda dapat menggunakan angka kecil, menata ulangif
s, dan kemudian menggunakan ternary:class Z{static void Main(string[]a){int v=0,i;foreach(var s in a){i=s[0]%'d';if(i==1)break;if(i>9)System.Console.Write(v);else v=i<1?v-1:i<5?v/2:i<6?v+1:v*2;}}}
(PS penjelasan tentang cara kerjanya dan cara menggunakan itu (mis. mengharapkan args baris perintah) selalu dihargai!)%50
alih-alih%'d'
)Perl 5
-a
, 61 byteCobalah online!
ord%11%6
Trik mencuri @ user202729Bagaimana?
sumber
Pyth, 44 Bytes
Test Suite
penjelasan
sumber
TI-BASIC, 112 byte
Ini mengambil keuntungan dari beberapa asumsi yang AFAIK dapat diterima sepenuhnya. Nomor satu adalah bahwa semua variabel diinisialisasi ke nol sebelum eksekusi; nomor dua adalah input yang diambil
Ans
.sumber
Java (OpenJDK 8) , 164 byte
Cobalah online!
Di atas adalah solusi saya yang membulatkan ke bilangan bulat, tetapi di bawah ini adalah solusi saya yang menangani desimal. Cara menjengkelkan yang mencetak java ganda menambahkan 55 bye ke skor. Saya meninggalkan baris baru untuk membuat kode lebih mudah dibaca dalam pengiriman kedua hanya karena itu pada dasarnya solusi yang sama dengan satu perintah tambahan dan pernyataan impor.
Java (OpenJDK 8) , 219 byte
Cobalah online!
sumber
C (gcc) ,
120114111 byte-6 bytes berkat ceilingcat.
Cobalah online!
124 byte
Versi titik-mengambang:
Cobalah online!
Saya tidak peduli dengan versi yang dibulatkan ke bawah, tetapi membuat pengecualian untuk 0, yang akan diizinkan, jika saya memahami rantai komentar dengan benar.
sumber
33 , 62 byte
Cobalah online!
Program ini menerima instruksi yang dibatasi oleh baris baru
Penjelasan:
Kode sebelum segmen itu mendefinisikan semua fungsi.
sumber