হাস্কেল , 306 + 624 = 930 বাইট
প্রোগ্রাম 1: একটি বেনাম ফাংশন একটি ছদ্মবেশী যুক্তি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে দেয়।
(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"İĴİóđđđÝöÝâÝæÝääē××êääē××İēÀħđĮâħēĕóİóòòĮááħááđéêâéêēááĮÀħ""(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"
এটি অনলাইন চেষ্টা করুন!
প্রোগ্রাম 2: q[[40,...]]
শেষে একটি বেনাম ফাংশন যা একটি ছদ্মবেশী যুক্তি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে দেয়।
z~z=[[['@','0'..]!!4..]!!z]
q[x,q]_=z=<<x++q++[34,34]++x
q[[40,92,98,32,99,40,41,45,62,102,111,108,100,114,40,92,97,45,62,109,97,112,32,112,114,101,100,41,98,40,115,104,111,119,40,41,62,62,99,41,96,109,97,112,112,101,110,100,96,115,104,111,119,40,109,97,112,40,109,97,112,32,102,114,111,109,69,110,117,109,41,36,116,97,105,108,40,115,104,111,119,32,99,41,58,112,117,114,101,32,98,41,41,34],[304,308,304,243,273,273,273,221,246,221,226,221,230,221,228,228,275,215,215,234,228,228,275,215,215,304,275,192,295,273,302,226,295,275,277,243,304,243,242,242,302,225,225,295,225,225,273,233,234,226,233,234,275,225,225,302,192,295]]
এটি অনলাইন চেষ্টা করুন!
অক্ষর সেট 1 (স্থান অন্তর্ভুক্ত):
"$()-:>E\`abcdefhilmnoprstuw×ÝáâäæéêñòóöđēĕħĮİĴ
অক্ষর সেট 2 (নিউলাইন অন্তর্ভুক্ত):
!'+,.0123456789<=@[]_qxz~
যেহেতু কেবল সেট 1 এ অ-এসসিআইআই অক্ষর রয়েছে, তাই তাদের ইউটিএফ -8 বাইটগুলিও বিযুক্ত।
কিভাবে এটা কাজ করে
প্রোগ্রাম 1 সাধারণত ল্যাম্বডা এক্সপ্রেশন, স্পেস এবং প্রথম বন্ধনী, অন্তর্নির্মিত বর্ণানুক্রমিক ফাংশনগুলির বিনামূল্যে ব্যবহার এবং শেষে স্ট্রিং লিটারাল হিসাবে কোয়াইন ডেটা সহ লেখা হয়।
- প্রোগ্রাম 1 এর নিজস্ব মূল কোডটি কেবলমাত্র উদ্ধৃতি চিহ্নের সাথে এটিকে ঘিরে স্ট্রিং আক্ষরিক ডেটাতে পরিণত হয়।
- এটি সমর্থন করার জন্য, প্রতিটি ব্যাকস্ল্যাশ অনুসরণ করে
a
বা হয় b
, যা বৈধ অব্যাহতি সিকোয়েন্সগুলি তৈরি করে যা রাউন্ডট্রিপ মাধ্যমে show
।
- আরেকটি ছোট উপকার হয়
a
, b
এবং c
শুধুমাত্র ছোট হাতের অক্ষর যার ASCII কোড 100 এর চেয়ে কম হয়, সংখ্যাসূচক প্রোগ্রাম 2 দ্বারা ব্যবহৃত এনকোডিং একটি অঙ্ক সংরক্ষণ করা হয়।
- প্রোগ্রাম 2 এর মূল কোডটির স্ট্রিং আক্ষরিক এনকোডিংটি নন-এএসসিআইআই ইউনিকোড ব্যবহার করে আরও বিচলিত হয়: মূল অক্ষরগুলির সাথে কোনও ওভারল্যাপ না রয়েছে তা নিশ্চিত করতে প্রতিটি চরিত্রের কোড পয়েন্টে 182 যুক্ত হয়েছে।
- 182 ব্যবহৃত হত 128, যতক্ষণ না আমি বুঝতে পেরেছি যে প্রোগ্রামটির 1 এর কোডটির ডিকোডিংটি সংক্ষিপ্ত করার জন্য 182 স্ট্রিং আক্ষরিক দৈর্ঘ্যের দ্বিগুণ। (বোনাস হিসাবে, প্রোগ্রাম 2 নিউলাইনগুলি ব্যবহার করতে পারে))
প্রোগ্রাম 2 সাধারণত শীর্ষ স্তরের ফাংশন সমীকরণ (চূড়ান্ত বেনামে এক বাদে), অক্ষর আক্ষরিক এবং দশমিক সংখ্যা, তালিকা / পরিসীমা সিনট্যাক্স এবং অপারেটর এবং শেষে কোণের তালিকা হিসাবে কোয়েনের ডেটা সহ লেখা হয় Int
।
- প্রোগ্রাম 1 এর মূল কোডটি তার কোড পয়েন্টগুলির একটি তালিকা হিসাবে একটি চূড়ান্ত ডাবল উদ্ধৃতি সহ এনকোড হয়েছে।
- প্রোগ্রাম 2 এর মূল কোডটি প্রোগ্রাম 1 এ ব্যবহৃত স্ট্রিং আক্ষরিকের কোড পয়েন্টগুলির তালিকা হিসাবে এনকোড হয়েছে, এখনও 182 দ্বারা উপরে স্থানান্তরিত হয়েছে।
ওয়াকথ্রু, প্রোগ্রাম ২
b
এবং c
যথাক্রমে 2 এবং 1 প্রোগ্রামের স্ট্রিং লিটারেলের মানগুলি ল্যাম্বডা এক্সপ্রেশনকে চূড়ান্ত যুক্তি হিসাবে দেওয়া হয়। ()
কেবলমাত্র পিপিসিজির নিয়মকে সন্তুষ্ট করার জন্য একটি ছদ্মবেশী যুক্তি যা প্রোগ্রামটির কোনও ক্রিয়া সংজ্ঞায়িত করা উচিত।
foldr(\a->map pred)b(show()>>c)
বা 2 এর দৈর্ঘ্যের সমান সংখ্যক বার b
প্রয়োগ করে প্রোগ্রাম 2 এর মূল কোডটিতে স্ট্রিংটি ডিকোড করে ।map pred
show()>>c == c++c
182
tail(show c)
c
চূড়ান্ত ডাবল উদ্ধৃতি সংযোজন সহ স্ট্রিংটিকে প্রোগ্রাম 1 এর মূল কোডে রূপান্তর করে ।
:pure b
স্ট্রিংয়ের সাথে তালিকায় এটি একত্রিত করে b
।
map(map fromEnum)$
স্ট্রিংগুলি কোড পয়েন্টের তালিকায় রূপান্তর করে।
`mappend`show(...)
তালিকাগুলির ফলাফলের তালিকাটি ক্রমিক করে এবং শেষ পর্যন্ত প্রোগ্রাম 2 এর মূল কোডটিতে এটি যুক্ত করে।
ওয়াকথ্রু, প্রোগ্রাম 2
- টপলেভেল
z~z=[[['@','0'..]!!4..]!!z]
হ'ল একটি ফাংশন যা কোডগুলিকে অক্ষরে ফিরিয়ে দেয় (লেখার জন্য প্রয়োজনীয় যা সমস্ত অক্ষর toEnum
উপলব্ধ নয়)।
- এর কোড পয়েন্ট আর্গুমেন্টও বলা হয়
z
। ~
এই অবস্থানটিতে অলসতা চিহ্নিতকারীটির কোনও প্রভাব নেই তবে একটি স্থানের অক্ষর এড়ানো হয়।
['@','0'..]
ASCII কোড at৪ থেকে শুরু করে পিছনের দিকে এগিয়ে যাওয়ার তালিকার পরিসীমা, তারপরে প্রতিটি পদক্ষেপে ১ 16 টি লাফিয়ে।
- এটি প্রয়োগ
!!4
একটি \NUL
চরিত্র দেয় ।
- একটি
[ ..]
রেঞ্জের মোড়কে সমস্ত অক্ষরের একটি তালিকা দেয় যা !!z
সূচকগুলি।
- চরিত্রটি শেষ পর্যন্ত একটি সিঙ্গলটনের তালিকায় মুড়ে যায়। এই ফাংশনটি ম্যাপিং পারবেন
z
ব্যবহার তালিকা উপর =<<
অনুপলব্ধ পরিবর্তে map
এবং <$>
।
- শীর্ষ স্তরটি
q[x,q]_=z=<<x++q++[34,34]++x
কোয়েনের ডেটা তালিকা থেকে একটি ফাংশন কনস্ট্রাক্টিং প্রোগ্রাম 1।
x
প্রোগ্রাম 1 কোর (ক চূড়ান্ত ডাবল উদ্ধৃতি সহ) জন্য তথ্য এবং ভিতরের q
প্রোগ্রাম 2. মূল জন্য সময়সীমার তথ্য _
কেবলমাত্র চূড়ান্ত বেনামী ফাংশন শুধু একটি স্ট্রিং এর পরিবর্তে একটি ফাংশন করতে অন্য ডামি যুক্তি।
x++q++[34,34]++x
ASCII কোড 34 সহ দুটি ডাবল উদ্ধৃতি চিহ্ন সহ টুকরোগুলিকে সংযুক্ত করে।
z=<<
z
কোড পয়েন্ট থেকে অক্ষরে রূপান্তর করতে কনটেক্সটকে ম্যাপিংয়ের মাধ্যমে প্রোগ্রাম 1 তৈরি করে ।
- ফাইনালটি কোইন ডেটার সাথে মিলিত
q[[40,...]]
একটি বেনামি ফাংশন q
।