Banyak pengguna PPCG yang membantu menciptakan tantangan ini, baik dalam obrolan maupun Sandbox, khususnya Martin Ender , AdmBorkBork , Emigna , dan pengguna202729
Komunitas kami merasa perlu untuk membuat serangkaian bahasa yang dirancang khusus untuk bermain golf, "bahasa golf" seperti yang kita sebut sebagai bahasa. Bahasa-bahasa seperti itu telah berevolusi dari GolfScript yang dulu brilian, sekarang kikuk ke bahasa ringkas yang ramping seperti Jelly dan Husk . Seperti yang bisa kita lihat, bahasa-bahasa ini terus menerus semakin pendek untuk satu set tugas. Jadi, sebagai ahli yang jelas di sini tentang bahasa golf, kita harus merancang bahasa bersama untuk mengalahkan setiap bahasa lain yang berani bersaing. Memperkenalkan Bugle!
Bugle: Dari akronim BuGoL: Bu ILT Pergi lfing L anguage.
Bagaimana tantangan ini akan bekerja
Jika Anda tidak mendapatkan apa yang saya singgung dalam pendahuluan, tantangan ini adalah tantangan chaining jawaban di mana kita masing-masing menyumbangkan sesuatu kepada penerjemah bahasa golf baru, meningkatkan kemampuannya untuk bersaing di PPCG dengan setiap jawaban.
Saya akan memposting jawaban pertama yang terdiri atas dasar spek bahasa / juru bahasa, dan semua jawaban lainnya akan dilanjutkan dari itu. Kiriman baru akan memberikan hal-hal berikut:
- Perubahan pada spesifikasi bahasa
- Penerjemah yang mutakhir, bertemu persis dengan apa yang tercantum dalam perubahan
- Skor pembaruan bahasa (lebih detail dalam sedikit)
Anda dapat mengubah spesifikasi dalam salah satu dari tiga cara:
- Anda dapat menambahkan satu perintah
- Anda dapat menambahkan dua perintah baru
- Anda dapat mengedit perilaku satu perintah yang ada
Mengenai juru bahasa baru, Anda harus menggunakan versi terbaru, ditulis dengan Python. Tidak harus main golf. Setiap perintah yang ditambahkan sebelumnya harus dapat diuji dengan interpreter terbaru, serta perintah terbaru (yang Anda tambahkan). Anda juga tidak boleh menggunakan bahasa ofensif kapan saja ketika memperbarui penerjemah, seperti dalam komentar atau string string dll.
Perintah yang ditambahkan dapat melakukan apa saja yang Anda inginkan . Satu-satunya persyaratan adalah:
- Itu tidak menghasilkan output ofensif
- Itu tidak sama dengan perintah lain
- Itu tidak mencegah salah satu tantangan sampel diselesaikan
Selain ini, dapat spesifik atau umum seperti yang Anda inginkan. Bisa juga karakter apa saja yang Anda inginkan. Jika Anda tidak yakin apakah penambahan Anda merupakan 'perintah baru', jangan ragu untuk bertanya di komentar.
Skor bahasa
Anda mungkin telah memperhatikan bahwa Anda harus memasukkan skor bahasa dalam semua kiriman baru. Skornya adalah apa yang mencegah tantangan ini berlangsung selamanya, dan didefinisikan sebagai berikut:
Skor saat ini adalah jumlah jumlah byte yang diperlukan untuk bahasa untuk menyelesaikan 20 tugas di bawah ini
Untuk masing-masing tugas, aturan I / O Standar berlaku , seperti halnya celah standar .
20 tugas:
- "Halo Dunia!" - Keluarkan string
Hello, World!
- 1, 2, Fizz, 4, Buzz - Output setiap integer dari 1 hingga 100 (inklusif) pada baris terpisah, dengan kelipatan 3 digantikan oleh
Fizz
, kelipatan 5 digantikan olehBuzz
dan kelipatan keduanya denganFizzBuzz
- Menghasilkan angka 2014 tanpa angka apa pun dalam kode sumber Anda - Menghasilkan angka 2014 tanpa menggunakan karakter apa pun
0123456789
dalam kode sumber, tanpa mengakses variabel eksternal atau seed acak - Dikaburkan Hello World - Output string
Hello, World!
, tanpa menggunakan karakter dalam setidaknya dua set berikut:hlwd
,eor01
dan27
(case-sensitive) Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - Dalam bahasa pilihan Anda, tampilkan yang berikut:
Happy Birthday to You Happy Birthday to You Happy Birthday Dear [the name of your favourite programming language] Happy Birthday to You
Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya juga - Keluarkan lirik lengkap "Never Gonna Give You Up"
- Keluarkan tanda - Diberi angka, cetak -1 jika negatif, 0 jika 0 atau 1 jika positif
- Collatz Conjecture (OEIS A006577) - Mulai dari integer, bagi dengan 2 jika itu genap, atau kalikan dengan 3 dan tambahkan 1 jika itu aneh, dan ulangi prosesnya sampai Anda mencapai 1. Output harus berupa jumlah iterasi membawa Anda mencapai 1.
- Array Tantangan # 1: Array Bergantian - Diberikan array bilangan bulat, periksa apakah semua item yang diindeks sama atau tidak, dan semua item yang diindeks sama adalah sama, dan menghasilkan nilai yang benar atau salah sesuai
- Apakah saya array yang tidak signifikan? - Diberikan array bilangan bulat, periksa apakah perbedaan absolut antara elemen berurutan semuanya lebih kecil dari atau sama dengan 1, dan menghasilkan nilai yang benar atau salah sesuai
- Apakah angka ini prima? - Diberi bilangan bulat positif, tulis program lengkap untuk memeriksa apakah bilangan prima, dan berikan nilai yang benar atau salah
- Saya seorang palindrome. Apakah kamu? - Diberikan string, periksa apakah itu palindrom, sementara program / fungsi Anda juga palindrom, dan hasilkan dua nilai yang berbeda dan konsisten sesuai
- Jumlah angka pada standar di - Ambil serangkaian angka dari STDIN dan hasilkan jumlah mereka.
- Find the Factorial - Diberikan bilangan bulat
n
, output produk dari semua bilangan bulat antara1
dann
inklusif. - Kode terpendek untuk menghasilkan keluaran tanpa batas - Tanpa masukan apa pun, menghasilkan keluaran tanpa batas, yang secara teoritis tidak akan pernah berhenti menghasilkan keluaran.
- Bake sepotong Pi - Keluarkan teks yang tepat ini:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
\::\433832|
\::\79502|
\::\8841|
\::\971|
\::\69|
\::\3|
\__\|
- Temukan angka terkecil yang tidak membagi N - Diberikan bilangan bulat positif N, menghasilkan bilangan bulat positif terkecil yang tidak membagi N.
- Apakah ini genap atau ganjil? - Dengan bilangan bulat N, hasilkan paritasnya sebagai nilai kebenaran / kepalsuan.
- Output dengan panjang yang sama dengan kode - Tulis kode terpendek yang outputnya memiliki panjang yang sama dengan kode, di mana output tidak sama dengan kode.
- Golf Anda quine untuk kebaikan! - Tuliskan quine terpendek dalam bahasa Anda.
Agar valid, kiriman baru harus memiliki kiriman golf setidaknya untuk 2 masalah, dengan setidaknya 1 byte untuk masing-masing. Anda dapat menambah panjang pengajuan lainnya, tetapi skor total harus berkurang setidaknya 2 per jawaban. Juga, harap pertimbangkan untuk memasukkan tautan ke program yang diperbarui. Solusi yang diperbarui tidak boleh berfungsi saat dijalankan dengan versi juru bahasa sebelumnya.
Cara mendapatkan cookie
Saya memiliki daftar 5 tantangan, yang tidak wajib untuk dicoba, dan tidak mempengaruhi skor Anda, tetapi hanya tantangan tambahan untuk menguji apakah Bugle cukup mampu. Jangan ragu untuk memasukkan solusi untuk sejumlah ini dalam jawaban Anda:
- Buat penerjemah mandiri
- Buat quine yang mampu payload
- Tentukan string
- Hyperprogramming: N + N, N × N, N ^ N semuanya dalam satu
- "KNOT" atau "TIDAK"?
Deskripsi tidak termasuk karena tidak diperlukan bagi semua orang untuk dapat bersaing dalam tantangan.
Bagaimana cara menang
Begitu skor minimum ( kami yakini 16, meskipun segala upaya untuk bermain golf yang disambut dengan hangat) telah tercapai, jelas rantai telah berakhir karena solusi tidak bisa mendapatkan skor yang lebih baik. Setelah 16 tercapai, tantangan tetap hidup selama 1 bulan sesudahnya, untuk memberi siapa pun peluang untuk golf solusi lagi. Setelah bulan ini berlalu, tantangan sudah berakhir.
Setelah tantangan selesai, saya akan memigrasikan penerjemah ke repositori GitHub, dan melalui intrik biasa merilis bahasa yang stabil. Anda juga dapat mulai memposting solusi untuk tantangan pada PPCG saat ini, menggunakan bahasa tersebut, tetapi tolong jangan sampai membanjiri halaman depan dengan jawaban. Sebaliknya, sebarkan selama periode waktu tertentu.
Memformat
Agar informasi lebih mudah ditemukan dalam jawaban Anda, harap format sebagai berikut:
# [N]. [Score]
[New command + description]
[Interpreter/link to interpreter]
[Link to programs]
Di mana [N]
nomor jawaban Anda (1 untuk yang pertama, 2 untuk yang kedua dll.)
Aturan
- Anda harus menunggu 3 jam antara memposting jawaban
- Anda tidak boleh memposting dua kali berturut-turut, kecuali tidak ada jawaban yang diposting selama 10 hari (tepatnya 240 jam)
- Anda mungkin tidak menghapus perintah sebelumnya.
- Penerjemah Anda tidak harus golf, dan jumlah byte-nya sama sekali tidak relevan di sini.
- Jika seseorang menyarankan golf ke program sementara jawaban Anda adalah yang terbaru, Anda harus mengedit di golf, dan memperbarui skor Anda.
- Anda juga dapat melakukan ini ketika jawaban Anda ada di tengah-tengah rantai, asalkan skor Anda tidak menjadi lebih rendah daripada jawaban selanjutnya.
- Harap jangan menjawab tantangan PPCG yang ada menggunakan bahasa ini, setidaknya sampai tantangan selesai
- Penerjemah ditulis dalam Python 3, dan harus terus seperti itu di seluruh rantai. Mengubah bahasa dilarang.
- Sekali lagi, agar valid, kiriman baru harus memiliki kiriman golf untuk setidaknya 2 masalah, dengan setidaknya 1 byte untuk masing-masing.
Ayo mulai!
sumber
Hello, World!
, maka itu 19 byte. Tetapi jika perilaku program kosong berubah, bergantung pada input, itu mungkin dapat dikurangifor
loop) diizinkan, dan didorong untuk ditambahkanJawaban:
3. Nilai:
293825832532 (-51)Penerjemah baru ada di sini .
Terutama untuk keperluan bermain golf quine dan membuat output lebih mudah, saya telah menambahkan kemampuan untuk menduplikasi stack / deque dan juga untuk output seluruh model dalam bentuk teks yang diberikan alih-alih sebagai bilangan bulat.
Solusi
1. "Halo, Dunia!" - 17 byte (-3)
5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 95 byte (-3)
6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya juga - 1884 byte (-3)
16. Panggang sepotong Pi - 149 byte (-3)
20. Golf Anda quine untuk kebaikan! - 23 byte (-39)
Fitur Bahasa yang ditambahkan
a
#"Hello, World!"a
CetakHello, World!
d
sumber
2. Nilai:
29382583Penerjemah yang dimodifikasi ada di sini di TIO .
String literal adalah tambahan bahasa yang paling jelas, terutama untuk memerangi tantangan kolmogorov-kompleksitas .
Solusi
1. "Halo, Dunia!" - 20 byte (-28)
Setiap tantangan kompleksitas-kolmogorov dapat diselesaikan menggunakan struktur
#"<string>"[o>]
yang menampilkan string yang diberikan hingga 0 setelah string tercapai.2. 1, 2, Fizz, 4, Buzz -
41964 bytes (-1332)Terima kasih kepada @ user202729 untuk bermain golf yang luar biasa ini.
3. Hasilkan nomor 2014 tanpa angka dalam kode sumber Anda - 9 byte (-4)
Menggunakan dua karakter 20 dan 14 di Bugle codepoints.
4. Halo Hello World - 19 byte (-153)
Memenuhi aturan # 1 (no
HLWDhlwd
) dan # 3 (no27
).5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 98 byte (-230)
6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya - 1887 byte (-5006)
16. Panggang sepotong Pi - 149 byte (-290)
20. Golf Anda quine untuk kebaikan! - 62 byte (-12)
Fitur Bahasa yang ditambahkan
"..."
: String literal.\n
ditangani seperti karakter lainnya."
(34) ke memori menggunakan perintah ini. Ini bukan masalah yang terlalu besar, setidaknya untuk saat ini, karena semua tantangan kolmogorov-kompleksitas yang tercantum di sini tidak ada"
dalam output.Golf lebih lanjut selalu diterima, terutama untuk "Never will give up up" dan quine. Secara khusus, quine di atas adalah quine nontrivial pertama yang pernah saya buat, jadi saya sangat percaya seseorang dapat membuat yang lebih pendek.
sumber
1. Skor: 9638
Penerjemah dasar dapat ditemukan di sini , dan pengiriman di sini . Ini agak panjang, jadi saya memasukkannya di GitHub, daripada mengambil sebagian besar pos.
Solusi
Semua solusi ini adalah program Unicode, dijalankan dengan
-u
bendera baris perintah, tetapi skor dihitung seolah-olah dikodekan dengan halaman kode Bugle.1. "Halo, Dunia!" - 48 byte
Cukup tekan lalu keluarkan kode karakter masing-masing karakter dalam string.
2. 1, 2, Fizz, 4, Buzz - 1396 byte
Teknik yang sama seperti Hello, World! contoh
3. Hasilkan nomor 2014 tanpa angka dalam kode sumber Anda - 13 byte
#
menggunakan rekaman itu,+
menambah sel,O
output sebagai bilangan bulat dan-
penurunan4. Hello World yang dikaburkan - 172 byte
Menggunakan kesamaan yang melekat dengan brainfuck. Memenuhi aturan # 1 dan # 3
5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 328 byte
Semua tantangan kolmogorov-kompleksitas memiliki struktur seperti ini, saat ini.
6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya - 6893 byte
7. Keluarkan tanda - 18 byte
Cek apakah input lebih besar dari nol, kurang dari nol (diubah untuk menghasilkan
-1
bukan1
) dan sama dengan nol, sebelum mengambil jumlah mereka.8. Dugaan Collatz (OEIS A006577) - 36 byte
Ini melakukan perulangan pada tumpukan, tetapi beralih ke pita untuk menambah jumlah setiap iterasi.
9. Array Tantangan # 1: Array Bergantian - 35 byte
Ini adalah sedikit modifikasi dari jawaban Mitch Schwartz untuk tantangan yang ada, lanjutkan itu!
10. Apakah saya array yang tidak signifikan? - 46 byte
Semua kredit diberikan kepada Emigna karena membuat ini
11. Apakah nomor ini prima? - 31 byte
Menggunakan Teorema Wilson dan menghitung
(n-1)!² % n
12. Saya seorang palindrome. Apakah kamu? - 13 byte
Paruh pertama program, hingga
O
, mengatur tumpukan sebagai di[x, x]
manax
adaTrue
atauFalse
.O
muncul nilai teratas dan mengeluarkannya. Sisa program hanya memastikan bahwa tidak ada kesalahan yang dihasilkan. Untungnya, ketika?
menemukan akhir file, itu hanya mendorong''
(string kosong).13. Jumlahkan angka pada standar dalam - 19 byte
Ini dapat dibagi menjadi dua bagian:
?:[?:];
danL0s[+L1s-]
. Bagian pertama mengumpulkan semua input ke stack. Bagian kedua mendorong jumlah dari dua elemen teratas, sedangkan panjangnya lebih besar dari 1.14. Temukan faktorial - 25 byte
Ini memiliki struktur yang mirip dengan program penjumlahan, tetapi alih-alih mendorong input sedikit,
[:1s-:];
mendorong rentang dari1 .. n
ke stack, dan[×L1s-]
mengambil produk.15. Kode terpendek untuk menghasilkan keluaran tanpa batas - 5 byte
Gunakan loop sementara, dengan
1
terus - menerus di bawah penunjuk. Output1
selamanya.16. Panggang sepotong Pi - 439 byte
17. Temukan nomor terkecil yang tidak membagi N
Ini menggunakan pembagian percobaan, berakhir ketika hasil dari modulo tidak sama
0
.18. Apakah ini genap atau ganjil? - 5 byte
Modulo sederhana oleh 2
19. Keluaran dengan panjang yang sama dengan kode - 16 byte
Mengembalikan 16 karakter ASCII yang dapat dicetak secara terbalik:
0/.-,+*)('&%$#"!
20. Golf Anda quine untuk kebaikan!
Kredit diberikan kepada pengguna202729 untuk pembuatan ini
Spesifikasi bahasa
Panggilan
bugle.py
saat ini mengambil serangkaian flag, kemudian nama file / kode yang akan dieksekusi. Sampai sekarang, ia memiliki 4 flag baris perintah:-f
Saya--file
menetapkan bahwa kode harus dibaca dari file-c
/--cmd
/--cmdline
Menentukan kode yang disediakan melalui baris perintah.-c
dan-f
tidak dapat digunakan dalam panggilan yang sama-u
Saya--unicode
memberi tahu penerjemah untuk membaca kode dengan penyandian Unicode. Standarnya adalah menggunakan pengodean Bugle di bawah ini-l
/--length
output panjang file, dalam bytes, ke STDERR setelah eksekusiPanggilan berikut digunakan untuk menguji pengiriman di atas
Halaman kode
Bugle menggunakan 512 karakter di halaman kode-nya. The
0xFF
karakter tidak akan digunakan untuk perintah , sebagai yang digunakan untuk menunjukkan bahwa nilai hex berikutnya dalam indeks memasuki babak kedua dari halaman kode. Karakter yang digunakan adalah:Atau melihatnya dalam format tabel . Perhatikan bahwa
\t
dan\n
masing-masing mewakili tab dan baris baru. Perhatikan juga bahwa baris ke-16 berakhir dengan karakter yangtidak dapat dicetak:, dan mungkin tidak ditampilkan di semua browser.
Ingatan
Interpreter saat ini memiliki 5 model memori yang terpasang di dalamnya. Setiap model memori membutuhkan karakter untuk memberi tahu juru bahasa untuk mulai menggunakan model itu:
$
): tumpukan standar, yang mendukung nilai yang didorong, muncul, dll.#
): Pita, à la brainfuck, yang awalnya hanya0
s.G
): Sebuah grid 2d, tak terbatas di kedua arah, yang hanya berisi0
sD
): Aqueque , seperti yang diterapkan olehcollections
modul.S
): Nilai tunggal, yang dapat digunakan untuk menyimpan satu nilai.Kotak juga memiliki nilai tunggal yang disimpan dalam penunjuknya yang dapat ditulis, atau ditulis ke sel.
Selain itu, ukuran pita dan kisi serta perilaku pembungkus dapat dimodifikasi, dengan menggunakan perintah pemanggilan yang berbeda. Perintah yang berbeda ini mengambil sejumlah nilai dari model memori saat ini sebagai parameter penyesuaian:
À
): Mengambil dua nilai - size (int
) dan wrapping (bool
)Á
): Mengambil satu nilai - size (int
). Membungkus di ujung rekaman ituÂ
): Mengambil satu nilai - size (int
). Tidak terbungkus pada akhirnyaǴ
): Mengambil 4 nilai - ukuran x (int
), ukuran y (int
), x bungkus (bool
) dan y bungkus (bool
)Jenis memori yang digunakan dapat berubah selama suatu program dengan menggunakan
₀₁₂₃₄₅₆₇₈₉
, yang mengaksesn
tipe memori yang digunakan diindeks 0 (₀
adalah yang pertama,₁
adalah yang kedua dll), tetapi, saat ini, nilai tidak dapat ditukar antara jenis memori yang berbeda.Percabangan
Sejauh ini Bugle memiliki dua perintah percabangan, keduanya diakhiri dengan
]
karakter:While (
[
): gaya brainfuck sambil loop. Ini mengeluarkan nilai dari stack / deque jika sedang digunakan, atau mengakses sel di bawah pointer di tape / grid.Contoh:
#?[-O]
dihitung dari input ke bawah0
Jika / selain itu (
{
dan}
). Eksekusi tunggal saat loop. Jika nilai yang muncul salah, maka klausa if dilewati, pergi ke klausa lain, dipisahkan oleh}
. Mereka berperilaku dengan cara yang sama seperti loop tentang akses memori.Contoh:
{0}1]
adalah gerbang NOT logisFungsi bawaan
Garis digit ditafsirkan sebagai bilangan bulat, dan hanya didorong / ditulis ke model memori saat ini sebagaimana adanya.
Jelas, saya telah melengkapi Bugle dengan beberapa fungsi builtin dasar, sesedikit mungkin, untuk memungkinkan orang lain untuk menambahkan lebih banyak saat rantai berlanjut. Perintah dasar adalah sebagai berikut:
+
-
%
:
;
<
=
>
?
L
O
R
Z
^
h
o
r
n
, di manan
adalah nilai teratass
…
×
÷
sumber