Deadfish adalah lelucon "bahasa pemrograman" dengan empat perintah. Karena halaman Esolang agak kontradiktif dan penerjemah pada halaman itu tidak semuanya bekerja persis sama, Anda harus menerapkan variasi berikut:
Spesifikasi
- Ada akumulator yang setidaknya 16 bit dalam ukuran, lebih banyak diperbolehkan tetapi lebih sedikit tidak. Angka negatif tidak perlu didukung. Akumulator adalah
0
ketika program dimulai. - Ada dua set empat perintah berikut, dan program Anda harus mendukung keduanya pada saat yang sama.
Deadfish Standar │ Varian XKCD │ Artinya ────────────────────aha ────────────────────────── i │ x │ Akumulator kenaikan d │ d │ Akumulator penurunan s │ k │ Kotak (acc = acc * acc) o │ c │ Output akumulator, sebagai angka
- Jika, setelah menjalankan perintah, akumulator adalah salah satu
-1
atau256
, akumulator harus diatur ulang ke nol. Perhatikan bahwa ini bukan bungkus biasa. Jika, katakanlah, akumulator adalah20
, dans
perintah dijalankan, akumulator harus400
sesudahnya. Demikian pula, jika akumulator257
dand
perintah dijalankan, akumulator harus menjadi0
. - Masukan apa pun yang bukan salah satu dari perintah ini harus diabaikan.
Program uji
xiskso
harus keluar0
xiskisc
harus keluar289
I / O
Program Anda harus menampilkan prompt: >>
. Prompt harus di awal baris baru. Kemudian harus membaca baris input pengguna, dan menjalankan perintah yang diberikan dari kiri ke kanan. Saat mengeluarkan angka, angka harus dipisahkan. Yaitu, 12 34
tidak apa-apa, 12,34
tidak apa-apa,
12
34
tidak apa-apa, tetapi 1234
tidak.
Program Anda harus terus melakukan ini dalam satu lingkaran, setidaknya sampai EOF
tercapai.
Sesi contoh:
>> xiskso
0
>> xiskisc
289
>> ddddo ddddo
285
281
>> ddddo ddddo
277
273
>> dddddddo
266
>> dddddddddo
257
>> do
0
>> do
0
>> io
1
>>
code-golf
interpreter
deadfish
marinus
sumber
sumber
#{STDIN.gets}
akan bekerja tetapi memang tidak.Jawaban:
K, 77 byte
Perhatikan ini K4 . Sebuah K6 solusi adalah sedikit lebih panjang karena kata kerja IO lebih panjang, bahkan jika segala sesuatu yang lain yang lebih baik:
""0:
mencetak dan mengembalikan argumennya. Catatan dalam K4 kami hanya berlaku untuk 1 .0 f/ args
menunjukkan pengurangan dengan nilai awal, yaituf[f[0;first arg];second arg]…
{x*2=-1 256?x…
mengklasifikasikan x ke dalam 0 (untuk -1), 1 (untuk 256) dan 2 untuk semua nilai lainnya.2=
berarti kita mendapatkan1
nilai yang tidak diklasifikasi dan0
jika tidak, mengalikan denganx
lebih pendek daripada persyaratan. Di K6 kita bisa melakukan sedikit lebih baik karena{x*^-1 256?x:y@x}
bergantung pada fakta bahwa-1 256?x
mengembalikan0N
(nol) dan^
mendeteksi nol."xkcdiso"
alih-alih urutan yang disarankan karena7#
akan membungkus sekitar empat argumen yaitu7#"abcd"
pengembalian"abcdabc"
yang membuat tabel kita lebih kecil"x"
dan"i"
ke proyeksi1+
yang setara dengan fungsi{1+x}
tetapi lebih pendek."d"
ke proyeksi-1+
yang setara dengan fungsi{-1+x}
tetapi lebih pendek."k"
dan"s"
ke fungsi{x*x}
"c"
dan"o"
ke fungsi output{-1@$x;x}
yang lagi di K6 sedikit lebih lama:{""0:,$x;x}
tetapi keduanya mencetak outputnya diikuti oleh baris baru, dan kemudian mengembalikan argumen.o`
mana yang lebih pendek.sumber
Perl 5 , 90 byte
Cobalah online!
Terima kasih kepada @xfix untuk bantuannya dalam hal ini sebelumnya! Disimpan 4 byte berkat @Xcali !
sumber
1
ketika akumulator meluap. Selain itu, Anda dapat mempersingkat program dengan lima karakter, dengan mengubah$a
ke$?
(yang diinisialisasi ke0
, dan tidak akan berubah hingga Anda menjalankan beberapa program eksternal dari Perl).issso
sebagai satu perintah, tidak jika Anda melakukan masing-masing secara terpisah ... Saya akan melihat ini nanti dan pasti akan digunakan$?
. Terima kasih!''
bukannya""
jadi ketika digunakan denganperl -e '...'
peta akan berakhir dengan hasils///
. Terima kasih lagi!Powershell,
131126121114113for($x=0){...}
- atur akumulator ke 0 dan loop selamanyaread-host '>>'
- dapatkan input pengguna dengan prompt>>
[char[]](...)
- Mengonversi input pengguna ke array karakter|%{...}
- Melakukan apa yang ada di dalam{}
untuk setiap karakterswitch -r($_)
- Regex switch untuk setiap karakter"i|x"{$x++}
- cocokkani
ataux
- tambah akumulator"d"{$x-=!!$x}
- Pertandingand
- penurunan$x
oleh!!$x
, yang akan0
jika$x
ini0
, dan1
sebaliknya. Ini memastikan akumulator tidak pernah mencapai-1
."s|k"{$x*=$x}
- cocoks
atauk
- kotak"o|c"{$x}
- cocokkano
atauc
- output akumulator$x*=$x-ne256
- kalikan akumulator dengan0
jika itu256
atau dengan1
sebaliknyaContoh output
Saya kira implementasi
read-host
adalah khusus host, jadi host Powershell ini (ConsoleHost) menambahkan:
ke prompt yang ditentukan.sumber
!!$x
, sayang saya tidak bisa memanfaatkan itu ...Rebol 3,
178169161159Versi lebih cantik:
sumber
Haskell, 202
sumber
e
danv
menjadi operator. Saya juga mencoba menulis ulangv
dang
agar parameterx
tetap di IO, danprint
lain - lain terangkat. Saya tidak berhasil membuatnya bekerja, tetapi saya pikir itu mungkin tempat yang baik untuk seseorang yang tahu haskell mereka.IO
adalah mereka mencetak terlalu sering (itu sebabnya saya menggunakanr n
alih-alihx
) atau tidak cukup karena nilainya tidak pernah diminta untuk…. Jadi bagaimana saya akan berubahe
danv
menjadi operator?'i'%x=x+1;'d'%x=x-1
... Dan panggil saja di vdo n<-x;r$w$o%n
. Alasan operator menghemat ruang adalah karena mereka tidak memerlukan ruang di sekitarnya.Ruby,
140138Sesi sampel (sama seperti milik Anda):
sumber
K, 121
.
sumber
Ada
Berikut adalah implementasi Ada untuk beberapa orang yang tertarik dengan bahasa ini. Butuh beberapa waktu untuk menggunakan beberapa praktik terbaik Ada (seperti penggunaan Indefinite_Holders alih-alih akses) dan juga untuk sepenuhnya memahami bagaimana Deadfish harus bekerja.
Dan hasilnya:
Jika beberapa orang yang bereksperimen di Ada dapat memberikan saya beberapa petunjuk optimasi, saya akan berterima kasih.
sumber
C, 159 karakter
Saya mencoba pendekatan lain berdasarkan pengaturan tabel pencarian untuk decoding instruksi, tapi sayangnya itu berakhir lebih lama ( 169 ). Saya memasukkannya karena seseorang mungkin akan menghasilkan tweak yang pintar untuk mengurangi ukurannya. (Harus dijalankan tanpa argumen)
sumber
C, 163
sumber
Python 3,
181175171162Ini menghasilkan baris baru setelahTidak lagi!>>
, tetapi OP tidak mengatakan itu tidak diizinkan.Terima kasih
GlitchMr
,minitech
dangolfer9338
!sumber
lambda
alih-alihdef
untuk fungsi yang segera kembali.x in(-1,256)
menyimpan dua karakter. Atau,s=lambda x:"a=%d"%(x!=-1and x!=256and x)
bisa menghemat beberapa.print(">>")
dan menggunakanfor i in input(">>")
sebagai gantinya;input()
memungkinkan menentukan prompt. Kemudian, tidak akan ada baris baru setelahnya>>
, dan Anda menyimpan karakter.R,
161,148, 138Versi tidak disatukan:
Sesi contoh (dalam mode interaktif):
sumber
Python 3, 141
Saya tahu saya terlambat, tetapi saya ingin mengambil kesempatan untuk memposting versi Python yang lebih pendek (dan upaya CodeGolf pertama saya). :)
Pernyataan cetak agak sulit untuk ini. Jika prompt harus diakhiri dengan spasi, tambahkan satu karakter ke dalam hitungan. :)
Penjelasan
v
adalah akumulator.m
memeriksa apakah nilai yang diberikan adalah-1
atau256
. Jika demikian,0
akan dikembalikan, nilainya sebaliknya.Pada baris berikut operasi ditugaskan ke variabel yang sesuai (karena beberapa memiliki arti yang sama (seperti
i
danx
) ini lebih pendek daripada membuat kamus baru). Itu kemudian digunakan diexec
bawah ini.while 1:
adalah loop utamaSekarang kesenangan dimulai. Seperti solusi @jazzpi , ia mengulangi setiap karakter dari input.
locals()
adalah kamus untuk semua variabel saat ini (terlihat). Dengan.get(n,'')
kunci yang sesuai akan dimasukkan ke dalam exec-string (string kosong, jika kunci (= input lain) tidak ditemukan). Ini kemudian akan, ketika dieksekusi, digabungkan denganv
dan diteruskanm
. Nilai pengembalian akan disimpanv
lagi.Ulangi ini sampai Anda bosan. :)
sumber
y*(-1!=y!=256)
sebesar -3 bytePython 2, 139
Ini rapi, tetapi juga cukup mudah. Ini versi yang lebih panjang dan keren:
Dengan bobot 190 karakter, ini mungkin bukan jawaban yang paling kompetitif di sini. Di sisi lain, coroutine sangat bagus dan saya selalu mencari alasan untuk menggunakan (dan membagikannya)
sumber
TI-BASIC,
104 10710210098Untuk kalkulator TI-83 + / 84 + series.
Beri nama ini
prgmD
; akhirnya meluap tumpukan dengan memanggil dirinya sendiri. Ganti rekursi denganWhile 1
, dengan biaya dua byte, untuk memperbaikinya.Secara default Y adalah 0, jadi jalankan ini dengan kalkulator yang baru saja dihapus oleh memori atau simpan 0 hingga Y secara manual sebelum menjalankan ini.
Sayang sekali bahwa huruf kecil (dalam string literal) masing-masing adalah dua byte; kalau tidak, ini akan lebih pendek dari jawaban Dom Hastings.
EDIT: Memperbaiki kesalahan divide-by-zero (0 ^ 0) dengan biaya tiga byte.
107 -> 102: Trik eksponensial imajiner yang digunakan untuk menyimpan empat byte (termasuk 1 dari tanda kurung dan -1 dari pemanjangan string pencarian) dan menggunakan Y bukan X, yang membutuhkan satu byte kurang untuk menginisialisasi.
sumber
Catatan tambahan 272
Tidak Disatukan:
sumber
C (
224212 karakter)Ini mungkin pilihan bahasa yang buruk, tapi oh well. Bukannya bahasa seperti C dapat melakukan lebih baik daripada beberapa bahasa pemrograman dinamis. Pada Dentang, Anda harus menentukan nilai untuk
return
(ini tidak perlu untuk gcc).sumber
define q
dan hanya menggunakanprintf
?q
digunakan 3 kali, jadidefine q
hemat ~ 2 karakter.Lua,
230228Bukan yang terburuk, bukan yang terbaik.
CATATAN: seperti yang dilaporkan oleh @mniip
256or
mungkin tidak berfungsi pada juru bahasa Anda. Info lebih lanjut dalam komentar.(kurang lebih) Versi yang dapat dibaca:
Keluaran:
Sunting: terima kasih kepada @mniip untuk optimasi 2 karakter:
until nil
->until _
sumber
repeat until x
(x nihil seperti yang tidak didefinisikan) adalah 2 karakter lebih pendek, danwhile 1 do end
panjangnya persis sama, selain itu versi lua apa itu?256or
sintaks tidak valid dalam juru bahasa sayarepeat until x
. Saya menggunakan windows binary terbaru dari sini . Seperti yang Anda lihata=a+1 elseif
ada ruang. Itu karenae
adalah digit heksadesimal, sementarao
di dalam256or
tidak, jadi penerjemah saya mengambilor
pernyataan / blok / howYouCallIt lainnya.256or
, juga0repeat
dan1then
; Saya menggunakan lua resmi dari lua.org, kode Anda tidak dapat dikompilasi di 5.1, 5.2, atau 5.3Haskell ,
186178 byteKebutuhan ini harus dijalankan dengan
runhaskell
(atau di dalamghci
) karena mereka berdua mengaturBufferMode
untukNoBuffering
secara default yang brankas cukup banyak byte:Cobalah online!
Penjelasan
Ini mendefinisikan operator baru
state # source
(deklarasi ketetapan memungkinkan kita untuk menjatuhkan kurung ketika menggunakannya bersama dengan operator lain(+)
,(-)
,(^)
,(:)
dan(>>)
):-1
dan256
r#_
), ia membaca yang baru dan mulai lagi menjaga keadaan lamaUntuk memulai proses, kami menginisialisasi keadaan dengan
0
dan membaca baris sumber baru, yaitu. mulai dengan sumber kosong:sumber
Windows Batch,
204256Berhasil mengabaikan perintah lain. Benar-benar kembung tanpa harus
or
bekerja dengan ...Edit:
sumber
Script Perintah Windows - 154
Abusin fitur yang tidak diketahui secara maksimal.
sumber
> <> , 258 byte
Saya sudah melakukan jawaban>>> lain karena saya tidak bisa menguji fase dan menggunakan perintah pra-ditumpuk daripada meniru shell pula.
Bisa dipastikan golf, tapi saya tidak yakin saya akan memiliki keberanian
gila yangdibutuhkan !Saya mengujinya dengan interpreter resmi yang berjalan di bawah python 3.5 di bawah cygwin di bawah windows 7 dan dapat mereproduksi uji coba:
Jika Anda tidak dapat menjalankannya di komputer Anda (input tampaknya rumit) atau Anda hanya ingin mencobanya tanpa perangkat lunak lain, Anda dapat menggunakan versi berikut pada penerjemah online .
Jelas mengabaikan \ n dan EOF karena Anda tidak dapat memasukkannya dalam juru bahasa online, tetapi akan berperilaku seolah-olah masuk telah ditekan setelah setiap perintah keluaran.
sumber
C (gcc) , 139 byte
Kompilasi dengan
-Dk="_nZZiaeY"
(termasuk dalam jumlah byte). -2 byte jika prompt>>\n
diizinkan.Cobalah online!
Degolf
sumber
Tong , 68B
sumber
Haskell, 230
Kalau saja aku bisa menyingkirkan
hFlush stdout
panggilan sial itu ! Tanpa itu, prompt tidak akan ditampilkan sampaio
operasi dilakukan. Ada saran?sumber
hFlush
dengan menggunakanrunhaskell
alih-alih kompilasi (lihat jawaban saya ), tetapi untuk solusi ini tidak valid dan kesalahan keluar.PHP + HTML 345
output sedikit samar (sejarah / sesi ditampilkan pada textarea, dan dengan pelaporan kesalahan diaktifkan banyak peringatan dicetak) tetapi semuanya berfungsi
sumber
> <>, 239
Tumpukan awal adalah input. Anda dapat mencobanya online di sini .
sumber
Golf-Basic 84, 88 karakter
Meminta satu perintah pada satu waktu, seperti dalam setidaknya 3 solusi lainnya. Berikut ini adalah uji coba untuk
xiskisc
:Juga,
xiskso
menghasilkan 0, sebagaimana mestinya.sumber
JavaScript (Node.js), 204 Bytes
Ini mungkin bisa golf. Node.js sekali lagi membuktikan bahwa itu adalah verbositas tersamar yang aneh sekali lagi. Kode menjelaskan:
sumber
C #, 311 byte
akan menjadi 283 byte jika usings dan deklarasi kelas dll dapat dihentikan dengan hanya memberikan definisi fungsi
sumber