SNOBOL4, 437 430 바이트
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 (또한 프롬프트를 추가했습니다. 위의 메시지는 이름이 입력 될 때까지 기다립니다) :
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
이것은 내가 작성한 최초의 SNOBOL 프로그램입니다.
SNOBOL은 FORTRAN, COBOL 또는 BASIC과 같은 행 지향 언어입니다. 각 줄은 열 1부터 시작하는 선택적 레이블, 지정 및 패턴 일치를 포함 할 수있는 줄의 코드 및 선택적 분기로 구성됩니다. 예, 줄은 (선택적) GOTO로 끝납니다. 그들은 두 가지 형태로옵니다 :
:(TARGET)
지점은 레이블을 TARGET하면서,
:S(SUCCESS) F(FAILURE)
SUCCESS패턴 일치 여부에 따라 분기합니다 FAILURE. 또한 성공하면 분기하고 실패하면 다음 줄로 넘어갈 수 있습니다.
연속 줄은 a +또는로 시작합니다 .. 주석은로 시작합니다 *.
어떻게 작동합니까?
이름을 읽고 소문자로 변환하십시오. 모음으로 시작한다고 가정하여 B, F 및 M 이름을 설정하십시오. 그런 다음 자음 범위로 시작하는지 확인하십시오. 그렇지 않다면 갈 준비가되었습니다! 그렇다면 선행 자음을 제거하고 문자로 시작하지 않는다고 가정하여 B, F 및 M 이름을 설정하십시오. 마지막으로 각 문자로 차례로 시작되는지 확인하고 필요에 따라 이름을 수정하십시오. 이제 이름 게임을 할 준비가되었습니다!
샘플 실행 :
# $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
나는 이걸 실행 헤라클레스 의 6.0A 릴리스 실행 S / 370 메인 프레임 에뮬레이터 미시간 터미널 시스템을 4 월 1 일 5 월 1 일 1975 MTS 위해 만들어진 1973에서 SNOBOL4 버전 3.10를 사용하지만, 실행하는 것이 더 쉬울 방법이있다 SNOBOL4를 켜짐이 현대 시스템. :)
편집 : 불필요한 분기 레이블을 제거하고 이전 줄의 무조건 분기를 실패 분기로 바꾸는 폴 스루와 같은 중복 성공 분기를 제거했습니다 (실패 분기 만 넣을 수 있다는 것을 몰랐습니다). 7 바이트를 절약 할 수 있습니다.
이제 TIO는 SNOBOL4를 지원
하므로 온라인으로 사용해 볼 수 있습니다! 참고 : 붙여 넣을 때 최종 줄 바꿈이 제거되었으므로 크기는 430이 아닌 429로 표시됩니다. 연속 줄 (으로 시작 +하는 줄)을 단일 줄로 변경하려고했는데 줄이 너무 길어서 메인 프레임 버전에서 합법적이지 않았으며 작동하여 427으로 줄었습니다. CSNOBOL4는 더 긴 줄을 허용합니다. 그래도 점수는 430으로하겠습니다. 왜냐하면 스크립트가 내 컴퓨터에있는 바이트 수이며 SNOBOL은 경쟁이 거의 없기 때문입니다.
Y보컬로 처리되는Yves것 같아서Ives또는 같다Arnold.