Dada una entrada de un programa Pig , SickPig , DeadPig , QuinePig o DeafPig , elija uno de esos "idiomas" al azar e interprete la entrada como ese "idioma".
Primero, elija al azar entre uno de los cinco miembros de la "serie Pig":
Cerdo
Si la elección fue Pig, imite al intérprete de referencia haciendo lo siguiente:
Encuentre la primera aparición de la palabra
PIG
en la entrada (distingue entre mayúsculas y minúsculas).Si la palabra
PIG
no aparece en la entrada, envíe el mensajeFile must contain the string 'PIG'.
y salga.De lo contrario, divida la cadena de entrada en la primera aparición de
PIG
. Envíe el texto después de la primera apariciónPIG
a un archivo con un nombre de archivo del texto anteriorPIG
.PIG
puede estar contenido en el texto que se generará (por lo tanto, una entrada defooPIGbarPIGbaz
debería generarbarPIGbaz
un archivo llamadofoo
).
Tenga en cuenta que el intérprete de referencia toma datos a través de un argumento de línea de comando que especifica un nombre de archivo para leer. Sin embargo, su envío puede recibir información de cualquiera de los métodos estándar aceptados en PPCG.
SickPig
Si la elección fue SickPig, siga las mismas instrucciones que Pig. Sin embargo, en lugar de escribir el texto después
PIG
en el archivo, elija al azar de la siguiente listaGRUNT MOAN OINK BURP GROAN WHINE
y enviarlo al archivo en su lugar. Esta elección aleatoria debe ser independiente de la elección anterior (por lo tanto, una salida de
GRUNT
debe tener una probabilidad de 1/5 * 1/6 = 1/30 en general).DeadPig
DeadPig es como SickPig, pero siempre genera la siguiente cadena en lugar de elegir una cadena al azar:
Your pig has unfortunately died. Please try again.
QuinePig
QuinePig es como Pig, pero en lugar de escribir el texto después
PIG
en el archivo, en su lugar escribe la entrada completa en el archivo (por lo tanto, una entrada defooPIGbarPIGbaz
debería salirfooPIGbarPIGbaz
a un archivo llamadofoo
).DeafPig
Si la elección fue DeafPig, no haga nada. (El cerdo es sordo ... ¿qué esperas?)
Reglas misceláneas:
"Aleatorio" significa que cada opción debe ser aproximadamente igual de probable (por lo tanto, elegir Pig el 90% del tiempo y las otras variantes solo el 2.5% del tiempo no es válido).
Puede suponer que los nombres de archivo solicitados siempre serán válidos para su sistema de archivos (pero pueden contener espacios, etc.).
Para todas las variantes de Pig, su código también puede generar opcionalmente una nueva línea final al archivo.
Como se trata de código golf , el código más corto en bytes ganará.
fuente
Respuestas:
Pyth - 157 bytes
Hará compresión de cuerdas.
No funciona en línea porque el archivo de E / S, pero intenta que
[content, filename]
salga a stdio aquí .fuente
Bash,
251246 bytesEsto sería mucho más corto si los cerdos sordos pudieran leer al menos ...
fuente
Python 2,
296286278 bytesLas dos últimas líneas comienzan con una pestaña, en lugar de los 4 espacios representados.
Toma el programa de entrada como argumento de función.
fuente
'PIG'
.Lotes,
409406405 bytesLamentablemente
%p:*PIG=%
falla si p está en blanco, por lo tanto, elx%1
hack.call set
es una buena manera de evitar enabledelayedexpansion que encontré en Stack Overflow; mientras que%%~xa==.
fue un destello de inspiración de mi parte.Editar: Guardado 3 bytes gracias a @ CᴏɴᴏʀO'Bʀɪᴇɴ. Guardado 1 byte gracias a @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.
fuente
@echo on
? ¿No se hace eso implícitamente? Quizás quisiste decir@echo off
?SET/A r=%RANDOM%%%5
es más corto.@echo off
pero había estado depurando ... también gracias por el consejo% RANDOM%, no había oído hablar de eso.%RANDOM%
versión requiere que use un extraset /a
que termina siendo 10 bytes más.set/a
...?