অঙ্কগুলি একটি অন্ধকূপটি খনন করে


10

সম্পাদনা করুন: আমি প্রশ্নের শেষে বোনাস ধাঁধাটির প্রথম সলভারের জন্য একটি 100-খ্যাতি বন্টি দেব !

আমি উত্তরটিতে তখনই প্রশ্নের সাথে যুক্ত করব যখন উত্তরটি উপস্থিত হবে কারণ এই অনুগ্রহের কোনও সময়সীমা নেই।

এক-অঙ্কের ধনাত্মক পূর্ণসংখ্যার একটি অ-হ্রাসমান তালিকা দেওয়া, আপনি নির্ধারণ করতে হবে যে অঙ্কগুলি কত গভীরভাবে আঁকবে।

███  ███  A dungeon with 5 blocks removed and a depth of 3.
███  ███
███ ████
████████

খনন শুরুর আগে জমিটি সমতল হয়।

প্রতিটি অঙ্ক নিজেই নীচের থেকে মাটির এক ব্লক সরিয়ে ফেলতে পারে তবে এটি অন্ধকূপের বাইরে থেকে সেই অবস্থানে পৌঁছাতে হবে এবং এটি অপসারণের পরে ব্লকটি অন্ধকূপটি ছেড়ে যেতে হবে। এমনটি করার সময় কোনও অঙ্ক অনুভূমিক পদক্ষেপে তার সংখ্যাসূচক মানের থেকে বেশি নামতে বা উঠতে পারে না

অঙ্কগুলি খননের জন্য নিম্নলিখিত কৌশল ব্যবহার করে:

  • ক্ষুদ্রতম মানযুক্ত অঙ্কটি প্রথমে খনন করে এবং তার পরে পরবর্তী খনকটি সর্বদা বাকি অঙ্কগুলির থেকে পরবর্তী সর্বনিম্ন মান হয়।
  • প্রথম অঙ্কটি যে কোনও অবস্থানে খনন করতে পারে। (সমস্ত স্থল একরকম।)
  • নীচের অঙ্কগুলি সর্বদা বামদিকে ইতিমধ্যে শুরু হওয়া কলামে খনন করে যেখানে তারা যেতে এবং বাইরে আসতে পারে। এ জাতীয় কোনও কলাম না থাকলে তারা ডানদিকের ডানদিকে একটি নতুন কলাম খনন শুরু করে।

উদাহরণস্বরূপ অঙ্কগুলি 1 1 1 2 3 3নিম্নলিখিত অন্ধকূপটি খনন করবে (ধাপে ধাপে ভিজ্যুয়ালাইজেশন সংখ্যার সাথে চিহ্নিত করে কোন ধরণের অঙ্কটি সেই অবস্থানটি খনন করে):

███1████    ███11███    ███11███    ███11███    ███11███    ███11███
████████    ████████    ███1████    ███1████    ███1████    ███13███
████████    ████████    ████████    ███2████    ███2████    ███2████
████████    ████████    ████████    ████████    ███3████    ███3████
████████    ████████    ████████    ████████    ████████    ████████

উদাহরণের জন্য ব্যাখ্যা:

  • দ্বিতীয়টি 1একমাত্র উপলভ্য কলাম থেকে উপরে উঠতে পারে না যদি এটি এটি 2ডিপ-তে আরও গভীর করা হয় তাই এটি ডানদিকে খনন করে।
  • তৃতীয়টি -দীপ 1কলাম তৈরি করে 2বামতম স্তম্ভটি খনন করতে পারে কারণ এটি- 1ডিডিপ কলামে এবং তারপরে স্থল স্তরে সরে যেতে পারে ।
  • পরবর্তী 2এবং 3উভয়ই বামতম কলামে খনন করতে পারে।
  • গত 3করতে বামদিকের কলামের খনন কিন্তু পরের এক মধ্যে করতে পারেন না।

ইনপুট

  • কমপক্ষে একটি উপাদান সহ ধনাত্মক এক-অঙ্কের পূর্ণসংখ্যার একটি অ-হ্রাসকারী তালিকা।

আউটপুট

  • একটি একক ধনাত্মক পূর্ণসংখ্যা, নির্মিত অন্ধকূপটির গভীরতা।

উদাহরণ

ইনপুট => আউটপুট (আউটপুটের অংশ নয় এমন ব্যাখ্যা হিসাবে বাম থেকে ডানে অন্ধকূপটির কলামগুলির গভীরতার সাথে)

[3]  =>  1
(column depths are [1])

[1, 1, 1, 2, 3, 3]  =>  4
(column depths are [4, 2])

[1, 1, 1, 1, 1, 1, 1, 1]  =>  3
(column depths are [3, 2, 2, 1])

[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5]  =>  11
(column depths are [11, 6, 2])

[1, 1, 1, 1, 1, 2, 2, 9, 9, 9]  =>  7
(column depths are [7, 2, 1])

[2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9]  =>  9
(column depths are [9, 2])

[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]  =>  10
(column depths are [10, 5])

[1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9]  =>  13
(column depths are [13, 5])

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]  =>  13
(column depths are [13, 5])

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9]  =>  21
(column depths are [21, 12, 3])

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

বোনাস ধাঁধা

"অঙ্কগুলি খননের জন্য নিম্নলিখিত কৌশলগুলি ব্যবহার করে" বিভাগে বর্ণিত কৌশলটি কি সর্বদা প্রদত্ত অঙ্কগুলির জন্য গভীরতম অন্ধকূপটি প্রমাণ করতে পারে (বা অস্বীকার করতে পারে) ?

উত্তর:


5

পাইথ, 21 বাইট

huXf>+H@GhT@GT0G1Qm0Q

এটি অনলাইনে ব্যবহার করে দেখুন: একক বিক্ষোভ বা টেস্ট স্যুট

ব্যাখ্যা:

                  m0Q   generate a list of zeros of length len(input)
                        This will simulate the current depths
 u               Qm0Q   reduce G, starting with G=[0,...,0], for H in input():
   f          0             find the first number T >= 0, which satisfies:
    >+H@GhT@GT                  H + G[T+1] > G[T]
  X            G1           increase the depth at this position by one
                            update G with this result
h                       print the first element in this list

2

জাভা, 199

import java.util.*;a->{List<Integer>l=new ArrayList();l.add(0);int x,y,z=0;s:for(int i:a){for(x=0;x<z;x++)if((y=l.get(x))-l.get(x+1)<i){l.set(x,l.get(x)+1);continue s;}l.add(z++,1);}return l.get(0);}

প্রসারিত, চলমান সংস্করণ

import java.util.*;
class DIGits {
    public static void main(String[] args) {
        java.util.function.Function<int[], Integer> f =
                a->{
                    List<Integer> l = new ArrayList();
                    l.add(0);
                    int x, y, z = 0;
                    s:
                    for (int i : a) {
                        for (x = 0; x < z; x++) {
                            if ((y = l.get(x)) - l.get(x + 1) < i) {
                                l.set(x, l.get(x) + 1);
                                continue s;
                            }
                        }
                        l.add(z++, 1);
                    }
                    return l.get(0);
                };
        System.out.println(f.apply(new int[]{1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9}));
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.