Dengan menggunakan satu bahasa pemrograman, tulis 5 program single-line, yang masing-masing mengeluarkan baris berbeda dari ayat pertama dengan lagu 1972 karya Harry Nilsson " Coconut " ketika dijalankan secara terpisah:
Saudara membeli kelapa, dia membelinya untuk sepeser pun
Kakaknya memiliki satu sama lain, dia dibayar untuk kapur
Dia meletakkan kapur di kelapa, dia minum mereka berdua
Dia meletakkan kapur di kelapa, dia minum mereka berdua
Dia Taruh jeruk nipis di kelapa, dia minum mereka berdua
( lirik lengkap )
3 baris terakhir memiliki lirik yang sama, jadi 3 program terakhir Anda mungkin juga sama.
Ada 5 faktorial atau 120 cara 5 program lini-tunggal ini dapat diatur satu per baris dalam program 5-jalur tunggal. Anda harus mengoptimalkan program single-line Anda sedemikian rupa sehingga sebanyak 120 kombinasi ini mungkin program 5-line menghasilkan seluruh ayat dalam urutan yang tepat , persis seperti yang muncul di atas.
Contoh
Jawaban paling sederhana akan memiliki 5 pernyataan cetak satu baris, 3 identik terakhir:
print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
Output ke program 5-line akan menjadi ayat dalam urutan yang tepat selama dua single-liner pertama berada di tempat yang benar. Hanya 6 dari 120 kemungkinan pengaturan yang menyelesaikan ini.
Mencetak gol
Pengajuan dengan kasus yang paling berhasil dari 120 kemenangan. Tie breaker pergi ke set program dengan jumlah byte kumulatif terendah (baris baru tidak dihitung). Contoh ini memiliki 309 byte.
Detail
Program Anda mungkin tidak membaca kode sumbernya sendiri. Mereka juga tidak boleh membaca file eksternal lain atau memerlukan koneksi jaringan.
Output ke stdout atau alternatif terdekat. Anda juga dapat menampilkan ke file dengan nama pilihan Anda.
"Program baris tunggal" adalah string yang berisi karakter apa pun kecuali terminator baris (Anda mungkin hanya perlu khawatir tentang baris baru).
Saat menyusun single-liner menjadi 5-liner, Anda harus menambahkan tepat 4 baris baru, satu di antara setiap pasangan single-liner yang berdekatan. Anda secara opsional dapat menambahkan baris tambahan.
sumber
main
metode? Lalu mana yang harus dijalankan, saat menjalankan program?main
.Jawaban:
CJam, 120 permutasi yang valid,
334 299290 bytesLogika yang cukup sederhana:
UPDATE : Ternyata Anda tidak memerlukan siklus wrap-sort-unwrap setelah 3 yang serupa dan muncul di baris akhir lagu. Saya bisa menjelaskan mengapa jika tidak jelas :)
sumber
Prelude , 120 permutasi,
20452035 byteIni akhirnya meyakinkan saya bahwa Prelude dan CJam membutuhkan anak. Jika bukan karena rangkaian instruksi Prelude yang sangat terbatas, pengajuan ini sebenarnya akan sangat kompetitif, jika itu bahkan tidak mengalahkan CJam.
Ide dasarnya adalah sebagai berikut
Dalam Prelude, setiap baris adalah "suara" sendiri dengan tumpukannya sendiri, dan suara-suara ini dieksekusi secara paralel. Yaitu, dalam program lengkap, setiap baris hanya akan membuat string secara individual dan mencetaknya di akhir. Tetapi karena offset dari pernyataan cetak, urutan garis tidak menjadi masalah sama sekali untuk urutan output, karena eksekusi dibiarkan dari kiri ke kanan, bukan dari atas ke bawah.
Sekarang, mengapa garisnya begitu panjang? Prelude hanya menyimpan angka pada stack-nya. Selain itu, ini hanya dapat mendorong angka satu digit pada satu waktu, sehingga angka yang lebih besar harus dibangun dari penjumlahan dan pengurangan (tidak ada perkalian baik atau aritmatika lainnya juga). Jadi bagian terbesar dari kode hanyalah menghitung dan mendorong kode karakter yang tepat. Untuk mempersingkat ini sedikit, saya mengimbangi dengan
96
. Pada akhirnya, untuk mencetak, saya loop sampai tumpukan kosong (yaitu a0
ditemui), tambahkan 96 ke setiap nomor, dan cetak.Perhatikan bahwa string didorong mundur, karena mereka dicetak dari karakter terakhir ke karakter pertama.
Ini mengasumsikan interpreter Python dengan
NUMERIC_OUTPUT = False
(yang adalah bagaimana spec mendefinisikan I / O).Saya menggunakan kode CJam berikut untuk menghasilkan konstruksi string:
Terakhir, hanya untuk bersenang-senang, mengapa saya pikir ini akan sangat singkat jika Prelude memiliki konsep string:
Sekarang pernyataan cetak
!
sudah dalam urutan yang benar, jadi saya bahkan tidak perlu mengimbanginya. Saya pikir saya akan turun untuk mengimplementasikan ini beberapa waktu.sumber
Ruby, 120 permutasi yang valid, 430 byte
Bekerja dalam urutan apa pun, atau secara individu. Setiap baris memodifikasi keadaan global, lalu menetapkan hook untuk dieksekusi di akhir program kecuali hook telah ditetapkan.
sumber
> <> , 120 permutasi, 703 byte
Pembatasan satu-liner cukup sulit untuk bahasa 2D, jadi saya harus menemukan cara untuk memaksimalkan
.
instruksi teleportasi.Awal
<
membuat program mengalir ke kiri, membungkus dan menjalankanIni adalah serangkaian
p
instruksi (menempatkan) yang menempatkan karakter sampai papan terlihat seperti ini:Program
#.!50
membalik kemudian mengalir kembali ke kanan lagi, sebelum melompat ke baris 5. Berikut ini adalah:/
cermin pada baris 5 menemukan lirik 5, yang didorong ke tumpukan. Kami kemudian teleport ke jalur 6./
mirror pada baris 6 menemukan lirik 4, yang didorong ke tumpukan. Kami kemudian teleport ke jalur 7./
cermin pada baris 7 menemukan lirik 3 ...Ini terjadi sampai kita menekan lirik 1, di mana kita teleport ke baris 10. Ini adalah loop untuk mencetak seluruh tumpukan sampai kosong.
Jika hanya ada satu baris program, maka
\
mirror melakukan pekerjaan yang sama dengan teleport pada setiap baris lirik.Jika program ini diacak, maka penjelasan di atas masih berlaku, jadi program ini bekerja untuk semua permutasi!
sumber