এসএনওবিএল 4, 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
অবহেলিত (প্লাস আমি একটি প্রম্পট যুক্ত করেছি; উপরের একটিটি কেবল নাম টাইপ করার জন্য অপেক্ষা করছে):
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 একটি লাইন-ভিত্তিক ভাষা, যেমন ফরটারান, কোবল, বা বেসিক। প্রতিটি লাইনে কলাম 1 এ শুরু হওয়া একটি alচ্ছিক লেবেল, লাইনটির কোড যা অ্যাসাইনমেন্ট এবং প্যাটার্ন মেলাতে এবং optionচ্ছিক শাখা জড়িত করতে পারে। হ্যাঁ, লাইনগুলি (alচ্ছিক) জিওটিও দিয়ে শেষ হয়। এগুলি দুটি রূপে আসে:
:(TARGET)
শাখাগুলি লেবেল করার TARGETসময়,
:S(SUCCESS) F(FAILURE)
SUCCESSপ্যাটার্ন ম্যাচটি সাফল্য পেয়েছে বা FAILUREঅন্যথায় শাখাগুলি । আপনি কেবল সাফল্যের সাথে শাখা করতে পারেন এবং ব্যর্থতার পরবর্তী লাইনে যেতে পারেন বা বিপরীতে।
ধারাবাহিকতা লাইনগুলি একটি +বা দিয়ে শুরু হয় .। মন্তব্য একটি দিয়ে শুরু *।
এটা কিভাবে কাজ করে?
একটি নামে পড়ুন, এটিকে ছোট আকারে রূপান্তর করুন। বি-, এফ- এবং এম-নামগুলি সেট করুন এটি ধরে নিয়ে যে এটি একটি স্বর দিয়ে শুরু হয়। তারপরে এটি ব্যঞ্জনবর্ণের স্প্যান দিয়ে শুরু হয় কিনা তা পরীক্ষা করে দেখুন। যদি না হয়, আমরা যেতে প্রস্তুত! যদি তা হয় তবে নেতৃস্থানীয় ব্যঞ্জনবর্ণগুলি কেটে ফেলুন এবং বি-, এফ- এবং এম-নামগুলি সেট আপ করুন ধরে নিবেন যে এটি কোনও অক্ষরের সাথেই শুরু হয় না। অবশেষে, পরীক্ষা করে দেখুন যে এটি প্রতিটি অক্ষর ঘুরে শুরু হয়, প্রয়োজন অনুসারে নামগুলি ঠিক করে। তারপরে আমরা নাম খেলা খেলতে প্রস্তুত!
নমুনা রান:
# $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
আমি এই দৌড়ে হারকিউলিস , S / 370 মেইনফ্রেম এর 6.0a মুক্তি চলমান এমুলেটর মিশিগান টার্মিনাল সিস্টেম এপ্রিল 1, 1973 মে 1, 1975 এমটিএস জন্য নির্মিত থেকে SNOBOL4 সংস্করণ 3.10 ব্যবহার করে, কিন্তু সেখানে চালানোর জন্য সম্ভবত সহজ উপায় আছে SNOBOL4 একটি উপর আধুনিক ব্যবস্থা :)
সম্পাদনা: একটি অপ্রয়োজনীয় সাফল্যের শাখা সরানো হয়েছে যা পতনের সমতুল্য ছিল (আমি বুঝতে পারি নি যে আমি নিজেই কেবলমাত্র একটি ব্যর্থতা শাখা রাখতে পারি) যা একটি অনিবন্ধিত শাখার লেবেলকে সরিয়ে দেয় এবং শর্তহীন গোটোটিকে পূর্বের লাইনে ব্যর্থ শাখায় পরিণত করে, 7 বাইট সঞ্চয় করার জন্য।
টিআইওর এসএনওবিএল 4 সমর্থন রয়েছে এখন আপনি এটি অনলাইনে চেষ্টা করতে পারেন
! দ্রষ্টব্য: এটি 430 এর পরিবর্তে আকারটি 429 হিসাবে দেখায় কারণ আমি যখন এটি সেখানে আটকানো হয়েছিল তখন চূড়ান্ত লাইনফিডটি সরিয়ে ফেলা হবে। আমি ধারাবাহিকতা রেখাটি ( +যার প্রথমটি দিয়ে শুরু করলাম ) একটি এক লাইনে পরিবর্তন করার চেষ্টা করেছি , যা মেইনফ্রেম সংস্করণে আইনী ছিল না কারণ লাইনটি দীর্ঘ ছিল এবং এটি কাজ করেছিল এবং এটিকে 427 এ নামিয়ে দিয়েছে। স্পষ্টতই CSNOBOL4 দীর্ঘ লাইনের অনুমতি দেয়। যদিও আমি আমার স্কোরটি 430-এ রেখে যাচ্ছি, যদিও আমার মেশিনে স্ক্রিপ্টটি ছিল কতটি বাইট, এবং তদ্ব্যতীত, এসএনওবিএল বেশ অ-প্রতিযোগিতামূলক।
Yকণ্ঠস্বর হিসাবে পরিচালনা করাYvesহয়, যেমনIvesবা হয়Arnold।