Misalkan tantangan codegolf tidak menghitung spasi putih dalam panjang program Anda. Cheat sistem ini dengan menyandikan skrip Anda ke dalam spasi putih, dan mainkan skrip yang menerjemahkan dan mengeksekusi spasi kosong.
Contoh
Solusi saya untuk JBernardo 's Meta Golf Challenge adalah untuk encode Sage (atau Python) kode ke spasi, dan golf decoder.
s = ' '
for c in '<lots of whitespace>'.split(s):
s+=chr(len(c))
exec s
Pengkodean adalah untuk mengambil skrip, menambahkan baris baru, dan untuk setiap karakter c
dalam skrip, ord(c)
tab keluaran diikuti oleh spasi. Membebani baris baru diperlukan karena saya menggunakan Python dan saya memulai skrip s
dengan spasi.
Mencetak gol
Solusi lengkap berisi deskripsi pengkodean yang Anda gunakan (jika rumit, berikan skrip), dan skrip 'dekode-dan-jalankan'. Skor Anda adalah jumlah karakter non-spasi putih dalam skrip dekode dan eksekusi.
Spasi (bahasa) dilarang
Selain itu, bahasa apa pun yang memiliki seperangkat operator lengkap yang hanya menggunakan karakter spasi tidak diizinkan: Saya akan menerima skor bukan nol terendah.
sumber
.n/{,}%+~
akan berfungsi juga.CPAN, 16
CPAN memiliki semuanya. Atau setidaknya, modul yang tepat.
sumber
Perl, 29
Di dalamnya
s///
ada tab lalu spasi. Pengkodean adalah pengkodean ultra-dasar dengan spasi, diawali dengan tab.Coba yang ini di baris perintah:
Sunting: well, lol, saya tidak bisa menemukan cara yang tepat untuk menyalin-menempelkan campuran tab / spasi. Percayalah, ia bekerja di rumah :)Perbarui: di sana, di sana, dikodekan dengantr
sumber
\t
dan kami akan percaya itu bekerja dengan spasi ...\t
mengartikannya dengan shell dan benar-benar membuat benda sialan itu bekerja dengan baik. Melakukan itu dalam beberapa jam.JavaScript
Menggantikan
\t
dengan tab untuk mendapatkan jumlah karakter yang diposting.Standar (64 karakter)
Fungsi panah (49 karakter)
Program encoder untuk keduanya
sumber
(s)=>...
dalam fungsi panahs=>...
untuk menyimpan dua byte" t " [ 1 ]
untuk berarti "t")eval("".replace(/ +/g,s=>' []+!()'[s.length]))
Yabasic (88 karakter)
Gunakan program encoder yang sama dengan solusi C saya, tetapi jangan hapus karakter pertama. Kode asli Anda harus dalam bentuk subrutin
a()
, misalnya:sumber
C (99 karakter)
Diuji hanya dengan (dan mungkin hanya bekerja dengan) GCC.
Program encoder yang sesuai (secara manual menghapus karakter pertama dari hasilnya):
sumber
D (101 karakter)
pengkodean yang sama seperti pada pertanyaan (tidak perlu untuk baris baru)
sumber
Bash (khusus builtin, 44 karakter)
Script encoder yang sesuai:
sumber
man
bangun sedikit untuk melakukan ini.K5, 12 byte
Jalankan (
.
) string yang terbentuk dari nilai ascii (`c$
) yang diberikan oleh perbedaan antara masing-masing pasangan (-':
) dari indeks di mana (&
) inputnya adalah tab (9=" "
).Input adalah string karakter tab dan non-tab, dan nilai karakter dikodekan dalam jumlah non-tab (spasi atau baris baru) antara masing-masing tab. Encoder contoh:
Lakukan sambungan lari yang dimulai dengan spasi lebih dari (
" ",/
) x spasi (x#" "
) bergabung dengan tab (,"\t"
) di mana X adalah masing-masing ({...}'
) satu dikurangi nilai karakter dari string input (-1+
).Dalam aksi:
sumber
Ruby, 43
Sangat mudah, pengkodean menempatkan x spasi per baris, di mana x adalah nilai ascii dari char, decoding terbalik.
Script berikut ini hanya konverter unary ke ASCII dan berfungsi bahkan ketika hal-hal selain spasi gratis:
Ganti saja string kosong dengan program yang Anda sukai.
Masalahnya dalam format yang lebih dapat digunakan kembali:
sumber