সম্প্রতি আমার কাছে হাসকল প্রোগ্রাম লিখে আনন্দিত হয়েছিল যা এই NegativeLiterals
এক্সটেনশনটি নিযুক্ত ছিল কিনা তা সনাক্ত করতে পারে । আমি নিম্নলিখিত নিয়ে এসেছি:
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$1==u(-1)
এটি True
সাধারণত এবং False
অন্যথায় মুদ্রণ করবে ।
এখন আমি এটি করতে অনেক মজা পেয়েছি আমি আপনার সবার কাছে চ্যালেঞ্জটি প্রসারিত করছি। আর কি কি হাস্কেল ভাষার এক্সটেনশনগুলি ক্র্যাক করতে পারে?
বিধি
একটি নির্দিষ্ট ভাষা বর্ধনের ক্র্যাক করতে আপনার অবশ্যই একটি হাস্কেল প্রোগ্রাম লিখতে হবে যা ভাষা এক্সটেনশন সহ এবং এর বাইরে উভয়ই সংকলন করে (সতর্কতা ভাল) এবং ভাষা এক্সটেনশনের সাথে চলাকালীন দুটি পৃথক অ-ত্রুটিযুক্ত মানকে আউটপুট করে দেয় এবং ( No
উপসর্গটি যোগ করে এটি বন্ধ করে দেওয়া হয়) ভাষা সম্প্রসারণ)। এইভাবে উপরের কোডটি কেবল সংক্ষিপ্ত করা যেতে পারে:
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$u(-1)
যা প্রিন্ট 1
এবং -1
।
আপনি কোনও এক্সটেনশন ক্র্যাক করার জন্য যে কোনও পদ্ধতি ব্যবহার করেন তা অবশ্যই সেই এক্সটেনশনের সাথে সুনির্দিষ্ট। যেকোন সংকলক পতাকা বা ল্যাঙ্গুয়েজ এক্সটেনশানগুলি সক্ষম করা হয়েছে তা নির্বিচারে সনাক্ত করার উপায় থাকতে পারে, যদি এ জাতীয় পদ্ধতির অনুমতি না দেওয়া হয়। আপনি -O
আপনার বাইট গণনায় বিনা ব্যয়ে অতিরিক্ত ভাষা এক্সটেনশন সক্ষম করতে বা সংকলক অপ্টিমাইজেশন পরিবর্তন করতে পারেন।
ভাষার বর্ধন
আপনি যে একটি নেই কোনো ভাষা এক্সটেনশন ফাটল না পারেন No
সহযোগীর (যেমন Haskell98
, Haskell2010
, Unsafe
, Trustworthy
, Safe
) কারণ এই রূপরেখা উপরোক্ত শর্তাবলী আওতায় পড়ে না। অন্য প্রতিটি ভাষার বর্ধন সুষ্ঠু খেলা।
স্কোরিং
প্রত্যেক ভাষা এক্সটেনশনের জন্য আপনাকে একটি পয়েন্ট দেওয়া হবে আপনি প্রথমে ক্র্যাককারী ব্যক্তি এবং প্রতি ভাষা এক্সটেনশনের জন্য আপনার অতিরিক্ত সংক্ষিপ্ত (বাইটগুলিতে পরিমাপ করা) ক্র্যাক রয়েছে) দ্বিতীয় দফার জন্য বন্ধনগুলি পূর্ববর্তী জমা দেওয়ার পক্ষে ভেঙে যাবে। উচ্চতর স্কোর ভাল
আপনি প্রথম জমা দেওয়ার জন্য কোনও পয়েন্ট অর্জন করতে সক্ষম হবেন না NegativeLiterals
বা QuasiQuotes
কারণ আমি ইতিমধ্যে এগুলিকে ক্র্যাক করে পোস্টের শিরোনামে অন্তর্ভুক্ত করেছি। তবে আপনি এগুলির প্রত্যেকের স্বল্পতম ক্র্যাকের জন্য একটি পয়েন্ট অর্জন করতে সক্ষম হবেন। এখানে আমার ক্র্যাকQuasiQuotes
import Text.Heredoc
main=print[here|here<-""] -- |]
NondecreasingIndentation
সুস্পষ্ট কারণে অন্তর্ভুক্ত নয়
Wait, what language extension is this?
বা সম্পূর্ণ আলাদা কিছু।
RelaxedPolyRec
, কারণ আসলে এটি বন্ধ করে দেওয়ার পক্ষে যথেষ্ট প্রাচীন একটি সংকলক । (কোনও কিছু করা বন্ধ করার কয়েক বছর ধরে ডকুমেন্টেশন সহ বিকল্পটি ঘুরে দাঁড়িয়েছিল))