Tujuannya adalah untuk menulis program yang mengkodekan program lain (input) dengan karakter sesedikit mungkin.
Mencetak gol
- Skor sama dengan jumlah karakter yang dibutuhkan untuk output.
- Skor yang lebih rendah lebih baik.
Aturan
- Tidak ada bahasa target dengan serangkaian perintah terbatas. (Tanpa Brainf ** k, Spasi dll.)
Edit : Maksud saya setidaknya 26 karakter signifikan,A
tidak mengubah cara program Brainf ** k beroperasi, jadi Anda tidak dapat menghitung karakter ini. Hal yang sama berlaku untuk spasi putih. - Bahasa target harus ada pada saat pertanyaan ini ditulis.
- Anda harus memasukkan sedikit penjelasan bagaimana Anda mengarsip skor Anda.
- Program input valid.
- Program yang disandikan harus merupakan program yang valid dalam bahasa yang sama dengan input.
- Program yang disandikan harus melakukan pekerjaan yang sama dengan program aslinya.
- Encoder Anda harus bekerja untuk setiap program yang valid dalam bahasa itu.
- Sertakan beberapa sampel input dan output.
Catatan
- Encoder dapat ditulis dalam bahasa apa pun, tidak hanya dalam bahasa yang ditargetkan.
- Ini bukan kode-golf , program yang mudah dibaca dianjurkan.
- Tujuan besarnya adalah untuk melihat berapa banyak karakter berbeda yang diperlukan untuk menulis apa pun dalam bahasa itu. Saya melarang BF dll karena tidak akan ada tantangan.
- Ini terinspirasi oleh Mencetak string dalam karakter yang sesedikit mungkin , Anda bisa menganggapnya sebagai metagolf untuk pertanyaan itu.
Contoh
Di Jawa, Anda bisa menggunakan \uXXXX
karakter lain sebagai gantinya. Entri yang valid mengkodekan setiap karakter dari input dengan cara ini. Ini akan memiliki skor 18. ( \ 0-9a-f
)
Kode dalam Tcl, mengkodekan program Java:
set res {}
foreach char [split [read stdin] {}] {
append res [format \\u%04x [scan $char %c]]
}
puts $res
atomic-code-golf
generation
metagolf
Johannes Kuhn
sumber
sumber
gets
membaca satu baris input saja? Dan Anda melewatkanu
encoder Anda (tetapi di sisi lain Anda tidak membutuhkan ruang dan skornya tetap sama).Jawaban:
GolfScript / GolfScript, skor 4
Encoder itu sendiri adalah program GolfScript yang mengambil kode asli pada STDIN dan mengubahnya menjadi urutan karakter
',+~
. Output ini sendiri adalah kode GolfScript yang valid yang melakukan operasi yang sama dengan versi aslinya.Metode dasar terdiri dari pengkodean kode sebagai string (menggunakan karakter
',+
, lihat di bawah) dan kemudian mengevaluasi string ini menggunakan perintah eval~
.Jika seseorang menggabungkan string apa pun bersama-sama dengan array angka dalam GolfScript angka-angka tersebut dikonversi ke titik kode dan hasilnya adalah string itu sendiri. Dengan demikian pengkodean string hanya membangun daftar angka (dari titik kode dari kode input) dan kemudian menyatukan semua itu dengan string kosong.
Contoh:
Kode input
diterjemahkan ke dalam (catatan: jeda baris dan komentar ditambahkan untuk dibaca)
sumber
Python -> Python, 8 karakter berbeda
Ini menggunakan pemformatan modulo untuk membangun kembali string input. Misalnya,
print 1
hasil dalam program ini:Secara teori Anda dapat menyandikan program apa pun seperti ini, tetapi program yang dihasilkan akan selalu memiliki lebih dari 2 n karakter, di mana n adalah jumlah karakter dalam input, tidak termasuk
%
simbol.sumber
2**n+3*n-1 + 6
karakter, termasuk semua karakter input (jika Anda menganggap setiap karakter adalah byte NUL). Ini diambil dari OEIS A132074 , ditambah 6 untukexec''
. Jika Anda menganggap karakter harus dapat dicetak ASCII, maka batas bawah lebih tinggi. repl.it/EHENCJam -> CJam, skor: 3
CJam lebih baru dari pertanyaan sehingga tidak memenuhi syarat untuk menang.
Itu menggunakan
')~
.')
adalah karakter)
, dan masing-masing)
menambahnya satu per satu.~
dapat mengevaluasi karakter atau string. Program lengkap dievaluasi setelah menggabungkan semua karakter dengan mengevaluasi+
. Dan integer dari nilai karakter dan operasi angka-ke-karakter dievaluasi untuk setiap karakter kurang dari)
.Contohnya
diterjemahkan ke dalam:
dan
diterjemahkan ke dalam:
sumber
APL (skor: 10)
Karakter yang digunakan dalam penyandian:
⍎⎕AV[(⍴⍬)]
Program APL untuk menyandikan harus membatasi dirinya sendiri ke rangkaian aplikasi APL dan tidak menggunakan Unicode tambahan.
Pengkodean untuk program
42
(yang menghasilkan jawaban untuk Life, the Universe, and Everything):Cara kerjanya:
⍬
adalah daftar kosong,⍬⍬⍬⍬
oleh karena itu daftar empat daftar kosong,⍴⍬⍬⍬⍬
adalah panjang daftar empat daftar kosong, yaitu empat. Dyadic⍴
adalah membentuk kembali, sehingga instruksi panjang daftar harus dibungkus dalam tanda kurung, memberikan pengkodean akhir karakter nomor empat sebagai(⍴⍬⍬⍬⍬)
.Angka-angka ini kemudian dicari di
⎕AV
mana set karakter, dan⍎
mengeksekusi string yang dihasilkan.(Pada pandangan pertama sepertinya skor bisa dibawa ke 9 dengan menggunakan
⎕UCS
alih-alih⎕AV
dan menabung[]
, tetapi itu tidak berhasil, karena(⍴⍬)(⍴⍬)
merupakan daftar daftar skalar, yaitu[[1], [1]]
alih-alih[1, 1]
yang akan diperlukan, dan mengatasinya akan membutuhkan interspersing nilai-nilai yang dikodekan dengan koma, membawa skor kembali ke 10.)sumber
RProgN , 7 Karakter Berbeda, Tidak Bersaing
RProgN lebih baru dari pertanyaan ini.
' do.Lc
Konversikan program ke
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, di mana masing-masing 'oo ...' mewakili kode karakter di dalam, dikelilingi oleh kemurtadan untuk membuat string dari mereka. Lc kemudian mengubahnya menjadi konstanta angka. Setelah semua string ditempatkan pada stack, rantai .'s sama dengan jumlah karakter dalam string yang dikodekan dikurangi satu membangun kembali string yang dikodekan, dan lakukan mengeksekusinya.Encoder, juga ditulis dalam RProgN.
Cobalah online!
sumber
Ruby -> Ruby, 8
Sampel:
Menerapkan solusi Ruby yang diberikan dalam masalah yang ditautkan dan menggantikan I / O dengan eval.
sumber