উত্থান, ক্রম, উত্থান


19

আমাদের অ-নেতিবাচক পূর্ণসংখ্যার কঠোরভাবে বর্ধমান ক্রম রয়েছে, যেমন:

12 11 10

অপেক্ষা কর এই ক্রমটি কঠোরভাবে বাড়ছে না, তাই না? ঠিক আছে, সংখ্যা বিভিন্ন বেসে লেখা হয়। সর্বনিম্ন সম্ভাব্য বেসটি 2, সবচেয়ে বড় 10।

কাজটি হ'ল প্রতিটি সংখ্যার ভিত্তি অনুমান করা, যাতে:

  • ক্রম কঠোরভাবে বৃদ্ধি পাচ্ছে,
  • ঘাঁটিগুলির যোগফল সর্বাধিক হয়।

উদাহরণস্বরূপ, নমুনার জন্য সমাধানটি হ'ল:

6 8 10

কারণ এই ঘাঁটিগুলির অধীনে ক্রমটি 8 9 10দশমিক হয়ে যায় - একটি কঠোরভাবে ক্রমবর্ধমান ক্রম এবং আমরা যে ভিত্তিগুলি ক্রমটি কঠোরভাবে বর্ধিত রাখে এবং যার যোগফলের চেয়ে বড় তার সন্ধান করতে আমরা সক্ষম নই 6+8+10

দ্বিতীয় সীমাবদ্ধতার কারণে একটি সমাধান 3 5 7সন্তোষজনক নয়: তবুও ক্রমগুলি 5 6 7সেই ঘাঁটির অধীনে হয়ে যায় - আমাদের বেসগুলি যোগফলকে আরও বাড়ানো দরকার, এবং 3+5+7 < 6+8+10

যদি কোনও বেসের অধীনে 2<=b<=10সিরিজটি কঠোরভাবে বৃদ্ধি করা সম্ভব হয় না, যেমন:

102 10000 10

একক

0

আউটপুট হওয়া উচিত।

ইনপুট ক্রমটি আপনার সমাধানের জন্য সবচেয়ে সুবিধাজনকভাবে এটি পাস করা যেতে পারে (স্ট্যান্ডার্ড ইনপুট / কমান্ড লাইন প্যারামিটার / ফাংশন আর্গুমেন্ট ...)।


1
কি 1 3 5একটি ক্রমবর্ধমান ক্রম? কি হবে 1 7 22? (বেস 10 এ)
ডোরকনব

হ্যাঁ, 1 3 5এবং 1 7 22উভয়ই বেস 10 এর অধীনে বৃদ্ধি পাচ্ছে। সুতরাং, উভয় ক্ষেত্রেই সমাধানটি হ'ল 10 10 10, কারণ আমাদের যখন বেস-এর সংখ্যাটি এন-এর সমান বেসে লিখিত হিসাবে ব্যাখ্যা করা হয় তখন ক্রমটি বৃদ্ধি পাচ্ছে তা নিশ্চিত করার সময় ঘাঁটির যোগফলকে সর্বোচ্চ করে তোলা দরকার need সমাধানের -তম পদ।
pawel.boczarski

2
@ ডেনিস হ্যাঁ, আমি ক্রমবর্ধমান ক্রমটি বোঝাতে চাইছি। 1 1 1বা 3 3 4উঠছে না।
pawel.boczarski

3
যদি মন্তব্যগুলি ইঙ্গিত দেয় যে প্রশ্নটি ভুল ব্যাখ্যা করার জন্য উন্মুক্ত রয়েছে, কেবল মন্তব্যে উত্তর দেবেন না। প্রশ্নটি সম্পাদনা করুন যাতে অন্য লোকেরা উত্তর লেখার সময় নষ্ট না করে যা এটি আপনার কাছে আলাদাভাবে ব্যাখ্যা করে।
পিটার টেলর

3
এবং অস্পষ্টতার বিষয়ে, আমার উত্তরের একটি মন্তব্যে দাবি করা হয়েছে যে আমাদের দেওয়া উচিত যে সংখ্যাগুলি প্রদত্ত ভিত্তিতে নীতিগত আকারে লেখা আছে। এই তাই হয়, তাহলে ফ্রেজ "সংশোধন দয়া করে অন্তত সম্ভব বেস 2 হয় মত" কিছু " অন্তত সম্ভব বেস বৃহত্তম অঙ্ক মান থেকেও মহান কিছু "।
পিটার টেলর

উত্তর:


13

পাইথ, 31 30 29 বাইট

e+0f.x!sgM.:iVczdT2ZosN^STlcz

1 জ্যাকেট @ জাকুবকে ধন্যবাদ

প্রদর্শন. পরীক্ষার জোতা।

ইনপুটটি STDIN এ দেওয়া হয়, স্থান পৃথক করা হয়। যদি নিউলাইন পৃথক ইনপুট অনুমোদিত হয়, আমি 2 বাইট দ্বারা প্রোগ্রামটি সংক্ষিপ্ত করতে পারি।

ব্যাখ্যা:

e+0f.x!sgM.:iVczdT2ZosN^STlcz
                                  Implicit: z = input(), T = 10, Z = 0, d = ' '
                        ST        [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                          lcz     len(z.split())
                       ^          All combinations w/replacement of that length.
                    osN           Order by increasing sum.
   f                              Filter on
              czd                 z.split(' ')
            iV   T                Vectorize the "Convert to base" operation over 
                                  the integers as strings and the base sequence.
          .:      2               Take length 2 subsequences.
        gM                        Map the >= operation over them.
      !s                          Sum and logically negate.
    .x             Z              If that throws an error, returns 0 (e.g. reject)
 +0                               Prepend a 0, in case no sequences are found.
e                                 Take the end of the list.

সহ 1সম্ভব ঘাঁটি তালিকায় নিরাপদ কারণ i, যা পাইথন এর ব্যবহার intbuiltin, অনুমতি দেয় না 1বেস হিসাবে, সেইজন্য এবং সবসময় একটি ত্রুটি, যা ধরা এবং আউট ফিল্টার করা হয় ছোঁড়ার।


9

সিজেম, 43 বাইট

0B,2>ea,m*{:+~}${ea::~_2$.b__Q|$=*@.b=}=p];

কমান্ড-লাইন আর্গুমেন্ট পড়ে এবং একটি অ্যারে মুদ্রণ করে।

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

উদাহরণ

$ cjam rise.cjam 12 11 10
[6 8 10]
$ cjam rise.cjam 19 18 17
0

কিভাবে এটা কাজ করে

0       e# Push a 0 (default return value).
B,2>    e# Push [0 ... 10] and remove the first two elements.
ea,     e# Push the number of command-line arguments (n).
m*      e# Cartesian power. Pushes all vectors of {2 ... 10}^n.
{:+~}$  e# Sort by the negated sums.
{       e# Find; for each vector V in {2 ... 10}^n:
  ea::~ e#   Evaluate each character of each command-line argument.
  _2$   e#   Copy the results and V.
  .b    e#   Vectorized base conversion (list to integer).
  __    e#   Push two copies.
  Q|$   e#   Deduplicate and sort the last copy.
  =     e#   Compare it to the first. Pushes 1/0 if equal/unequal.
  *     e#   Repeat the original result of .b that many times.
  @.b   e#   Vectorized base conversion (integer to list).
  =     e#   Compare the result to the modified command-line arguments.
        e#   Equality makes sure that the base was greater than all digits.
}=      e# If pushed 1, push V and break.
p       e# Print. Either prints the last V or 0 if none matched.
];      e# Clear the stack to avoid implicitly printing the 0 (if still present).

6

জুলিয়া, 176 156 145 118 109 99 97 বাইট

A->try p=NaN;flipud(map(i->(k=11;t=p;while t<=(p=parseint("$i",k-=1))end;k),flipud(A)))catch;0end

Ungolfed:

function anonfunc(i)
  # Start with k=11 so that it evaluates to 10 on first while iteration
  k=11
  # set t to the previous value of p
  # Note: p here gets held over between iterations within the map
  t=p
  # Iterate through, dropping k by 1 and evaluating the integer in
  # base k and stopping if the value drops below t
  # Note: "p=" expression inside conditional to ensure k-=1 is evaluated
  # at least once (to make NaN work as desired)
  while t<=(p=parseint("$i",k-=1))
  end
  # if it dropped below t, return the base, k to be the corresponding
  # element in the map
  return k
end

function f(A)
  # Using try/catch to return 0 if no acceptable base found
  try
    # This is a trick to make sure the comparison in the while loop
    # evaluates to false on the first use of it (last value in A)
    p=NaN
    # Apply anonfunc to each element of A, starting with the last element
    # and store the result in S
    S=map(anonfunc,flipud(A))
    # S is backwards, so flip it and return it
    return flipud(S)
  catch
    # Will throw to here if parseint fails with the base due to having
    # a digit not acceptable in the base
    return 0
  end
end

1 ডি অ্যারে ইনপুট সহ ব্যবহৃত হয়। যদি ফাংশনটি নির্ধারিত হয় c, তবে আপনি কল করবেন c([12,11,10])এবং এটি আউটপুট হবে [6,8,10]

দ্রষ্টব্য: আমি dec(i)পার্সিন্ট কমান্ডটির অভ্যন্তরে ব্যবহার করেছি , তবে কারণ iএটি একটি একক-চরিত্রের পরিবর্তনশীল নাম, এবং আমার কোনও উপাদান অ্যাক্সেস করার দরকার নেই, আমি "$i"একই ফলটি পেয়েছি ।


আপনি এখানে কিছু ভাল কৌশল পেয়েছেন। চমৎকার কাজ.
অ্যালেক্স এ।

এই কোডটি যথাযথভাবে বাম থেকে ডান পাঠের ক্রম অনুযায়ী ক্রম হ্রাস ক্রমগুলির জন্য বেসগুলি চেক করে বলে মনে হচ্ছে।
pawel.boczarski

@ পাওয়েল.বোকজারস্কি - আপনি কী বলতে চাইছেন তা সম্পর্কে আমি নিশ্চিত নই, তবে আপনি যদি চান তবে কিছু নির্দিষ্ট ইনপুটগুলির জন্য এটি কী ফলাফল দেয় তার কয়েকটি উদাহরণ সরবরাহ করতে পারি। উদাহরণস্বরূপ, আপনি যদি ফাংশনটি নামটি অর্পণ করেন c, তবে প্রয়োজনীয় বেসগুলি c([12,11,10])আউটপুটগুলি [6,8,10]
গ্লেন ও

@ গ্লেনো ওহ, আমি দেখছি আমি এর [12 11 10]পরিবর্তে সারি ভেক্টর ব্যবহার করেছি [12,11,10]এবং এটি অনাকাঙ্ক্ষিত প্রভাব দিয়েছে।
pawel.boczarski

@ পাওয়েল.বোকজার্কি - আহ, আমি দেখছি। হ্যাঁ, আপনি যদি এটি সারি ভেক্টরগুলির সাথে কাজ করতে চান তবে আপনার "ফ্লিপড" কে "ফ্লিপ্লার" দিয়ে প্রতিস্থাপন করতে হবে, সেক্ষেত্রে এটি ঘাঁটির একটি সারি ভেক্টরকে ফিরিয়ে দেবে।
গ্লেন ও

5

জুলিয়া, 259 204 183 বাইট

গ্লেন ও এর সহায়তায় একটি গুচ্ছ সংরক্ষণ করা হয়েছে

A->(M(x)=maxabs(digits(x))+1:10;S=[];X={};for i=M(A[1]),j=M(A[2]),k=M(A[3]) s=map(parseint,map(dec,A),[i,j,k]);all(diff(s).>0)&&(S=[S,sum(s)];X=[X,{[i,j,k]}])end;X==[]?0:X[indmax(S)])

অবহেলিত + ব্যাখ্যা:

function f(A)
    # Define a function to obtain the smallest possible base range
    M(x) = (maxabs(digits(x)) + 1):10

    # Define container arrays for the sums and bases
    S = []
    X = {}

    # Loop over all possible bases for each of the elements
    for i = M(A[1]), j = M(A[2]), k = M(A[3])
        # Parse each element of the input as a string
        # in the given base
        s = map(parseint, map(dec, A), [i,j,k])

        # Push the sum and bases if s is rising
        if all(diff(s) .> 0)
            S = [S, sum(s)]
            X = [X, {[i,j,k]}]
        end
    end

    # If X is empty, return 0, otherwise return the bases
    isempty(X) ? 0 : X[indmax(S)]
end

ঠিক আছে, কিছু গল্ফিং করা হবে ... মানচিত্রের কমান্ডে "স্ট্রিং" এর পরিবর্তে "repr" ব্যবহার করুন, তারা এই প্রসঙ্গে একই কাজ করবে এবং দুটি বাইট সংরক্ষণ করবে। এবং আমরা "\ = পার্সেন্ট" লিখে পার্সিনেন্টের জন্য একটি ইনফিক্স অপারেটর ব্যবহার করে এবং তারপরে পি [x [1], i) এর পরিবর্তে x [1] \ i ব্যবহার করে আরও কিছু বাঁচাতে পারি - "\" তে আরও একটি বাইট অংশ, এবং তারপরে 8 টি বাইটের নিট সাশ্রয়ের জন্য পি এর প্রতিটি ব্যবহারের জন্য তিনটি সঞ্চয় করে। "সর্বাধিক (অঙ্কগুলি (এক্স)) সর্বাধিক (অঙ্কগুলি (এক্স) ...)" প্রতিস্থাপন করে আরেকটি বাইট সংরক্ষণ করা হয়েছে
গ্লেন ও

আরও বড় সাশ্রয়ের জন্য, লুপগুলির জন্য মার্জ করুন - ব্যবহার করুন for i=M(A[1]):10,j=M(A[2]):10,k=M(A[3]):10 <code here>end;, বাদ পড়া দুইয়ের end;জন্য আটটি এবং `এর জন্য ,। প্রতিস্থাপনের জন্য আটটি সংরক্ষণ করুন ।
গ্লেন ও

আসলে, আমরা পার্সেন্ট অংশের জন্য আরও ভাল করতে পারি better s=map(parseint,x,[i,j,k])আমার পূর্ববর্তী প্রস্তাবিত উন্নতির তুলনায় আপনার আসল সমাধানের সাথে তুলনামূলকভাবে 18 বাইট সংরক্ষণ করে এবং পার্সেন্টের পুরোপুরি নাম পরিবর্তন করুন এবং ব্যবহার করুন । এবং এর পরিবর্তে s==sort(unique(s)), all(diff(s).>0)আরও 3 বাইট সংরক্ষণ করতে ব্যবহার করুন ।
গ্লেন ও

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

গৌণ সংশোধন - আমি সর্বাধিকের চেয়ে সর্বোচ্চ (...) ব্যবহার করার পরামর্শ দিয়েছি ... তবে এটি একটি বাইট সংরক্ষণ করার সময় এটি একক-অঙ্কের ইনপুট মানগুলির জন্য ব্যর্থ হয়, তাই আপনাকে সর্বোচ্চ ব্যবহার করতে হবে।
গ্লেন ও

4

সিজেএম (39 বাইট)

{Afb:X,9,2f+m*{X\.b__$_&=*},{:+}$0\+W=}

এটি একটি বেনাম ফাংশন যা স্ট্যাকের দশমিক পূর্ণসংখ্যার অ্যারের হিসাবে ইনপুট নেয় এবং আউটপুটটিকে অ্যারে বা 0স্ট্যাকের পূর্ণসংখ্যা হিসাবে ছেড়ে দেয় । অনলাইন ডেমো


এছাড়াও, এটি ঘাঁটিগুলির পরিবর্তে ফলাফলের পূর্ণসংখ্যার যোগফল অনুসারে বাছাই করা মনে হয় এবং এটি আমার পূর্ববর্তী পুনর্বিবেচনার একই সমস্যা ছিল ( 19বেস 9 নম্বর হতে পারে না)।
ডেনিস

1
হুম। প্রশ্নটির কিছুটা উন্নতি প্রয়োজন বলে মনে হচ্ছে।
পিটার টেলর

@ পিটারটেলর পাহ, অজুহাত;)
বিটা ক্ষয়

2

পাইথন 2 (147 বাইট)

def x(s):
 q=int;c=10;o=q(s[-1])+1;l=[]
 for i in map(str,s)[::-1]:
    n=q(i,c)
    while o<=n:
        c-=1;n=q(i,c)
        if 3>c:return 0
    l=[c]+l;o=n
 return l

Ints xএকটি তালিকা সহ ফাংশন কল করুন ।

উদাহরণ:

print x([12,11,10])

কপি করে প্রিন্ট

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