ব্রাশ স্ট্রোক দিয়ে একটি স্কাইলাইন Coverেকে দেওয়া


43

একটি অ-নেতিবাচক পূর্ণসংখ্যার স্কাইলাইন উচ্চতার তালিকা দেওয়া হয়েছে, এটি coverাকতে কতগুলি নিরবচ্ছিন্ন 1-ইউনিট-উচ্চতর অনুভূমিক ব্রাশ স্ট্রোকের উত্তর দিন।

[1,3,2,1,2,1,5,3,3,4,2]রূপান্তরিত:

      5    
      5  4 
 3    5334 
 32 2 53342
13212153342

নয়টি ব্রাশ স্ট্রোক দরকার:

      1    
      2  3 
 4    5555 
 66 7 88888
99999999999

উদাহরণ

[1,3,2,1,2,1,5,3,3,4,2]9

[5,8]8

[1,1,1,1]1

[]0

[0,0]0

[2]2

[2,0,2]4

[10,9,8,9]11


আগ্রহী উচ্চ প্রতিনিধির ব্যবহারকারীদের জন্য: উপর ভিত্তি করে এই অনুযায়ী এই
অ্যাডম

2
সুতরাং, সমস্ত ব্রাশ স্ট্রোক অনুভূমিক?
tsh

1
@th ভাল পয়েন্ট। যোগ করা হয়েছে।
অ্যাডাম

এটি কোডগল্ফ ছিল না, তবে আমার কাছে প্রায় এক বছর আগে একটি সাক্ষাত্কার কোড পরীক্ষার জন্য এই প্রশ্নটি ছিল।
luizfzs

উত্তর:


35

জাভাস্ক্রিপ্ট (নোড.জেএস) , 38 বাইট

a=>a.map(v=>(n+=v>p&&v-p,p=v),p=n=0)|n

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

কেবল একটি লোভী অ্যালগরিদম যা বাম থেকে ডানে স্ক্যান করে, প্রয়োজনে কেবল রেখাগুলি আঁকুন এবং যতক্ষণ সম্ভব এটিকে আঁকুন।

ধন্যবাদ আরনাউল্ড, 2 3 বাইট সংরক্ষণ করুন


পছন্দ করুন একেবারে ভুলে গেছি
tsh

আপনি এটি কীভাবে উপলব্ধি করলেন?
অ্যাডাম

@ অ্যাডম কিছুই জাদু নেই। প্রথমবার আমি প্রশ্নটি পড়তে গিয়ে আমি কীভাবে অনুসন্ধান করব সে সম্পর্কে আমি বিভ্রান্ত হয়ে পড়েছিলাম যতক্ষণ না বুঝতে পারি যে সমস্ত লাইন কেবল অনুভূমিক নয়। এবং তারপরে এই সূত্রটি সবেমাত্র আমার মনে আসে স্বাভাবিকভাবে ....
tsh

4
যাদুটি প্রক্রিয়াটি বর্ণনা করার জন্য একটি উপযুক্ত-শব্দের মতো মনে হচ্ছে।
অ্যাডম

1
যদিও এটি এখন বহুল ব্যবহৃত অ্যালগরিদমের মূল, এখানে এটি ব্যাখ্যা করা হয়েছে
অ্যাডাম

28

05 এ বি 1 ই ,  8 7  5 বাইট

@ আদনানকে 2 বাইট সংরক্ষণ করা হয়েছে

0š¥þO

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

কিভাবে?

এটি প্রথমে @tsh দ্বারা পাওয়া আলগোরিদিমটি ব্যবহার করছে । আপনি যদি এই উত্তরটি পছন্দ করেন তবে তাদের উত্তরটিও উজ্জীবিত করতে ভুলবেন না !

প্রতিবারের চেয়ে আকাশচুম্বী কম বা তত বেশি হলে ব্রাশস্ট্রোকগুলি কেবল প্রসারিত করে 'বিনামুল্যে' আঁকা যায়।

উদাহরণস্বরূপ, নীচের চিত্রটিতে আকাশচুম্বী এবং আঁকার কোনও দাম নেই।BC

অন্যদিকে, আকাশচুম্বী আঁকার জন্য আমাদের 2 টি নতুন ব্রাশস্ট্রোক প্রয়োজন , সেগুলির পরে সেগুলি পুনরায় ব্যবহার করা হচ্ছে কিনা তা বিবেচ্য নয়।E

ভবন

প্রথম আকাশচুম্বী জন্য, আমাদের সর্বদা যতটা ব্রাশস্ট্রোক প্রয়োজন সেখানে এটি মেঝে রয়েছে।

এটিকে গণিতে রূপান্তর করা:

S=h0+i=1nmax(hihi1,0)

আমরা যদি তালিকাতে পূর্বে অর্পণ করি তবে এটিকে সরলীকৃত করা যেতে পারে:0

S=i=1nmax(hihi1,0)

মন্তব্য

0š¥þO     # expects a list of non-negative integers  e.g. [10, 9, 8, 9]
0š        # prepend 0 to the list                    -->  [0, 10, 9, 8, 9]
  ¥       # compute deltas                           -->  [10, -1, -1, 1]
   þ      # keep only values made of decimal digits
          # (i.e. without a minus sign)              -->  ["10", "1"]
    O     # sum                                      -->  11

আমি মনে করি 0š¥ʒd}Oআপনাকে একটি বাইট বাঁচায়
মিঃ এক্সকোডার

@ নন্টবিএক্স-ট্রিপলোট আমি যখন আমার মন্তব্যটি দেখেছিলাম ঠিক তখনই আমার উত্তরটি সম্পাদনা করছিলাম;)
আরনাউল্ড

4
সুন্দর ব্যাখ্যা।
অ্যাডাম

1
প্রতিস্থাপন করা হচ্ছে ʒd}সঙ্গে þআপনি দুই বাইট সংরক্ষণ করা উচিত।
আদনান

@ আদনান আহ, সুন্দর ধন্যবাদ!
আরনাউল্ড

7

পাইথন 3 , 37 বাইট

lambda a:sum(a)-sum(map(min,a[1:],a))

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

পাইথন 3 এ স্যুইন 3-এ স্যুইচ করে -5 বাইট


পাইথন 2 , 47 43 42 বাইট

lambda a:sum(a)-sum(map(min,a[1:],a[:-1]))

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

অল্টার:

lambda a:sum(a)-sum(map(min,zip(a[1:],a)))

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


পাইথন 3 এ আপনি [: -1] খনন করতে পারেন, 5 বাইট সংরক্ষণ করতে পারেন।
সারিন

@ স্যারিন ধন্যবাদ: ডি, আমি জানতাম না ম্যাপটি পাইথন 2 এবং 3
-র

7

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

(0%)
p%(h:t)=max(h-p)0+h%t
p%_=0

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

লিনের সমাধানের একটি উন্নতি pযা পরবর্তী উপাদানটির পরিবর্তে পূর্ববর্তী উপাদানটিকে ট্র্যাক করে । এটি বেস কেস এবং পুনরাবৃত্তির কলটি সংক্ষিপ্ত করে দেওয়ার প্রয়োজনের বিনিময়ে সংক্ষিপ্ত করে তোলে (0%)

max(h-p)0max h p-pএকই দৈর্ঘ্যের জন্য হতে পারে ।



5

কে (ওকে) , 12 7 বাইট

-5 বাইট ধন্যবাদ এনএনজি!

আরনাউল্ডের 05AB1E সমাধান (এবং টিএসএসের জাভাস্ক্রিপ্ট সমাধান) এর একটি কে (ওকে) পোর্ট:

+/0|-':

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

জে , 15 বাইট

আরনাউল্ডের 05AB1E সমাধানের (এবং টিএসএসের জাভাস্ক্রিপ্ট সমাধান) এর এজে পোর্ট:

1#.0>./2-~/\0,]

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

আমার নিষ্পাপ সমাধান:

জে , 27 বাইট

1#.2(1 0-:])\0,@|:@,~1$~"0]

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


2
ঠিক আছে: প্রতিটি পূর্বে ( ':) (একটি অন্তর্নিহিত পরিচয় উপাদান ব্যবহার 0জন্য -তালিকা করার আগে), তাই 0,অপ্রয়োজনীয়। আপনি { x}এটিকে একটি সংমিশ্রণ করতে বাদ দিতে পারেন:+/0|-':
ngn

@ ধন্যবাদ! স্পষ্টতই আমি এটি ভুলে গেছি:Some primitive verbs result in a different special-cased initial value: +, *, - and & are provided with 0, 1, 0 or the first element of the sequence, respectively
গ্যালেন ইভানভ

5

হাস্কেল , 34 32 বাইট

লিন দ্বারা ছাঁটাই 2 বাইট

g x=sum$max 0<$>zipWith(-)x(0:x)

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

সুতরাং শুরু করার জন্য আমাদের আছে zipWith(-)। এটি দুটি তালিকাগুলি নিয়েছে এবং তাদের যুগলতর পার্থক্যগুলির একটি নতুন তালিকা তৈরি করে। আমরা তখন এটি xএবং এর সাথে একত্রিত করি (0:x)(0:)একটি ফাংশন যা তালিকার সামনের দিকে শূন্য যুক্ত করে এবং এর সাথে একত্রিত হয়ে zipWith(-)আমরা সেই তালিকার ক্রমাগত উপাদানগুলির মধ্যে পার্থক্য পেতে পারি সামনের শূন্যের সাথে। তারপরে আমরা সমস্ত নেতিবাচক দিকগুলি শূন্যে পরিণত করি (max 0<$>)। এটি একটি নতুন তালিকা তৈরি করে যেখানে প্রতিটি উপাদান প্রতিটি টাওয়ারে শুরু হওয়া নতুন স্ট্রোকের সংখ্যা। মোট পেতে আমরা এইগুলির সাথে কেবল সংক্ষেপে sum


2
g x=sum$max 0<$>zipWith(-)x(0:x)32 বাইট হয় :)
লিন

যেমনsum.zipWith((max 0.).(-))<*>(0:)
লিন

@ লিন আপনার দ্বিতীয়টির জন্য অতিরিক্ত বন্ধনী প্রয়োজন কারণ যেটির .চেয়ে বেশি অগ্রাধিকার রয়েছে <*>
গম উইজার্ড

3

জাপট , 8 বাইট

@ শেগি থেকে -2 বাইট

mîT Õ¸¸è

ব্যাখ্যা

mîT Õ¸¸è      Full program. Implicit input U
                e.g. U = [2,0,2]
mîT             Map each item X and repeat T(0) X times
                     U = ["00","","00"]
    Õ           Transpose rows with columns
                     U = ["0 0","0 0"]
     ¸¸         Join using space and then split in space
                     U = ["0","0","0","0"]
        è       Return the count of the truthy values

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


8 বাইট:mîT Õ¸¸è
শেগি

1
A.y()এর প্যাডিংয়ের দুর্দান্ত ব্যবহার ।
শেগি


3

জেলি , 5 বাইট

আমার 05AB1E উত্তরের একটি বন্দর , যা নিজেই @tsh জেএস উত্তরের অনুরূপ ।

ŻI0»S

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

মন্তব্য

ŻI0»S    - main link, expecting a list of non-negative integers  e.g. [10, 9, 8, 9]
Ż        - prepend 0                                             -->  [0, 10, 9, 8, 9]
 I       - compute the deltas                                    -->  [10, -1, -1, 1]
  0»     - compute max(0, v) for each term v                     -->  [10, 0, 0, 1]
    S    - sum                                                   -->  11

3

জাপট , 7 6 বাইট

änT fq

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

অলিভারকে ধন্যবাদ 1 বাইট

änT xwT    :Implicit input of integer array
än         :Consecutive differences / Deltas
  T        :  After first prepending 0
    f      :Filter elements by
     q     :  Square root (The square root of a negative being NaN)
           :Implicitly reduce by addition and output


খুব ভাল, @ অলিভার; এটা ভাবেন না।
শেগি


2

রেটিনা 0.8.2 , 21 বাইট

\d+
$*
(1+)(?=,\1)

1

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

\d+
$*

অ্যানারিতে রূপান্তর করুন।

(1+)(?=,\1)

পরবর্তী টাওয়ারের সাথে সমস্ত ওভারল্যাপ মুছুন, যার জন্য নতুন স্ট্রোকের প্রয়োজন নেই।

1

বাকি স্ট্রোক গণনা করুন।


2

কমন লিস্প, 88 87 বাইট

(lambda(s)(let((o 0))(dolist(c s)(incf o(max 0 c))(mapl(lambda(y)(decf(car y)c))s))o))

অ minified

(lambda (skyline)
  (let ((output 0))
    (dolist (current-skyscraper-height skyline)
      (incf output (max 0 current-skyscraper-height))
      (mapl (lambda (skyscraper)
              (decf (car skyscraper) current-skyscraper-height))
            skyline))
    output)))

এটা পরীক্ষা করো

যখন একটি টাওয়ার আঁকা হয়, তখন এটির উচ্চতার সমান বেশ কয়েকটি ব্রাশস্ট্রোক লাগে। এই ব্রাশস্ট্রোকগুলি নিম্নলিখিত সমস্তগুলিতে অনুবাদ করে, যা অন্য সমস্ত টাওয়ার (এবং নিজেই, তবে এটি কোনও ব্যাপার নয়) থেকে বর্তমান টাওয়ারের উচ্চতা বিয়োগ করে এখানে নির্দেশিত হয়েছে। যদি নিম্নলিখিত টাওয়ারটি সংক্ষিপ্ত হয়, তবে এটি একটি নেতিবাচক সংখ্যায় ঠেলে দেওয়া হবে, এবং এই নেতিবাচক সংখ্যাটি পরবর্তী সময়ে যে টাওয়ারগুলি অনুসরণ করবে তা থেকে বিয়োগ করা হবে (ব্রাশস্ট্রোকগুলি ইঙ্গিত করে যা পূর্ববর্তী টাওয়ার থেকে অনুবাদ করা যায় না পরবর্তী অংশে)। এটি প্রকৃতপক্ষে পূর্বেরগুলি সহ সমস্ত টাওয়ার হাইটগুলি থেকে সংখ্যাটি বিয়োগ করে তবে এটি কোনও বিষয় নয় কারণ আমরা আগেরটি আবার দেখি না।


পিপিসিজিতে আপনাকে স্বাগতম। আপনি যাচাইকরণের স্বাচ্ছন্দ্যের জন্য সম্ভবত কোনও অনলাইন পরীক্ষার পরিবেশের জন্য একটি লিঙ্ক সরবরাহ করতে পারেন?
জোনাথন ফ্রেচ

হ্যাঁ একেবারে. rextester.com/TKBU14782 উত্তর শীঘ্রই আপডেট করা হবে
Charlim

সাবাশ. একটি সুন্দর, কাজ করা প্রথম পোস্টের জন্য +1। মজা গল্ফিং।
জনাথন ফ্রেচ

1

05 এ বি 1 ই , 13 10 বাইট

Z>Lε@γPO}O

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Z            # Get the maximum of the (implicit) input-list
 >           # Increase it by 1 (if the list only contains 0s)
  L          # Create a list in the range [1, max]
   ε         # Map each value to:
    @        #  Check if this value is >= for each value in the (implicit) input
     γ       #  Split into chunks of adjacent equal digits
      P      #  Take the product of each inner list
       O     #  Take the sum
        }O   # And after the map: take the sum (which is output implicitly)

1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) পতাকা /u:System.Math, 47 বাইট সহ

n=>n.Select((a,i)=>i<1?a:Max(a-n[i-1],0)).Sum()

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

পুরানো সংস্করণ, পতাকা সহ /u:System.Math, 63 বাইট

n=>n.Aggregate((0,0),(a,b)=>(a.Item1+Max(0,b-a.Item2),b)).Item1

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

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


1

পাইথ, 8 বাইট

s>#0.++0

তবুও @ tsh এর অপূর্ব উত্তরের একটি বন্দর । SUM (লাগে sইতিবাচক মান (এর) >#00 prepended সঙ্গে ইনপুটের বদ্বীপ এর) (। + +) ( +0Q, Trailing প্রশ্ন অনুমিত)।

এটি এখানে অনলাইনে চেষ্টা করুন , বা এখানে সমস্ত পরীক্ষার কেস একবারে যাচাই করুন

স্ট্রিং যোগদানের পদ্ধতি, 10 বাইট

অন্যান্য উত্তরগুলি ব্রাউজ করার আগে এটিই আমি সমাধান লিখেছিলাম।

lcj.t+d*LN

পরীক্ষা স্যুট.

lcj.t+d*LNQ   Implicit: Q=eval(input()), b=<newline>, N=<quote mark>
              Trailing Q inferred
        L Q   Map each element of Q...
       * N    ... to N repeated that many times
     +b       Prepend a newline
   .t         Transpose, padding with spaces
  j           Join on newlines
 c            Split on whitespace
l             Take the length, implicit print

1

ক্লোজার, 50 বাইট

#((reduce(fn[[s n]i][(+(max(- i n)0)s)i])[0 0]%)0)

এটি অনলাইন চেষ্টা করুন! (কেন এটি কিছু মুদ্রণ করে না?)

#( ; begin anonymous function
    (reduce
        (fn [[s n] i] ; internal anonymous reducing function, destructures accumulator argument into a sum and the previous item
            [(+ (max (- i n) 0) s ; the sum part of the accumulator becomes the previous sum plus the larger of zero and the difference between the current number and the last one, which is how many new strokes need to be started at this point
            i]) ; ...and the previous item part becomes the current item
        [0 0] ; the initial value of the accumulator gives no strokes yet, and nothing for them to cover yet
        %) ; reduce over the argument to the function
    0) ; and get the sum element of the last value of the accumulator.

পিপিসিজিতে আপনাকে স্বাগতম! আমি Clojure সম্পর্কে কিছুই জানি না, তবে একটি দ্রুত অনুসন্ধানে দেখায় যে আপনাকে লুপের জন্য অলস মূল্যায়ন করতে হবে। অনলাইনে চেষ্টা করে দেখুন! (টিপ: আপনি নিজের উত্তরটি স্বয়ংক্রিয়ভাবে ফর্ম্যাট করতে লিংক বোতামটি ব্যবহার করতে পারেন)। আশা করি আপনি চারপাশে থাকবেন এবং কিছু মজা পাবেন!
জো কিং

1

জাভা (জেডিকে) , 57 বাইট

a->{int s=0,p=0;for(int x:a)s-=(x>p?p:x)-(p=x);return s;}

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

টিএস এর জাভাস্ক্রিপ্ট উত্তরের আর একটি বন্দর । সুতরাং নিশ্চিত হয়ে নিন যে আপনি সেগুলি আপভোট করেছেন।

দ্রষ্টব্য যে আমি সংযোজনের পরিবর্তে বিয়োগ ব্যবহার করেছি কারণ এটি আমাকে (p=x)একই বিবৃতিতে সঠিক অপারেন্ড হিসাবে লেখার অনুমতি দিয়েছে।


0

এমএটিএল , 15 14 13 বাইট

ts:<~"@Y'x]vs

ইনপুট একটি কলাম ভেক্টর, পৃথক ;হিসাবে ব্যবহার করে ।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

t       % Implicit input: column vector. Duplicate
s       % Sum
:       % Range from 1 to that. Gives a row vector
<~      % Greater or equal? Element-wise with broadcast
"       % For each column
  @     %   Push current columnn
  Y'    %   Run-length encoding. Gives vector of values (0, 1) and vector of lengths
  x     %   Delete vector of lengths
]       % End
v       % Vertically concatenate. May give an empty array
s       % Sum. Implicit display

0

পার্ল 5, 21 বাইট

$\+=$_>$'&&$_-$';//}{

Tio

কিভাবে

  • -p+ }{+ $\কৌশল
  • //খালি স্ট্রিংয়ের সাথে মেলে যাতে পরবর্তী লাইনের পোস্টম্যাচটির জন্য $'পূর্ববর্তী লাইন থাকে
  • $\+=$_>$'&&$_-$'পূর্বের চেয়ে বর্তমান যদি বর্তমানের লাইন এবং পূর্বের মধ্যে পার্থক্য $\+=$_-$' if$_>$'জোগাড় করে (এটিও লেখা যেতে পারে তবে পার্ল একইটিকে পার্স করে না $\+=$_-$'if$_>$')


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