Peringatan: Tantangan ini berisi beberapa spoiler ringan untuk The Secret of Monkey Island.
Menjelang akhir pertandingan, Anda dipimpin melalui katakombe oleh kepala navigator yang dilindungi secara ajaib:
Anda membutuhkan kalung bola matanya, tetapi Kepala enggan memberikannya kepada Anda. Salah satu cara untuk mendapatkannya adalah dengan terus mengemis:
Guybrush: Boleh saya minta kalung itu?
Kepala: Tidak, tapi terima kasih sudah bertanya dengan sopan.
Guybrush: Oh ayolah, tolong?
Kepala: Anda bisa memohon semua yang Anda inginkan, tetapi Anda tidak bisa memilikinya.
Guybrush: Cukup cantik?
Kepala: Anda bisa memohon semua yang Anda inginkan, tetapi Anda tidak bisa memilikinya.
Guybrush: Cukup CUKUP?
Kepala: Anda bisa memohon semua yang Anda inginkan, tetapi Anda tidak bisa memilikinya.
Guybrush: Cukup tolong dengan gula di atasnya?
Kepala: Oh, baiklah, kamu bayi yang besar. Kamu dapat memilikinya. Hei, apa gunanya kalung jika kau tidak punya bahu?
Tantangan
Tulis program lengkap yang mencetak dialog di atas. Tangkapannya adalah bahwa setiap kali program dipanggil hanya akan mencetak dua baris (satu permintaan oleh Guybrush dan respons Head). Misalnya jika kiriman Anda ditulis dengan Python, penggunaan akan terlihat seperti ini:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
Menjalankan program lebih dari 5 kali dapat mengakibatkan perilaku yang tidak terdefinisi, sehingga Anda bisa mengulang, tetap mencetak dua baris terakhir atau bahkan program dapat rusak setelah doa kelima.
Anda dapat menulis ke file di direktori kerja, atau Anda dapat memodifikasi kode sumber program itu sendiri untuk melacak doa. Dalam kasus terakhir, program Anda tidak boleh bergantung pada nama filenya sendiri. (Dalam kasus sebelumnya, Anda dapat mengasumsikan bahwa nama file program Anda tidak akan berbenturan dengan nama file yang tergantung pada program Anda.)
Anda tidak boleh menganggap lingkungan seperti REPL atau bahwa data disimpan dalam RAM di antara doa. Misalnya, jika Anda menjawab dalam Mathematica, Anda harus berasumsi bahwa saya keluar dari kernel di antara permintaan.
Ini adalah kode golf, jawaban terpendek (dalam byte) menang. Jika program Anda bergantung pada file tambahan yang ada sebelum doa pertama , tambahkan nama dan kontennya ke jumlah byte Anda.
sumber
node please.js
menghasilkan 5 output yang berbeda.Jawaban:
Python, 224 + 97 + 1 = 322 karakter
Solusi paling mudah untuk memulai kita semua. Terima kasih kepada gnibbler karena membantu saya mengurangi 18 byte!
Memerlukan file
z
untuk berada di direktori yang sama (+1 untuk nama file, +224 untuk ukuran file):Anda dapat menghasilkan
z
dengan yang berikut:Keluaran:
sumber
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
Sekarang Anda dapat membagi|
dan hanyaprint D[n]
Common Lisp (SBCL): 659 karakter
Penjelasan
format
dengannil
).Ini bukan pengajuan terpendek, tapi saya pikir ini pendekatan yang bagus untuk masalah ini.
Doa Firt
Doa selanjutnya
sumber
C # - 593 + 1 + 1 Karakter (595)
Suntingan: Diperbarui dengan saran dari Martin dan berbagai optimisasi lainnya
+1 pertama adalah nama file. +1 kedua adalah isi file itu. Tanpa semua spasi dan pemisah baris dihapus sehingga Anda dapat membacanya:
Penjelasan
Mengandalkan file teks yang disebut "x" untuk hadir dalam direktori. Seharusnya awalnya mengandung nol dan digunakan untuk menyimpan kemajuan.
Program memetik elemen yang relevan dari array string sesuai dengan progres dan menulis progres di akhir. Beberapa baris digunakan kembali untuk mempersingkat panjang, maka logika pemilihan indeks
h+b[(a+5)/6*2+1]
untuk pemilihan jawaban.Keluaran
Golf kode pertama saya, mungkin bukan yang sesingkat mungkin di C # tapi hei - Monkey Island, tidak bisa menolak!
Kode yang dilucuti:
sumber
a<1?1:a<8?3:9
, jika C # mendukung bilangan bulat yang benar, maka jugaa?a<8?3:9:1
. Tetapi Anda bahkan mungkin dapat menggunakan pembagian integer dan lakukan(a+5)/6*2
dan pindahkan string terakhir dari kepala untuk mengganti yang kosong pertama (indeks 5). Dan coba hal-hal sepertiusing s=System.String;
. (Oh dan Anda mungkin bisa menghilangkan namespace, atau bahkan menggunakan namespaceSystem
untuk menghindariSystem
semua menggunakan.)JS,
488473Refreshing 5 kali halaman yang berisi kode ini menampilkan 5 dialog berbeda.
Demo:
http://c99.nl/f/212197.html
sumber
Perl - 356 byte
Pendekatan modifikasi diri, dengan penggantian untuk string umum.
Penggunaan sampel:
sumber