Ketika Anda menjalankan program Anda terlebih dahulu, itu harus mencetak urutan bilangan bulat. Jalankan kedua harus mencetak lagu 'Mary memiliki domba kecil'. Jalankan ketiga harus menghasilkan file gambar ASCII.
Mencetak gol
Skor Anda akan menjadi jumlah byte kode Anda dan konten file apa pun pada awal masing-masing 3 berjalan. Skor terendah menang.
Sebagai contoh, myprog
adalah 1500 byte dan tidak mengubah ukurannya, tetapi menulis file 4 byte setiap kali dijalankan sehingga ia tahu apa yang harus dilakukan pada proses berikutnya. Skornya adalah 1500 + (1500 + 4) + (1500 + 4) = 4508.
Keluaran
Output pertama adalah urutan 133 bilangan bulat ini, dipisahkan oleh spasi tunggal:
0 89 98 179 188 197 269 278 287 296 359 368 377 386 395 449 458 467 476 485
494 539 548 557 566 575 584 593 629 638 647 656 665 674 683 692 719 728
737 746 755 764 773 782 791 809 818 827 836 845 854 863 872 881 890 908
917 926 935 944 953 962 971 980 1079 1088 1097 1169 1178 1187 1196 1259
1268 1277 1286 1295 1349 1358 1367 1376 1385 1394 1439 1448 1457 1466 1475
1484 1493 1529 1538 1547 1556 1565 1574 1583 1592 1619 1628 1637 1646 1655
1664 1673 1682 1691 1709 1718 1727 1736 1745 1754 1763 1772 1781 1790 1808
1817 1826 1835 1844 1853 1862 1871 1880 1907 1916 1925 1934 1943 1952 1961
1970
Output kedua adalah teks ini persis (termasuk huruf besar, tanda baca, dan spasi putih - tanda baca yang tidak konsisten disengaja):
Mary had a little lamb,
Little lamb, little lamb,
Mary had a little lamb,
Its fleece was white as snow
And everywhere that Mary went,
Mary went, Mary went,
Everywhere that Mary went
The lamb was sure to go
It followed her to school one day
School one day, school one day
It followed her to school one day
Which was against the rules.
It made the children laugh and play,
Laugh and play, laugh and play,
It made the children laugh and play
To see a lamb at school
Output ketiga adalah gambar ini dalam format PPM ASCII (P3) yang tersisa di file bernama
blue.ppm
. Ini adalah gambar dalam format PNG:
File PPM akan terlihat seperti ini:
P3 50 50 255
255 255 255 255 255 255 255 255 255 255 255 255 ...
...
255 255 255
Ada salinan file PPM lengkap di sini .
Contoh jalankan (di Linux)
# ls
myprog
# interpreter myprog
0 89 98 179 188 197 269 278 287 296 359 ...
# interpreter myprog
Mary had a little lamb,
Little ...
# interpreter myprog
# ls
blue.ppm
myprog
# cat blue.ppm
P3 50 50 255
255 255 255 255 255 ...
Aturan
- Kode Anda dapat dimodifikasi sendiri.
- Menjalankan program untuk keempat kalinya adalah perilaku yang tidak terdefinisi.
- Anda dapat menulis ke file di direktori saat ini, tetapi ukuran file ini akan menambah skor Anda di awal setiap proses. File PPM terakhir dikecualikan dari ini.
- Dua output pertama adalah stdout (atau serupa). Output terakhir ditulis ke file, dengan tidak ada yang dikirim ke stdout.
- Dua output pertama secara opsional dapat memiliki karakter spasi putih tambahan (mis. Spasi atau umpan baris).
- Anda tidak boleh menggunakan pustaka kompresi atau gambar. Anda dapat menggunakan fungsi kompresi atau gambar Anda sendiri tetapi kode ini harus disertakan dalam program Anda.
- Celah standar dilarang.
sumber
Jawaban:
Python (897 + 814 + 386 = 2097)
Jawaban modifikasi diri yang sederhana. Saya harus memperbaiki run kedua nanti.
Selain itu, jika dijalankan untuk keempat kalinya, itu akan menurun dengan aman ke NOP:
sumber
Ruby,
13561268 * 3 = 3804 byteUntuk melacak permohonan, saya membuat file kosong
a
pada putaran pertama dan file kosongb
pada putaran kedua.sumber
i.to_s.chars.map(&:to_i).reduce(:+)
dengan(j=i.to_s).sum-48*j.size
Python 3, 1027 + 1028 + 1029 = 3084
Menggunakan OEIS A166370 untuk angka-angka, beberapa kompresi tulisan tangan untuk Mary's Lamb dan ASCII byte untuk menyimpan jumlah angka dalam PPM.
(Ab) menggunakan fitur Python untuk hanya mengevaluasi nilai kedua untuk operator logis jika hasilnya belum diketahui (korsleting):
1 or code
dan0 and code
tidak mengevaluasicode
. Kemudian menggunakan beberapa pengganti untuk mengubah0 or
eksekusi kode yang memungkinkan untuk0 and
dan berikutnya1 or
untuk0 or
.Eksekusi ketiga membunuh pengganti kedua, karena tidak ada lagi
1 or
. Eksekusi ke-4 membunuh penggantian pertama, setelah itu kode pada dasarnya tidak melakukan apa pun.sumber
C ++, 1204 * 3 = 3612 byte
Kompiler yang digunakan - GCC 4.9.2 dengan
-std=c++14
flagPenjelasan -:
sumber
PHP (1552 * 3) +2 = 4658
Ada BANYAK golf yang bisa dibuat.
Kode menulis 1 byte ke file lain bernama
z
, untuk memeriksa status.Ini kodenya:
Saya tahu bahwa ini adalah kode yang SANGAT mengerikan dan saya bisa mencoba daftar golf.
Tapi hei, saya tidak dapat menemukan pola pada mereka: /
sumber
Ruby, 691 + 612 + 225 = 1528 byte
Lain jawaban memodifikasi diri, kali ini dalam ruby. Saya baru saja menabrak ini kemarin dan penekanan puisi itu menarik perhatian saya. Saya hanya bisa menghemat 92 byte dari pemikiran teks mentah.
Setiap menjalankan program menulis ulang program untuk menjalankan selanjutnya. Saya tidak mengetahui properti khusus dari angka-angka sampai melihat ke jawaban yang lain. Dan memang mengambil inspirasi yang sama dengan jawaban Martin, tetapi saya tidak menggunakan saran dari blutorange karena saya tidak tahu mengapa itu berhasil.
Mungkin ada beberapa byte lagi untuk mengais dari puisi tetapi tidak banyak. Ini pada dasarnya hanya subbing dalam urutan umum dan menggunakan urutan urutan sebagai bagian untuk mengganti.
Untuk bagian terakhir, saya mem-encode semua 255 byte ke dalam array dan menempelkannya bersama-sama dengan nol. Dan kemudian saya mengkodekan urutan berulang dalam array itu.
sumber
JavaScript + HTML, 3909 byte
Ini adalah aplikasi HTML / JavaScript yang menggunakan pemuatan ulang halaman untuk menjalankan kembali file. Saya melakukan kesalahan pada penguraian PPM. Jika Anda tahu cara membaca file PPM, beri tahu saya. Stack Exchange tidak memungkinkan penyimpanan lokal. Jadi, Anda harus menjalankan JSFiddle.
Sekali lagi, saya tahu saya mengebom file ppm.
Namun pada akhirnya:
JavaScript : 1.232 byte * 3 = 3696
HTML : 71 byte * 3 = 213
Total : 3909
JSFiddle
sumber