Baru-baru ini saya membuat bahasa baru yang disebut ;#
(dilafalkan "Semicolon Hash") yang hanya memiliki dua perintah:
;
tambahkan satu ke akumulator
#
modulo akumulator sebesar 127, konversikan ke karakter ASCII dan hasilkan tanpa baris baru. Setelah ini, setel ulang akumulator ke 0. Ya, 127 benar.
Setiap karakter lain diabaikan. Itu tidak berpengaruh pada akumulator dan tidak melakukan apa-apa.
Tugas Anda adalah membuat penerjemah untuk bahasa yang kuat ini!
Ini harus berupa program penuh atau fungsi yang akan mengambil ;#
program sebagai input dan menghasilkan output yang benar.
Contohnya
Output: Hello, World!
Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Output: ;#
Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Output: 2d{ (unprintable characters here; should have 4 `\000` bytes between the `d` and the `{` and 3 after the `{`)
Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;hafh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;f;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###ffh#h#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ffea;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#au###h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o
Output: Fizz Buzz output
Program: link below
Output: !
Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
code-golf
interpreter
caird coinheringaahing
sumber
sumber
Jawaban:
Python 3 ,
6968 byte-1 byte terima kasih kepada @WheatWizard
Cobalah online!
sumber
if
. Cobalah online!JavaScript (ES6),
768280 byteDemo
Tampilkan cuplikan kode
Versi rekursif,
8277 byteDisimpan 5 byte berkat Neil
Yang ini cenderung macet untuk input besar seperti contoh Fizz Buzz.
sumber
f(s,a+(c==';'))
mungkin menjatuhkan tiga byte dari versi rekursif Anda.Retina ,
336636765666259 byteCobalah online!
Versi yang dapat dibaca menggunakan sintaks hipotetis :
Tidak mencetak byte NUL, karena TIO tidak mengizinkannya dalam kode sumber.
Juga mencetak baris baru ekstra di akhir, tapi saya rasa itu tidak bisa dilakukan sebaliknya.Trailing newline ditekan berkat @Leo .-273 (!) Bytes berkat @ETHproductions .
-2 byte terima kasih kepada @ovs .
-3 byte terima kasih kepada @Neil . Lihat solusi 34-byte mereka yang luar biasa .
sumber
+T`\x01-~`_\x03-\x7f`[^\x01¯]\x01
? (termasuk yang tidak diterbitkan sebagai karakter tunggal, tentu saja)#
pada input. Anda dapat memperbaikinya dengan mengubah tahap kedua Anda menjadi(;{127}|;+$)
T`;#\x01-ÿ`\x80\x7F_
\x80+$
(baris kosong)\+T`\x7Fo`\x01-\x80_`\x80[^\x80]
(menggunakan escapes heksadesimal untuk mewakili unsintables). Output \ x7F bukan nulls.Java 8, 100 byte
Cobalah online!
sumber
Consumer<char[]>
:s->{char i=0;for(int b:s){if(b==59)i++;if(b==35){System.out.print(i%=127);i=0;}}}
Japt , 18 byte
Ada char yang tidak dapat dicetak setelahnya
%#
. Uji secara online!Bagaimana itu bekerja
sumber
q'# ®è'; u# dì¯J
juga bekerja untuk skor yang sama.Python , 65 byte
Ini adalah golf dari jawaban sebelumnya ini .
Cobalah online! Python2
Cobalah online! Python3
Penjelasan
Ini adalah jawaban yang cukup mudah kami menentukan berapa banyak
;
antara masing#
- masing dan mencetakchr
mod 127. Satu-satunya hal yang mungkin sedikit aneh adalah[:-1]
. Kita perlu menghapus grup terakhir karena tidak akan ada#
setelahnya.Sebagai contoh
Akan dibagi menjadi
Tetapi kami tidak ingin yang terakhir
;;;
karena tidak ada#
setelah itu untuk mencetak nilai.sumber
t
danx
.> <> , 35 byte
Cobalah online! Ganti
␡
dengan 0x7F^?
,, atau "hapus".Loop utama
Ini mengambil karakter input (
i
), memeriksa apakah kurang dari nol yaitu EOF (:0(
) dan mengakhiri program jika (?;
). Jika tidak, periksa apakah input sama dengan#
(:'#'=
). Jika ya, cabang ke bawah dan mulai ulang loop (?v
...^ ... <
).Logika balasan
Periksa apakah input sama dengan
;
(';'=
). Jika ya, tekan a0
. Kalau tidak, jangan lakukan apa pun. Ini me-restart loop utama.Logika pencetakan
Ketika karakter inputnya
#
, pop input dari stack (~
), dapatkan jumlah anggota di stack (l
), tekan 127 ('␡'
), dan ambil modulus (%
). Kemudian, keluarkan sebagai karakter (o
) dan mulai tumpukan baru ([0
). Ini "nol" di luar meja. Kemudian, loop dimulai kembali.sumber
:0(
:(Python 3, 69 Bytes
Lebih baik, terima kasih kepada @Wheat Wizard, @Uriel
sumber
:
s.';'==c
menghemat ruang, tetapi tidak menggunakanif
pernyataan sama sekali akan lebih pendek.Röda ,
443938 byte5 byte disimpan berkat @fergusq
Cobalah online!
Fungsi anonim yang mengambil input dari aliran.
Jika karakter lain tidak harus diabaikan, saya mengerti:
Röda , 20 byte
sumber
Ruby,
413534 karakter(
403433 kode karakter + 1 opsi baris perintah karakter)Terimakasih untuk:
putc
agar tidak memerlukan konversi eksplisit dengan.chr
(6 karakter)Contoh dijalankan:
Cobalah online!
sumber
putc()
. Terima kasih, @Jordan05AB1E ,
161514 byteKode:
Penjelasan:
Menggunakan pengodean 05AB1E. Cobalah online!
sumber
Jelly , 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
semicola
itu tidak ada itusemicolons
.kode mesin x86 pada MS-DOS - 29 byte
Majelis yang dikomentari:
sumber
05AB1E ,
252119 byte-2 byte terima kasih kepada Adnan
Penjelasan:
Cobalah online!
sumber
i>}
dengan+
.Retina , 34 byte
Cobalah online! Termasuk test case. Sunting: Disimpan 2 byte dengan bantuan dari @MartinEnder. Catatan: Kode termasuk unsintables, dan menggunakan
&#x;
kode menghasilkan hasil yang salah karena browser menggunakan Windows-1252 bukannya ISO-8859-1. Penjelasan: Baris pertama membersihkan input:;
diubah menjadi\x80
,#
ke\x7F
(karena batasan TIO) dan yang lainnya dihapus. Kemudian setiap kali kita melihat\x80
yang tidak ada di depan yang lain\x80
, kita menghapusnya dan secara siklis menambah kode karakter berikutnya. Ini diulang sampai tidak ada lagi\x80
karakter yang tersisa. Kode asli yang mendukung byte nol pada dasarnya mengurangi 1 dari byte yang tidak dapat dicetak, kecuali pada baris pertama di mana\xFF
tidak berubah dan\x7F
menjadi\x00
. Dengan lolos untuk kemudahan:sumber
\x80([^\x80]|$)
pada tahap terakhir.\s+T`\x7Fo`\x01-\x80_`\x80(?!\x80).?
juga hanya menghemat satu byte.[^\x80]|\x80$
menghemat dua byte, saya pikir.s
itu menjengkelkan.R,
97908684 byteSebuah fungsi:
Ketika R dimulai,
F
didefinisikan sebagaiFALSE
(numerik0
).Tidak Disatukan:
sumber
pryr
adalah paket R, itu masih kode R.import
saat dalam R Anda dapat menggunakan::
untuk langsung mengakses fungsi dalam paket. Anda sering dapat melihat penggunaan paket tambahan di sini (misalnya, untuk Python dan Java). Namun, saya mengubah posting saya sebelumnya karena saya tidak ingin terlibat dalam diskusi.Python, 82 byte
sumber
Plain TeX, 156 byte
Dapat dibaca
sumber
C (gcc) , 58 byte
Cobalah online! (Petunjuk: klik ▼ Footer untuk menutupnya.)
sumber
Perl, 25 byte
Jalankan dengan
perl -043pe
(dihitung sebagai 4 byte, karenaperl -e
standar).Penjelasan:
-043
mengatur line-terminator ke#
(ASCII 043).-p
iterates di atas input "lines" (sebenarnya string # -delimited, sekarang).y%;%%
menghitung jumlah;
di setiap "garis".x/#/
memastikan bahwa kami tidak mencetak karakter tambahan untuk program yang tidak diakhiri dengan # (seperti testcase ketiga).%127
harus cukup jelas.$_=
adalah boilerplate biasa.sumber
;;#;;;
itu output # 5 bukannya # 2.echo -n ';;#;;;' | perl -043pe '$_=chr(y%;%%%127)x/#/' | xxd
output dengan benar00000000: 02
di mesin saya. Jika Anda meninggalkan043
, atau menggunakan codepage#
yang bukan ASCII 043, itu akan menjelaskan hasil Anda.CJam, 27 byte
Penjelasan:
Solusi Alternatif, 18 byte
Penjelasan:
sumber
;
menghapus akumulator?F #,
799193 byteTidak disatukan
Cobalah online!
Sunting: Memperlakukan arang selain ';' sebagai '#'. Mengubahnya sehingga mengabaikan karakter yang tidak valid.
Alternatif
F #,
107104 bytePenggunaan sel referensi menghemat 3 byte
Tidak disatukan
Cobalah online
sumber
Processing.js (versi Khanacademy), 118 byte
Cobalah online!
Karena versi pemrosesan yang digunakan tidak memiliki metode input, input ditempatkan pada n.
sumber
keyTyped=function(){ ... }
: PLabyrinth ,
6147 byteCobalah online!
Penjelasan
Eksekusi kode dimulai di sudut kiri atas dan titik koma pertama membuang nol implisit dari tumpukan dan berlanjut ke kanan.
jeruk
_36
mendorong 36 ke tumpukan. Ini untuk membandingkan input dengan#
}
memindahkan bagian atas tumpukan ke tumpukan sekunder,
mendorong nilai integer karakter pada stack)
increments stack (jika ini adalah akhir dari input, ini akan membuat stack 0 dan aliran program akan melanjutkan ke@
dan keluar){
memindahkan bagian atas tumpukan sekunder ke bagian atas tumpukan utama-
pop y, pop x, tekan x - y. Ini untuk membandingkan input dengan#
(35 dalam ascii). Jika inputnya adalah#
kode akan melanjutkan ke bagian ungu (karena bagian atas tumpukan adalah 0 IP melanjutkan ke arah itu bergerak sebelumnya), jika tidak maka akan berlanjut ke bagian hijau.Ungu
127
dorong 127 ke tumpukan%
pop x, pop y, tekan x% y.
pop bagian atas tumpukan (akumulator) dan output sebagai karakterDari sini kode abu-abu membawa kita ke sudut kiri atas program tanpa apa-apa di tumpukan.
hijau
_24
dorong 24 ke tumpukan-
pop x, pop y, tekan xy. 24 adalah perbedaan antara#
dan;
jadi ini memeriksa apakah inputnya;
. Jika itu;
kode terus lurus menuju)
. Kalau tidak, ia akan beralih ke#
yang mendorong ketinggian tumpukan (selalu angka positif, memaksa program untuk berbelok ke kanan di persimpangan berikutnya dan kehilangan kode yang menambah akumulator);
buang bagian atas tumpukan)
increment bagian atas tumpukan yang merupakan nol implisit atau merupakan nol yang sebelumnya bertambah yang bertindak sebagai akumulator untuk keluaranDari sini kode abu-abu membawa kita ke sudut kiri atas program dengan tumpukan dengan hanya akumulator di atasnya.
Abu-abu
Kutipan adalah no-ops,
_
mendorong 0 ke stack, dan;
membuang bagian atas stack. Semua ini hanya kode untuk memaksa aliran kontrol dengan cara yang benar dan membuang apa pun tambahan dari atas tumpukan.sumber
MATL , 29 byte
Input adalah string yang dilampirkan dalam tanda kutip tunggal.
Cobalah online!
Program FizzBuzz terlalu panjang untuk penerjemah online; melihatnya bekerja offline di gif ini:
Penjelasan
Nilai akumulator diimplementasikan sebagai jumlah elemen dalam tumpukan. Ini membuat program lebih lambat daripada jika nilai akumulator adalah angka tunggal dalam stack, tetapi menyimpan beberapa byte.
sumber
Alice , 22 byte
Cobalah online!
Penjelasan
Kami tetap di tumpukan hanya satu penghitung dari berapa banyak yang
;
kami temui. Ketika tumpukan kosong (misalnya di awal program) ini secara implisit adalah 0.Versi yang lebih pendek, tetapi tidak berhenti dari program ini dapat ditemukan di sini .
sumber
~h
.JS (ES6),
9792 byteMencoba mengambil pendekatan yang berbeda dari jawaban Shaggy . Baiklah.
sumber
; # + , 59 byte, tidak bersaing
Bahasa dibuat setelah tantangan ini.
Cobalah online! Input diakhiri dengan byte nol.
Penjelasan
Generasi ini sama dengan dari jawaban kode # Generate; saya . Satu-satunya perbedaan di sini adalah iterasi.
Perulangan
sumber
Bash + coreutils,
4639 byteCobalah online!
Penjelasan
(Terima kasih Sapi Quack untuk -7 byte!)
The
tr
porsi menghapus semua karakter yang asing (saya bisa menempatkan ini dalamsed
untuk persis bytecount sama, tapi kemudian tidak menangani karakter linefeed benar, karenased
meninggalkan mereka dandc
hanya bangun untuk linefeed pertama dengan?
)sed
mengambil sisanya dan membangundc
program:Untaian
;
menjadi untaian1
(panjang literal)#
menjadi.ZC7%P
(jika ini mengikuti string1
,.
adalah titik desimal untuk no-op. Tetapi jika itu di awal program, atau mengikuti yang lain#
, itu adalah literal0
. Kemudian dibutuhkan panjang angka, mods itu, dan Mencetak ASCII yang sesuai.)sumber
;
dalam'...'
dan hanya bisa berubahdc -ez?
kedc
. Selain itu, alih-alih;
menambahkan 1 ke stack, Anda dapat mengelompokkannya bersama dan mendapatkan panjangnyaZ
untuk mencapai tio.run/##S0oszvj/… .dc -ez?
itu konsekuensi dari membutuhkan nol ekstra untuk memulai program) Tetapi program Anda menambahkan output tambahanstderr
baik dalam kasus berturut-turut#
atau input yang tidak berakhir dengan#
(dalam kedua kasus, maksud saya setelah karakter asing dihapus) . Saya tidak tahu apakah ada konsensus, tapi saya merasa output ekstra itu membatalkan solusi. Saya mengadaptasi ide Anda, dan akhirnya hanya satu byte lebih dari saran Anda tanpadc
membuat kesalahan!#
s karenaZ
dari0
yaitu1
, sehingga output 0x01 bukan 0x00 (aku jatuh ke dalam perangkap yang sama juga, tapi browser saya menampilkan unprintables sebagai hexcodes mereka sehingga aku menangkap itu).C,
65 6460 byte(-2 terima kasih kepada ceilingcat)
sumber
c
ke nol untuk membuat fungsi ini dapat digunakan kembali .c=0
, dan saya tidak ingin menipu dengan menyalin dari jawaban Dennis.