Bangun bahasa golf dengan saya

30

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 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:

  1. "Halo Dunia!" - Keluarkan stringHello, World!
  2. 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 oleh Buzzdan kelipatan keduanya denganFizzBuzz
  3. Menghasilkan angka 2014 tanpa angka apa pun dalam kode sumber Anda - Menghasilkan angka 2014 tanpa menggunakan karakter apa pun 0123456789dalam kode sumber, tanpa mengakses variabel eksternal atau seed acak
  4. Dikaburkan Hello World - Output string Hello, World!, tanpa menggunakan karakter dalam setidaknya dua set berikut: hlwd, eor01dan 27(case-sensitive)
  5. 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
    
  6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya juga - Keluarkan lirik lengkap "Never Gonna Give You Up"

  7. Keluarkan tanda - Diberi angka, cetak -1 jika negatif, 0 jika 0 atau 1 jika positif
  8. 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.
  9. 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
  10. 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
  11. Apakah angka ini prima? - Diberi bilangan bulat positif, tulis program lengkap untuk memeriksa apakah bilangan prima, dan berikan nilai yang benar atau salah
  12. 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
  13. Jumlah angka pada standar di - Ambil serangkaian angka dari STDIN dan hasilkan jumlah mereka.
  14. Find the Factorial - Diberikan bilangan bulat n, output produk dari semua bilangan bulat antara 1dan ninklusif.
  15. Kode terpendek untuk menghasilkan keluaran tanpa batas - Tanpa masukan apa pun, menghasilkan keluaran tanpa batas, yang secara teoritis tidak akan pernah berhenti menghasilkan keluaran.
  16. Bake sepotong Pi - Keluarkan teks yang tepat ini:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Temukan angka terkecil yang tidak membagi N - Diberikan bilangan bulat positif N, menghasilkan bilangan bulat positif terkecil yang tidak membagi N.
  2. Apakah ini genap atau ganjil? - Dengan bilangan bulat N, hasilkan paritasnya sebagai nilai kebenaran / kepalsuan.
  3. 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.
  4. 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:

  1. Buat penerjemah mandiri
  2. Buat quine yang mampu payload
  3. Tentukan string
  4. Hyperprogramming: N + N, N × N, N ^ N semuanya dalam satu
  5. "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!

caird coinheringaahing
sumber
1
Sandbox
caird coinheringaahing
1
Mungkin juga bertanya: Ada yang suka menjelaskan downvote? Saya menghargai setiap dan semua umpan balik yang ingin Anda berikan.
caird coinheringaahing
2
@ Kaldo Kami tidak yakin. Quine harus minimal dua byte, tetapi jika output program kosong Hello, World!, maka itu 19 byte. Tetapi jika perilaku program kosong berubah, bergantung pada input, itu mungkin dapat dikurangi
caird coinheringaahing
1
@WeijunZhou "Tolong jangan menjawab tantangan PPCG yang ada menggunakan bahasa ini, setidaknya sampai tantangan selesai"
caird coinheringaahing
1
Konstruksi sintaks @ LyricLy (seperti forloop) diizinkan, dan didorong untuk ditambahkan
caird coinheringaahing

Jawaban:

3

3. Nilai: 2938 2583 2532 (-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)

#"Hello, World!"a

5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 95 byte (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya juga - 1884 byte (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Panggang sepotong Pi - 149 byte (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Golf Anda quine untuk kebaikan! - 23 byte (-39)

$"R34RdR36Ra"R34RdR36Ra

Fitur Bahasa yang ditambahkan

  • a

    • Semua: Cetak seluruh model sebagai teks, mis. #"Hello, World!"aCetakHello, World!
  • d

    • Stack / Deque: Dorong tumpukan di atas sendiri.
Lirik
sumber
8

2. Nilai: 2938 2583

Penerjemah yang dimodifikasi ada di sini di TIO .

String literal adalah tambahan bahasa yang paling jelas, terutama untuk memerangi tantangan .

Solusi

1. "Halo, Dunia!" - 20 byte (-28)

#"Hello, World!"[o>]

Setiap tantangan dapat diselesaikan menggunakan struktur #"<string>"[o>]yang menampilkan string yang diberikan hingga 0 setelah string tercapai.

2. 1, 2, Fizz, 4, Buzz - 419 64 bytes (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Terima kasih kepada @ user202729 untuk bermain golf yang luar biasa ini.

3. Hasilkan nomor 2014 tanpa angka dalam kode sumber Anda - 9 byte (-4)

#"ĒĎ"[O>]

Menggunakan dua karakter 20 dan 14 di Bugle codepoints.

4. Halo Hello World - 19 byte (-153)

#"Ifmmp!Xpsme"[-o>]

Memenuhi aturan # 1 (no HLWDhlwd) dan # 3 (no 27).

5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 98 byte (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya - 1887 byte (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Panggang sepotong Pi - 149 byte (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Golf Anda quine untuk kebaikan! - 62 byte (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Fitur Bahasa yang ditambahkan

  • "...": String literal.
    • Stack / Deque: Dorong Bugepoints dari masing-masing char ke atas / depan stack / deque.
    • Tape / Grid: Tulis titik-titik codle Bugle masing-masing char ke tape / grid ke kanan, mulai dari sel saat ini. Tidak memindahkan kursor.
    • \n ditangani seperti karakter lainnya.
    • Tidak ada karakter yang lolos untuk saat ini, jadi Anda tidak dapat menulis "(34) ke memori menggunakan perintah ini. Ini bukan masalah yang terlalu besar, setidaknya untuk saat ini, karena semua tantangan 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.

Bubbler
sumber
Ada jenis tambahan yang saya harap orang lain lakukan, bukan hanya menambahkan builtin untuk tantangan spesifik. +1
caird coinheringaahing
@ user202729 Mungkin saya yang memperkenalkan bug; terima kasih telah memperbaikinya dan solusi FizzBuzz.
Bubbler
3

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 -ubendera baris perintah, tetapi skor dihitung seolah-olah dikodekan dengan halaman kode Bugle.

1. "Halo, Dunia!" - 48 byte

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Cukup tekan lalu keluarkan kode karakter masing-masing karakter dalam string.

2. 1, 2, Fizz, 4, Buzz - 1396 byte

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Teknik yang sama seperti Hello, World! contoh

3. Hasilkan nomor 2014 tanpa angka dalam kode sumber Anda - 13 byte

#++O--O+O+++O

#menggunakan rekaman itu, +menambah sel, Ooutput sebagai bilangan bulat dan -penurunan

4. Hello World yang dikaburkan - 172 byte

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Menggunakan kesamaan yang melekat dengan brainfuck. Memenuhi aturan # 1 dan # 3

5. Nyanyikan Selamat Ulang Tahun ke bahasa pemrograman favorit Anda - 328 byte

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Semua tantangan memiliki struktur seperti ini, saat ini.

6. Kami tidak asing dengan kode golf, Anda tahu aturannya, dan saya - 6893 byte

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Keluarkan tanda - 18 byte

$?:Zs0=0s-s:1s-++O

Cek apakah input lebih besar dari nol, kurang dari nol (diubah untuk menghasilkan -1bukan 1) dan sama dengan nol, sebelum mengambil jumlah mereka.

8. Dugaan Collatz (OEIS A006577) - 36 byte

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Ini melakukan perulangan pada tumpukan, tetapi beralih ke pita untuk menambah jumlah setiap iterasi.

9. Array Tantangan # 1: Array Bergantian - 35 byte

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Ini adalah sedikit modifikasi dari jawaban Mitch Schwartz untuk tantangan yang ada, lanjutkan itu!

10. Apakah saya array yang tidak signifikan? - 46 byte

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Semua kredit diberikan kepada Emigna karena membuat ini

11. Apakah nomor ini prima? - 31 byte

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Menggunakan Teorema Wilson dan menghitung (n-1)!² % n

12. Saya seorang palindrome. Apakah kamu? - 13 byte

$?:R=:O:=R:?$

Paruh pertama program, hingga O, mengatur tumpukan sebagai di [x, x]mana xada Trueatau False. Omuncul 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

$?:[?:];L0s[+L1s-]O

Ini dapat dibagi menjadi dua bagian: ?:[?:];dan L0s[+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

$?:[:1s-:];L1s-Z[×L1s-]O

Ini memiliki struktur yang mirip dengan program penjumlahan, tetapi alih-alih mendorong input sedikit, [:1s-:];mendorong rentang dari 1 .. nke stack, dan [×L1s-]mengambil produk.

15. Kode terpendek untuk menghasilkan keluaran tanpa batas - 5 byte

#+[O]

Gunakan loop sementara, dengan 1terus - menerus di bawah penunjuk. Output 1selamanya.

16. Panggang sepotong Pi - 439 byte

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Temukan nomor terkecil yang tidak membagi N

$?:1:[:rs%0=s1+srr:Rs]1s-O

Ini menggunakan pembagian percobaan, berakhir ketika hasil dari modulo tidak sama 0.

18. Apakah ini genap atau ganjil? - 5 byte

$2?%O

Modulo sederhana oleh 2

19. Keluaran dengan panjang yang sama dengan kode - 16 byte

$16:[32+:o33s-:]

Mengembalikan 16 karakter ASCII yang dapat dicetak secara terbalik: 0/.-,+*)('&%$#"!

20. Golf Anda quine untuk kebaikan!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Kredit diberikan kepada pengguna202729 untuk pembuatan ini


Spesifikasi bahasa

Panggilan

bugle.pysaat ini mengambil serangkaian flag, kemudian nama file / kode yang akan dieksekusi. Sampai sekarang, ia memiliki 4 flag baris perintah:

  • -fSaya --filemenetapkan bahwa kode harus dibaca dari file
  • -c/ --cmd/ --cmdlineMenentukan kode yang disediakan melalui baris perintah.

    -cdan -ftidak dapat digunakan dalam panggilan yang sama

  • -uSaya --unicodememberi tahu penerjemah untuk membaca kode dengan penyandian Unicode. Standarnya adalah menggunakan pengodean Bugle di bawah ini

  • -l/ --lengthoutput panjang file, dalam bytes, ke STDERR setelah eksekusi

Panggilan berikut digunakan untuk menguji pengiriman di atas

$ python bugle.py -f -u [file]

Halaman kode

Bugle menggunakan 512 karakter di halaman kode-nya. The 0xFFkarakter 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:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

Atau melihatnya dalam format tabel . Perhatikan bahwa \tdan \nmasing-masing mewakili tab dan baris baru. Perhatikan juga bahwa baris ke-16 berakhir dengan karakter yang tidak 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:

  • Stack ( $): tumpukan standar, yang mendukung nilai yang didorong, muncul, dll.
  • Pita tak terbatas ( #): Pita, à la brainfuck, yang awalnya hanya 0s.
  • Jaringan tak terbatas ( G): Sebuah grid 2d, tak terbatas di kedua arah, yang hanya berisi 0s
  • Deque ( D): Aqueque , seperti yang diterapkan oleh collectionsmodul.
  • Daftar ( 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:

  • Tape ( À): Mengambil dua nilai - size ( int) dan wrapping ( bool)
  • Tape ( Á): Mengambil satu nilai - size ( int). Membungkus di ujung rekaman itu
  • Tape ( Â): Mengambil satu nilai - size ( int). Tidak terbungkus pada akhirnya
  • Kisi ( Ǵ): 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 mengakses ntipe 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 logis

Fungsi 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:

  • +

    • Stack / Deque: Tambahkan dua nilai teratas
    • Tape / Grid: Meningkatkan sel saat ini
  • -

    • Stack / Deque: Kurangi dua nilai teratas
    • Tape / Grid: Mengurangi sel saat ini
  • %

    • Stack / Deque: Modulo dua nilai teratas
  • :

    • Stack / Deque: Gandakan nilai teratas
  • ;

    • Stack / Deque: Pop nilai teratas
    • Tape / Grid: Nol sel sekarang
  • <

    • Tape / Grid: Pindahkan satu sel ke kiri
  • =

    • Stack: Apakah dua nilai teratas sama?
    • Kisi: Turun satu sel ke bawah
  • >

    • Tape / Grid: Pindahkan satu sel ke kanan
  • ?

    • Stack / Deque: Mengevaluasi jalur input
    • Tape / Grid: Ambil karakter input
  • L

    • Stack / Deque: Dorong panjang tumpukan / deque
  • O

    • Semua: Keluarkan nilai saat ini
  • R

    • Stack: Balikkan elemen atas jika memungkinkan, jika tidak balikkan tumpukan
  • Z

    • Stack: Elemen teratas adalah positif?
  • ^

    • Kisi: Naik satu sel
  • h

    • Semua: Cetak model memori penuh
  • o

    • Semua: Cetak nilai saat ini sebagai karakter
  • r

    • Stack: Putar 3 nilai teratas
    • Deque: Putar waktu deque n, di mana nadalah nilai teratas
  • s

    • Stack / Deque: Tukar dua nilai teratas
    • Stack: Percikan nilai teratas
  • ×

    • Stack: Kalikan dua nilai teratas
    • Kisi: Tulis nilai penunjuk ke sel saat ini
  • ÷

    • Stack: Membagi dua nilai teratas
    • Kisi: Tulis sel saat ini ke nilai pointer
caird coinheringaahing
sumber