পার্ল, 92 90 89 84 বাইট
এর জন্য +1 অন্তর্ভুক্ত -n
STDIN- তে উচ্চতা দিন:
perl -M5.010 bolt.pl <<< 15
bolt.pl
:
#!/usr/bin/perl -n
map{$_=$;until$;=$_,s/.6|3.?/53|16*rand/eg,/3|6/>/36/;say y|3615|\\/ |r}(1x$_.6)x$_
ব্যাখ্যা
আপনি যদি শুরুর পয়েন্ট 0 এর অফসেটটি কল করেন (একটি বিন্দু একটি অক্ষর বাক্সের কোণায় রয়েছে), তবে পরবর্তী সারিতে আপনি বাম বা ডান দিকে যেতে পারেন (বা না) এবং অফসেটের পয়েন্ট দিয়ে শেষ করতে পারেন -1,1
। পরের সারিটি -2,0,2
যথাসময়ে অফসেট ইত্যাদি দেয় They এগুলি সমস্ত ২ দ্বারা পৃথক হয় আপনি যদি অক্ষরটিকে এমনকি একটি বিন্দুর নীচের বামে এবং অক্ষরকে নীচের ডান বিজোড়কে কল করেন তবে আপনি প্রতিটি অক্ষরের অবস্থানের জন্য সমান বা বিজোড় বরাদ্দ করতে প্রসারিত করতে পারেন এক সারি যেমন এমন কি বিজোড় বৈকল্পিক (আসলে পুরো বিমানটি একটি চেকবোর্ডের ধরণে টাইলসযুক্ত)। একটি এমনকি পজিশনের একটি /
বা
, একটি বিজোড় অবস্থান থাকতে পারে \
বা থাকতে পারে
।
চরিত্রটি /
একটি বিজোড় অবস্থানে আসার আগে এটি হয় \
বা হতে পারে
তবে \/
এটি নিষিদ্ধ তাই কেবল
সম্ভব। একইভাবে পরের অক্ষরটি \
অবশ্যই একটি হতে হবে
(ধরে নিই যে সারিটি বাম এবং ডানদিকে যথেষ্ট ফাঁকা স্থান সহ প্যাড করা থাকে যাতে সারি সীমাটি কোনও সমস্যা নয়)। সুতরাং একটি বিদ্যুতের বল্টটি পরবর্তী সারিতে সর্বদা সরাসরি নীচে \
বা এ এর নীচে অব্যাহত থাকে /
। উভয় ক্ষেত্রেই কম বিন্দু মাঝখানে হয় এবং পরবর্তী সারির এক হতে পারে
, /
, \
বা /\
সরাসরি শীর্ষ 2 অক্ষর থেকে কম। সুতরাং পরবর্তী সারিটি উত্পন্ন করতে আমি কেবল কোনও \
বা প্রতিস্থাপন করতে পারি/
সমান সম্ভাবনা সহ এই 4 টি বিস্তারের যে কোনও দ্বারা (আপনি স্বতন্ত্রভাবে প্রথম অক্ষর দ্বারা
বা /
দ্বিতীয় অক্ষর দ্বারা
বা দ্বারা প্রতিস্থাপন করতে পারেন \
)। পার্লে আপনি এই জাতীয় কিছু দিয়ে এটি করতে পারেন:
s#\\ | /#(" "," \\","/ ","/\\")[rand 4]#eg
ফলস্বরূপ সারিটিতে তবে \/
(নিষিদ্ধ যোগদান) বা না /
বা \
মোটেও (বল্টু মারা যায় এবং নীচে পৌঁছায় না) ফলাফল অবৈধ। সেক্ষেত্রে আমি পুরো সারিটি ফেলে দিয়েছি এবং কেবল আবার চেষ্টা করব। একটি বৈধ ধারাবাহিকতা সর্বদা বিদ্যমান এবং আপনি প্রায়শই চেষ্টা করলে পর্যাপ্ত পরিমাণে একটি পাওয়া যায় (উদাহরণস্বরূপ 1 টি প্রবাহ ব্যতীত সমস্ত কিছুই মারা যায়)। প্রস্তাবিত অ্যান্টি-ওভারল্যাপ অ্যালগরিদম থেকে এটি কিছুটা আলাদা সম্ভাবনার বন্টন, তবে আমি মনে করি এটি আসলে এটি আরও ভাল কারণ এটির কোনও দিকনির্দেশক পক্ষপাত নেই। বৈধতা ব্যবহার করে একটি গল্ফিশ পদ্ধতিতে পরীক্ষা করা যেতে পারে
m#\\|/#>m#\\/#
এখানে সমস্যাটি হ'ল এলোমেলো প্রতিস্থাপনটি এতই লুং এবং এই সমস্ত পালানোও \
বাইট খায়। তাই আমি ডিজিটের স্ট্রিং ব্যবহার করে আমার সারি নির্মাণ ও যথাযথ সংখ্যা প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছে
, /
এবং \
মাত্র প্রিন্ট করার পূর্বে। বেসিক এলোমেলো প্রতিস্থাপন হয়
53|16*rand
যার মধ্যে একটি দেয় 53
, 55
, 61
বা 63
সমান সম্ভাবনা থাকে। আমি তখন ব্যাখ্যা 5
এবং 1
হিসাবে
, 3
হিসাবে \
এবং 6
হিসাবে /
। এটি সারি মুদ্রণের ব্যাখ্যা করে:
say y|3615|\\/ |r
একটি গুরুতর গল্ফ প্রতিযোগিতায় আমি এখন পদ্ধতিগতভাবে বিকল্প যাদু সূত্রগুলি অন্বেষণ করতে শুরু করব, তবে এটি বেশ ভাল হওয়া উচিত (সর্বোত্তম 3 বাইটের মধ্যে)
প্রোগ্রামের বাকি উপাদানগুলি:
1x$_.6
এটি $_
(পরবর্তী মানচিত্রটি দেখুন) এর পরে উচ্চতা শূন্যস্থানগুলিতে আরম্ভ করে /
। এটি প্রথম মুদ্রিত হওয়ার উপরে একটি অদৃশ্য সারি এবং ক্ষেত্রটি যথেষ্ট প্রশস্ত রয়েছে তা নিশ্চিত করে বোল্টটি কখনই স্থানের বাইরে চলে যেতে পারে না makes
map{ ... ; say ...}(1x$_.6)x$_
আমি এই একই প্রাথমিক স্ট্রিং উচ্চতা বার প্রতিটি নতুন সারি মুদ্রণ সময় প্রক্রিয়া করব
$_=$;until$;=$_,...
বর্তমান সারিটি সংরক্ষণ করুন $;
। যদি প্রতিস্থাপনটি অবৈধ $_
থেকে পুনরুদ্ধার হয়$;
s/.6|3.?/53|16*rand/eg
আসল প্রতিস্থাপন করুন। এর আগে /
বা পরে কী আছে তা আমাকে অবশ্যই পরীক্ষা \
করতে হবে না কারণ এটি অবশ্যই একটি স্থান হবে। এটি সুবিধাজনক কারণ স্থানটি উভয় দ্বারা 1
বা প্রতিনিধিত্ব করা যেতে পারে 5
। যেহেতু আমি কেবল স্ট্রিংটি বামে স্থানের পরে স্থানটি \
অনুপস্থিত থাকার পরে স্থানটি প্যাড করেছি , সুতরাং সেই অক্ষরটিকে alচ্ছিক করুন
/3|6/>/36/
নতুন সারিটি বৈধ কিনা তা পরীক্ষা করে দেখুন
Stay safe and have fun golfing!
সম্ভবত এটিও উল্লেখ করুন যে যদি ইএএস স্ট্রাইক করে তবে সবকিছু ত্যাগ করুন এবং আদেশগুলি অনুসরণ করুন! গল্ফিং কোড এমন পরিস্থিতিতে আপনার অগ্রাধিকার নয়।