বিল্ডিংগুলি লুকান


15

আকাশচুম্বী চ্যালেঞ্জের সংক্ষিপ্ত সংস্করণ

কার্য

বিল্ডিং উচ্চতাগুলির একটি অ্যারে এবং ধনাত্মক পূর্ণসংখ্যা দেওয়া k, উচ্চতাগুলির সমস্ত আদেশ (নকল ছাড়াই) যেমন ঠিক kভবনগুলি দৃশ্যমান তা সন্ধান করুন।

যে কোনও বিল্ডিং এর পিছনে সমস্ত ছোট বা সমান উচ্চতার বিল্ডিংগুলি লুকিয়ে রাখবে।

ইনপুট এবং আউটপুট জন্য যে কোনও বিন্যাস বৈধ।

ইনপুট অ্যারে কখনও ফাঁকা হবে না।

যদি ঠিক তেমন অনেক বিল্ডিং দেখা সম্ভব না হয় তবে এমন কোনও কিছু আউটপুট করুন যা উত্তর হতে পারে না তবে ত্রুটি নেই।

উদাহরণ:

(আউটপুট দৈর্ঘ্য খুব দীর্ঘ আউটপুট জন্য দেখানো হয়, কিন্তু আপনার আউটপুট সমস্ত সম্ভাব্য ক্রম হতে হবে)

input:[1,2,3,4,5],2
output: 50

input:[5,5,5,5,5,5,5,5],2
output: []

input:[1,2,2],2
output:[(1,2,2)]
Seeing from the left, exactly 2 buildings are visible.

input:[1,7,4],2
output:[(4, 7, 1), (1, 7, 4), (4, 1, 7)]

input:[1,2,3,4,5,6,7,8,9],4
output:67284

input:[34,55,11,22],1
output:[(55, 34, 11, 22), (55, 22, 34, 11), (55, 34, 22, 11), (55, 11, 34, 22), (55, 22, 11, 34), (55, 11, 22, 34)]

input:[3,4,1,2,3],2
output:31

এটি কোড-গল্ফ তাই সংক্ষিপ্ততম কোডের জয়

Alচ্ছিক: যদি সম্ভব হয় তবে আপনি কি এর মতো কিছু যুক্ত করতে পারেন if length is greater than 20: print length else print answer। ফুটারে, কোডে নয়।


আউটপুটটি কি সমস্ত যোগ্যতার অনুমতি বা তার সংখ্যা হওয়া উচিত?
লুইস মেন্ডো

এটি সমস্ত যোগ্যতার অনুমতি হতে হবে @ লুইস মেন্ডো
বেদক কান্দোই

প্রস্তাবিত পরীক্ষা মামলা: [1,2,3,4,5],5 -> [(1,2,3,4,5)]। বর্তমানের পরীক্ষার কোনওটিই নিশ্চিত করে না যে উত্তরগুলি সমস্ত বিল্ডিং দেখানো সমর্থন করতে পারে (যদিও এর সাথে আসলে কোনও সমস্যা আছে কিনা তা আমি জানি না)।
কামিল দ্রাকারী

উত্তর:


6

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

œÙʒη€àÙgQ

এটি অনলাইনে চেষ্টা করুন বা পরীক্ষার সমস্ত ক্ষেত্রে (পরীক্ষার কেস [1,2,3,4,5,6,7,8,9],4সময় শেষ) যাচাই করুন
টিআইওর পাদলেখ নীচে ওপি যা বলেছিল তা করে:

Alচ্ছিক: যদি সম্ভব হয় তবে আপনি কি এর মতো কিছু যুক্ত করতে পারেন if length is greater than 20: print length else print answer। ফুটারে, কোডে নয়।

ব্যাখ্যা:

œ            # Permutations of the (implicit) input-list
             #  i.e. [1,2,2] → [[1,2,2],[1,2,2],[2,1,2],[2,2,1],[2,1,2],[2,2,1]]
 Ù           # Only leave the unique permutations
             #  i.e. [[1,2,2],[1,2,2],[2,1,2],[2,2,1],[2,1,2],[2,2,1]]
             #   → [[1,2,2],[2,1,2],[2,2,1]]
  ʒ          # Filter it by:
   η         #  Push the prefixes of the current permutation
             #   i.e. [1,2,2] → [[1],[1,2],[1,2,2]]
    ۈ       #  Calculate the maximum of each permutation
             #   i.e. [[1],[1,2],[1,2,2]] → [1,2,2]
      Ù      #  Only leave the unique maximums
             #   i.e. [1,2,2] → [1,2]
       g     #  And take the length
             #   i.e. [1,2] → 2
        Q    #  And only leave those equal to the second (implicit) input
             #   i.e. 2 and 2 → 1 (truthy)

1
চিত্তাকর্ষক, এখানে প্রতিটি একক বাইট ফাংশন গাছের অংশ!
lirtosiast

1
@ লিরিটোসিস্ট হ্যাঁ, 05 এ বি 1 ই এর মাঝে মাঝে বেশ কয়েকটি সংক্ষিপ্ত বিল্টইন রয়েছে যা এই চ্যালেঞ্জটিতে নিখুঁত ছিল। :) এটি আসলে আপনার পাইথ উত্তরটির সাথে খুব মিল very মজার বিষয়টি হ'ল, if length is greater than 20: print length; else print answer;প্রোগ্রামটির তুলনায় তুলনামূলকভাবে সমান দৈর্ঘ্যের পাদচরণটি ̶ ̶b̶y̶t̶e̶ ̶l̶o̶n̶g̶e̶r।। এক্সডি
কেভিন ক্রুইজসেন


5

জেলি , 12 10 বাইট

Œ!Q»\QL=ʋƇ

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

-আরাইক দ্য আউটগল্ফার -2 বাইটস

এটি বিল্ডিং উচ্চতা এবং kসেই ক্রমে একটি ডায়াডিক ফাংশন ।

Œ!                All permutations of first input
Œ!Q               Unique permutations of first input
   »\              Running maximum
     Q             Unique values
      L            Length of this array
       =           Equals k
        ʋ        Create a monad from these 4 links
   »\QL=ʋ        "Are exactly k buildings visible in arrangement x?"
         Ƈ     Filter if f(x)
Œ!Q»\QL=ʋƇ     All distinct perms of first input with k visible buildings.

1
নতুন শোক ʋ! (এটি Ƈআসলে: পি এর থেকে বেশ পুরানো )
এরিক দি আউটগল্ফার

4

পাইথ, 18 16 বাইট

fqvzl{meSd._T{.p

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

নোট করুন যে পাইথ ইন্টারপ্রেটারের অনলাইন সংস্করণ বৃহত্তম পরীক্ষার ক্ষেত্রে মেমরি ত্রুটি ছুড়ে ফেলে।

f                       Filter lambda T:
  q                       Are second input and # visible buildings equal?
    v z                     The second input value
    l {                     The number of unique elements in
        m                   the maximums
          e S d             ...
          ._ T              of prefixes of T
    { .p                  over unique permutations of (implicit first input)

ফিরে আসার জন্য স্বাগতম! :-)
লুইস মেন্ডো

2

পার্ল 6 , 81 63 বাইট

-18 নাইটহোনাফকে বাইটস ধন্যবাদ!

{;*.permutations.unique(:with(*eqv*)).grep:{$_==set [\max] @_}}

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

বেনামি কোড ব্লক যা ইনপুট কারিড নেয়, যেমন f(n)(list)। যে .unique(:with(*eqv*))annoyingly দীর্ঘ যদিও:(

ব্যাখ্যা:

{;                                                            }  # Anonymous code block
  *.permutations.unique(:with(*eqv*))  # From all distinct permutations
                                     .grep:{                 }  # Filter where
                                                set [\max] @_   # Visible buildings
                                            $_==      # Equals num

1
FWIW, আমি শুধু একটি মামলা দায়ের Rakudo ইস্যু তাই আমরা যে বিরক্তিকর পরিত্রাণ পেতে পারে ;); অবশেষে
nwellnhof

2

জাপট , 11 বাইট

á f_åÔâ Ê¥V

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

লম্বা আউটপুটগুলির } lজন্য, শেষে যুক্ত করলে দৈর্ঘ্যের পরিবর্তে দৈর্ঘ্য আউটপুট হবে। [1,2,3,4,5,6,7,8,9],4দৈর্ঘ্য বা তালিকার আউটপুট নির্বিশেষে পরীক্ষার ক্ষেত্রে অনলাইন ইন্টারপ্রেটার সময় শেষ করে।

ব্যাখ্যা:

á              :Get all permutations
  f_           :Keep only ones where:
    åÔ         : Get the cumulative maximums (i.e. the visible buildings)
      â Ê      : Count the number of unique items
         ¥V    : True if it's the requested number

1

জাভাস্ক্রিপ্ট (ES6), 108 107 বাইট

হিসাবে ইনপুট লাগে (k)(array)। এর সাথে ফলাফলগুলি মুদ্রণ করে alert()

k=>P=(a,p=[],n=k,h=0)=>a.map((v,i)=>P(a.filter(_=>i--),[...p,v],n-(v>h),v>h?v:h))+a||n||P[p]||alert(P[p]=p)

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

মন্তব্য

k =>                        // k = target number of visible buildings
  P = (                     // P = recursive function taking:
    a,                      //   a[] = list of building heights
    p = [],                 //   p[] = current permutation
    n = k,                  //   n = counter initialized to k
    h = 0                   //   h = height of the highest building so far
  ) =>                      //
    a.map((v, i) =>         // for each value v at position i in a[]:
      P(                    //   do a recursive call:
        a.filter(_ => i--), //     using a copy of a[] without the i-th element
        [...p, v],          //     append v to p[]
        n - (v > h),        //     decrement n if v is greater than h
        v > h ? v : h       //     update h to max(h, v)
      )                     //   end of recursive call
    )                       // end of map()
    + a ||                  // unless a[] was not empty,
    n ||                    // or n is not equal to 0,
    P[p] ||                 // or p[] was already printed,
    alert(P[p] = p)         // print p[] and store it in P

0

পাইথন 2 , 114 113 বাইট

lambda a,n:{p for p in permutations(a)if-~sum(p[i]>max(p[:i])for i in range(1,len(p)))==n}
from itertools import*

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

-1 বাইট, ovs ধন্যবাদ


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

lambda a,n:{p for p in permutations(a)if sum(v>max(p[:p.index(v)]+(v-1,))for v in{*p})==n}
from itertools import*

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


0

জে, 43 38 বাইট

কেভিনের O5AB13 উত্তর থেকে একটি অপ্টিমাইজেশন অন্তর্ভুক্ত করার পরে -5 বাইট

(]#~[=([:#@~.>./\)"1@])[:~.i.@!@#@]A.]

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

ungolfed

(] #~ [ = ([: #@~. >./\)"1@]) ([: ~. i.@!@#@] A. ])

ব্যাখ্যা

আমরা কেবল সমস্ত সম্ভাব্য পার্সাম তালিকাবদ্ধ করছি i.@!@#@] A. ], এর সাথে ইউনিক আইটেমগুলি নিয়ে যাচ্ছি ~., তারপরে দৃশ্যমান বিল্ডিংয়ের সংখ্যা অনুসারে ফিল্টারিং করব, যা বাম ইনপুটকে সমান করতে হবে।

মূল যুক্তিটি প্রথমটি ক্রিয়াতে রয়েছে যা দৃশ্যমান বিল্ডিংয়ের সংখ্যা গণনা করে:

([: #@~. >./\)

এখানে আমরা >./\এখন পর্যন্ত দেখা সবচেয়ে উঁচু বিল্ডিংয়ের ট্যালি রাখতে সর্বোচ্চ স্ক্যান ব্যবহার করি । তারপরে আমরা সর্বাধিক স্ক্যানের অনন্য উপাদানগুলি গ্রহণ করি এবং এটি দৃশ্যমান বিল্ডিংয়ের সংখ্যা।

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