モンキーアイランド:ナビゲーターの頭


12

警告:このチャレンジには、The Secret of Monkey Islandの軽度のネタバレが含まれています。

ゲームの終わりに向かって、魔法のように保存されたナビゲーターの頭がカタコンベを通り抜けます。

ここに画像の説明を入力してください

あなたはその眼球のネックレスを必要としますが、頭はあなたにそれを与えることに消極的です。それを得る一つの方法は、ただ物beいをすることです:

Guybrush:ネックレスを頂けますか?
頭:いいえ、でも丁寧に質問してくれてありがとう。
ガイブラシ:おいおいおい
頭:あなたはあなたが望むすべてを請うことができますが、あなたはそれを持つことはできません。
ガイブラシ:可愛がって
頭:あなたはあなたが望むすべてを請うことができますが、あなたはそれを持つことはできません。
ガイブラシ:プリティプリティください?
頭:あなたはあなたが望むすべてを請うことができますが、あなたはそれを持つことはできません。
Guybrush:砂糖を上に乗せてください。
頭:ああ、大丈夫、あなたは大きな赤ちゃん。きみにあげる。ねえ、肩がなければネックレスは何がいい?

チャレンジ

上記のダイアログを印刷する完全なプログラムを作成します。キャッチは、プログラムが呼び出されるたびに、2行(GuybrushとHeadの応答によって訴えられる1行)だけを印刷することです。たとえば、投稿がPythonで記述されている場合、使用方法は次のようになります。

$> 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?

プログラムを5回以上呼び出すと、未定義の動作が発生する可能性があるため、ループするか、最後の2行を出力し続けるか、5回目の呼び出し後にプログラムが壊れることもあります。

作業ディレクトリ内のファイルに書き込むことも、プログラム自体のソースコードを変更して呼び出しを追跡することもできます。後者の場合、プログラムは独自のファイル名に依存してはなりません。(前者の場合、プログラムのファイル名は、プログラムが依存するファイル名と衝突しないと仮定できます。)

REPLのような環境を想定したり、呼び出し間でデータをRAMに保持したりしないでください。たとえば、Mathematicaで答える場合、呼び出し間でカーネルを終了すると仮定する必要があります。

これはコードゴルフで、最短回答(バイト単位)が勝ちです。プログラムが、最初の呼び出しの前に存在する追加フ​​ァイルに依存している場合、その名前と内容をバイトカウントに追加します。


だから、グローバル変数に値を入れてJSで再利用することはありませんか?
オプティマイザー14

@Optimizerいいえ、ごめんなさい。このためにJSを使用する場合は、ノードを使用する必要があると思います。
マーティンエンダー14

ノードにもグローバル変数を含めることができます。ノードを終了し、ノードを終了し、ダイアログシーケンスを続行できることを提案していますか?
オプティマイザー14

@Optimizerはい。完全なプログラムを作成する必要がありますnode please.js。5つの異なる出力を生成して5 回呼び出すことができます。
マーティンエンダー14

私のプログラムは、外部ファイルに依存して開始できますか?私は自分のスコアにそのバイト数が含まれます
クラウディウ

回答:


9

Python、224 + 97 + 1 = 322文字

すべてを始める最も簡単なソリューション。18バイトを削るのを手伝ってくれたgnibblerに感謝します!

n=0
print open('z','rb').read().decode('zip').split('|')[n]
open(__file__,'r+').write("n="+`n+1`)

z同じディレクトリにファイルが存在する必要があります(ファイル名に+1、ファイルサイズに+224):

$ hexdump z
0000000 9c78 d1ad 6e3d 30c3 050c bde0 78a7 165b
0000010 0723 92c8 48a9 b43a 8209 192c 9b29 0491
0000020 a2ab 9fa1 021a f87a 715a f46c d100 1026
0000030 1efc 1e41 5172 4721 c3b3 1527 607c 4c70
0000040 6191 87e8 0c91 7825 7b6e 2d47 dfef 4c8e
0000050 0edd d25f e540 8b54 8fbe 4bb8 c500 7ade
0000060 288d c418 c4d9 6cae 0f7f 7bab 6832 9be5
0000070 be21 7aa9 537d c2c2 24dd 25a3 c50f e41a
0000080 ca1c 1ff4 a7c9 a439 d5cc 9a4d b207 3fe9
0000090 0e7c 529c 4e79 3afc 7cef bf79 6f5e 672f
00000a0 8b9f 6d1d 8832 5359 1698 2482 92c3 3270
00000b0 43cd 560e 899b a4ad 1ab2 548a aed9 0bf1
00000c0 238f 0697 bd63 168f 36e9 b411 0a1e fef6
00000d0 eee8 1d64 1a28 aec9 10e3 7ff7 3a0b d9ab
00000e0

$ ls -l z
-rw-r--r--+ 1 Laxori mkpasswd 224 2014-09-22 22:35 z

z次を使用して生成できます。

>>> open('z','wb').write("""eJyt0T1uwzAMBeC9p3hbFiMHyJKpSDq0CYIsGSmbkQSroqGfGgJ6+FpxbPQA0SYQ/B5BHnJRIUez
wycVfGBwTJFh6IeRDCV4bntHLe/fjkzdDl/SQOVUi76PuEsAxd56jSgYxNnErmx/D6t7MmjlmyG+
qXp9U8LC3SSjJQ/FGuQcyvQfyac5pMzVTZoHsuk/fA6cUnlO/DrvfHm/Xm8vZ5+LHW0yiFlTmBaC
JMOScDLNQw5Wm4mtpLIailTZrvELjyOXBmO9jxbpNhG0Hgr2/ujuZB0oGsmu4xD3fws6q9k=""".decode('base64'))

出力:

$ python monkeyisland.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$ python monkeyisland.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$ python monkeyisland.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$ python monkeyisland.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$ python monkeyisland.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?
$ python monkeyisland.py
Traceback (most recent call last):
  File "monkeyisland.py", line 2, in <module>
    print open('z','rb').read().decode('zip').split('|')[n]
IndexError: list index out of range

1
ですから、例えばあなたがしている、ラインのペアの間に別の区切り記号を使用してくださいline1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10今、あなたは上で分割することができ|、ちょうどprint D[n]
gnibbler

@gnibbler:よく見つけました!
クラウディ14

5

Common Lisp(SBCL):659文字

(defparameter *d*
  '#1=("~A May I please have that necklace?"
       "~A No, but thanks for asking so politely."
       "~A Oh come on, pleeeeease?"
       #2="~A You can beg all you want, but you can't have it."
       "~A Pretty please?"
       #2#
       "~A Pretty PRETTY please?"
       #2#
       "~A Pretty please with sugar on top?"
       "~A Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?" . #1#))
(defun d ()
  (format t (pop *d*) "Guybrush:") (terpri)
  (format t (pop *d*) "Head:") (terpri)
  (terpri)
  (finish-output)
  (sb-ext:save-lisp-and-die "please" :toplevel 'd :executable t))
(d)

説明

  • 呼び出しごとにLispイメージをダンプし、現在の状態を保存します。
  • 循環リストは、すべての行が表示された後、私は対話を再開(必須ではありませんが、少なくともそれは上にエラーはありませんしましょうformatnil)。
  • リーダーマクロを使用すると、同一の行を再利用できます。

これは最短の提出ではありませんが、私はこれが問題に対する素晴らしいアプローチだと思いました。

最初の呼び出し

 $sbcl --noinform --noprint --load please.lisp
 Guybrush: May I please have that necklace?
 Head: No, but thanks for asking so politely.

 [undoing binding stack and other enclosing state... done]
 [saving current Lisp image into please:
 writing 5856 bytes from the read-only space at 0x0x20000000
 writing 4032 bytes from the static space at 0x0x20100000
 writing 67960832 bytes from the dynamic space at 0x0x1000000000
 done]

後続の呼び出し

$./please 
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.

[undoing binding stack and other enclosing state... done]
[saving current Lisp image into please:
writing 5856 bytes from the read-only space at 0x0x20000000
writing 4032 bytes from the static space at 0x0x20100000
writing 68091904 bytes from the dynamic space at 0x0x1000000000
done]

$./please 
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.

[undoing binding stack and other enclosing state... done]
[saving current Lisp image into please:
writing 5856 bytes from the read-only space at 0x0x20000000
writing 4032 bytes from the static space at 0x0x20100000
writing 68091904 bytes from the dynamic space at 0x0x1000000000
done]

3

C#-593 + 1 + 1文字(595)

編集:Martinからの提案およびその他のさまざまな最適化で更新

最初の+1はファイル名です。2番目の+1は、そのファイルの内容です。すべてのスペースと改行を削除せずに読むことができます:

using System.IO;
using s=System.String;
class P
{
    static void Main()
    {
        s g="Guybrush: ",h="Head: ",p=" please",q="Pretty";
        s[]b=new s[]{"May I"+p+" have that necklace","No, but thanks for asking so politely.",
        "Oh come on, pleeeeease","You can beg all you want, but you can't have it.",q+p,
        "Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?",
        q+" PRETTY"+p,"",q+p+" with sugar on top"};
        int a=int.Parse(File.ReadAllText("x",System.Text.Encoding.UTF8));
        System.Console.WriteLine(g+b[a]+"?\n"+h+b[(a+5)/6*2+1]);
        File.WriteAllText("x",(a+2).ToString());
    }
}

説明

ディレクトリに存在する「x」というテキストファイルに依存します。最初はゼロを含む必要があり、進行状況を保存するために使用されます。

プログラムは、進行状況に従って文字列配列から関連する要素を取り出し、最後に進行状況を書き込みます。一部の行は長さを短縮するために再利用されたためh+b[(a+5)/6*2+1]、回答選択のインデックス選択ロジック。

出力

D:\Projects\Junk\MI\bin\Debug>MI
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.

D:\Projects\Junk\MI\bin\Debug>MI
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.

D:\Projects\Junk\MI\bin\Debug>MI
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.

D:\Projects\Junk\MI\bin\Debug>MI
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.

D:\Projects\Junk\MI\bin\Debug>MI
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?

D:\Projects\Junk\MI\bin\Debug>

私の最初のコードゴルフは、おそらくC#では最短ではありませんが、ちょっと-モンキーアイランドは抵抗できませんでした!

剥ぎ取られたコード:

using System.IO;using s=System.String;class P{static void Main(){s g="Guybrush: ",h="Head: ",p=" please",q="Pretty";s[]b=new s[]{"May I"+p+" have that necklace","No, but thanks for asking so politely.","Oh come on, pleeeeease","You can beg all you want, but you can't have it.",q+p,"Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?",q+" PRETTY"+p,"",q+p+" with sugar on top"};int a=int.Parse(File.ReadAllText("x",System.Text.Encoding.UTF8));System.Console.WriteLine(g+b[a]+"?\n"+h+b[(a+5)/6*2+1]);File.WriteAllText("x",(a+2).ToString());}}

1
PPCGへようこそ!ゴルフに関するいくつかのヒント:三項演算子を少し単純化できると思います。少なくともa<1?1:a<8?3:9、C#も、その後、truthy整数をサポートしている場合a?a<8?3:9:1。しかし、おそらく整数除算を利用して(a+5)/6*2、ヘッドの最後の文字列を移動して、最初の空の文字列(インデックス5)を置き換えることもできます。そしてのようなものを試してくださいusing s=System.String;。(ああ、名前空間を省略したり、すべての使用Systemを避けるためSystemに名前空間を使用することもできます。)
マーティンエンダー14

だからできる。保守性のためにコーディングを学習することは、すべて私をここで不利な立場に置いています;)
Gareth 14

3

JS、488 473

このコードを含むページを5回更新すると、5つの異なるダイアログが表示されます。

l=localStorage;a="<p>Guybrush: ";b=a+"Pretty please";d="<br>Head: ";c=d+"You can beg all you want, but you can't have it.";document.write(a+"May I please have that necklace?"+d+"No, but thanks for asking so politely."+a+"Oh come on, pleeeeease?"+c+b+"?"+c+a+"Pretty PRETTY please?"+c+b+" with sugar on top?"+d+"Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?<style>p:not(:nth-child("+(l[0]=~~l[0]+1)+")){display:none")

デモ:

http://c99.nl/f/212197.html


2

Perl-356バイト

2=~//;@d=qw"No6|thanks|for|asking|so|pol8ely. 5|beg72want62can't18.
Oh,7|right,2big|baby.|518.|Hey,|what|good's|a4|if2don't1shoulders?
May|I01that4 Oh|come|on,|pleeeeease 30 3|PRETTY0
30|w8h|sugar|on|top";print"Guybrush: $d[$'+print F$'+sysopen F,$0,1]?
Head: $d[$'/3]"=~s/\d/qw(|please |have| |you| Pretty |necklace You|can
,|but |all it)[$&]/ger=~y/|/ /r

一般的な文字列を置換する自己修正アプローチ。

サンプル使用法:

$ perl please.pl
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.

$ perl please.pl
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.

$ perl please.pl
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.

$ perl please.pl
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.

$ perl please.pl
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?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.