Giải thích loạt phim về lợn


13

Đưa ra đầu vào của chương trình Pig , SickPig , DeadPig , QuinePig hoặc DeafPig , chọn ngẫu nhiên một trong những "ngôn ngữ" đó và diễn giải đầu vào là "ngôn ngữ" đó.

Đầu tiên, chọn ngẫu nhiên giữa một trong năm thành viên của "Chuỗi lợn":

  • Con lợn

    Nếu lựa chọn là Pig, hãy bắt chước trình thông dịch tham chiếu bằng cách thực hiện như sau:

    • Tìm sự xuất hiện đầu tiên của từ PIGtrong đầu vào (phân biệt chữ hoa chữ thường).

    • Nếu từ PIGkhông xuất hiện trong đầu vào, hãy xuất thông báo File must contain the string 'PIG'.và thoát.

    • Mặt khác, tách chuỗi đầu vào trong lần xuất hiện đầu tiên của PIG. Xuất văn bản sau lần xuất hiện đầu tiên của PIGtệp có tên tệp của văn bản trước đó PIG.

      PIGcó thể được chứa trong văn bản là đầu ra (vì vậy, một đầu vào fooPIGbarPIGbaznên xuất ra barPIGbazmột tệp có tên foo).

    Lưu ý rằng trình thông dịch tham chiếu nhận đầu vào thông qua một đối số dòng lệnh chỉ định tên tệp để đọc từ đó. Tuy nhiên, việc gửi của bạn có thể nhận đầu vào theo bất kỳ phương pháp tiêu chuẩn nào được chấp nhận trên PPCG.

  • SickPig

    Nếu lựa chọn là SickPig, hãy làm theo các hướng dẫn tương tự như Pig. Tuy nhiên, thay vì viết văn bản sau PIGvào tệp, hãy chọn ngẫu nhiên từ danh sách sau

    GRUNT
    MOAN
    OINK
    BURP
    GROAN
    WHINE
    

    và xuất nó vào tập tin thay thế. Lựa chọn ngẫu nhiên này phải độc lập với lựa chọn trước đó (vì vậy, một đầu ra GRUNTphải có tổng cơ hội 1/5 * 1/6 = 1/30).

  • DeadPig

    DeadPig giống như SickPig, nhưng nó luôn xuất ra chuỗi sau thay vì chọn ngẫu nhiên một chuỗi:

    Your pig has unfortunately died. Please try again.
    
  • QuinePig

    QuinePig giống như Pig, nhưng thay vì viết văn bản sau PIGvào tệp, thay vào đó, nó ghi toàn bộ đầu vào vào tệp (vì vậy, một đầu vào fooPIGbarPIGbaznên xuất ra fooPIGbarPIGbaztệp có tên foo).

  • Điếc

    Nếu sự lựa chọn là DeafPig, không làm gì cả. (Con lợn bị điếc ... bạn mong đợi điều gì?)

Quy tắc khác:

  • "Ngẫu nhiên" có nghĩa là mỗi lựa chọn sẽ có khả năng gần như bằng nhau (vì vậy, chọn Pig 90% thời gian và các biến thể khác chỉ 2,5% thời gian là không hợp lệ).

  • Bạn có thể cho rằng tên tệp được yêu cầu sẽ luôn hợp lệ cho hệ thống tệp của bạn (nhưng chúng có thể chứa dấu cách, v.v.).

  • Đối với tất cả các biến thể của Pig, mã của bạn cũng có thể tùy ý xuất một dòng mới duy nhất vào tệp.

  • Vì đây là , mã ngắn nhất tính bằng byte sẽ giành chiến thắng.


2
+1 bạn mong đợi điều gì?
Dennis

Liệu sự lựa chọn ngẫu nhiên phải được thống nhất hoàn hảo hay có thể sửa đổi 32768?
Dennis

@Dennis Tính đồng nhất hoàn hảo là không cần thiết, nhưng mỗi lựa chọn phải có xác suất gần bằng nhau (vì vậy mod một số lớn là được).
Doorknob

Câu trả lời:


1

Pyth - 157 byte

Sẽ thực hiện nén chuỗi.

?}J"PIG"z?=GO[jJtKczJOc"GRUNT MOAN OINK BURP GROAN WHINE"d"Your pig has unfortunately died. Please try again."z0).wGhK.q"File must contain the string 'PIG'."

Không hoạt động vì các tệp I / O trực tuyến, nhưng hãy thử xuất ra [content, filename]stdio tại đây .


6

Bash, 251 246 byte

r=$RANDOM
((r%5<4))||exit
[[ $1 =~ PIG ]]||(echo "File must contain the string 'PIG'.";exit)
s=(GRUNT MOAN OINK BURP GROAN WHINE)
m=("${1#*PIG}" ${s[r%6]}
"Your pig has unfortunately died. Please try again." "$1")
echo -n "${m[r%5]}">"${1%%PIG*}"

Điều này sẽ ngắn hơn rất nhiều nếu lợn điếc ít nhất có thể đọc ...


4

Python 2, 296 286 278 byte

def g (p):
 nhập ngẫu nhiên; f = Random.randint; r = f (0,4); i = p.find ("PIG")
 nếu r:
    if i + 1: open (p [: i], "w"). write ([0, p [i + 3:], ["GRUNT", "MOAN", "Oink", "BURP", "GROAN" "," WHINE "] [f (0,5)]," Con lợn của bạn không may chết. Vui lòng thử lại. ", P] [r])
    khác: in "Tệp phải chứa chuỗi 'PIG'."

Hai dòng cuối cùng bắt đầu bằng một tab, thay vì 4 khoảng trắng được hiển thị.

Lấy chương trình đầu vào làm đối số chức năng.


Xin chào, khi tôi đếm các byte trong bài gửi của bạn, tôi nhận được 317. Bạn đang đếm các byte như thế nào?
Ogaday 4/2/2016

1
@Ogaday Bốn khoảng trắng trước hai dòng cuối cùng thực sự là các ký tự tab. (Tuy nhiên, Stack Exchange thay thế các tab bằng khoảng trắng trong các khối mã.)
Doorknob

@Doorknob À, ok! Đó sẽ là nó. Tôi tự hỏi tại sao các không gian đã không được chơi gôn.
Ogaday

Nên có một khoảng thời gian sau 'PIG'.
LegionMammal978

@ LegionMammal978 Cảm ơn bạn đã gợi ý, hoàn thành bỏ lỡ điều đó.
Denker

2

Hàng loạt, 409 406 405 byte

@echo off
set/ar=%random%%%5
if 0==%r% exit/b
set p=x%1
set q=%p:*PIG=%
if %q%==%p% echo File must contain the string 'PIG'.&exit/b
set p=%1
call set p=%%p:PIG%q%=%%
goto %r%
:1
echo %q%>%p%
exit/b
:2
for %%a in (GRUNT.0 MOAN.1 OINK.2 BURP.3 GROAN.4 WHINE.5)do if %%~xa==.%time:~6,1% echo %%~na
exit/b
:3
echo Your pig has unfortunately died. Please try again.>%p%
exit/b
:4
echo %1>%p%

Đáng buồn %p:*PIG=%thất bại nếu p trống, do đó x%1hack. call setlà một cách hay để tránh mở rộng được kích hoạt mà tôi tìm thấy trên Stack Overflow; trong khi đó %%~xa==.là một tia cảm hứng từ phía tôi.

Chỉnh sửa: Đã lưu 3 byte nhờ @ CᴏɴᴏʀO'Bʀɪᴇɴ. Đã lưu 1 byte nhờ @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


Tại sao @echo on? Điều đó không được thực hiện ngầm? Có lẽ bạn có ý nghĩa @echo off?
Conor O'Brien

Ngoài ra, để tạo một số ngẫu nhiên, SET/A r=%RANDOM%%%5ngắn hơn.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ugh, ý tôi là @echo offnhưng tôi đã gỡ lỗi ... cũng cảm ơn vì mẹo% RANDOM%, tôi đã không nghe về điều đó.
Neil

@ CᴏɴᴏʀO'Bʀɪᴇɴ Đáng buồn là %RANDOM%phiên bản yêu cầu tôi sử dụng một phần bổ sung set /amà cuối cùng dài hơn 10 byte.
Neil

Nhưng bạn đã sử dụng set/a...?
Conor O'Brien
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.