Saya memiliki program yang menghasilkan kode Brainfuck yang diformat. Saya menjalankan program saya
./example "S"
dan hasilnya
+[>+
<
+++
]
>--.
yang mencetak S di Brainfuck.
Tujuan Anda adalah menulis program yang menerima string sebagai input dan menampilkan kode sumber dalam bahasa lain yang mencetak string itu.
- Kode sumber keluaran program Anda harus diformat sedemikian rupa sehingga mewakili string dalam seni ASCII (dicetak secara horizontal, bukan vertikal).
- Kode sumber tidak dapat berisi string (mungkin, bagaimanapun, mengandung huruf yang muncul dalam string, hanya saja tidak berurutan)
Jika tidak,
- Celah standar berlaku.
- Kode terpendek menang.
Silakan beri judul kiriman Anda dengan bahasa yang ditulisnya, bahasa yang digunakannya, dan ukuran total dalam byte. Harap sertakan output program Anda ketika Anda memasukkan string UNCOPYRIGHTABLE.
Terima kasih!
Jawaban:
C -> Brainfuck 556 Bytes
Tidak termasuk spasi putih yang tidak perlu. Saya dapat dengan mudah menyimpan seratus lainnya dengan mengubah data font
d[]
dari hex menjadi string dalam tanda kutip.Ini menggunakan font kalkulator (untuk entropi rendah, hanya satu byte per huruf) dan kompiler Brainfuck yang sangat naif yang terinspirasi oleh https://codegolf.stackexchange.com/a/35801/15599 (kecuali saya menggunakan plus bukannya minus.) The
for
loop pertama mengkompilasi teksa
menjadi stringb
, dan juga menghitung jumlah pukulan yang diperlukan untuk menggambar kode yang diformat, menggunakan angka ajaib hex 13-digit (semua karakter 5-8 stroke.)Dengan total panjang program dan jumlah goresan, jumlah karakter per goresan dihitung (ini bisa sangat kecil jika karakternya sama atau dalam urutan naik, dan sangat besar jika karakter dalam urutan menurun.)
Sebagian besar dari sisa program ini didedikasikan untuk memutuskan apakah spasi putih atau salah satu pukulan perlu dicetak. Jika kursor berada di atas stroke stroke, fungsinya
f
disebut dengan jumlah stroke itu sebagai argumen. Ini mengembalikan spasi jika stroke itu tidak diperlukan untuk huruf saat ini, atau karakter dari program jika itu. Karena jumlah karakter yang diperlukan untuk menyelesaikan seni ASCII mungkin lebih dari karakter dalam program, kadang-kadang spasi dimasukkan, maka perhitunganb[i * v/u]
.Ada empat coretan tunggal dan empat coretan ganda dalam font, diberi nomor sebagai berikut, yang ada atau tidak ada, tergantung pada hurufnya.
Keluaran
Tes di http://copy.sh/brainfuck/
ABC
DEF
GHIJK
LMNOP
QRSTU
VWXYZ
COPYABLE
dengan sebagian besar string dengan huruf dalam urutan acak (tidak naik) ukuran huruf jauh lebih besar, dan huruf-hurufnya terlihat jauh lebih baik. Sayangnya ukuran file menjadi cukup besar. Saya tidak dapat mengunggah kata lengkap UCOPYRIGHTABLE di sini, COPYABLE adalah kata terlama yang diizinkan.
sumber
Perl → Befunge, 868 byte
OK, saya akan membuat bola bergulir. Ini bisa diturunkan sedikit lebih, tapi kepalaku mulai sakit ...
Contoh:
Contoh-contoh yang lebih pendek dapat disalin-tempel ke penerjemah online seperti ini , tetapi UNCOPYRIGHTABLE tampaknya menghasilkan program yang terlalu panjang untuk ditangani oleh penerjemah online.
catatan:
The
@
karakter di akhir baris pertama output memberitahu Befunge berhenti berjalan. Tanpa itu, program akan terus mengulangi kata yang sama selamanya.sumber
C → Brainfuck, 855 byte
Beberapa baris baru ditambahkan untuk meningkatkan keterbacaan. Perhatikan bahwa segfault pada huruf kecil dan simbol. Uji hasilnya di sini .
Contohnya
Itu terlihat jauh lebih bagus di terminal :(
Dan akhirnya,
sumber