স্মলটাল্ক স্কেয়াক 4.x স্বাদে অনেকগুলি বাইট!
আমি 71 চরে পূর্ণসংখ্যায় পুনরাবৃত্ত হওয়া ফর্মগুলির একটির প্রয়োগ করতে পারি
f:y n:n n=1or:[^(2to:y)inject:self into:[:x :i|self f:x n:n-1]].^self+y
তারপরে কোনও ফাইল বা ফাইল স্ট্রিম স্টিডিন থেকে পড়ার জন্য আমার একটি আর্ম ব্যয় হবে ... স্পষ্টতই স্কেকিয়াকে স্ক্রিপ্টিং ভাষা হিসাবে নকশা করা হয়নি। সুতরাং সমস্যার সাথে সম্পর্কিত না করে নিজের সাধারণ উদ্দেশ্যে ব্যবহারের উপযোগিতা তৈরি করতে আমি অনেকগুলি বাইট ব্যয় করব:
এই 21 চর পদ্ধতিটি স্ট্রিমে প্রয়োগ করুন (সমুদ্রযাত্রীদের এড়িয়ে যেতে)
s self skipSeparators
আচরণে এই 20 চর পদ্ধতিটি প্রয়োগ করুন (একটি স্ট্রিমের কোনও উদাহরণ পড়তে)
<s^self readFrom:s s
তারপরে স্ট্রিংয়ের ২৮ টি অক্ষর (একটি ফাইল হ্যান্ডেল তৈরি করতে)
f^FileDirectory default/self
তারপরে ফাইল ডিরেক্টরিতে 59 টি অক্ষর (একটি পঠিত স্ট্রিম তৈরি করতে)
r^FileStream concreteStream readOnlyFileNamed:self fullName
তারপরে ব্লকক্লোজারে 33 টি অক্ষর (এটি n বার মূল্যায়ন করতে)
*n^(1to:n)collect:[:i|self value]
তারপরে অ্যারেতে cha৩ টি অক্ষর (রিসিভার এবং অ্যারে থেকে নেওয়া আর্গুমেন্টের সাথে যুক্তির মূল্যায়ন করুন)
`s^self first perform:s asSymbol withArguments:self allButFirst
তারপরে এক্স নামের নামের ফাইলটি থেকে যে কোনও জায়গায় এই 31 চর স্নিপেটটি মূল্যায়ন করে সমস্যার সমাধান করুন
|s|s:='x'f r.[0class<s]*3`#f:n:
এমনকি ইউটিলিটিগুলি গণনা ছাড়াই, এটি ইতিমধ্যে 71 + 31 = 102 টি অক্ষর ...
এখন, যেহেতু আমি কোডগল্ফটি হারাতে নিশ্চিত, তাই পূর্ণসংখ্যায় আমার একটি মজাদার বাস্তবায়ন হয়েছে:
doesNotUnderstand:m
(m selector allSatisfy:[:c|c=$+])or:[^super doesNotUnderstand:m].
self class compile:
m selector,'y y=0or:[^(2to:y)inject:self into:[:x :i|self'
,m selector allButLast,'x]].^'
,(Character digitValue:()asBit)
,(m selector size-2min:1)hex last.
thisContext sender restart
এই পদ্ধতিটি এন + দিয়ে তৈরি একটি বাইনারি বার্তাগুলিকে সংজ্ঞায়িত (সংকলন) করবে যদি এটি উপস্থিত না থাকে (মেসেজটির গ্রহণকারীর দ্বারা বোঝা যায় না), এবং প্রেরক প্রসঙ্গে শুরুতে সম্পাদন পুনরায় আরম্ভ করবে। আমি অতিরিক্ত গাড়ী বহন এবং পাঠযোগ্যতার জন্য ফাঁকা স্থান .োকালাম।
নোট যে (m selector size-2min:1)hex lastএর একটি সংক্ষিপ্ত রূপ (m selector size>2)asBit printString।
যদি এটি স্মলটালকের দুষ্ট পরাশক্তি প্রদর্শন না করা হয় তবে শেষ বিবৃতিটি সংক্ষিপ্ত এবং সহজ দ্বারা প্রতিস্থাপন করা যেতে পারে
^m sendTo:self
এখন অক্ষরটিতে ২৮ টি অক্ষর ইউটিলিটি প্রয়োগ করুন (এটি একটি স্ট্রিংয়ে n বার পুনরাবৃত্তি করতে)
*n^String new:n withAll:self
তারপরে এই 43 টি অক্ষরের অভিব্যক্তিটি মূল্যায়ন করুন:
|i s|i:=0class.s:='x'f r.[i<s]*2`($+*(i<s))
আমরা পূর্ণসংখ্যায় প্রয়োগ করে আরও 10 টি চর দিয়ে ত্বরান্বিত করতে পারি:
++y^self*y
এবং এই ক্ষেত্রে আমাদের আরও সংক্ষিপ্ত কোড রয়েছে কারণ আমরা এটির ^',(m selector size-2min:1)hex lastসাথে প্রতিস্থাপন করতে পারি^1'
এত বেশি দামের জন্য, কোডটি দ্বিতীয় পূর্ণসংখ্যার সাথে কাজ করে = 0 :)
n=1? এটা যদিx+yবাx+1,1 1 1ফেরত পাঠাবেন2