2D মুদ্রিত বস্তুর সক্ষমতা সন্ধান করুন


23

একটি কাল্পনিক 2D বিশ্বে, কোনও বস্তুর জন্য 2D মুদ্রণের নির্দেশাবলীর একটি সেট নিম্নোক্তভাবে পূর্ণসংখ্যার একটি তালিকা দ্বারা উপস্থাপন করা যেতে পারে:

1 4 2 1 1 2 5 3 4

প্রতিটি সংখ্যা সেই নির্দিষ্ট পয়েন্টে অবজেক্টের উচ্চতা উপস্থাপন করে। উপরের তালিকাটি মুদ্রিত হলে নিম্নলিখিত অবজেক্টে অনুবাদ করে:

      #
 #    # #
 #    ###
 ##  ####
#########

তারপরে আমরা এটি যতটা সম্ভব জল দিয়ে পূর্ণ করি, এর ফলস্বরূপ:

      #
 #~~~~#~#
 #~~~~###
 ##~~####
#########

সম্পূর্ণরূপে পূর্ণ হলে বস্তুর ধারণযোগ্য জলের একক হিসাবে আমরা বস্তুর সক্ষমতা নির্ধারণ করি ; এই ক্ষেত্রে, 11।

কড়া কথায় বলতে গেলে, এক ইউনিট জলের ( ~) এক জায়গায় উপস্থিত থাকতে পারে যদি এবং কেবল যদি এটি #একই সারিতে দুটি শক্ত ব্লক ( ) দ্বারা বেষ্টিত থাকে ।

চ্যালেঞ্জ

ইনপুট (যেকোন বিন্যাসে) হিসাবে ধনাত্মক পূর্ণসংখ্যার একটি তালিকা নিন এবং তালিকাটি নির্দেশ হিসাবে ব্যবহৃত হলে মুদ্রিত অবজেক্টের সক্ষমতা নির্ধারণ করুন।

আপনি ধরে নিতে পারেন তালিকায় কমপক্ষে একটি উপাদান রয়েছে এবং সমস্ত উপাদান 1 এবং 255 এর মধ্যে রয়েছে।

পরীক্ষার মামলা

+-----------------+--------+
|      Input      | Output |
+-----------------+--------+
| 1               |      0 |
| 1 3 255 1       |      0 |
| 6 2 1 1 2 6     |     18 |
| 2 1 3 1 5 1 7 1 |      7 |
| 2 1 3 1 7 1 7 1 |      9 |
| 5 2 1 3 1 2 5   |     16 |
| 80 80 67 71     |      4 |
+-----------------+--------+

উত্তর:


15

হাস্কেল, 54 বাইট

f l=(sum$zipWith min(scanl1 max l)$scanr1 max l)-sum l

এক্সপ্রেশন scanl1 max lএবং scanr1 max lএগিয়ে চলমান তালিকার সর্বাধিক চলমান সর্বাধিক এবং পিছনের দিকে গণনা করুন, অর্থাত জল প্লাস জমির প্রোফাইল যদি জল একদিকে প্রবাহিত হয়।

Orig:

      #
 #    # #
 #    ###
 ##  ####
#########

বাম:

      #~~
 #~~~~#~#
 #~~~~###
 ##~~####
#########

রাইট:

~~~~~~#
~#~~~~#~#
~#~~~~###
~##~~####
#########

তারপরে, সামগ্রিক চিত্রের প্রোফাইল হ'ল এর সর্বনিম্ন, যা যেখানে জল কোনও দিকে লিক করে না তার সাথে মিলে যায়।

নূন্যতম:

      #
 #~~~~#~#
 #~~~~###
 ##~~####
#########

পরিশেষে, জলের পরিমাণ এই তালিকার যোগফল, এতে জল এবং জমি উভয়ই থাকে, মূল তালিকার যোগফল বিয়োগ করে, যেখানে কেবল জমি থাকে।


9

জেলি, 10 বাইট

U»\U«»\S_S

যদিও এপিএলকে একাধিক বন্ধনী এবং জে দ্বি-চরিত্রের প্রতীক প্রয়োজন, অ্যালগরিদম জেলিতে সুন্দর।

     »\          Scan maximums left to right
U»\U             Scan maximums right to left
    «            Vectorized minimum
       S_S       Sum, subtract sum of input.

এখানে চেষ্টা করুন


4

এমএটিএল , ১৪

আমার মতলব উত্তর এমএটিএল অনুবাদ করেছে translated xnor এর অ্যালগরিদম

Y>GPY>P2$X<G-s

ব্যাখ্যা

Y>: cummax()(ইনপুট স্পষ্টভাবে স্ট্যাকের উপর চাপ দেওয়া হয়)

G: ইনপুট পুশ (আবার)

P: flip()

Y>: cummax()

P: flip()

2$X<: min([],[])(দ্বি-যুক্তি ন্যূনতম)

G: ইনপুট পুশ (আবার)

-: -

s: sum()


এমএটিএল কি মতলবের বিকল্প ভাষা? আপনি কি হেডারে একটি লিঙ্ক সরবরাহ করতে পারেন?
অ্যাডিসন ক্রম্প

1
@ ফ্ল্যাগএএসপিআম আমি মনে করি এটি এর থেকে কিছুটা বেশি: esolangs.org/wiki/MATL
মার্টিন

@ মার্টিনবাটনার কি এর জন্য সিউডোকোড মতলব সিউডোকোডের মতো হবে? আমি ভাবছি কোন বিষয় ভিত্তিক না হয়ে এটি সরাসরি অনুবাদ জিনিস কিনা।
অ্যাডিসন ক্রম্প

1
@ ফ্ল্যাগএএসপ্যাম এমএটিএল স্ট্যাক-ভিত্তিক, সুতরাং এটি অবশ্যই কোনও সরল প্রতিস্থাপন নয়।
মার্টিন এন্ডার

হ্যাঁ, এটি সরাসরি অনুবাদ এমএটিএল হ'ল স্ট্যাক ভিত্তিক (বিপরীত পলিশ স্বরলিপি) ম্যাটল্যাব অপারেটর এবং ফাংশনগুলির জন্য এক থেকে তিনটি অক্ষর শর্টহ্যান্ড সহ । [ Github.com/lmendo/MATL/blob/master/doc/MATL_spec.pdf] দেখুন
রেইনার পি।

3

ডায়ালগ এপিএল, 17 বাইট

+/⊢-⍨⌈\⌊⌽∘(⌈\⌽)

এটি একটি মোনাডিক ট্রেন যা ডানদিকে ইনপুট অ্যারে নেয়।

অ্যালগরিদমটি এক্সনরের মতো অনেকটা একই, যদিও আমি এটি স্বাধীনভাবে খুঁজে পেয়েছি। এটি উভয় দিকেই সর্বাধিক স্ক্যান করে (পিছনে পিছনে অ্যারেটি উল্টিয়ে, স্ক্যান করে, এবং আবার বিপরীত করে), এবং এর মধ্যে ভেক্টরাইজড ন্যূনতম সন্ধান করে। তারপরে এটি মূল অ্যারের বিয়োগ করে এবং অঙ্কগুলি।

এটি করার অন্যান্য উপায় হ'ল প্রতিটি স্থানে অ্যারে বিভক্ত করা, তবে এটি আরও দীর্ঘ।

এখানে চেষ্টা করুন


1
ঠিক একই আমি এখানে লিখতে এসেছি। :-) যখন আমরা দ্বৈত (ওরফে অধীন) অপারেটরটি পাই তখন আপনি 3 বাইটের সাহায্যে সঞ্চয় করতে পারবেন +/⊢-⍨⌈\⌊⌈\⍢⌽
অ্যাডম


1

ম্যাটল্যাব, 116 113 109 106 বাইট

n=input('');s=0;v=0;l=nnz(n);for i=1:l-1;a=n(i);w=min([s max(n(i+1:l))]);if a<w;v=v+w-a;else s=a;end;end;v

এটি বাম দিকে উচ্চ পয়েন্ট সঞ্চয় করে কাজ করে এবং প্রতিটি পরবর্তী পয়েন্ট দিয়ে পুনরাবৃত্তি করার সময় ডানদিকে সর্বোচ্চ পয়েন্টটি সন্ধান করে। যদি বর্তমান বিন্দু উভয় উচ্চ পয়েন্টের চেয়ে কম হয় তবে এটি সংখ্যার সাথে পৃথক পরিমাণে পৃথক হবে।

অবহেলিত কোড:

inputArray = input('');
leftHighPoint = inputArray(1);
volume = 0;
numPoints = nnz(inputArray);

for i = 1:numPoints-1
    currentPoint = inputArray(i); % Current value
    lowestHigh = min([max(inputArray(i+1:numPoints)) leftHighPoint]);

    if currentPoint < lowestHigh
        volume = volume + lowestHigh - currentPoint;
    else 
        leftHighPoint = currentPoint;
    end
end
volume

আমি প্রথমবার কোনও কিছু গল্ফ করার চেষ্টা করেছি, ম্যাটল্যাব এটি করা ভাল বলে মনে হচ্ছে না ....


0

ES6, 101 বাইট

a=>(b=[],a.reduceRight((m,x,i)=>b[i]=m>x?m:x,0),r=m=0,a.map((x,i)=>r+=((m=x>m?x:m)<b[i]?m:b[i])-x),r)

@ এক্সনোরের আলগোরিদমের অন্য একটি বন্দর।



0

পিপ -l , 19 বাইট

$+J(ST0XgZD1`0.*0`)

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নম্বর নেয়। বা, -rস্ট্ডিনের লাইন হিসাবে তাদের নিতে পতাকা যুক্ত করুন : এটি অনলাইনে চেষ্টা করুন!

ব্যাখ্যা

অন্যান্য সমস্ত উত্তরগুলির মতো নয়, পাইপতে এটি ASCII-art নির্মাণ এবং জল ইউনিটগুলি গণনা করা (সংশোধিত সংস্করণ) আসলে খাটো ছিল।

আমরা gআর্গুমেন্টের তালিকা দিয়ে শুরু করি ।

[1 4 2 1 5 2 3]

0Xgপ্রতিটি এন ইন এর জন্য এন জিরো স্ট্রিংয়ের একটি তালিকা তৈরি করে ।g

[0 0000 00 0 00000 00 000]

ZD1তারপরে 1ফলাফলগুলি আয়তক্ষেত্রাকার নেস্টেড তালিকার কোনও ফাঁক পূরণ করতে ব্যবহার করে এই স্ট্রিংগুলি একসাথে জিপ করুন :

[[0 0 0 0 0 0 0] [1 0 0 1 0 0 0] [1 0 1 1 0 1 0] [1 0 1 1 0 1 1] [1 1 1 1 0 1 1]]

STএই তালিকাটিকে স্ট্রিংয়ে রূপান্তর করে। -lপতাকা নির্দিষ্ট করে তালিকা হিসাবে ফর্ম্যাট করা হয় অনুসরণ: প্রতিবার নেস্টেড তালিকা একটি বিভাজক ছাড়া একসঙ্গে যোগদান করা হয়, এবং শীর্ষ স্তরে বিভাজক সম্পর্কে newline হয়। সুতরাং আমরা এই মাল্টলাইন স্ট্রিংটি পেয়েছি - মূলত, অবজেক্টটির ডায়াগ্রাম, তবে উল্টো দিকে:

0000000
1001000
1011010
1011011
1111011

এরপরে আমরা রেজিজের সমস্ত মিল খুঁজে পাই `0.*0`। এটি দুটি লম্বালম্বী দেয়াল এবং প্রতিটি লাইনের মধ্যবর্তী সমস্ত কিছুর সাথে মিলে যায়।

[0000000 001000 011010 0110]

Jএই স্ট্রিংগুলিকে এক বৃহত স্ট্রিংয়ের সাথে একত্রিত করে এবং এর $+যোগফল দেয় 1- যা বস্তুটি যে পরিমাণ জল ধরে রাখতে পারে তার পরিমাণের সমান giving

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