ষড়ভুজাকার রড স্কুপলচারে জল রাখা


22

আমার কাছে একগুচ্ছ ষড়্ভুজাকার রডগুলি বিজোড় ভাস্কর্যে একসাথে আটকানো হয়েছে। রডগুলি 1 থেকে 99 সেন্টিমিটার (সেমি) লম্বা এবং ক্রস-সেকশন অঞ্চলে 1 বর্গ সেমি। সমস্ত রডগুলি ষড়ভুজ চেহারায় কমপক্ষে অন্য একটি রডে আঠালো। রডগুলি সমস্ত তাদের নীচের প্রান্তে প্রান্তিক করা হয়।

কিছুটা ভারী বৃষ্টির পরে ভাস্কর্যটি ভরা জল। এটি কত জল ধরে?

ইনপুট

আপনার প্রোগ্রামটি (স্ট্ডিন বা একটি ফাইলের মাধ্যমে) বেশ কয়েকটি লাইনে পড়তে হবে যা এই ফাঁকে দাগের দৈর্ঘ্য উল্লেখ করে জোড়া স্পেস এবং জোড়া সংখ্যার সমন্বয়ে থাকবে:

  aa  bb
cc  dd  ee
  ff  gg

প্রতিটি রড (এখানে ডিডির মতো) উদাহরণ হিসাবে দেখানো হয়েছে সর্বাধিক 6 টি আশেপাশের রডগুলিতে আটকানো থাকে। নিখোঁজ রডগুলি গর্ত এবং জল জড়ো করে না। উদাহরণস্বরূপ, ইনপুট

  04  04
04  01  03
  04  04

নিম্নলিখিত ভাস্কর্যটি উপস্থাপন করবে:

এখানে চিত্র বর্ণনা লিখুন

কেন্দ্রের রডটি উচ্চতা 1(আমি কোনও ভাল কোণ খুঁজে পাইনি যেখানে সেই রডটিও দৃশ্যমান)। এখন এই রডের উপরের কলামটি 2 সেন্টিমিটার জল ধরে রাখতে পারে, 3ডানদিকে রডের ওপরে প্রবাহিত হওয়ার আগে । যেহেতু অন্যান্য রড কেউই তাদের উপরে কোনো পানি ধরে রাখতে পারেন, তবে উত্তর হবে 2। এখানে আরও দুটি জটিল উদাহরণ রয়েছে:

Example 2:
55  34  45  66
  33  21  27
23  12  01  77
  36  31  74
answer = 35 (  2 on top of 21 
             +11 on top of 12
             +22 on top of 01, before everything overflows over 23)

Example 3:
        35  36  77  22                      23  32  54  24
      33  07  02  04  21                  54  07  07  07  76
    20  04  07  07  01  20              54  11  81  81  07  76
  20  67  67  22  07  01  78          54  07  81  07  81  09  76
20  67  07  67  22  22  07  44  55  54  07  81  07  07  61  07  20
  67  57  50  50  07  07  14  03  02  15  81  99  91  07  81  04
67  07  50      50  87  39  45  41  34  81  07  07  89  07  81  79
  67  07  50  50  07  07  07  27  07  27  81  07  07  79  81  78
20  67  67  07  07  07  07  99  33  46  02  81  07  07  81  01  20
  33  07  07  01  05  01  92          20  02  81  07  81  15  32
    22  07  20  20  07  20              63  02  80  81  15  32
      45  20  01  20  39                  20  15  07  15  32
        23  20  20  29  43  21  18  41  20  66  66  43  21
      90                  99  47  07  20
    50                      20  02  48
  70                          56  20
                                90

answer = 1432

আউটপুট

আপনার প্রোগ্রামটি কিউবিক সেন্টিমিটারে পানির ভলিউম প্রদান করে একটি একক পূর্ণসংখ্যার আউটপুট দেয়।

স্কোর

আপনার স্কোরটি আপনার উত্স কোডের বাইট গণনা। সর্বনিম্ন জয়।

স্ট্যান্ডার্ড লুফোলগুলি যথারীতি নিষিদ্ধ।

এই ধাঁধাটি একটি এসপিওজে প্রশ্ন দ্বারা অনুপ্রাণিত হয়েছিল ।


4
আমি এটি পড়ার প্রথম দু'বার দেখার জন্য আমার সমস্যা হয়েছিল, তাই আমি উদাহরণের জন্য একটি চিত্র এবং কিছুটা ব্যাখ্যা যুক্ত করার স্বাধীনতা নিয়েছিলাম। আশা করি কিছু মনে করবেন না।
মার্টিন ইন্ডার

আকারে জলে ভরাট জড়িত অন্যান্য চ্যালেঞ্জগুলির সাথে এটি সত্যিই মিল।
ফুজজেক্সএল

2
@FUZxxl আমাদের মতো অন্যান্য চ্যালেঞ্জ রয়েছে?
অপ্টিমাইজার

1
@FUZxxl আমি কেবল এই চ্যালেঞ্জটিকেই স্মরণ করছি , যা খুব আলাদা।
মার্টিন এন্ডার

@ অপ্টিমাইজার এটি কিছুটা অনুরূপ।
জাগারব

উত্তর:


4

পাইথন 2, 222 বাইট

import sys
y=h=v=0;B={}
for l in sys.stdin:
 z=y;y+=2j
 while l:
    if"0"<l:B[z]=int(l[:2])
    l=l[2:];z+=1
while B:C=B;B={b:B[b]for b in B if(h<B[b])+sum(3>abs(c-b)for c in B)/7};a=C==B;h+=a;v+=a*sum(h>B[b]for b in B)
print v

STDIN এর মাধ্যমে ইনপুট পড়ে এবং ফলাফলটি STDOUT এ লিখে দেয়।

ব্যাখ্যা

আমরা শূন্য থেকে শুরু করি এবং নিম্নরূপে জলের স্তরটি ক্রমবর্ধমানভাবে বৃদ্ধি করি: মনে করুন যে জলের স্তরটি এইচ , এবং আমরা 1 সেন্টিমিটার জল যুক্ত করতে চাই। আমরা উচ্চতা h বা তারও কম হেক্সাগনকে কল করব , যেগুলি জলের নীচে চলে যাচ্ছে (বা ইতিমধ্যে রয়েছে) " নিমজ্জিত ।" জল যে কোনও নিমজ্জিত ষড়ভুজের মাধ্যমে ছড়িয়ে পড়বে যা ছয়টি প্রতিবেশী দ্বারা ঘিরে নেই। আমরা এই জাতীয় সমস্ত হেক্সাগনকে নির্মূল করি; অবশ্যই, এখন আরও কিছু নিমজ্জিত হেক্সাগনগুলির ছয়টিরও কম প্রতিবেশী থাকতে পারে এবং সেগুলিও অপসারণ করা দরকার। রূপান্তর না হওয়া অবধি আমরা এই ফ্যাশনে চালিয়ে যাচ্ছি, যতক্ষণ না বাকি ডুবে যাওয়া ষড়জাগুলির ঠিক ছয়টি প্রতিবেশী না থাকে। এই মুহুর্তে আমরা মোট গণনাতে নিমজ্জিত হেক্সাগনগুলির সংখ্যা (অর্জিত পানির পরিমাণ) যোগ করি এবং জলের স্তর বৃদ্ধি করি।

অবশেষে, সমস্ত ষড়যন্ত্রগুলি নির্মূল হয়ে যাবে এবং আমরা থামব।


-3<c-b<3 পরিবর্তে ব্যবহার করে আপনার একটি অক্ষর শেভ করতে সক্ষম হওয়া উচিত 3>abs(c-b)
DLosc

@DLosc আহ, কিন্তু তারা জটিল সংখ্যার করছি;)
Ell

আকর্ষনীয়। তা ধরেনি।
DLosc

2

রুবি 299

f=->i{s={}
l=i.lines
y=0
l.map{|r|x=0
r.scan(/../){s[[x,y]]=[v=$&.to_i,v<1?0:99];x+=1}
y+=1}
loop{break if s.map{|c,r|x,y=c
m = [[-1,-1],[1,-1],[-2,0],[2,0],[1,-1],[1,1]].map{|w,z|s[[x+w,y+z]]}.map{|n|n ?n[0]+n[1]:0}.min
r[1]=[0,m-r[0]].max if r[0]+r[1]>m&&r[1]>0}.none?}
s.map{|c,r|r[1]}.reduce :+}

অ্যালগরিদমের সংক্ষিপ্ত বিবরণ:

  • ইনপুটটিকে বিশ্লেষণ করে এবং প্রতিটি রডের জন্য ফর্মের একটি দুটি-উপাদান অ্যারে সংরক্ষণ করে [রড_ উচ্চতা, জল_ উচ্চতা]
  • রডগুলি একটি হ্যাশে স্থাপন করা হয় এবং তাদের x, y স্থানাঙ্ক দ্বারা সূচিযুক্ত
  • জল ফাঁস অংশটি আশেপাশের প্রতিবেশীদের রড / জলের উচ্চতা বিবেচনা করে

আরও কিছুটা পঠনযোগ্য সংস্করণ এখানে পাওয়া যায়: http://ideone.com/cWkamV

পরীক্ষা সহ অনলাইনে গল্ফযুক্ত সংস্করণটি চালান: http://ideone.com/3SFjPN


scanএকটি ব্লক যুক্তি লাগে। আপনি শুধু করতে পারি না scan(/../){...}। এর পরিবর্তে 'স্ক্যান (/../) এর মানচিত্র {| বনাম | ...} . (You don't need the | বনাম | `কারণ ইনসাইড scanব্লক আপনি যা করতে পারেন $&, $1ইত্যাদি)
জর্ডন

@ জোর্ডান দুর্দান্ত পর্যবেক্ষণ! ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.