Đảo khỉ: Đầu tàu dẫn đường


12

Cảnh báo: Thử thách này có chứa một số chiến lợi phẩm nhẹ cho Bí mật Đảo Khỉ.

Đến cuối trò chơi, bạn được dẫn dắt qua hầm mộ bởi một người đứng đầu được bảo quản một cách kỳ diệu:

nhập mô tả hình ảnh ở đây

Bạn cần vòng cổ nhãn cầu của nó, nhưng Head không muốn đưa nó cho bạn. Một cách để có được nó là tiếp tục cầu xin:

Guybrush: Tôi có thể có chiếc vòng cổ đó không?
Đầu: Không, nhưng cảm ơn vì đã hỏi một cách lịch sự.
Guybrush: Oh nào, pleeeeease?
Đầu: Bạn có thể cầu xin tất cả những gì bạn muốn, nhưng bạn không thể có nó.
Guybrush: Khá vui lòng?
Đầu: Bạn có thể cầu xin tất cả những gì bạn muốn, nhưng bạn không thể có nó.
Guybrush: Khá PRETTY xin vui lòng?
Đầu: Bạn có thể cầu xin tất cả những gì bạn muốn, nhưng bạn không thể có nó.
Guybrush: Khá vui lòng với đường trên đầu?
Đầu: Ồ, được rồi, em bé lớn. Bạn có thể có nó. Này, vòng cổ có gì tốt nếu bạn không có vai?

Các thách thức

Viết một chương trình đầy đủ mà in các đoạn hội thoại trên. Điều hấp dẫn là mỗi lần chương trình được gọi, nó chỉ nên in hai dòng (một lời khẩn cầu của Guybrush và phản hồi của Head). Ví dụ: nếu bài nộp của bạn được viết bằng Python, cách sử dụng sẽ như thế này:

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

Gọi chương trình hơn 5 lần có thể dẫn đến hành vi không xác định, do đó bạn có thể lặp lại, tiếp tục in hai dòng cuối hoặc chương trình thậm chí có thể bị hỏng sau lần gọi thứ 5.

Bạn có thể ghi vào một tệp trong thư mục làm việc hoặc bạn có thể sửa đổi mã nguồn của chính chương trình để theo dõi các yêu cầu. Trong trường hợp sau, chương trình của bạn không được phụ thuộc vào tên tệp của chính nó. (Trong trường hợp trước, bạn có thể giả sử rằng tên tệp chương trình của bạn sẽ không xung đột với bất kỳ tên tệp nào mà chương trình của bạn phụ thuộc vào.)

Bạn không được giả sử môi trường giống như REPL hoặc bất kỳ dữ liệu nào được giữ trong RAM giữa các lần gọi. Ví dụ, nếu bạn trả lời trong Mathicala, bạn phải giả sử rằng tôi thoát kernel giữa các lệnh.

Đây là mã golf, câu trả lời ngắn nhất (tính bằng byte) sẽ thắng. Nếu chương trình của bạn phụ thuộc vào bất kỳ tệp bổ sung nào tồn tại trước lệnh gọi đầu tiên , hãy thêm tên và nội dung của nó vào số byte của bạn.


Vì vậy, không đặt giá trị cho các biến toàn cầu và sau đó sử dụng lại trong JS?
Tối ưu hóa

@Optimizer Không, xin lỗi. Tôi nghĩ rằng nếu bạn muốn sử dụng JS cho cái này, bạn sẽ phải sử dụng nút.
Martin Ender

Chúng ta có thể có các biến toàn cục trong nút là tốt. Bạn có gợi ý rằng nút wrt, chúng ta sẽ có thể thoát khỏi nút và vẫn tiếp tục chuỗi hội thoại?
Tối ưu hóa

@Optimizer Có. Bạn nên viết một chương trình đầy đủ, mà tôi có thể gọi 5 lần với node please.js5 đầu ra khác nhau.
Martin Ender

Chương trình của tôi có thể phụ thuộc vào một tập tin bên ngoài để bắt đầu không? Tôi sẽ bao gồm số byte của nó trong điểm số của tôi
Claudiu

Câu trả lời:


9

Python, 224 + 97 + 1 = 322 ký tự

Một giải pháp đơn giản nhất để bắt đầu tất cả chúng ta. Cảm ơn gnibbler đã giúp tôi cạo sạch 18 byte!

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

Yêu cầu tệp zphải có trong cùng thư mục (+1 cho tên tệp, +224 cho kích thước tệp):

$ 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

Bạn có thể tạo zvới những điều sau đây:

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

Đầu ra:

$ 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
Sử dụng một dấu phân cách khác nhau cho giữa các cặp dòng, vì vậy, ví dụ bạn có line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10Bây giờ bạn có thể tách |và chỉprint D[n]
gnibbler

@gnibbler: Cũng phát hiện ra thưa ngài!
Claudiu

5

Lisp thường gặp (SBCL): 659 ký tự

(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)

Giải thích

  • Tôi đổ hình ảnh lisp sau mỗi lần gọi, để lưu trạng thái hiện tại.
  • Danh sách vòng tròn cho phép tôi khởi động lại cuộc hội thoại sau khi tất cả các dòng đã được hiển thị (không bắt buộc, nhưng ít nhất nó không bị lỗi formatvới nil).
  • Các macro đọc cho phép tôi sử dụng lại một số dòng giống hệt nhau.

Đây sẽ không phải là bài nộp ngắn nhất, nhưng tôi nghĩ đây là một cách tiếp cận tốt cho vấn đề.

Lời mời

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

Yêu cầu tiếp theo

$./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 ký tự (595)

Chỉnh sửa: Được cập nhật với các đề xuất từ ​​Martin và nhiều tối ưu hóa khác

+1 đầu tiên là tên tệp. Thứ hai +1 là nội dung của tập tin đó. Không có tất cả các khoảng trắng và ngắt dòng bị xóa để bạn có thể đọc nó:

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());
    }
}

Giải trình

Dựa vào một tệp văn bản gọi là "x" để có mặt trong thư mục. Ban đầu nên chứa một số không và được sử dụng để lưu trữ tiến trình.

Chương trình lấy phần tử có liên quan ra khỏi mảng chuỗi theo tiến trình và ghi tiến trình vào cuối. Một số dòng được sử dụng lại để rút ngắn độ dài, do đó logic lựa chọn chỉ mục h+b[(a+5)/6*2+1]cho lựa chọn câu trả lời.

Đầu ra

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>

Golf mã đầu tiên của tôi, có lẽ không phải là ngắn nhất có thể trong C # nhưng hey - Đảo Khỉ, không thể cưỡng lại!

Mã bị tướ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
Chào mừng đến với PPCG! Một vài mẹo chơi gôn: Tôi nghĩ bạn có thể đơn giản hóa người vận hành ternary đó một chút. Ít nhất là a<1?1:a<8?3:9, nếu C # hỗ trợ các số nguyên trung thực, thì cũng vậy a?a<8?3:9:1. Nhưng bạn thậm chí có thể sử dụng phép chia số nguyên và thực hiện (a+5)/6*2và di chuyển chuỗi cuối cùng của đầu để thay thế chuỗi trống đầu tiên (chỉ mục 5). Và thử những thứ như using s=System.String;. (Ồ và bạn có thể bỏ qua không gian tên hoặc thậm chí sử dụng không gian tên Systemđể tránh Systemtrong tất cả việc sử dụng.)
Martin Ender

Do đó, tôi có thể. Tất cả việc học cách viết mã để duy trì này thực sự khiến tôi gặp bất lợi ở đây;)
Gareth

3

Mã số, 488 473

Làm mới 5 lần trang chứa mã này sẽ hiển thị 5 hộp thoại khác nhau.

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")

Bản giới thiệu:

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


2

Perl - 356 byte

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

Một cách tiếp cận tự sửa đổi, với sự thay thế cho các chuỗi phổ biến.

Sử dụng mẫu:

$ 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?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.