বিভিন্ন বেসে পুরষ্কার


17

চ্যালেঞ্জ:

আপনি একটি বেস 10 নম্বর দেওয়া হয়। প্রতিটি বেসের জন্য 10 থেকে গণনা অবধি 2 পর্যন্ত:

  1. মূল ইনপুট নম্বরটি বেস 10 স্ট্রিং হিসাবে ধরুন এবং বেসটির জন্য অবৈধ সংখ্যার কোনও অঙ্ক সরিয়ে ফেলুন।
  2. সেই বেসটিতে ফলাফল সংখ্যার স্ট্রিংটি ব্যাখ্যা করুন। এটি যদি 1 বা 0 দেয় তবে পুরো প্রক্রিয়াটি শেষ করুন।
  3. দশমিক সংখ্যা হিসাবে আউটপুট বা তার বৃহত্তম প্রাইম ফ্যাক্টর মুদ্রণ করুন।

আউটপুট বৃহত্তম প্রধান প্রধান কারণগুলির একটি অ্যারে হতে পারে।

নমুনা কেস:

ইনপুট:

987654321

আউটপুট:

379721
10593529
1091
179
1493
293
19
7

অথবা:

[379721,10593529,1091,179,1493,293,19,7]

এটি 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10 এর বৃহত্তম প্রধান কারণগুলি মুদ্রণ করে এবং এটি 1 2 এ পৌঁছা অবধি , যেখানে এটি বন্ধ হয়ে যায়।


2
আমি প্রক্রিয়া সম্পর্কে অস্পষ্ট। উদাহরণ থেকে আমি সম্ভবত এটি বের করতে পারি, তবে আপনার স্পষ্ট নির্দেশাবলী থাকা উচিত তাই এটির দরকার নেই। সুতরাং আমরা একটি নিম্ন বেসে রূপান্তর করব, অবৈধ অঙ্কগুলি সরিয়ে ফেলব, তারপরে বৃহত্তম প্রাইম ফ্যাক্টরটি মুদ্রণ করব? আমরা কোন ভিত্তিতে এই ফ্যাক্টরটি মুদ্রণ করব? তারপরে আমরা কি বৃহত্তম প্রাইম ফ্যাক্টর এবং একটি বেসকে নিম্নের সাথে একই প্রক্রিয়া করি? বা আমরা আমাদের সংখ্যায়িত সংখ্যাটি দিয়ে এটি করি? আমরা কি 10 বা 9 দিয়ে শুরু করব?
xnor

সাইটে স্বাগতম!
ডিজেএমসিএমহেম

2
আমি চ্যালেঞ্জটিকে আরও পরিষ্কার করার জন্য পুনরায় লেখার চেষ্টা করেছি। আমি আশা করি এটি আপনার ইচ্ছা ছিল। যদি তা না হয় তবে নির্দ্বিধায় এটি পরিবর্তন করুন।
xnor

4
আমি মূল অপারেশনটিতে সর্বাধিক প্রধান-প্রধান-ফ্যাক্টর পদক্ষেপটি দেখতে পাই বেস রূপান্তর। অনেকগুলি ভাষা কেবল এটি অন্তর্নির্মিত একটি প্রাথমিক-অনুষঙ্গীকরণের সাথে সরাসরি করে এবং বাকিগুলি মূলত একটি পৃথক পৃথক চ্যালেঞ্জ করতে হয়। বেস রূপান্তরটি অন্তর্নির্মিত বা বুस्टও অন্তর্নির্মিত। যখন অপারেশনগুলি বিল্ট-ইন হিসাবে আসে, আপনি গল্ফগুলির জন্য তাদের ভাল ট্রডডেন গ্রাউন্ড হওয়ার প্রত্যাশা করেন এবং প্রকৃতপক্ষে ফ্যাক্টরীকরণ এবং বেস রূপান্তর হয়। তবুও, প্রথম চ্যালেঞ্জের জন্য ভাল তবে পরবর্তী সময়ের জন্য বিষয়গুলি মনে রাখা উচিত।
xnor

3
গুগল কোড জ্যাম দ্বারা অনুপ্রাণিত হয়েছিল এমন কোনও সুযোগ?
মেগো

উত্তর:


6

পাইথ, 25 বাইট

sfTm>1PiFdC,.u-N`tYKrT1zK
                       z   get input as a string
            .u      rT1    cumulative reduce over [10,9,...,2]
              -N`tY        remove one minus the number (10,9,...) from the input
          C,       K    K  pair each step along the chain with corresponding base
   m                       map over [["987654321", 10],...]:
       iFd                   apply the base-conversion (splat over i)
      P                      prime factorization, smallest to largest
    >1                       take [the last element], or [] if empty (1 or 0)
 fT                        remove the []s from 0s or 1s
s                          join the one-element arrays together

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



4

এমএটিএল , 17 15 বাইট

9:PQ"G@ZAYfXzX>

এটি সংখ্যাটি স্ট্রিং হিসাবে উদ্ধৃতি সহ গ্রহণ করে, যা ডিফল্টরূপে অনুমোদিত।

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

ব্যাখ্যা

9:PQ     % Push array [10, 9, ..., 2]
"        % For each number in that array. These are the bases to be considered
  G      %   Push input. Forces for input to be taken implicitly first time
  @      %   Push current base
  ZA     %   Convert from that base to base 10, discarding non-valid digits
  Yf     %   Prime factors. Gives empty for input 1, and 0 for input 0
  Xz     %   Non-zero values. Gives empty if previous result was 0, or else
         %   leaves it as it was
  X>     %   Maximum of array. For empty input gives empty
         % Implicitly end for each
         % Implicitly display. Empty arrays are not displayed

এটি 1তে শেষ না হওয়া ইনপুটগুলির জন্য শেষে 0 টি আউটপুট দেয়
poi830

ইনপুটগুলির জন্য '98765432' এবং '98765' (এলোমেলো উদাহরণ), এটি সমাপ্তির আগে 0 এর পরে সঠিক সংখ্যা আউটপুট দেয়।
poi830

1
@ poi830 এখনই সমাধান হয়েছে
লুইস মেন্ডো

1

জুলিয়া, 101 বাইট

f(s,x=[],b=10)=(t=filter(c->c<=47+b,s))>"1"&&b>1?f(s,[x;maximum(keys(factor(parse(Int,t,b))))],b-1):x

এটি একটি পুনরাবৃত্ত ফাংশন যা ইনপুটটিকে স্ট্রিং হিসাবে স্বীকার করে এবং অ্যারে প্রদান করে।

Ungolfed:

function f(s, x=[], b=10)
    # Filter the string down to only the digits valid for base b
    t = filter(c -> c <= 47 + b, s)

    # If the filtered string isn't "1" or "0" and b is a valid base
    if t > "1" && b > 1
        # Call the function again, appending the maximum prime factor
        # of t in base b to the argument x and decrementing the base
        f(s, [x; maximum(keys(factor(parse(Int, t, b))))], b-1)
    else
        # Otherwise return the array
        x
    end
end

1

গণিত, 83 বাইট

FactorInteger[Select[IntegerDigits@#,#<a&]~FromDigits~a][[-1,1]]~Table~{a,10,2,-1}&

বেনামে ফাংশন, একটি তালিকা ফেরত দেয়। সত্যি যে জটিল, না।


0

রুবি, 120 বাইট

রিকার্সিভ ফাংশন, স্ট্রিং হিসাবে ইনপুট নেয়।

f=->n,b=2{require'prime';i=n.tr([*b.to_s..?9].join,"").to_i(b)
b>10?[]:f[n,b+1]+[*i>1?Prime.prime_division(i).max[0]:p]}

1
আপনি -rprimeপরিবর্তে কমান্ড লাইন পতাকা ব্যবহার করে কিছু বাইট সংরক্ষণ করতে পারেন require
ডুরকনবব

-rprimeকোনও কারণে আমার পক্ষে কাজ করে না ...
মান ইঙ্ক

0

পাইকে, 19 বাইট, নন-কেপটিং

(splat_node ফান্টন যুক্ত করুন)
DTAbPe
;1TtD=T`"":r

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

উদ্ধৃতিগুলিতে ইনপুট নেয়, একটি ত্রুটি সহ প্রস্থান করে।

ব্যাখ্যা (line n সহ নতুন লাইন প্রতিস্থাপন করা হয়েছে):

D                    - Duplicate the first item on the stack (And get it from input first time)
 TAb                 - Convert input to base (whatever's in T, 10 default)
    Pe               - get the highest prime factor of the number
      \n;1           - print it out and get rid of it
          TtD=T      - T -= 1
               `"":  - input = input.replace(str(t), "")
                   r - GOTO start
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.