একটি বালুচর বই


12

আমার কিছু বই এবং একটি বইয়ের তাক রয়েছে। আমি যতটা সম্ভব শেল্ফের উপরে যতগুলি বই রাখতে চাই তবে আমার একটি নিয়ম আছে। বইয়ের সমস্ত মাত্রাগুলি (উচ্চতা, প্রস্থ এবং গভীরতা) শেল্ফে একটি বর্ধমান ক্রম গঠন করা উচিত।

এর অর্থ এটি স্বতঃশিপযুক্ত প্রতিটি বই কমপক্ষে তার চেয়ে কম বেশি হওয়া উচিত। প্রস্থ এবং গভীরতার জন্য একই যায়। আপনি বইগুলির উচ্চতা, প্রস্থ এবং গভীরতার অদলবদল করতে ঘোরান না।

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা সমস্ত বইয়ের মাত্রা ইনপুট আউটপুট হিসাবে দেয় বা আমি শেল্ফটিতে রাখতে পারি সর্বাধিক সংখ্যক বই প্রদান করে।

ইনপুট

  • ধনাত্মক পূর্ণসংখ্যার ট্রিপল্টের একটি তালিকা যেখানে প্রতিটি ত্রিপলিটি একটি বইয়ের উচ্চতা, প্রস্থ এবং গভীরতা নির্ধারণ করে।
  • ইনপুট তালিকায় কমপক্ষে একটি ট্রিপলেট থাকবে।
  • যে কোনও সংখ্যক মাত্রার সাথে দুটি বই একই দৈর্ঘ্য থাকতে পারে।

আউটপুট

  • একটি একক ধনাত্মক পূর্ণসংখ্যা, নিয়মটি মানা শেল্ফের উপরে সর্বাধিক সংখ্যক বই।

সময়ের জটিলতা

আপনার অ্যালগরিদমের বইয়ের সংখ্যায় সবচেয়ে জটিল সময়ের জটিলতা হওয়া উচিত । এর অর্থ হ'ল উদাহরণস্বরূপ নিম্নলিখিত সময়ের জটিলতাগুলি সমস্ত বৈধ: ও (এন ^ 3), ও (লগ (এন) * এন ^ 2), ও (এন) এবং নিম্নলিখিতগুলি অবৈধ: ও (2 ^ এন), ও (এন!), ও (এন ^ এন)।

উদাহরণ

ইনপুট => আউটপুট

(1, 1, 1) =>  1

(5, 2, 5), (1, 3, 5) =>  1

(5, 2, 5), (1, 2, 5) =>  2

(2, 2, 2), (2, 2, 2), (2, 2, 2), (1, 3, 6) =>  3

(1, 2, 5), (1, 3, 5), (1, 2, 8), (1, 2, 5), (7, 7, 7) =>  4

(5, 19, 3), (9, 4, 16), (15, 16, 13), (7, 4, 16), (1, 13, 14), (20, 1, 15), (9, 8, 19), (4, 11, 1) =>  3

(1, 1, 18), (1, 13, 7), (14, 1, 17), (8, 15, 16), (18, 8, 12), (8, 8, 15), (10, 1, 14), (18, 4, 6), (10, 4, 11), (17, 14, 17), (7, 10, 10), (19, 16, 17), (13, 19, 2), (16, 8, 13), (14, 6, 12), (18, 12, 3) =>  5

এটি কোড গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিতেছে।

সম্পর্কিত একটি আকর্ষণীয় বই বাছাই চ্যালেঞ্জ: বুক স্ট্যাক বাছাই


আপনার অর্থ কি এটি একটি ক্রমহ্রাসমান ক্রম গঠন করা উচিত ? প্রতিটি বই একই উচ্চতা না থাকলে প্রতিটি বই কমপক্ষে তার চেয়ে বেশি বইয়ের তুলনায় এটিই পাবেন।
mbomb007

@ mbomb007 ডান, "অ-হ্রাসকারী" পরিবর্তন করে "অ-বর্ধমান" হয়েছে।
এলোমেলো

উত্তর:


4

পাইথন 3: 436 বাইট

প্রথমদিকে আমি এটিকে চক্র সহ পরিচালিত গ্রাফের দীর্ঘতম সরল পথ সন্ধান করার এনপি-সম্পূর্ণ সমস্যা হিসাবে দেখেছি । যাইহোক, গ্রাফের প্রতিটি চক্র (আসলে একটি সম্পূর্ণ উপগ্রাফ) একটি একক শীর্ষে হিসাবে উপস্থাপিত হতে পারে। অন্য কথায়, একক হিসাবে শেল্ফে স্থাপন করার জন্য অভিন্ন বইগুলি একটি বই হিসাবে বিবেচনা করুন। এরপরে আমরা একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ তৈরি করতে পারি যেখানে a-> b এর অর্থ খ শেল্ফটিতে একটি অনুসরণ করতে পারে। অবশেষে, আমরা পুনরাবৃত্ত পদ্ধতি ব্যবহার করে আউট ট্রি (গুলি) এর সর্বোচ্চ উচ্চতা খুঁজে পাই।

import sys
b=[]
n={}
r=[]
for L in sys.stdin.readlines():z=[int(x)for x in L.split()];r+=[z];z in b or b+=[z]
def l(a,b):return a[0]<=b[0]and a[1]<=b[1]and a[2]<=b[2]
R=range(len(b))
for i in R: 
    n[i]=[]
    for j in R:i!=j and l(b[i],b[j])and n[i]+=[j]
def L(t):
    global v;best=0
    if t in v:
            return v[t]
    for s in n[t]:best=max(best,L(s)+1)
    v[t]=best+r.count(b[t])-1;return best
m=0
for i in R:v={};m=max(L(i)+1,m)
print(m)

1
এটি একটি দুর্দান্ত সমাধান, তবে এটি এখনও গল্ফ হয়নি। আমি একবার upvote করব।
isaacg

3

পাইথ, 40 বাইট

KYleolNe.eaK+e+]])olNf.A.eg@YbZeT<Kk]YSQ

দ্রুত নয়, তবে এটি বহুপদী।

পাইথন 3 সমতুল্য:

def num_books(l):
    l = sorted(l)
    s = []
    for i, Y in enumerate(l):
        s.append(max([T for T in s[:i]
                      if all(Y[e] >= t for e, t in enumerate(T[-1]))] + [[]],
                     key=len) + [Y])
    return max(len(u) for u in s)

পাইথন 3 সংস্করণটি স্পষ্ট গল্ফগুলির সাথে 177 বাইট। শুধু একটি fyi।
mbomb007

0

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

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

আমার প্রোগ্রামটি বর্তমানে সর্বশেষ দুটি উদাহরণ ভুল পেয়েছে। দয়া করে কেউ আমাকে এটি ঠিক করতে সহায়তা করতে পারে? ধন্যবাদ।

আমি 3 টি মাত্রার 6 টি সম্ভাব্য ক্রম ক্রমানুসারে সমস্ত তালিকার তালিকা সাজিয়েছি, তারপরে তালিকার মধ্যে দীর্ঘতম ক্রমাগত অর্ডারিং সম্পর্ক কী তা দেখুন, তারপরে সর্বাধিক সন্ধান করুন।

এছাড়াও, আমি জানি যে আরও বেশি গল্ফ করা যায় কিনা তবে আমি এটি ব্যবহার reduceকরতে পারি কিনা তা বুঝতে পারি না। সোজা কথায়, এইভাবে আমার মস্তিষ্কের বিস্ফোরিত না হয়ে যুক্তিসঙ্গত সময়ে তৈরি করা সবচেয়ে সহজ ছিল।

from operator import*
from itertools import*
def f(t):
    m=1
    for l in(sorted(t,key=itemgetter(*o))for o in permutations(range(3))):
        c=1
        for k in range(len(l)-1):
            c+=all(i<=j for i,j in zip(l[k],l[k+1]))
        m=max(m,c)
    print m
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.