SNOBOL4, 437 430 bayt
N = TRIM(INPUT)
D = REPLACE(N,'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+'abcdefghijklmnopqrstuvwxyz')
B = "b" D
F = "f" D
M = "m" D
&ANCHOR = 1
D SPAN('bcdfghjklmnpqrstvwxyz') . I REM . R :F(Y)
B = "b" R
F = "f" R
M = "m" R
I "b" :S(U)
I "f" :S(V)
I "m" :S(W) F(Y)
U D "b" REM . B :(Y)
V D "f" REM . F :(Y)
W D "m" REM . M
Y OUTPUT = N ", " N ", bo-" B
OUTPUT = "Banana-fana fo-" F
OUTPUT = "Fee-fi-mo-" M
OUTPUT = N "!"
END
Ungolfed (ayrıca bir bilgi istemi ekledim; yukarıdaki ad sadece bir adın yazılmasını bekler):
OUTPUT = "Please enter your name."
Name = TRIM(INPUT)
UC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
LC = 'abcdefghijklmnopqrstuvwxyz'
Low = REPLACE(Name, UC, LC)
BName = "b" Low
FName = "f" Low
MName = "m" Low
Consonants = SPAN('bcdfghjklmnpqrstvwxyz')
&ANCHOR = 1
Low Consonants . First REM . Rest :F(READY)
BName = "b" Rest
FName = "f" Rest
MName = "m" Rest
First "b" :S(BINIT)
First "f" :S(FINIT)
First "m" :S(MINIT) F(READY)
BINIT Low "b" REM . BName :(READY)
FINIT Low "f" REM . FName :(READY)
MINIT Low "m" REM . MName
READY OUTPUT = Name ", " Name ", bo-" BName
OUTPUT = "Banana-fana fo-" FName
OUTPUT = "Fee-fi-mo-" MName
OUTPUT = Name "!"
END
Bu şimdiye kadar yazdığım ilk SNOBOL programı.
SNOBOL, FORTRAN, COBOL veya BASIC gibi çizgi odaklı bir dildir. Her satır, 1. sütundan başlayarak isteğe bağlı bir etiket, atamalar ve kalıp eşleşmesi içerebilen satırın kodu ve isteğe bağlı bir daldan oluşur. Evet, çizgiler (isteğe bağlı) GOTO'larla biter. İki şekilde gelirler:
:(TARGET)
Dallar etiketlemek için TARGETise,
:S(SUCCESS) F(FAILURE)
Desenin SUCCESSeşleşmesi başarılı olursa veya FAILUREbaşka türlü olursa dallar . Ayrıca başarıya dallayabilir ve başarısızlık durumunda bir sonraki satıra geçebilir veya tersi de olabilir.
Devam çizgileri bir +veya ile başlar .. Yorumlar a ile başlar *.
O nasıl çalışır?
Bir adla okuyun, küçük harfe dönüştürün. Bir sesli harfle başladığını varsayarak B, F ve M adlarını ayarlayın. Sonra bir ünsüz ile başlayıp başlamadığını kontrol edin. Değilse, gitmeye hazırız! Öyleyse, önde gelen ünsüzleri soyun ve bu harflerin hiçbiriyle başlamadığını varsayarak B-, F- ve M-adlarını ayarlayın. Son olarak, bu harflerin her biri ile başlayıp başlamadığını kontrol edin, adları gerektiği gibi düzeltin. O zaman isim oyununu oynamaya hazırız!
Örnek çalışma:
# $RUN *SNOBOL4 5=GOLF.SNO+*SOURCE* 6=*DUMMY*(1,28)+*SINK*(1,4)+*DUMMY*
# Execution begins 16:57:25
Snowman
Snowman, Snowman, bo-bowman
Banana-fana fo-fowman
Fee-fi-mo-mowman
Snowman!
# Execution terminated 16:57:30 T=0.013
Ben bu koştum Hercules ait 6.0a salınımını çalışan S / 370 anabilgisayar emülatörü Michigan Terminali Sistemi 1 Nisan 1 Mayıs 1975 tarihinde MTS için inşa 1973 den SNOBOL4 sürümünü 3.10 kullanarak, ama çalıştırmak için muhtemelen daha kolay yolları vardır SNOBOL4 a üzerinde modern sistem. :)
Düzenleme: Gereksiz bir şube etiketini ortadan kaldırır ve önceki satırda bir başarısızlık dalı haline koşulsuz bir goto döndü (Ben sadece kendi başına bir başarısızlık dalı koyabilirsiniz fark etmemiştim) bir düşüş eşdeğer bir yedek başarı dalı kaldırıldı, 7 bayt tasarruf için.
Artık TIO'da SNOBOL4 desteği var,
çevrimiçi deneyebilirsiniz! Not: Boyutu 430 yerine 429 olarak gösterir, çünkü oraya yapıştırdığımda son satır besleme kaldırıldı. Devam hattını (ile başlayan +) tek bir satıra değiştirmeyi denedim , çünkü hat çok uzun olduğu için ana çerçeve sürümünde yasal değildi ve çalıştı ve 427'ye indirdi. Açıkçası CSNOBOL4 daha uzun hatlara izin veriyor. Yine de puanımı 430'da bırakacağım, çünkü betiğin makinemde kaç bayt olduğunu ve ayrıca SNOBOL oldukça rekabetçi değil.
Ybu yüzden, bir vokal olarak eleYvesgibidirIvesyaArnold.