Tantangan: Menerapkan ROT-47 dalam kode yang berfungsi sebagai versi dirinya sendiri dan sebagai versi ROT-47 itu sendiri.
Mencetak:
Skor Anda dihitung sebagai persentase dari byte yang digunakan, ROT-47 yang memenuhi syarat dalam total kedua versi program dibagi dengan total byte (semua karakter) dari kedua versi .
SEBUAH digunakan, ROT-47 byte yang memenuhi syarat adalah karakter yang akan dikonversi oleh ROT-47 cipher yang tidak bagian dari komentar atau diabaikan oleh compiler / interpreter. Misalnya, setiap karakter dalam program brainfuck yang +-<>[],.
tidak dianggap sebagai byte yang digunakan, dan karakter apa pun dalam program C termasuk dan setelah //
atau di dalam /* */
tidak dianggap sebagai byte yang digunakan. Semua simbol khusus dalam APL tidak dianggap digunakan, seperti juga semua karakter dalam program Whitespace (maaf).
Ikatan akan dipecahkan oleh program dengan jumlah suara terbanyak. Jika masih ada seri, maka program terpendek menang.
Contoh pemberian skor:
C: 62/64 = 96,875%
Perhatikan ada ruang dalam program ini. Jelas juga, program ini bukan entri yang valid karena bahkan tidak dikompilasi, tetapi saya ingin menunjukkan bagaimana cara kerja penilaian.
main(){printf("Hello World!");}
sumber
>2:?WXLAC:?E7WQw6==@ (@C=5PQXjN
dikompilasi?Jawaban:
Ruby, 100% (74 karakter)
Input pada STDIN, output pada STDOUT.
Baris kedua adalah baris pertama ROT-47. Karena itu, ketika ROT-47 menjalankan keseluruhan program, itu menjadi:
Strategi saya di sini didasarkan pada kenyataan bahwa:
V
adalah'
ketika ROT-47j
adalah;
ketika ROT-47Oleh karena itu,
Vj=...Vj;
berubah menjadi';l...';
, yang pada dasarnya adalah no-opVj=...Vj;
dapat mendukung menjalankan kode apa pun yang dapat Anda lakukanVj=0;{INSERT ANY CODE};Vj;
, dan itu akan menjadi'...';
ketika ROT-47. Anda hanya harus berhati-hati untuk tidak menggunakanV
kode itu, karena itu akan merusaknya.Logika yang sama dapat digunakan secara terbalik untuk menghasilkan babak kedua (
jV
bukanVj
)sumber
C - 54,6%
Ketika ROT-47 diterjemahkan, kami dapat
Kedua program mengkompilasi, dan ROT-47-menerjemahkan argumen pertama:
sumber
GolfScript, 120/120 byte = 100%
atau, dalam ROT-47:
Tidak ada komentar atau penyalahgunaan string. Perintah tidak terdefinisi
LiUUbamUUZadckYLfZfZhcTbbZNYNT
(yang sama dengan sisa kode di ROT-47) adalah no-op, tetapi masih dijalankan oleh penerjemah, jadi saya percaya itu dianggap sebagai yang digunakan.Ini sebenarnya tantangan yang cukup mudah di GolfScript. Kesulitan utama adalah dalam menghindari digit
1
, yang dipetakan oleh ROT-47 ke dalam perintah GolfScript`
. Perintah.
,-
,,
,\
,[
,/
,]
dan^
juga harus dihindari, tapi itu cukup mudah dalam kasus ini, karena tugas yang diperlukan tidak ada bangunan larik.Bonus:
Berikut adalah quine GolfScript periode-2 (yaitu program yang mencetak program kedua yang mencetak program pertama lagi) di mana kedua program adalah transformasi ROT-47 satu sama lain:
Program ini mengeluarkan sendiri kode ROT-47, menghasilkan program GolfScript lain:
yang, pada gilirannya, juga mengeluarkan sendiri ROT-47 yang dikodekan, menghasilkan program sebelumnya lagi. Dengan demikian, program ini juga merupakan quine yang berputar .
sumber
A
dalam brainfuck akan dihitung dalam pembilang tetapi tidak penyebutnya. Apakah ini sama atau berbeda?LiUUbamUUZadckYLfZfZhcTbbZNYNT
adalah pengidentifikasi yang valid dalam GolfScript, dan akan dieksekusi sebagai perintah. Namun, itu bukan salah satu dari perintah bawaan, juga tidak diberi makna oleh program, jadi secara default ia tidak melakukan apa-apa.python, 96.1% (?)
Menurut definisi Anda, string dihitung sebagai kode yang digunakan?
sumber