解读Pig系列


13

给定PigSickPigDeadPigQuinePigDeafPig程序的输入,请随机选择这些“语言”之一,并将输入解释为该“语言”。

首先,在“猪系列”的五个成员之一中随机选择:

  • 如果选择是Pig,请执行以下操作来模仿参考口译员

    • 查找PIG输入中单词的第一个匹配项(区分大小写)。

    • 如果PIG输入中未出现该单词,则输出消息 File must contain the string 'PIG'.并退出。

    • 否则,在第一次出现时拆分输入字符串PIG。将第一次出现后的文本输出PIG到文件名为之前的文件PIG

      PIG可能包含在要输出的文本中(因此,的输入 fooPIGbarPIGbaz应输出barPIGbaz到名为的文件中foo)。

    请注意,参考解释器通过命令行参数获取输入,该命令行参数指定要读取的文件名。但是,您的提交可以采用PPCG接受的任何标准方法进行输入。

  • 病猪

    如果选择的是SickPig,请遵循与Pig相同的说明。但是,与其将文本写到PIG文件中,不如从下面的列表中随机选择

    GRUNT
    MOAN
    OINK
    BURP
    GROAN
    WHINE
    

    并将其输出到文件中。此随机选择必须独立于先前的选择(因此,的输出GRUNT总体应具有1/5 * 1/6 = 1/30的机会)。

  • 死猪

    DeadPig类似于SickPig,但它始终输出以下字符串,而不是随机选择一个字符串:

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

    QuinePig就像Pig一样,但是PIG它没有将文本写到文件中,而是将整个输入写到文件中(因此,的输入 fooPIGbarPIGbaz应输出fooPIGbarPIGbaz到名为的文件中foo)。

  • 聋猪

    如果选择的是DeafPig,则什么也不做。(这只猪是聋的……你期望什么?)

杂项规则:

  • “随机”表示每个选择的可能性大致相同(因此,在90%的时间内选择Pig,而在其他2.5%的时间内选择其他变体都是无效的)。

  • 您可能会假设所请求的文件名对于您的文件系统将始终有效(但它们可能包含空格等)。

  • 对于Pig的所有变体,您的代码也可以选择将单个尾随换行符输出到该文件。

  • 由于这是,因此以字节为单位的最短代码将获胜。


2
+1您期望什么?
丹尼斯

随机选择是否必须完全均匀或接受32768改装?
丹尼斯

@Dennis不需要完美的均匀性,但是每个选择都必须具有大致相等的概率(因此,mod 越大越好)。
门把手

哇......我写的猪解释...
LegionMammal978

Answers:


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

不能在线处理文件I / O的cuz,但请尝试在此处将其输出[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字节

定义g(p):
 import random; f = random.randint; r = f(0,4); i = p.find(“ PIG”)
 如果r:
    如果i + 1:open(p [:i],“ w”)。write([0,p [i + 3:],[“ GRUNT”,“ MOAN”,“ OINK”,“ BURP”,“ GROAN “,” WHINE“] [f(0,5)],”很遗憾,您的猪已经死了。请重试。“,p] [r])
    else:打印“文件必须包含字符串'PIG'。”

最后两行以制表符开头,而不是呈现的4个空格。

将输入程序作为函数参数。


您好,当我计算您提交的字节数时,我得到317。您如何计算字节数?
Ogaday '02

1
@Ogaday最后两行之前的四个空格实际上是制表符。(不过,Stack Exchange用代码块内的空格替换了制表符。)
Doorknob

@Doorknob啊,好!就是这样。我想知道为什么没有打出空间。
Ogaday '02

之后应该有一段时间'PIG'
LegionMammal978 '16

@ LegionMammal978感谢您的提示,完全错过了。
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上发现的enabledelayedexpansion的好方法;而那%%~xa==.是我的灵感的闪光。

编辑:由于@CᴏɴᴏʀO'Bʀɪᴇɴ,节省了3个字节。感谢@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ,节省了1个字节。


为什么@echo on呢 这不是暗中完成的吗?也许你的意思是@echo off
科纳·奥布莱恩

另外,用于生成随机数SET/A r=%RANDOM%%%5的时间较短。
科纳·奥布莱恩

@CᴏɴᴏʀO'Bʀɪᴇɴgh,我的意思是,@echo off但我一直在调试...也感谢%RANDOM%的提示,我没有听说过。
尼尔

@CᴏɴᴏʀO'Bʀɪᴇɴ可悲的是,该%RANDOM%版本要求我使用额外的内容set /a,最终导致其长度增加了10个字节。
尼尔

但是您已经在使用set/a...?
科纳·奥布莱恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.