Biorąc pod uwagę dane wejściowe programu Pig , SickPig , DeadPig , QuinePig lub DeafPig , wybierz jeden z tych „języków” losowo i zinterpretuj dane wejściowe jako „język”.
Po pierwsze, losowo wybierz jednego z pięciu członków „Świni”:
Świnia
Jeśli wybrano Świnia, naśladuj tłumacza referencyjnego , wykonując następujące czynności:
Znajdź pierwsze wystąpienie słowa
PIG
na wejściu (rozróżniana jest wielkość liter).Jeśli słowo
PIG
nie pojawia się na wejściu, wyślij komunikatFile must contain the string 'PIG'.
i wyjdź.W przeciwnym razie podziel łańcuch wejściowy przy pierwszym wystąpieniu
PIG
. Wypisuj tekst po pierwszym wystąpieniuPIG
do pliku z nazwą pliku wcześniejPIG
.PIG
może być zawarty w tekście, który ma być wyprowadzony (więc wejściefooPIGbarPIGbaz
powinno wypisać siębarPIGbaz
do pliku o nazwiefoo
).
Zauważ, że interpreter odniesienia pobiera dane wejściowe za pomocą argumentu wiersza poleceń, który określa nazwę pliku do odczytu. Twoje zgłoszenie może jednak uwzględniać dowolną standardową metodę akceptowaną w PPCG.
SickPig
Jeśli wybór padł na SickPig, postępuj zgodnie z tymi samymi instrukcjami, co Świnia. Jednak zamiast wpisywać tekst
PIG
do pliku, wybierz losowo z poniższej listyGRUNT MOAN OINK BURP GROAN WHINE
i zamiast tego wyślij go do pliku. Ten losowy wybór musi być niezależny od poprzedniego wyboru (więc wyjście
GRUNT
powinno mieć ogólną szansę 1/5 * 1/6 = 1/30).DeadPig
DeadPig jest jak SickPig, ale zawsze wyświetla następujący ciąg zamiast losowego wybierania ciągu:
Your pig has unfortunately died. Please try again.
QuinePig
QuinePig jest jak Pig, ale zamiast zapisywać tekst po
PIG
pliku, zamiast tego zapisuje całe dane wejściowe do pliku (więc wejściefooPIGbarPIGbaz
powinno wypisać sięfooPIGbarPIGbaz
do pliku o nazwiefoo
).DeafPig
Jeśli wybór padł na DeafPig, nie rób nic. (Świnia jest głucha ... czego oczekujesz?)
Różne zasady:
„Losowy” oznacza, że każdy wybór powinien być w przybliżeniu jednakowo prawdopodobny (więc wybranie Świni w 90% przypadków, a inne warianty tylko w 2,5% przypadków jest nieprawidłowe).
Możesz założyć, że żądane nazwy plików będą zawsze poprawne dla twojego systemu plików (ale mogą zawierać spacje itp.).
Dla wszystkich wariantów Pig Twój kod może opcjonalnie wypisać do pliku również jedną końcową linię nowego wiersza.
Ponieważ jest to code-golf , wygra najkrótszy kod w bajtach.
źródło
Odpowiedzi:
Pyth - 157 bajtów
Będzie wykonywać kompresję ciągów.
Nie działa online, ponieważ plik I / O pliku, ale spróbuj wypisać
[content, filename]
go tutaj na stdio .źródło
Bash,
251246 bajtówByłoby to o wiele krótsze, gdyby głuche świnie potrafiły przynajmniej czytać ...
źródło
Python 2,
296286278 bajtówOstatnie dwa wiersze zaczynają się od tabulacji zamiast renderowanych 4 spacji.
Pobiera program wejściowy jako argument funkcji.
źródło
'PIG'
.Partia,
409406405 bajtówNiestety
%p:*PIG=%
zawodzi, jeśli p jest puste, więcx%1
hack.call set
to dobry sposób na uniknięcie włączonego opóźnionego rozszerzenia, które znalazłem na stosie przepełnienia; podczas gdy%%~xa==.
był to błysk inspiracji z mojej strony.Edycja: Zapisano 3 bajty dzięki @ CᴏɴᴏʀO'Bʀɪᴇɴ. Zapisano 1 bajt dzięki @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.
źródło
@echo on
? Czy to nie jest zrobione domyślnie? Może miałeś na myśli@echo off
?SET/A r=%RANDOM%%%5
jest krótsze.@echo off
ale debugowałem ... również dzięki za wskazówkę% RANDOM%, o której nie słyszałem.%RANDOM%
wersja wymaga ode mnie użycia dodatkowej,set /a
która kończy się o 10 bajtów dłużej.set/a
...?