돼지 시리즈 해석


13

(A)의 입력을 감안할 때 돼지 , SickPig , DeadPig , QuinePig , 또는 DeafPig의 프로그램, 무작위로 사람들 "언어"중 하나를 선택하고 그 같은 입력을 해석 "언어입니다."

먼저 "Pig 시리즈"의 다섯 멤버 중 하나를 무작위로 선택하십시오.

  • 돼지

    선택이 Pig 인 경우 다음을 수행하여 참조 인터프리터 를 모방하십시오 .

    • PIG입력 에서 단어의 첫 항목을 찾습니다 (대소 문자 구분).

    • 입력에 단어 PIG가 나타나지 않으면 메시지를 출력 File must contain the string 'PIG'.하고 종료하십시오.

    • 그렇지 않으면의 첫 번째 입력에서 입력 문자열을 분할하십시오 PIG. 텍스트가 처음 발생한 후 텍스트를 PIG파일 이름으로 파일 앞에 출력 PIG합니다.

      PIG출력 될 텍스트에 포함될 수 있습니다 (따라서 입력은 이라는 파일로 fooPIGbarPIGbaz출력되어야 barPIGbazfoo).

    참조 인터프리터는 읽을 파일 이름을 지정하는 명령 행 인수를 통해 입력을받습니다. 그러나 귀하의 제출물은 PPCG에서 승인 된 모든 표준 방법으로 입력 될 수 있습니다.

  • SickPig

    선택이 SickPig 인 경우 Pig와 동일한 지시 사항을 따르십시오. 그러나 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와 비슷하지만 PIG파일 뒤에 텍스트를 쓰는 대신 전체 입력을 파일에 씁니다 (따라서 입력은 이라는 파일에 fooPIGbarPIGbaz출력해야 fooPIGbarPIGbazfoo).

  • 귀머거리

    선택이 DeafPig 였다면 아무 것도하지 마십시오. (돼지가 귀머거리인데 ... 무엇을 기대하십니까?)

기타 규칙 :

  • "임의의"는 각각의 선택이 대략 똑같이 가능해야 함을 의미합니다 (따라서 Pig의 90 %를 선택하고 다른 변형은 2.5 %의 시간 만 유효하지 않음).

  • 요청한 파일 이름은 파일 시스템에 항상 유효하지만 공백 등을 포함 할 수 있다고 가정 할 수 있습니다.

  • Pig의 모든 변형에 대해 코드에서 선택적으로 단일 후행 줄 바꿈을 파일에 출력 할 수도 있습니다.

  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.


2
+1 무엇을 기대하십니까?
Dennis

무작위 선택이 완벽하게 균일해야합니까?
데니스

@Dennis 완벽한 균일 성은 필요하지 않지만 각 선택은 대략 같은 확률을 가져야합니다 (따라서 큰 숫자는 괜찮습니다).
Doorknob

Woah ... 나는 그 돼지 통역사를 썼다 ...
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'."

파일 I / O의 온라인 cuz는 작동하지 않지만 [content, filename]stdio로 출력 해보 십시오 .


6

강타, 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

파이썬 2, 296 286 278 바이트

데프 g (p) :
 무작위 가져 오기; 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 : print "파일은 문자열 'PIG'를 포함해야합니다."

마지막 두 줄은 렌더링 된 4 개의 공백 대신 탭으로 시작합니다.

입력 프로그램을 함수 인수로 사용합니다.


안녕하세요, 제출에서 바이트 수를 계산하면 317이 표시됩니다. 바이트 수는 어떻게 계산합니까?
Ogaday

1
@Ogaday 마지막 두 줄 앞의 네 공백은 실제로 탭 문자입니다. (스택 교환은 코드 블록 내의 공백으로 탭을 대체합니다.)
Doorknob

@Doorknob 아, 알았어! 그게 다야. 왜 그 공간이 골프를 치지 않았는지 궁금했습니다.
Ogaday

이후에 마침표가 있어야합니다 'PIG'.
LegionMammal978

@ 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 setStack Overflow에서 찾은 enabledelayedexpansion을 피하는 좋은 방법입니다. 그 동안 %%~xa==.내 영감의 섬광이었다.

편집 : @ CᴏɴᴏʀO'Bʀɪᴇɴ 덕분에 3 바이트가 절약되었습니다. @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 덕분에 1 바이트를 절약했습니다.


@echo on? 암묵적으로 수행되지 않습니까? 아마도 당신은 의미 @echo off?
코너 O'Brien

또한 난수 생성을 위해 SET/A r=%RANDOM%%%5더 짧습니다.
코너 O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ugh, 나는 의미 @echo off했지만 디버깅 중이었습니다 ... 또한 % RANDOM % 팁 덕분에 그 소식을 듣지 못했습니다.
Neil

@ CᴏɴᴏʀO'Bʀɪᴇɴ 슬프게도 %RANDOM%버전은 set /a10 바이트가 넘는 여분의 것을 사용해야합니다 .
Neil

하지만 당신은 이미 set/a...?
코너 오브라이언
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.