পিরামিড স্কিম @ کونোরও ব্রায়েন একটি ভাষা বিকাশ করছে । পিরামিড স্কিমে, আপনি যে কোডটি লিখেছেন তা দেখতে এমন দেখাচ্ছে:
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
এখন, এই কোডটিতে দুটি সুস্পষ্ট গুণ রয়েছে: এটি বিশ্লেষণ করা কঠিন এবং এটি লেখা শক্ত। কনর প্রথমটি সমাধান করেছে, তবে সেই দ্বিতীয় সমস্যাটি সমাধান করা আপনার কাজ হবে।
উপরের কোডটি পিরামিডস্কিম ইন্টারপ্রেটার দ্বারা নেস্টেড স্ট্রিং অ্যারেটিতে প্রক্রিয়া করা হবে:
[["+", ["9123", "3"]], "3"]
আপনার টাস্কটি এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হয় যা স্ট্রিং, আউটপুট বা পুনরায় তৈরি পিরামিডস্কেম কোডের নেস্টেড অ্যারে দেয়। আপনি ধরে নিতে পারেন ইনপুট অ্যারে সর্বদা বৈধ থাকবে।
পিরামিড হ'ল একটি সমকোণী ত্রিভুজ। শীর্ষ হয় ^
, পক্ষের ঢাল তির্যকভাবে সঙ্গে দূরে /
এবং \
, এবং নীচে হয় -
। নীচের দুটি কোণটি হয় খালি বা অন্য পিরামিডগুলির সূচনা ধারণ করে যা আর্গুমেন্ট। মাঝখানে লাইন ব্রেকগুলি উপেক্ষা করে পিরামিডের নামটি পূর্ণ।
পার্সার কীভাবে কোডটিকে ব্যবহারযোগ্য বিন্যাসে রূপান্তরিত করে তা এখানে। প্রথমত, এটি শীর্ষ স্তরের পিরামিডের জন্য স্ক্যান করে। যদি এটি কোনও যুক্তি না নেয় তবে এটি একটি একক স্ট্রিং সহ এটি উপস্থাপন করে এবং এগিয়ে চলে। অন্যথায়, এটি একটি অ্যারে ["name",[arg1,arg2]]
বা হিসাবে উপস্থাপন করে ["name",[arg1]]
। আর্গুমেন্টগুলি পিরামিডের নীচে বাম এবং নীচে ডানদিকে পিরামিড যা উপরে বর্ণিত স্ট্রিং বা আরও অ্যারে হতে পারে। আপনি লক্ষ্য করতে পারেন যে এটি কিছুটা লিস্পের সাথে সাদৃশ্যপূর্ণ, এক্ষেত্রে আপনি ভাষাটির নাম যে ভয়াবহ শঙ্কাটিও লক্ষ্য করেছেন। পিরামিডটি সম্পূর্ণরূপে উপস্থাপিত হওয়ার পরে, পার্সারটি পরবর্তী একটিতে চলে যায়।
এটি কোড-গল্ফ , সংক্ষিপ্ততম কোডের জয়!
পরীক্ষার কেস: এগুলি কেবলমাত্র বৈধ আউটপুট নয়, এগুলি বৈধ আউটপুটগুলির উদাহরণ।
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
দ্বিতীয় পরীক্ষার ক্ষেত্রে লক্ষ্য করুন, দ্বিতীয় এবং তৃতীয় out
পিরামিড উভয়ের উভয়ই ["chr", ["108"]]
প্যারামিটার হিসাবে রয়েছে, যা দুটি শীর্ষ-স্তরের দ্বারা ভাগ করা একটি পিরামিড স্ট্যাকের মধ্যে পড়ে যায়। আপনার কোড সমর্থন করতে পারে এটি এটি একটি বৈধ অপ্টিমাইজেশন, তবে এটি সম্পূর্ণ optionচ্ছিক; স্কোরিং আপনার আউটপুট দৈর্ঘ্যের উপর ভিত্তি করে নয়।
9126 3
কৌতূহলের জন্য, টপলেভেল পিরামিডগুলির ছাপ ছাপানোর কারণে প্রথম কেসটি প্রদর্শিত হয়, দ্বিতীয়টি প্রিন্ট করে Hello
এবং শেষটি একটি সিনট্যাক্স ত্রুটি হয়, কারণ এটি একটি ঝরঝরে কাঠামো রয়েছে included
আপনি অনুমান হতে পারে যে ইনপুট শুধুমাত্র মুদ্রণযোগ্য হওয়া ASCII, ব্যতীত স্পেস, ধারণ ^
, /
, \
, এবং -
। ইনপুটটি সর্বদা বৈধ থাকবে এবং এতে কমপক্ষে একটি পিরামিড থাকবে। অ্যারের আকার বা ইনপুট স্ট্রিংগুলির কোনও সীমা নেই, তবে আপনি আপনার কোডটি এমনভাবে লিখতে পারেন যেন আপনার ভাষার ডিফল্ট পূর্ণসংখ্যার প্রকারটি অসীম নির্ভুলতা এবং আপনার কম্পিউটারে নির্বিচারে মেমরি রয়েছে। যদি একক স্ট্রিং হিসাবে ইনপুট গ্রহণ করা হয়, আপনি অ্যারে ছাড়ার জন্য উপযুক্ত কিছু (কমা, স্পেস ইত্যাদি ) মুদ্রণযোগ্য অ্যাস্কেই এবং না "
বা ব্যবহার করতে পারেন []
) del আপনাকে পুরো জিনিসটির চারপাশে বন্ধনী অন্তর্ভুক্ত করতে হবে না, এবং পরিবর্তে আপনার ডিলিমিটার দ্বারা পৃথক করে একাধিক অ্যারে নেওয়া উচিত।
আপনার আউটপুটটি গল্ফ করার দরকার নেই, আপনি অতিরিক্ত স্থান সন্নিবেশ করতে পারেন বা আপনার পিরামিডগুলি প্রয়োজনের তুলনায় আরও বড় করতে পারেন। টপলেভেল পিরামিডগুলি প্রথম লাইনে থাকা উচিত । আউটপুটটি নতুন লাইনের সাথে স্ট্রিং বা স্ট্রিংয়ের তালিকা হওয়া উচিত।
যে কেউ যিনি করেন যা সন্তোষজনক ভাবে পিরামিড golfs তাদের কোড এর একটি সংস্করণ অন্তর্ভুক্ত upvotes / অনুগ্রহকে মিথ্যা (কিন্তু সম্ভবত upvotes) আকারে কিছু প্রতিনিধির পেতে পারেন।