স্ট্যাকিং ব্লক


15

নির্দিষ্ট পয়েন্টে নামার জন্য ব্লকের তালিকার একটি ইনপুট দেওয়া হয়েছে, ফলস্বরূপ "টাওয়ার" এর উচ্চতা নির্ধারণ করুন।

এই চ্যালেঞ্জটি ব্যাখ্যা করার সর্বোত্তম উপায় উদাহরণ হিসাবে। ইনপুটটি এন ব্লকগুলির প্রতিনিধিত্ব করে 2n পূর্ণসংখ্যার একটি তালিকা হবে । প্রথম পূর্ণসংখ্যাটি হ'ল ব্লকের এক্স অবস্থান, 0-সূচকযুক্ত এবং দ্বিতীয়টি হল ব্লকটি কত প্রশস্ত। উদাহরণস্বরূপ, একটি ইনপুট ব্লকটি উপস্থাপন করে (নীচে লেবেলযুক্ত x স্থানাঙ্কগুলি সহ):2 4

  ####
0123456789

এখন, ধরা যাক ইনপুটটি 2 4 4 6। অর্থাত, x = 2 এ একটি ব্লক 4 প্রস্থের সাথে এবং একটি x = 4 এ 6 প্রস্থের সাথে:

    ######
  ####

নোট করুন যে।) ব্লক সর্বদা টাওয়ারের একেবারে শীর্ষ থেকে "ড্রপ" করে এবং খ।) ব্লকগুলি কখনই "ওভার" পড়বে না (অর্থাত্ তারা সর্বদা ভারসাম্য বজায় রাখবে)। সুতরাং, এর একটি ইনপুট 2 4 4 6 12 1প্রতিনিধিত্ব করে:

    ######
  ####      #

নোট করুন যে চূড়ান্ত ব্লকটি "গ্রাউন্ডে" পড়ে গেছে।

আপনার চূড়ান্ত আউটপুটটি প্রতিটি এক্স-ভ্যালু পর্যন্ত বৃহত্তম পর্যন্ত টাওয়ারের সর্বোচ্চ উচ্চতা হওয়া উচিত। সুতরাং, ইনপুট 2 4 4 6 12 1ফলাফল আউটপুট হতে হবে 0011222222001:

    ######
  ####      #
0011222222001

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

আউটপুটকে একক স্ট্রিং হিসাবে অ-সংখ্যাসূচক অক্ষর দ্বারা পৃথক করা যেতে পারে (উদা। "0, 0, 1, ..."), একটি একক স্ট্রিং সমস্ত অঙ্কের তালিকা তৈরি করে (উদাঃ "001..."- সর্বোচ্চ উচ্চতা 9 বা তার কম হবে বলে গ্যারান্টিযুক্ত), বা পূর্ণসংখ্যার অ্যারে।

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

পরীক্ষার কেস:

In                                   Out
---------------------------------------------------------
2 4 4 6 12 1                         0011222222001
0 5 9 1 6 4 2 5                      1133333222
0 5 9 1 2 5 6 4                      1122223333
0 5 2 5 6 4 9 1                      1122223334
20 1 20 1 20 1                       00000000000000000003
5 5                                  000011111
0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 4  123456789999

আমরা কি 2-টিউপলসের অ্যারে হিসাবে ইনপুট নিতে পারি?
lirtosiast

@ থমাসকওয়া না, ইনপুটটি অবশ্যই 1-মাত্রিক অ্যারে হতে হবে।
ডুরকনব

উত্তর:


2

সিজেম, 34 30 বাইট

Lq~2/{eeWf%e~_2$:).*:e>f*.e>}/

সিজ্যাম-স্টাইলের অ্যারের হিসাবে ইনপুট, অঙ্কের স্ট্রিং হিসাবে আউটপুট।

সমস্ত পরীক্ষার কেস চালান।

এখানে অন্য ধারণার দুটি রূপ রয়েছে তবে এটি বর্তমানে 2 বাইট বেশি দীর্ঘ:

Lq~2/{_:\3$><0+:e>)aeez.*e_.e>}/
LQ~2/{_:\3$><0+:e>)aeez.+e~.e>}/

6

পাইথন 3, 89

def f(a):
 h=[]
 while a:x,w,*a=a;h[:x+w]=(h+[0]*x)[:x]+[max(h[x:x+w]+[0])+1]*w
 return h

এটি অনলাইনে চেষ্টা করুন

ফাংশনটি পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং প্রদান করে।

def f(a):                       # input as list of integers
  h=[]                          # list of heights
  while a:                      # while there's input left
    x,w,*a=a;                   # pop first 2 integers as x and w

    h[:x+w]=                    # change the heights between 0 and x+w
      (h+[0]*x)[:x]+            # left of x -> unchanged but padded with zeros
      [max(h[x:x+w]+[0])+1]*w   # between x and x+w -> set to the previous max + 1

  return h                      # return the list of heights

2

রুবি, 88 87 বাইট

f=->i{o=[]
(s,l,*i=i
r=s...s+l
o[r]=[([*o[r]]+[0]).max+1]*l
o.map! &:to_i)while i[0]
o}

এটি অনলাইনে চেষ্টা করুন।

গ্রিসের উত্তরে অনুপ্রাণিত হয়েছে তবে ভিন্ন ভাষায় এবং কিছুটা খাটো।

ব্যাখ্যা:

f=->i                        # lambda with parameter i, expects array of ints
{
    o=[]                     # output
    (
        s,l,*i=i             # pop start and length
        r = s...s+l          # range is used twice, so shorten it to 1 char
        o[r] =
            [(
                    [*o[r]]  # o[r] returns nil if out of bounds, so splat it into another array
                    +[0]     # max doesn't like an empty array, so give it at least a 0
            ).max+1]*l       # repeat max+1 to fill length
        o.map! &:to_i        # replace nil values with 0
    ) while i[0]             # i[0] returns nil when i is empty, which is falsy
    o                        # return o
}

1

এপিএল, 79 বাইট

{⊃{o←(z←(≢⍵)⌈a←+/⍺)↑⍵⋄e←(z↑(-a)↑⍺[1]⍴1)⋄o+0⌈o-⍨e×e⌈.+e×o}/⌽(⊂⍬),↓(⌽2,0.5×≢⍵)⍴⍵}

একটি এপিএল অ্যারে হিসাবে ইনপুট, অঙ্কের একটি এপিএল অ্যারে হিসাবে আউটপুট।


{⊃{o←⍵↑⍨z←(≢⍵)⌈a←+/⍺⋄e←z↑(-a)↑⍺[1]⍴1⋄o+0⌈o-⍨e×e⌈.+e×o}/⌽(⊂⍬),↓⍵⍴⍨⌽2,.5×≢⍵}(আমার god
শ্বর,

দয়া করে, আপনার কথার সাথে সাবধানতা অবলম্বন করুন ... আপনি এবং এর মধ্যে পার্থক্যটি বলে মনে করছেন না 1↑এবং এর কারণে আপনি এমন পরামর্শ দিয়েছেন যা আপডেট হওয়া প্রোগ্রামকে ভুল ফলাফল দেয় তবে আমি আপনাকে পৃষ্ঠপোষকতা করি না।
lstefano

হ্যাঁ, আমি কখনও কখনও যখন দেখি যে কিছু জিনিস গল্ফ করতে সক্ষম হয়। তবে অন্যান্য গল্ফগুলি এখনও প্রয়োগ করা উচিত।
জাকারি

তারা সবাই করে। এবং আমি আপনার পরামর্শগুলি যথাযথ ক্রেডিট সহ একীভূত করেছি।
lstefano

- - আপনি কি? - -0.5
জাকারি

0

জাভা 1.8, 351 329 বাইট

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

interface B{static void main(String[]x){Byte b=1;int i=0,s,c,m=0,h,a=x.length,t[];for(;i<a;){s=b.valueOf(x[i++]);c=b.valueOf(x[i++]);m=m>s+c?m:s+c;}t=new int[m];for(i=0;i<a;){h=0;s=b.valueOf(x[i++]);c=b.valueOf(x[i++]);for(m=s;m<s+c;m++)if(t[m]>=h)h=t[m]+1;for(m=s;m<s+c;)t[m++]=h;}for(i=0;i<t.length;)System.out.print(t[i++]);}}

Ungolfed

interface B {
static void main(String[]x){
    int start, count, maxWidth=0, height, args=x.length, totals[];
    Byte b=1;
    for (int i=0; i<args;){
        start = b.valueOf(x[i++]);
        count = b.valueOf(x[i++]);
        maxWidth = maxWidth>start+count ? maxWidth : start+count; 
    }
    totals=new int[maxWidth];
    for (int i=0; i<args;){
        height=0;
        start = b.valueOf(x[i++]);
        count = b.valueOf(x[i++]);
        for (int j = start; j<start+count; j++) {
            if (totals[j]>=height) {
                height=totals[j]+1;
            }
        }
        for (int j = start; j<start+count; j++) {
            totals[j] = height;
        }
    }
    for (int i=0;i<totals.length; i++){
        System.out.print(totals[i]);
    }
}
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.