Teman Anda mencoba masuk ke lemari besi yang memiliki sistem penguncian khusus: itu membutuhkan sejumlah ketukan lembut di tempat tertentu. Teman Anda menemukan nomornya (yang berada dalam kisaran 1 ... 99999) dan memiliki gadget yang menghasilkan ketukan yang diperlukan. Namun, gadget tersebut adalah penerjemah Brainfuck! Jadi teman Anda perlu memberinya program Brainfuck, yang, tentu saja, harus sesingkat mungkin (I / O gadget lambat).
Tugas Anda adalah membantunya! Tulis sebuah program atau subrutin, dalam bahasa apa pun, yang menerima sebagai input nomor N
, dan mengeluarkan program Brainfuck, yang tidak mengambil input dan menghasilkan string karakter ASCII yang dapat dicetak (tidak termasuk karakter spasi - kode dalam kisaran 33 ... 126) panjangnya N
.
Contoh: untuk input 10
, output mungkin
+++++++++++++++++++++++++++++++++..........
(tapi saya yakin ini bisa dipersingkat!)
Skor Anda akan menjadi jumlah panjang output Anda untuk nilai-nilai berikut N
(mereka adalah angka acak):
55
68
15
28
841
838
522
846
4898
9004
9363
3810
13230
67175
37231
44701
Oh, dan Anda akan mengirimkan kode Anda (program generator) kepada teman Anda melalui Twitter. Jadi pastikan 140 karakter atau kurang!
PS Bahasa Brainfuck memiliki banyak varian. Mari kita asumsikan rekaman itu tak terbatas di kedua arah (atau "lingkaran dan cukup besar"), dan sel-sel memiliki kapasitas int 32-bit (terbatas dan mampu menyimpan angka hingga 99999). Juga, tanpa pembungkus: ketika sebuah sel meluap, mesin itu hancur sendiri!
Jawaban:
Python 2, skor: 1021
Saya baru menyadari bahwa kontes ini sudah sangat tua tetapi masih, karena saya datang dengan solusi yang lebih baik daripada yang diposting, saya mempostingnya juga.
Berikut ini adalah skrip python 102 byte yang berfungsi:
Idenya adalah untuk menggunakan basis 5 pengkodean untuk N (basis terbaik setidaknya untuk input saat ini, yang tampaknya tidak "acak" dengan cara, sepertinya mereka secara sewenang-wenang dipilih oleh OP), dan untuk menulis algoritma Brainfuck generik untuk decode sejumlah panjang arbitrer (nomor dikodekan dengan setiap digit bertambah satu untuk mendeteksi akhir konversi). Saya memilih untuk mencetak karakter 35
#
, karakter 36$
adalah setara.Anda dapat menjalankan skrip bash berikut untuk mendapatkan skor:
Dengan program yang lebih maju yang menggantikan pengkodean dengan perkalian untuk angka kecil dan memilih basis terbaik untuk pengkodean setiap angka, saya dapat mencapai 958 karakter Brainfuck, tetapi Python terlalu bertele-tele (dan saya pegolf yang sangat buruk) untuk mendapatkan konverter menjadi 144 byte!
sumber
BrainF ***, skor: 193,313
Itu tidak di bawah 140 karakter (ini 147, sangat dekat !!), jadi ini tidak bisa menang, tapi saya pikir itu keren.
Mencetak 43 tanda plus, lalu tanda
N
titik. Tidak terlalu optimal.Kalau ada yang bisa membantu mempersingkat ini saya akan menyukainya.
sumber
J, Total skor = 1481
(Untuk entri saya sebelumnya dan penjelasan periksa riwayat revisi.)
Fungsi ini menghasilkan loop BF bersarang berdasarkan pada basis10 digit nomor input. Memeriksa semua basis yang masuk akal dan memilih kode BF terkecil akan meningkatkan skor dengan jumlah kecil.
Program BF untuk set tes:
Komputasi skor pada set tes:
sumber
Pyth, 1702
Merekonstruksi angka menggunakan faktor N + x.
sumber
2
output ini++
. sekarang yang tidak mencetak apa pun di BF.CJam,
5274108 byte, total =130412441210Skrip uji (lambat dalam juru bahasa online):
sumber
Befunge-98, N + 41, total = 193281
Saya tahu itu buruk, tapi saya merasa ingin menulis Befunge hari ini. Bagian terbaik dari Befunge adalah bahwa program-programnya bahkan kurang dimengerti daripada bahasa golf yang sebenarnya, terutama ketika mereka menggunakan kembali kode: D
Menggunakan algoritme yang mirip dengan jawaban CJam Martin Büttner :
sumber
CJam, 40 + N, Total: 193265
Untuk memulai ini, inilah solusi dasarnya. Ini menghasilkan kode berikut:
di mana
_
adalahN
salinan+
.Jalankan generator di sini.
sumber
Befunge-93 - 24 + N, total = 193009
Ini menggunakan awalan
+++[>++++[>++++<-]<-]>>
untuk mengatur indeks rekaman pertama ke '0' dengan 24 karakter. Program Befunge sangat mendasar dan menghasilkan itu bersama dengan N '.' karakter.sumber