হারিকেন ম্যাথু এবং বিদ্যুৎ বোল্টস


27

চ্যালেঞ্জ

এই চ্যালেঞ্জ এবং দুষ্টু হারিকেন ম্যাথিউ দ্বারা অনুপ্রাণিত , আমরা গতিশীলভাবে কিছু বিদ্যুতের বল্ট উত্পাদন করব।

n = 15:

   \
   /\
  /  \
 /   /
/\  /\
 /  \ \
/   / /\
   /\ \
  / /  \
 /\ \  /\
  /  \ \
 /\  /  
   \
    \
    /\

ইনপুট

ধনাত্মক পূর্ণসংখ্যা nবাজ বৃত্তাকার গভীরতা নির্ধারণ করে।

বিধি এবং সীমাবদ্ধতা

  • /এবং \ব্যবহার করা উচিত
  • বিদ্যুতের দিক নির্দেশনা করার সম্ভাবনাটি নিম্নরূপ:
    • 25% 2 টি পথে বিভক্ত হয়
    • 25% পথ শেষ প্রান্তে পৌঁছেছে
    • 25% বামে যায়
    • 25% ডান যায়
    • নীচে ওভারল্যাপিং এবং শেষ প্রান্তে কয়েকটি ব্যতিক্রম রয়েছে:
  • কোডটি নির্বিচারে হওয়া উচিত নয়, প্রতিবার এলোমেলোভাবে একটি নতুন বিদ্যুতের বোল্ট তৈরি করা উচিত
  • বল্টগুলি ওভারল্যাপ করা উচিত নয়: উদাহরণস্বরূপ যদি বর্তমান বল্টের বাম দিকে ইতিমধ্যে একটি বল্ট রয়েছে, বর্তমান বল্টটি হয় শেষ হয় বা ডানদিকে যেতে হবে, তবে বাম বা বিভক্ত হওয়া উচিত নয় (সম্ভাব্যতা এখনও প্রযোজ্য, এক্ষেত্রে এটি 50% প্রান্তে পরিণত হয়) / 50% ডান)
  • যদি অন্য কোনও উপলভ্য বিভক্ত পাথের অস্তিত্ব না থাকে, তবে পথটি শেষ হবে না: উদাহরণস্বরূপ শুরুতে যখন কেবল 1 টি পাথ থাকে, পথটি বিচ্ছিন্ন না হওয়া অবধি শেষ করা উচিত নয়, যখন একাধিক পাথ থাকে তখনও প্রয়োগ হয় তবে একটি পথ ব্যতীত সমস্তই মারা যায় , (সম্ভাবনা 33% বিভক্ত হয়ে যায় / 33% বাম / 33% ডান) আপনার লক্ষ্যটি নীচে পৌঁছানো
  • বামদিকে সাদা স্থান যুক্ত করা যেতে পারে (আপনার কেবলমাত্র উচ্চতা -1 হওয়া উচিত)
  • তবে আপনি बोल্টটি তৈরি করতে চান আপনার উপর নির্ভর করে, আপনি নীচ থেকে উপরে, বাম থেকে ডান, ইত্যাদি যেতে পারেন যতক্ষণ না উপরের সমস্ত বিধিগুলি সন্তুষ্ট থাকে

আরেকটি উদাহরণ

n = 10

 \
 /
 \
 /\
  /\
 / /
/\ \
 / /\
 \   \
 /

হারিকেন ম্যাথু স্পষ্টতই আকাশে লাল বোল্টের শুটিং করছে, তাকে স্প্রাইট বলে

সুরক্ষিত থাকুন এবং মজাদার গল্ফ করুন! আপনি যখন কোনও নিরাপদ অঞ্চলে থাকবেন তখন দয়া করে গল্ফকে দায়বদ্ধ করুন !!


7
Stay safe and have fun golfing!সম্ভবত এটিও উল্লেখ করুন যে যদি ইএএস স্ট্রাইক করে তবে সবকিছু ত্যাগ করুন এবং আদেশগুলি অনুসরণ করুন! গল্ফিং কোড এমন পরিস্থিতিতে আপনার অগ্রাধিকার নয়।
এরিক আউটগল্ফার

17
@ এরিকথগল্ফার আপনি তখন সত্যিকারের গল্ফার নন।
নীল

4
আমি বিশ্বাস করি না যে "কেন্দ্রের সর্বাধিক পথটি মাটিতে পৌঁছানো উচিত" বাকী র্যান্ডম-প্রজন্মের বর্ণনার সাথে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, মূল বল্টের পক্ষে দু'বার বিভক্ত হওয়া এবং তারপরে মাঝের দুটি বোল্টের শেষ হওয়া এলোমেলোভাবে সম্ভব; নির্দেশিত সম্ভাব্যতাগুলি সংরক্ষণ করার পরে কীভাবে এই সম্ভাবনাটি ওভাররাইড করা যেতে পারে?
গ্রেগ মার্টিন

এছাড়াও, যদি (উদাহরণস্বরূপ) প্রথম দুটি পদক্ষেপ দুটি বিভক্ত হয় তবে কী হবে? তারপরে মাঝের দুটি বলটি একে অপরকে স্পর্শ করছে, যা সমস্যাযুক্ত বলে মনে হচ্ছে তবে বিশেষ ক্ষেত্রেও তা অস্বীকার করা যায় না।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন কেন্দ্রের বেশিরভাগ অংশে ভাল পয়েন্ট, মূলত আমি এটি একটি ভারসাম্য বল্টু উত্পন্ন করার আশা করছিলাম, তবে এখন আমি এই সীমাবদ্ধতা ছাড়াই প্রায় 50% সময়কালে এটি মাঝখানে কোথাও শেষ হওয়া উচিত বলে মনে করি। 15 এর ডান বা বাম বেশিরভাগ পথ অবতরণ করার সুযোগ কেবল 1-2% ছিল। আমি সেই নিয়ম সরিয়ে দেব। এবং 2 টি ধাপ বিভক্ত অংশের জন্য, কেবলমাত্র প্রতিরোধ করার জন্য হ'ল কোনও 2 পাথ 2 পাথের সাথে যোগ দেওয়া উচিত নয়: \/যে কোনও সময়ে।
জুলুকাবার্গ

উত্তর:


6

পার্ল, 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/

নতুন সারিটি বৈধ কিনা তা পরীক্ষা করে দেখুন


+1 ঝরঝরে! আপনার এই অনলাইন পরীক্ষককে অন্তর্ভুক্ত করা উচিত perl -M5.010 main.pl <<< 25, আমি কিছু সুন্দর ফলাফল পেয়ে যাচ্ছি!
Zukaberg

মন একটু বুঝিয়ে বলছে কীভাবে কাজ করে? আমি তাদের হাহা উত্সাহিত করতে খুব মজা করছি, আমি সত্যই এ জাতীয় ভাল ফলাফলের প্রত্যাশা করি না।
Zukaberg

দুর্ভাগ্যক্রমে, আপনাকে এর জন্য 3 বাইট যুক্ত করতে হবে-n , কারণ স্থান এবং ড্যাশ গণনাও খুব বেশি। একই নিয়মটি কমান্ড-লাইন আর্গুমেন্টের জন্য। "বিশেষ অনুরোধগুলি" দেখুন, দ্বিতীয় বুলেট-পয়েন্ট: আমি এগুলি ছাড়াই সংক্ষিপ্ত সমমানের অনুরোধকে চরিত্র গণনার মধ্যে পার্থক্য হিসাবে গণনা করি।
এরিক দি আউটগল্ফার

1
কারণ এই প্রোগ্রাম ব্যবহার কমান্ড লাইন থেকেও কাজ করে জরিমানা @EriktheGolfer না, +1 টি ঠিক আছে -nEযা চেয়ে শুধুমাত্র 1 টি অক্ষর বেশি -E। (নিবন্ধটি আপনাকে রেফারেন্সড দেখুন। এই প্রয়োজনীয়তার পরিত্রাণ পায় -M5.010) আমি সবসময় ফাইল হিসেবে আমার কোড উপস্থিত করা হয়েছে কারণ এটি আরও সুবিধাজনক, তবে আমি সর্বদা এর মতো বিকল্পগুলি গণনা করি: এটি কমান্ডলাইন থেকে চালানো যেতে পারলে আমি স্থান এবং ড্যাশ গণনা করি না। এটা যদি আবশ্যক (যেমন, কারণ এটি ব্যবহার করে একটি ফাইল হতে do$0) আমি কি স্থান এবং ড্যাশ গণনা
টন Hospel

টনহোস্পেল ওহ, আমি আপনাকে জানতাম না যে আপনি ব্যবহার করেছেন -E। যদি তাই হয়, আপনি ভাল।
এরিক দ্য আউটগল্ফার

0

জাভাস্ক্রিপ্ট (ES6), 154 বাইট

f=(n,r=[],s=" ".repeat(n)+"/",t=s.replace(/ \/|\\ |\\$/g,_=>"  /  \\/\\".substr(Math.random()*8&6,2)))=>n?/^ +$|\\\//.test(t)?f(n,r,s):f(n-1,[...r,t],t):r
<input type="number" min=1 oninput=o.textContent=f(this.value).join`\n`><pre id=o>

@ টনহসপেলের উত্তর না পাওয়া অবধি আমি বাস্তবায়নের সাথে লড়াই করেছি, যার ঠিক এ মুহূর্তে এটি একটি বন্দরে পতিত হয়েছে। নমুনা আউটপুট:

         /\
        / /\
       /\   \
        /\   \
         /\  /
          / /\
         / / /\
            / /\
            \   \
             \
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.