Interpretiere die Pig-Serie

13

Bei einem gegebenen Eingang eines Schwein , SickPig , DeadPig , QuinePig oder DeafPig Programm, wählen Sie eine dieser „Sprachen“ zufällig und interpretieren die Eingabe als diese „Sprache“ .

Wählen Sie zunächst zufällig eines der fünf Mitglieder der "Pig-Serie" aus:

  • Schwein

    Wenn Sie sich für Pig entschieden haben, ahmen Sie den Referenzinterpreter folgendermaßen nach:

    • Suchen Sie das erste Vorkommen des Wortes PIGin der Eingabe (Groß- / Kleinschreibung beachten).

    • Wenn das Wort PIGin der Eingabe nicht angezeigt wird, geben Sie die Nachricht aus File must contain the string 'PIG'.und beenden Sie sie.

    • Anderenfalls teilen Sie die Eingabezeichenfolge beim ersten Auftreten von auf PIG. Geben Sie den Text nach dem ersten Auftreten PIGin eine Datei mit einem Dateinamen des vorherigen Texts aus PIG.

      PIGkann in dem auszugebenden Text enthalten sein (also sollte eine Eingabe von in eine aufgerufene Datei fooPIGbarPIGbazausgegeben barPIGbazwerden foo).

    Beachten Sie, dass der Referenzinterpreter Eingaben über ein Befehlszeilenargument vornimmt, das einen Dateinamen angibt, aus dem gelesen werden soll. Ihre Einreichung kann jedoch in einer der Standardmethoden erfolgen, die für PPCG akzeptiert werden.

  • SickPig

    Wenn Sie sich für SickPig entschieden haben, befolgen Sie die gleichen Anweisungen wie für Pig. Anstatt den Text danach PIGin die Datei zu schreiben , wählen Sie ihn jedoch zufällig aus der folgenden Liste aus

    GRUNT
    MOAN
    OINK
    BURP
    GROAN
    WHINE
    

    und das stattdessen in die Datei ausgeben. Diese zufällige Auswahl muss von der vorherigen Auswahl unabhängig sein (eine Ausgabe von GRUNTsollte also insgesamt eine Chance von 1/5 * 1/6 = 1/30 haben).

  • DeadPig

    DeadPig ist wie SickPig, gibt jedoch immer die folgende Zeichenfolge aus, anstatt eine Zeichenfolge zufällig auszuwählen:

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

    QuinePig ist wie Pig, aber anstatt den Text nach PIGder Datei zu schreiben, schreibt es stattdessen die gesamte Eingabe in die Datei (also sollte eine Eingabe von in eine Datei namens fooPIGbarPIGbazausgegeben fooPIGbarPIGbazwerden foo).

  • DeafPig

    Wenn Sie DeafPig gewählt haben, tun Sie nichts. (Das Schwein ist taub ... was erwartest du?)

Verschiedene Regeln:

  • "Zufällig" bedeutet, dass jede Auswahl ungefähr gleich wahrscheinlich sein sollte (daher ist die Auswahl von "Schwein" in 90% der Fälle und die Auswahl der anderen Varianten in nur 2,5% der Fälle ungültig).

  • Sie können davon ausgehen, dass die angeforderten Dateinamen für Ihr Dateisystem immer gültig sind (sie können jedoch Leerzeichen usw. enthalten).

  • Für alle Varianten von Pig kann Ihr Code optional auch eine einzelne abschließende Newline in die Datei ausgeben.

  • Da es sich um , wird der kürzeste Code in Bytes gewinnen.

Türknauf
quelle
2
+1 Was erwartest du?
Dennis
Muss die zufällige Auswahl vollkommen gleichmäßig sein oder ist Modding 32768 akzeptabel?
Dennis
@Dennis Perfekte Gleichmäßigkeit ist nicht erforderlich, aber jede Auswahl muss ungefähr die gleiche Wahrscheinlichkeit haben (also ist eine große Zahl in Ordnung).
Türknauf
Woah ... ich habe diesen Pig-Dolmetscher geschrieben ...
LegionMammal978

Antworten:

1

Pyth - 157 Bytes

Wird String-Komprimierung machen.

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

Funktioniert nicht online, weil Datei-E / A, aber versuchen Sie es auszugeben [content, filename] hier auf stdio .

Maltysen
quelle
6

Bash, 251 246 Bytes

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

Dies wäre viel kürzer, wenn gehörlose Schweine zumindest lesen könnten ...

Dennis
quelle
4

Python 2, 296 286 278 Bytes

def g (p):
 importiere zufällig; f = zufälliger Rand; r = f (0,4); i = p.find ("PIG")
 wenn r:
    wenn i + 1: offen (p [: i], "w"), schreibe ([0, p [i + 3:], ["GRUNT", "MOAN", "OINK", "BURP", "GROAN" "," WHINE "] [f (0,5)]," Ihr Schwein ist leider verstorben. Bitte versuchen Sie es erneut. ", P] [r])
    else: print "Datei muss den String 'PIG' enthalten."

Die letzten beiden Zeilen beginnen mit einem Tabulator anstelle der gerenderten 4 Leerzeichen.

Übernimmt das Eingabeprogramm als Funktionsargument.

Denker
quelle
Hallo, wenn ich die Bytes in Ihrer Übermittlung zähle, erhalte ich 317. Wie zählen Sie die Bytes?
Ogaday
1
@Ogaday Die vier Leerzeichen vor den letzten beiden Zeilen sind Tabulatorzeichen. (Stack Exchange ersetzt Tabulatoren jedoch durch Leerzeichen in Codeblöcken.)
Türknauf
@Doorknob Ah, ok! Das wäre es. Ich fragte mich, warum die Plätze nicht ausgelastet waren.
Ogaday
Es sollte eine Zeit danach geben 'PIG'.
LegionMammal978
@ LegionMammal978 Danke für den Hinweis, das hat complety verpasst.
Denker
2

Batch, 409 406 405 Bytes

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

Scheitert %p:*PIG=%leider, wenn p leer ist, also der x%1Hack. call setist eine gute Möglichkeit, aktivierte verzögerte Erweiterungen zu vermeiden, die ich bei Stack Overflow gefunden habe. während das %%~xa==.für mich ein Inspirationsblitz war.

Bearbeiten: 3 Bytes dank @ CᴏɴᴏʀO'Bʀɪᴇɴ gespeichert. 1 Byte dank @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ gespeichert.

Neil
quelle
Warum @echo on? Wird das nicht implizit gemacht? Vielleicht meintest du @echo off?
Conor O'Brien
Auch zum Erzeugen einer Zufallszahl SET/A r=%RANDOM%%%5ist diese kürzer.
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ugh, ich meinte, @echo offaber ich hatte debuggt ... auch danke für den% RANDOM% -Tipp, von dem ich noch nichts gehört hatte.
Neil
@ CᴏɴᴏʀO'Bʀɪᴇɴ Leider %RANDOM%muss ich in der Version ein Extra verwenden, set /adas am Ende 10 Byte länger ist.
Neil
Aber du benutzt schon set/a...?
Conor O'Brien