ตีความชุดหมู


13

ได้รับการป้อนข้อมูลของหมู , SickPig , DeadPig , QuinePigหรือ DeafPigโปรแกรมเลือกหนึ่งในบรรดา "ภาษา" สุ่มและตีความการป้อนข้อมูลที่ว่า "ภาษา".

ก่อนอื่นสุ่มเลือกระหว่างหนึ่งในห้าสมาชิกของ "Pig series":

  • หมู

    หากตัวเลือกคือ Pig ให้เลียนแบบล่ามอ้างอิงโดยทำดังต่อไปนี้:

    • ค้นหาการเกิดขึ้นครั้งแรกของคำPIGในอินพุท (เล็ก ๆ )

    • หากคำPIGไม่ปรากฏในอินพุตให้ส่งข้อความ File must contain the string 'PIG'.ออกและออก

    • PIGมิฉะนั้นแยกสายป้อนบนเกิดขึ้นครั้งแรกของ เอาท์พุทข้อความหลังจากที่เกิดขึ้นครั้งแรกของการไฟล์ที่มีชื่อไฟล์ของข้อความก่อนPIGPIG

      PIGอาจมีอยู่ในข้อความที่จะส่งออก (ดังนั้นการป้อนข้อมูลของ fooPIGbarPIGbazควรส่งออกbarPIGbazไปยังไฟล์ที่เรียกว่าfoo)

    โปรดทราบว่าล่ามอ้างอิงใช้อินพุตผ่านอาร์กิวเมนต์บรรทัดคำสั่งที่ระบุชื่อไฟล์ที่จะอ่าน อย่างไรก็ตามการส่งของคุณอาจใช้วิธีการมาตรฐานที่ยอมรับบน PPCG

  • SickPig

    หากตัวเลือกคือ SickPig ให้ทำตามคำแนะนำเดียวกับหมู อย่างไรก็ตามแทนที่จะเขียนข้อความหลังจากPIGลงไฟล์ให้เลือกแบบสุ่มจากรายการต่อไปนี้

    GRUNT
    MOAN
    OINK
    BURP
    GROAN
    WHINE
    

    และส่งออกไปยังไฟล์แทน ตัวเลือกแบบสุ่มนี้ต้องเป็นอิสระจากตัวเลือกก่อนหน้า (ดังนั้นผลลัพธ์ของGRUNTควรมี 1/5 * 1/6 = 1/30 โอกาสโดยรวม)

  • DeadPig

    DeadPig เหมือน SickPig แต่มันจะแสดงผลสตริงต่อไปนี้เสมอแทนที่จะสุ่มเลือกสตริง:

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

    QuinePig เป็นเหมือนหมู แต่แทนที่จะเขียนข้อความหลังจากPIGลงในไฟล์มันจะเขียนอินพุตทั้งหมดไปยังไฟล์แทน (ดังนั้นอินพุต fooPIGbarPIGbazควรส่งออกfooPIGbarPIGbazไปยังไฟล์ที่เรียกว่าfoo)

  • DeafPig

    ถ้าตัวเลือกคือ DeafPig ไม่ต้องทำอะไร (หมูหูหนวก ... คุณคาดหวังอะไร)

กฎเบ็ดเตล็ด:

  • "สุ่ม" หมายถึงแต่ละตัวเลือกควรมีโอกาสเท่ากัน (ดังนั้นการเลือกหมู 90% ของเวลาและตัวแปรอื่น ๆ เพียง 2.5% ของเวลานั้นไม่ถูกต้อง)

  • คุณอาจสมมติว่าชื่อไฟล์ที่ร้องขอจะใช้ได้กับระบบไฟล์ของคุณเสมอ (แต่อาจมีช่องว่าง ฯลฯ )

  • สำหรับตัวแปรทั้งหมดของ Pig รหัสของคุณอาจเลือกที่จะส่งออกบรรทัดใหม่ต่อท้ายหนึ่งบรรทัดไปยังไฟล์เช่นกัน

  • เนื่องจากนี่คือรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ


2
+1 คุณคาดหวังอะไร
เดนนิส

ตัวเลือกแบบสุ่มต้องมีความสมบูรณ์แบบหรือเป็นที่ยอมรับ 32768 modding?
เดนนิส

@Dennis ไม่จำเป็นต้องมีความสม่ำเสมอที่สมบูรณ์แบบแต่ตัวเลือกแต่ละตัวต้องมีความน่าจะเป็นที่เท่าเทียมกัน (ดังนั้น mod จำนวนมากก็ไม่เป็นไร)
Doorknob

ว้าว ... ฉันเขียนล่ามหมูว่า ...
LegionMammal978

คำตอบ:


1

Pyth - 157 ไบต์

จะทำการบีบอัดสตริง

?}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'."

ไม่ได้ทำงานแบบออนไลน์ของไฟล์ cuz I / O แต่ลอง outputting [content, filename]เพื่อ stdio ที่นี่


6

Bash, 251 246 ไบต์

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*}"

นี่จะสั้นกว่านี้หากหมูหูหนวกสามารถอ่านได้อย่างน้อย ...


4

Python 2, 296 286 278 ไบต์

def g (p):
 นำเข้าแบบสุ่ม; f = random.randint; r = f (0,4); i = p.find ("PIG")
 ถ้า r:
    ถ้า i + 1: open (p [: i], "w") เขียน ([0, p [i + 3:], ["GRUNT", "MOAN", "OINK", "BURP", "GROAN" "," WHINE "] [f (0,5)]," หมูของคุณเสียชีวิตไปแล้วโปรดลองอีกครั้ง ", p] [r])
    อื่น: พิมพ์ "ไฟล์จะต้องมีสตริง 'PIG'"

สองบรรทัดสุดท้ายเริ่มต้นด้วยแท็บแทนที่จะเป็น 4 ช่องว่างที่แสดงผล

ใช้โปรแกรมอินพุตเป็นอาร์กิวเมนต์ของฟังก์ชัน


สวัสดีเมื่อฉันนับจำนวนไบต์ในการส่งของคุณฉันได้รับ 317 คุณนับจำนวนไบต์อย่างไร
Ogaday

1
@Ogaday ช่องว่างสี่ช่องที่อยู่ถัดจากสองบรรทัดสุดท้ายเป็นอักขระแท็บจริง ๆ (Stack Exchange แทนที่แท็บที่มีช่องว่างภายในบล็อคโค้ด)
Doorknob

@ Doorknob อ่าโอเค! นั่นจะเป็นอย่างไร ฉันสงสัยว่าทำไมพื้นที่ไม่ได้ถูกนำออกมาเล่นกอล์ฟ
Ogaday

'PIG'ควรจะมีระยะเวลาหลังจากที่
LegionMammal978

@ LegionMammal978 ขอบคุณสำหรับคำใบ้ complety พลาดไป
Denker

2

แบตช์409 406 405 ไบต์

@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%

น่าเศร้าที่%p:*PIG=%ล้มเหลวถ้า p ว่างดังนั้นx%1แฮ็ค call setเป็นวิธีที่ดีในการหลีกเลี่ยงการเปิดใช้งานการขยายเวลาที่ฉันพบใน Stack Overflow ในขณะที่%%~xa==.เป็นแรงบันดาลใจในส่วนของฉัน

แก้ไข: บันทึกแล้ว 3 ไบต์ด้วย @ CᴏɴᴏʀO'Bʀɪᴇɴ บันทึก 1 ไบต์ขอบคุณ @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ


ทำไม@echo on? นั่นไม่ได้กระทำโดยปริยายใช่หรือไม่ คุณอาจหมายถึง@echo off?
Conor O'Brien

นอกจากนี้สำหรับการสร้างตัวเลขสุ่มนั้นSET/A r=%RANDOM%%%5จะสั้นกว่า
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴฮึฉันหมายถึง@echo offแต่ฉันได้รับการดีบั๊ก ... ขอบคุณสำหรับเคล็ดลับ% RANDOM% ฉันไม่เคยได้ยินเรื่องนี้มาก่อน
Neil

@ CᴏɴᴏʀO'Bʀɪᴇɴน่าเสียดายที่%RANDOM%รุ่นต้องการให้ฉันใช้ส่วนเพิ่มset /aซึ่งลงท้ายด้วยความยาว 10 ไบต์
Neil

แต่คุณกำลังใช้set/a...
Conor O'Brien
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.