একটি ASCII ষড়ভুজ গ্রিড আঁকুন এবং লেবেল করুন


12

ইন আমার আগের চ্যালেঞ্জ , আমি বেশিরভাগ হাতে (তেজ এর চাক্ষুষ ব্লক মোড সহায়তায়) প্রথম ডায়াগ্রাম সৃষ্টি। তবে অবশ্যই আরও ভাল উপায় থাকতে হবে ...


দুটি মাত্রা, একটি প্রস্থ এবং একটি উচ্চতার একটি ইনপুট দেওয়া হয়েছে, এএসসিআইআই আর্টের এই মাত্রাগুলি সহ একটি ষড়ভুজ গ্রিড আউটপুট দেয়।

এখানে ইন্ট্রোতে রেখাচিত চিত্রটি দেওয়া হয়েছে (ছোট সম্পাদনা সহ) যা ইনপুটটির জন্য আপনার আউটপুট হওয়া উচিত width=7, height=3:

         _____         _____         _____
        /     \       /     \       /     \
  _____/ -2,-1 \_____/  0,-1 \_____/  2,-1 \_____
 /     \       /     \       /     \       /     \
/ -3,-1 \_____/ -1,-1 \_____/  1,-1 \_____/  3,-1 \
\       /     \       /     \       /     \       /
 \_____/ -2,0  \_____/  0,0  \_____/  2,0  \_____/
 /     \       /     \       /     \       /     \
/ -3,0  \_____/ -1,0  \_____/  1,0  \_____/  3,0  \
\       /     \       /     \       /     \       /
 \_____/ -2,1  \_____/  0,1  \_____/  2,1  \_____/
 /     \       /     \       /     \       /     \
/ -3,1  \_____/ -1,1  \_____/  1,1  \_____/  3,1  \
\       /     \       /     \       /     \       /
 \_____/       \_____/       \_____/       \_____/

কয়েকটি বিষয় লক্ষ্য করুন:

  • প্রস্থ এবং উচ্চতা যথাক্রমে প্রদত্ত y এবং x স্থানাঙ্কের জন্য কতগুলি হেক্সাগন রয়েছে তার সমতুল্য। এগুলি সর্বদা বিজোড় সংখ্যা হবে।

  • প্রতিটি ষড়ভুজ ASCII শিল্প দ্বারা প্রতিনিধিত্ব করা হয়

      _____
     /     \
    /       \
    \       /
     \_____/
    

    তবে সীমান্তগুলি প্রতিবেশী হেক্সাগনগুলির মধ্যে "ভাগ" করা হয়েছে।

  • স্থানাঙ্কের কমাটি সর্বদা শীর্ষ প্রান্তের কেন্দ্রের নীচে ঠিক দুটি অক্ষর থাকে। এর পরে এক্স-স্থানাংকটি সরাসরি কমা এর আগে স্থাপন করা হয় এবং তার পরে সরাসরি y- স্থানাঙ্ক হয়।

    আপনি ধরে নিতে পারেন যে স্থানাঙ্কগুলি কখনও এত বড় হবে না যে তারা ষড়ভুজ সীমানাকে ওভারল্যাপ করবে।

ইনপুটটি একটি সাদা স্থান- / কমা-বিচ্ছিন্ন স্ট্রিং, পূর্ণসংখ্যার অ্যারে বা দুটি ফাংশন / কমান্ডলাইন আর্গুমেন্ট হিসাবে নেওয়া যেতে পারে। আউটপুট অবশ্যই একক স্ট্রিং (STDOUT- এ, ফেরতের মান হিসাবে, ইত্যাদি) হতে হবে।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

উপরের গ্রিডটি পরীক্ষার ক্ষেত্রে ব্যবহার করা যেতে পারে। সর্বাধিক আকারের width=199, height=199গ্রিডটি এখানে অন্তর্ভুক্ত করা স্পষ্টতই অবাস্তব, তবে প্রথম কয়েকটি সারি এবং কলামগুলি নিম্নলিখিতগুলির মতো হওয়া উচিত:

         _____         ___
        /     \       /   
  _____/-98,-99\_____/-96,
 /     \       /     \    
/-99,-99\_____/-97,-99\___
\       /     \       /   
 \_____/-98,-98\_____/-96,
 /     \       /     \    
/-99,-98\_____/-97,-98\___
\       /     \       /   
 \_____/-98,-97\_____/-96,
 /     \       /     \    
/-99,-97\_____/-97,-97\___
\       /     \       /   

উত্তর:


2

রুবি, 221 বাইট

->w,h{s=' '
a=(s*9+?_*5)*(w/2)+$/
(2-h*2).upto(h*2+3){|y|c=y<4-h*2 
a+=[b=c ?s:?\\,s+b,s,''][y%4]
(0-w/2).upto(w/2){|x|a+=["/#{h<y/2?s*7:"%3d,%-3d"}\\",s*7,?_*5,"/     \\"][(y+x*2+w)%4]%[x,y/4]}
a+='//  '[c ?3:y%4]+$/}
a}

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->w,h{
  s=' '                                #set s to space for golfing reasons
  a=(s*9+?_*5)*(w/2)+$/                #start building the output with a row of just _ and space

  (2-h*2).upto(h*2+3){|y|              #iterate 4 times for each row of hexagons, plus an extra 2 at the end to finish last row
    c=y<4-h*2                          #condition for first two rows
    a+=[b=c ?s:?\\,s+b,s,''][y%4]      #string to be output before main set of hexagons (spaces for top row, \ for certain other rows

    (0-w/2).upto(w/2){|x|              #iterate through hexagons on each row, 4 lines for each with the following printf type string
      a+=["/#{h<y/2?s*7:"%3d,%-3d"}\\",#line 1:contains ends / \ and numbers 
         s*7,                          #line 2 padding spaces
         ?_*5,                         #line 3 padding ___
         "/     \\"][(y+x*2+w)%4]%     #line 0 top of hexagon / \; formula to select string to be printed
           [x,y/4]                     #numbers to be printed (if format for current line does not require them they are ignored)
    }

    a+='//  '[c ?3:y%4]+$/             #ending alternates between / and space; / are suppressed for first two rows
  }
  a
}

puts g[7,3]
puts g[5,5]

আউটপুট

আমি যখন ডিবাগিং শেষ করছিলাম তখন আমি অনুমানের মধ্যে একটি অস্পষ্টতা লক্ষ্য করেছি। যেখানে w+14 দ্বারা বিভাজ্য, সেখানে প্রথম এবং শেষ x স্থানাঙ্কগুলি বিজোড় এবং কোনও দ্বিপাক্ষিকতা নেই। তবে w-14 দ্বারা বিভাজ্য যেখানে প্রথম এবং শেষ x স্থানাঙ্কগুলি সমান। আমি ধরে নিয়েছি যে প্রথম এবং শেষ কলামগুলি পরেরগুলির নীচে অফসেট করা উচিত। তবে আমি পূর্ববর্তী প্রশ্নটি পড়েছি এবং সে ক্ষেত্রে উল্লেখ করেছি যে এটি এমন বিজোড় কলামগুলি ছিল যা সমানগুলির চেয়ে নীচে অফসেট করা উচিত ( w-14 দ্বারা বিভাজ্য হিসাবে নোট করুন এটি উভয়ই করা সম্ভব নয়))

তবে এই প্রশ্নটিতে এই তফাতটি তৈরি করা হয়নি। আমি এটি অপের রায় এবং প্রয়োজনে পুনরায় কাজ করার জন্য ছেড়ে দেব, যদিও আমি না চাই prefer

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