Domuz serisini yorumlayabilme


13

Bir Pig , SickPig , DeadPig , QuinePig veya DeafPig programının bir girdisi verildiğinde , bu "dillerden" birini rastgele seçin ve girdiyi "dil" olarak yorumlayın.

İlk olarak, "Domuz serisinin" beş üyesinden birini rastgele seçin:

  • Domuz

    Seçim Pig olsaydı, aşağıdakileri yaparak referans yorumlayıcıyı taklit edin :

    • Girişteki kelimenin ilk tekrarlamasını bulun PIG(büyük / küçük harfe duyarlı).

    • Sözcük PIGgirişte görünmüyorsa, iletinin çıktısını File must contain the string 'PIG'.alıp çıkın.

    • Aksi takdirde, giriş dizesini ilk oluşumunda bölün PIG. Metnin ilk oluşumundan sonra, daha önce metnin PIGdosya adıyla bir dosyaya çıktı alın PIG.

      PIGçıktı alınacak metinde yer alabilir (bu nedenle, bir dosyaya bir fooPIGbarPIGbazçıkış vermelidir ).barPIGbazfoo

    Referans yorumlayıcısının, okunacak bir dosya adı belirten bir komut satırı bağımsız değişkeni yoluyla girdi aldığını unutmayın. Ancak, gönderiminiz PPCG'de kabul edilen standart yöntemlerin herhangi birinde girdi alabilir.

  • SickPig

    Seçim SickPig ise, Pig ile aynı talimatları uygulayın. Ancak, metni PIGdosyaya yazmak yerine , aşağıdaki listeden rastgele seçin

    GRUNT
    MOAN
    OINK
    BURP
    GROAN
    WHINE
    

    ve bunu dosyaya çıktılar. Bu rastgele seçim önceki seçimden bağımsız olmalıdır (bu nedenle, bir çıktı GRUNTtoplamda 1/5 * 1/6 = 1/30 şansa sahip olmalıdır).

  • DeadPig

    DeadPig SickPig gibidir, ancak rastgele bir dize seçmek yerine her zaman aşağıdaki dizeyi çıkarır:

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

    QuinePig Pig gibidir, ancak metni PIGdosyaya yazmak yerine, tüm girdiyi dosyaya yazar (bu nedenle, girilen bir dosyaya bir fooPIGbarPIGbazçıkış çıkışı gerekir ).fooPIGbarPIGbazfoo

  • DeafPig

    Seçim DeafPig olsaydı, hiçbir şey yapma. (Domuz sağır ... ne bekliyorsun?)

Çeşitli kurallar:

  • "Rastgele", her seçimin kabaca eşit olması gerektiği anlamına gelir (bu nedenle, zamanın% 90'ını Pig ve diğer varyantları zamanın yalnızca% 2.5'inin geçersiz olduğu anlamına gelir).

  • İstenen dosya adlarının dosya sisteminiz için her zaman geçerli olacağını varsayabilirsiniz (ancak boşluk, vb. İçerebilir).

  • Pig'in tüm varyantları için, kodunuz isteğe bağlı olarak dosyaya tek bir satırsonu da gönderebilir.

  • Bu , bayt cinsinden en kısa kod kazanacaktır.


2
+1 ne bekliyorsunuz?
Dennis

Rastgele seçim mükemmel bir şekilde eşit olmalı mı veya 32768 modifikasyonu kabul edilebilir mi?
Dennis

@Dennis Mükemmel tekdüzelik gerekli değildir, ancak her seçim kabaca eşit bir olasılığa sahip olmalıdır (bu yüzden mod büyük bir sayı uygundur).
Kapı tokmağı

Vay

Yanıtlar:


1

Pyth - 157 bayt

Dize sıkıştırma yapacak.

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

Çevrimiçi dosya G / Ç cuz çalışmıyor, ancak burada[content, filename] stdio çıktısını deneyin .


6

Bash, 251246 bayt

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

Sağır domuzlar en azından okuyabilseydi bu çok daha kısa olurdu ...


4

Python 2, 296 286 278 bayt

def g (p):
 rasgele içe aktarma; f = rasgele. bitiş; r = f (0,4); i = p.find ("PIG")
 eğer r:
    i + 1 ise: açık (p [: i], "w"). yazın ([0, p [i + 3:], ["GRUNT", "MOAN", "OINK", "BURP", "GROAN "," WHINE "] [f (0,5)]," Domuzunuz maalesef öldü. Lütfen tekrar deneyin. ", P] [r])
    else: print "Dosya 'PIG' dizesini içermelidir."

Son iki satır, oluşturulan 4 boşluk yerine bir sekme ile başlar.

Girdi programını işlev argümanı olarak alır.


Merhaba, gönderiminizdeki baytları saydığımda 317 olsun. Baytları nasıl sayıyorsunuz?
Ogaday

1
@Ogaday Son iki satırdan önceki dört boşluk aslında sekme karakterleri. (Stack Exchange sekmeleri kod blokları içindeki boşluklarla değiştirir.)
Kapı Tokmağı

@Doorknob Ah, tamam! Öyle olur. Alanların neden golf oynadığını merak ettim.
Ogaday

Bir süre sonra olmalı 'PIG'.
LegionMammal978

@ LegionMammal978 İpucu için teşekkürler, tam bunu kaçırdı.
Denker

2

Toplu, 409 406 405 bayt

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

Ne yazık ki %p:*PIG=%p boşsa, x%1hack başarısız olur . call setStack Overflow üzerinde bulduğum enableledelayedexpansion önlemek için güzel bir yoludur; iken %%~xa==.benim açımdan bir ilham flaş oldu.

Düzenleme: @ CᴏɴᴏʀO'Bʀɪᴇɴ sayesinde 3 bayt kaydedildi. @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ sayesinde 1 bayt kaydedildi.


Neden @echo on? Bu dolaylı olarak yapılmıyor mu? Belki demek istedin @echo off?
Conor O'Brien

Ayrıca, rastgele bir sayı üretmek için SET/A r=%RANDOM%%%5daha kısadır.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ugh, demek istediğim @echo offama hata ayıklama yapıyordum ...% RANDOM% ipucu için de teşekkürler, bunu duymamıştım.
Neil

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ne yazık ki %RANDOM%sürüm set /a10 bayt daha uzun olan bir ekstra kullanmamı gerektiriyor .
Neil

Ama sen zaten kullanıyorsun set/a...?
Conor O'Brien
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.