Diberikan input dari program Babi , SickPig , DeadPig , QuinePig , atau DeafPig , pilih salah satu dari "bahasa" itu secara acak dan tafsirkan input sebagai "bahasa" itu.
Pertama, pilih secara acak antara satu dari lima anggota "seri Babi":
Babi
Jika pilihannya adalah Babi, meniru juru bahasa referensi dengan melakukan hal berikut:
Temukan kemunculan kata pertama
PIG
di input (peka huruf besar kecil).Jika kata
PIG
itu tidak muncul di input, output pesanFile must contain the string 'PIG'.
dan keluar.Jika tidak, pisahkan string input pada kemunculan pertama
PIG
. Keluarkan teks setelah kemunculan pertamaPIG
ke file dengan nama file teks sebelumnyaPIG
.PIG
dapat terkandung dalam teks yang akan di-output (jadi, inputfooPIGbarPIGbaz
harus di-outputbarPIGbaz
ke file bernamafoo
)
Perhatikan bahwa penerjemah referensi mengambil input melalui argumen baris perintah yang menentukan nama file untuk dibaca. Namun, kiriman Anda dapat menerima input dari salah satu metode standar yang diterima di PPCG.
SickPig
Jika pilihannya adalah SickPig, ikuti instruksi yang sama seperti Pig. Namun, alih-alih menulis teks setelah
PIG
ke file, pilih secara acak dari daftar berikutGRUNT MOAN OINK BURP GROAN WHINE
dan output itu ke file sebagai gantinya. Pilihan acak ini harus independen dari pilihan sebelumnya (jadi, output dari
GRUNT
harus memiliki 1/5 * 1/6 = 1/30 peluang keseluruhan).DeadPig
DeadPig seperti SickPig, tetapi selalu menampilkan string berikut daripada memilih string secara acak:
Your pig has unfortunately died. Please try again.
QuinePig
QuinePig seperti Babi, tetapi alih-alih menulis teks setelah
PIG
ke file, ia malah menulis seluruh input ke file (jadi, inputfooPIGbarPIGbaz
harus outputfooPIGbarPIGbaz
ke file yang disebutfoo
).DeafPig
Jika pilihannya adalah DeafPig, jangan lakukan apa pun. (Babi itu tuli ... apa yang Anda harapkan?)
Aturan lain-lain:
"Acak" berarti setiap pilihan kira-kira memiliki kemungkinan yang sama besar (jadi, memilih Pig 90% dari waktu dan varian lainnya hanya 2,5% dari waktu tidak valid).
Anda dapat mengasumsikan bahwa nama file yang diminta akan selalu valid untuk sistem file Anda (tetapi mungkin berisi spasi, dll.).
Untuk semua varian Babi, kode Anda juga dapat menampilkan satu baris tambahan baris baru ke file.
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
sumber
Jawaban:
Pyth - 157 byte
Akan melakukan kompresi string.
Tidak berfungsi secara online karena file I / O, tetapi coba keluaran
[content, filename]
ke stdio di sini .sumber
Bash,
251246 byteIni akan menjadi jauh lebih pendek jika babi tuli setidaknya bisa membaca ...
sumber
Python 2,
296286278 byteDua baris terakhir dimulai dengan tab, bukannya 4 spasi yang diberikan.
Mengambil input program sebagai argumen fungsi.
sumber
'PIG'
.Batch,
409406405 byteSayangnya
%p:*PIG=%
gagal jika p kosong, makax%1
retas.call set
adalah cara yang baik untuk menghindari perluasan ekspansi tidak diaktifkan yang saya temukan di Stack Overflow; sementara%%~xa==.
itu adalah kilasan inspirasi di pihak saya.Sunting: Disimpan 3 byte berkat @ CᴏɴᴏʀO'Bʀɪᴇɴ. Disimpan 1 byte berkat @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.
sumber
@echo on
? Bukankah itu dilakukan secara implisit? Mungkin maksudmu@echo off
?SET/A r=%RANDOM%%%5
lebih pendek.@echo off
tetapi saya telah men- debug ... juga terima kasih atas tip% ACAK%, saya belum pernah mendengar yang itu.%RANDOM%
versi ini mengharuskan saya untuk menggunakan ekstraset /a
yang akhirnya menjadi 10 byte lebih lama.set/a
...?