আরটিএ (বিপরীত-তারপর-যোগ) একটি সংখ্যার মূল


22

বিপরীত-পরে-যুক্ত (আরটিএ) সিকোয়েন্সটি একটি বিপরীতে একটি সংখ্যা যুক্ত করে, এবং ফলাফলটিতে প্রক্রিয়াটি পুনরাবৃত্তি করে প্রাপ্ত একটি অনুক্রম। যেমন।,

5+5=1010+01=1111+11=2222+22=44 ...

সুতরাং, 5 এর আরটিএ ক্রম 10, 11, 22, 44, 88, 176 ইত্যাদি রয়েছে 6

আরটিএ রুট একটি সংখ্যা n সবচেয়ে ছোট সংখ্যা পারেন সমান যে n বা বাড়াতে দেয় n তার আরটিএ ক্রমানুসারে।

উদাহরণস্বরূপ, 44 টি আরটিএ অনুক্রম 5, 10, 11, 13, 22, 31 ইত্যাদির মধ্যে পাওয়া যায় এর মধ্যে 5 টি সবচেয়ে ছোট, এবং আরটিআরট (44) = 5।

72 কোনও সংখ্যার আরটিএ অনুক্রমের অংশ নয় এবং তাই এটি তার নিজস্ব আরটিএ রুট হিসাবে বিবেচিত।

আপনার ভাষা প্রাকৃতিকভাবে পরিচালনা করতে পারে এমন একটি ব্যাপ্তিতে ইনপুট একটি ধনাত্মক পূর্ণসংখ্যা।

আউটপুট উপরের হিসাবে সংজ্ঞায়িত দেওয়া সংখ্যা আরটিএ মূল।

পরীক্ষার মামলা

Input
Output

44
5

72
72

132
3

143
49

1111
1

999
999

সম্পর্কিত ওইআইএস : A067031 । এই ক্রম থেকে আউটপুট একটি সংখ্যা হবে।

উত্তর:


13

পার্ল 6 , 45 44 বাইট

->\a{first {a∈($_,{$_+.flip}...*>a)},1..a}

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

ব্যাখ্যা:

->\a{                                    }  # Anonymous code block
->\a     # That takes a number a
     first  # Find the first element
                                     1..a  # In the range 1 to a
           {                       },    # Where
            a       # a is an element of
              (             ...   )  # A sequence defined by
               $_,  # The first element is the number we're checking
                  {$_+.flip}  # Each element is the previous element plus its reverse
                               *>$a  # The last element is larger than a

5
পার্ল 6 উপবৃত্তাকার সিনট্যাক্সটি যতবার আসে আমি ততবার যাদু করি। সেই ল্যাম্বদা-ভিত্তিক সিকোয়েন্স স্পেসিফিকেশনটি এমন ঝরঝরে ধারণা!
- মনিকা

@ সুন্দর, সিনট্যাক্সটি আসলে পার্ল to এ আমি আসার মূল কারণগুলির মধ্যে একটি কারণ ছিল (এবং কেন কিছু সময়ের পরে এটি আমার সর্বাধিক প্রিয় ভাষা হয়ে উঠল)
রমিলিস

7

ব্র্যাচল্যাগ , 24 22 বাইট

{~{ℕ≤.&≜↔;?+}{|↰₁}|}ᶠ⌋
  • 2 বাইটস সূন্দরকে লক্ষ্য করে ধন্যবাদ জানায় যে আমার কাছে {{এবং ছিল}}

ব্যাখ্যা

                --  f(n):
                --      g(x):
 {              --          h(y):
  ~             --              get z where k(z) = y
   {            --              k(z):
    ℕ≤.         --                  z>=0 and z<=k(z) (constrain so it doesn't keep looking)
    &≜          --                  label input (avoiding infinite stuff)
      ↔;?+      --                  return z+reverse(z)
   }            --
    {           --                  
     |↰₁        --              return z and h(z) (as in returning either)
    }           --                  
  |             --          return h(x) or x (as in returning either)
 }              --
ᶠ               --      get all possible answers for g(n)
  ⌋             --      return smallest of them

জঘন্য ব্যাখ্যার জন্য দুঃখিত, এটিই সেরা আমি নিয়ে আসতে পারি

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


1
সেখানে ব্যবহার {|↰₁}সহজ কিন্তু উজ্জ্বল। ভাল কাজ!
- মনিকা

5

হাস্কেল , 59 57 বাইট

-2 বাইট ব্যবহারকারীর জন্য ধন্যবাদ 1472751 ( untilতালিকা- বোধের পরিবর্তে দ্বিতীয়টি ব্যবহার করে head)!

f n=until((n==).until(>=n)((+)<*>read.reverse.show))(+1)1

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

ব্যাখ্যা

এটি যে Trueকোনও আরটিএ-রুটের জন্য মূল্যায়ন করবে :

(n==) . until (n<=) ((+)<*>read.reverse.show)

শব্দটি (+)<*>read.reverse.showএকটি গল্ফ সংস্করণ

\r-> r + read (reverse $ show r)

যা নিজের বিপরীতে একটি সংখ্যা যুক্ত করে।

ফাংশনটি untilবারবার প্রয়োগ হয় (+)<*>read.reverse.showযতক্ষণ না এটি আমাদের লক্ষ্য ছাড়িয়ে যায়।

এই সমস্তটি মুছে untilফেলা আরেকটি দিয়ে শুরু করে 1এবং 1 যুক্ত (+1)করে প্রথম আরটিএ-রুটটি খুঁজে পাবেন।

যদি সঠিক কোনও আরটিএ-রুট না থাকে তবে nআমরা শেষ পর্যন্ত nসেখানে পৌঁছে যাব untilযেহেতু কার্যটি কার্যকর হয় না n<=n


1
আপনি untilবাইরের লুপটি ব্যবহার করেও 2 বাইট সংরক্ষণ করতে পারেন : টিআইও
ব্যবহারকারী 1472751

5

05 এ বি 1 ই , 7 বাইট

05AB1E এর নতুন সংস্করণ ব্যবহার করে (এলিক্সিরে আবার লিখিত)।

কোড

L.ΔλjÂ+

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

ব্যাখ্যা

L           # Create the list [1, ..., input]
 .Δ         # Iterate over each value and return the first value that returns a truthy value for:
   λ        #   Where the base case is the current value, compute the following sequence:
     Â+     #   Pop a(n - 1) and bifurcate (duplicate and reverse duplicate) and sum them up.
            #   This gives us: a(0) = value, a(n) = a(n - 1) + reversed(a(n - 1))
    j       #   A λ-generator with the 'j' flag, which pops a value (in this case the input)
            #   and check whether the value exists in the sequence. Since these sequences will be 
            #   infinitely long, this will only work strictly non-decreasing lists.

অপেক্ষা করুন .. jএকটি পুনরাবৃত্তির পরিবেশে একটি বিশেষ অর্থ আছে? আমি কেবল পুনরাবৃত্তিমূলক পরিবেশের মধ্য দিয়ে এবং তার সম্পর্কে জানতাম λ। এর বাইরে আর কি আছে j? সম্পাদনা: আহ, আমি উত্স কোডে£ পাশাপাশি কিছু দেখতে পাচ্ছি । এটি কোথায় ব্যবহার করা হয়?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন হ্যাঁ, এগুলি পুনরাবৃত্তির পরিবেশে ব্যবহৃত পতাকা। jমূলত ইনপুট মানটি ক্রমানুসারে রয়েছে কিনা তা পরীক্ষা করে। £এটি সিকোয়েন্সের প্রথম n টি মান (একই λ<...>}¹£) প্রদান করে তা নিশ্চিত করে ।
আদনান

3

জেলি , 12 11 বাইট

ṚḌ+ƊС€œi¹Ḣ

9991111

@ জোনাথান অ্যালানকে 1 বাইট বন্ধ করে গল্ফ করার জন্য ধন্যবাদ!

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

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

ṚḌ+ƊС€œi¹Ḣ  Main link. Argument: n

      €      Map the link to the left over [1, ..., n].
    С         For each k, call the link to the left n times. Return the array of k
               and the link's n return values.
   Ɗ           Combine the three links to the left into a monadic link. Argument: j
Ṛ                Promote j to its digit array and reverse it.
 Ḍ               Undecimal; convert the resulting digit array to integer.
  +              Add the result to j.
       œi¹   Find the first multindimensional index of n.
          Ḣ  Head; extract the first coordinate.

3

রুবি, 66 57 বাইট

f=->n{(1..n).map{|m|m+(m.digits*'').to_i==n ?f[m]:n}.min}

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

পুনরাবৃত্ত ফাংশন যা আরটিএ অপারেশনটিকে বারবার "পূর্বাবস্থায়িত করে" এমন সংখ্যক না পৌঁছানো পর্যন্ত যার দ্বারা এটি উত্পাদন করা যায় না, তারপরে সর্বনিম্ন ফেরত দেয়।

ব্যবহার করার পরিবর্তে filter, যা দীর্ঘ, আমি তার পরিবর্তে কেবল map1 থেকে সংখ্যার সীমা ছাড়িয়ে চলেছি। এই রেঞ্জের প্রতিটি মিটারের জন্য , যদি এম + রেভ (এম) সংখ্যা হয় তবে এটি ফাংশনটিকে পুনরাবৃত্তভাবে এম বলে ডাকে ; অন্যথায়, এটি এন । এটি উভয়ই a এর প্রয়োজনীয়তা সরিয়ে filterদেয় এবং আমাদের f (n) = n এর একটি বেস কেস দেয় এবং বিনামূল্যে ।

হাইলাইটস এর সাথে বাইট সংরক্ষণ করা অন্তর্ভুক্ত Integer#digits:

m.to_s.reverse.to_i
(m.digits*'').to_i
eval(m.digits*'')

শেষটি একটি বাইট সংক্ষিপ্ত হবে, তবে দুঃখের বিষয়, রুবি অষ্টাল 0হিসাবে শুরু হওয়া সংখ্যাকে পার্স করে ।



2

পাইথ , 12 বাইট

fqQ.W<HQ+s_`

একটি পরীক্ষা স্যুট পরীক্ষা করে দেখুন!

আশ্চর্যজনকভাবে দ্রুত এবং দক্ষ। সমস্ত পরীক্ষার কেস একবারে 2 সেকেন্ডেরও কম সময় নিয়ে চলেছিল।

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

fqQ.W<HQ+s_` – Full program. Q is the variable that represents the input.
f            – Find the first positive integer T that satisfies a function.
   .W        – Functional while. This is an operator that takes two functions A(H)
               and B(Z) and while A(H) is truthy, H = B(Z). Initial value T.
     <HQ     – First function, A(H) – Condition: H is strictly less than Q.
        +s_` – Second function, B(Z) – Modifier.
         s_` – Reverse the string representation of Z and treat it as an integer.
        +    – Add it to Z.
             – It should be noted that .W, functional while, returns the ending
               value only. In other words ".W<HQ+s_`" can be interpreted as
               "Starting with T, while the current value is less than Q, add it
               to its reverse, and yield the final value after the loop ends".
 qQ          – Check if the result equals Q.

2

05 এ বি 1 ই , 13 বাইট

LʒIFDÂ+})Iå}н

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

ব্যাখ্যা

L               # push range [1 ... input]
 ʒ         }    # filter, keep elements that are true under:
  IF   }        # input times do:
    D           # duplicate
     Â+         # add current number and its reverse
        )       # wrap in a list
         Iå     # check if input is in the list
            н   # get the first (smallest) one

স্মার্ট! আমি জানি আমার 21 বাইট সংস্করণটি ইতিমধ্যে বেশ দীর্ঘ ছিল (যা আমি একই পদ্ধতির সাথে 16 তে গল্ফ করেছি), তবে এটি আরও ছোট করার কোনও উপায় খুঁজে বের করতে পারিনি। বিশ্বাস হচ্ছে না আমি ফিল্টার পর মাথা ব্যবহার সম্পর্কে চিন্তা না .. আমি লুপ সূচক +1 বা ব্যবহার করার চেষ্টা রাখা global_counter। ..>>
কেভিন Cruijssen

2

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

n=>(g=k=>k-n?g(k>n?++x:+[...k+''].reverse().join``+k):x)(x=1)

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

মন্তব্য

n =>                        // n = input
  (g = k =>                 // g() = recursive function taking k = current value
    k - n ?                 //   if k is not equal to n:
      g(                    //     do a recursive call:
        k > n ?             //       if k is greater than n:
          ++x               //         increment the RTA root x and restart from there
        :                   //       else (k is less than n):
          +[...k + '']      //         split k into a list of digit characters
          .reverse().join`` //         reverse, join and coerce it back to an integer
          + k               //         add k
      )                     //     end of recursive call
    :                       //   else (k = n):
      x                     //     success: return the RTA root
  )(x = 1)                  // initial call to g() with k = x = 1

2

05 এ বি 1 ই , 21 16 15 বাইট

G¼N¹FÂ+йQi¾q]¹

-1 বাইট @ এমিগানাকে ধন্যবাদ ।

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

ব্যাখ্যা:

G               # Loop `N` in the range [1, input):
 ¼              #  Increase the global_counter by 1 first every iteration (0 by default)
 N              #  Push `N` to the stack as starting value for the inner-loop
  ¹F            #  Inner loop an input amount of times
    Â           #   Bifurcate (short for Duplicate & Reverse) the current value
                #    i.e. 10 → 10 and '01'
     +          #   Add them together
                #    i.e. 10 and '01' → 11
      Ð         #   Triplicate that value
                #   (one for the check below; one for the next iteration)
       ¹Qi      #   If it's equal to the input:
          ¾     #    Push the global_counter
           q    #    And terminate the program
                #    (after which the global_counter is implicitly printed to STDOUT)
]               # After all loops, if nothing was output yet:
 ¹              # Output the input

অন্তর্নিহিত মুদ্রণের কারণে আপনার মুদ্রণের দরকার নেই।
এমিগানা

1

কাঠকয়লা , 33 বাইট

Nθ≔⊗θηW›ηθ«≔L⊞OυωηW‹ηθ≧⁺I⮌Iηη»ILυ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট কুই

≔⊗θη

বরাদ্দ 2কুই থেকে যাতে লুপটি শুরু হয়।

W›ηθ«

পুনরাবৃত্তি যখন >কুই:

≔L⊞Oυωη

একটি ডামি নাল স্ট্রিং টিপুন তোমার দর্শন লগ করা সুতরাং এর দৈর্ঘ্য বৃদ্ধি, এবং ফলাফল দৈর্ঘ্য নির্ধারণ ;

W‹ηθ

পুনরাবৃত্তি যখন <কুই:

≧⁺I⮌Iηη

বিপরীত যোগ করুন থেকে

»ILυ

এর চূড়ান্ত দৈর্ঘ্য মুদ্রণ করুন তোমার দর্শন লগ করা যা কাঙ্ক্ষিত মূল।


1

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

`@G:"ttVPU+]vG-}@

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

ব্যাখ্যা

`         % Do...while loop
  @       %   Push iteration index, k (starting at 1)
  G:"     %   Do as many times as the input
    tt    %     Duplicate twice
    VPU   %     To string, reverse, to number
    +     %     Add
  ]       %   End
  v       %   Concatenate all stack into a column vector. This vector contains
          %   a sufficient number of terms of k's RTA sequence
  G-      %   Subtract input. This is used as loop condition, which is falsy
          %   if some entry is zero, indicating that we have found the input
          %   in k's RTA sequence
}         % Finally (execute on loop exit)
  @       %   Push current k
          % End (implicit). Display (implicit)

1
পার্শ্ব নোট হিসাবে, আমি এই 31 বাইট সংস্করণটি ব্যবহার করে পরীক্ষার কেস আউটপুটগুলি তৈরি করতে এমএটিএল ব্যবহার করেছি: :!`tG=~yV2&PU*+tG>~*tXzG=A~]f1) এটি অনলাইনে চেষ্টা করুন!
- মনিকা পুনরায় ইনস্টল করুন

1

জাভা 8, 103 বাইট

n->{for(int i=0,j;;)for(j=++i;j<=n;j+=n.valueOf(new StringBuffer(j+"").reverse()+""))if(n==j)return i;}

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

ব্যাখ্যা:

n->{                // Method with Integer as both parameter and return-type
  for(int i=0,j;;)  //  Infinite loop `i`, starting at 0
    for(j=++i;      //  Increase `i` by 1 first, and then set `j` to this new `i`
        j<=n        //  Inner loop as long as `j` is smaller than or equal to the input
        ;           //    After every iteration:
         j+=        //     Increase `j` by:
            n.valueOf(new StringBuffer(j+"").reverse()+""))
                    //     `j` reversed
     if(n==j)       //   If the input and `j` are equal:
       return i;}   //    Return `i` as result

গাণিতিকভাবে পূর্ণসংখ্যার বিপরীতকরণ 1 বাইট দীর্ঘ ( 104 বাইট ) হয়:

n->{for(int i=0,j,t,r;;)for(j=++i;j<=n;){for(t=j,r=0;t>0;t/=10)r=r*10+t%10;if((j+=r)==n|i==n)return i;}}

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


1

সি (জিসিসি) , 120 100 99 বাইট

f(i,o,a,b,c,d){for(a=o=i;b=a;o=i/b?a:o,a--)for(;b<i;b+=c)for(c=0,d=b;d;d/=10)c=c*10+d%10;return o;}

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

ইনপুট দেওয়া iথেকে যে পূর্ণসংখ্যা পরীক্ষা iএকটা ক্রম ধারণকারী জন্য 0 i

  • i ইনপুট মান হয়
  • o আউটপুট মান (সর্বনিম্ন মূলটি এখনও পাওয়া গেছে)
  • a বর্তমানের পূর্ণসংখ্যাটি যাচাই করা হচ্ছে
  • baএর ক্রমের বর্তমান উপাদান
  • cএবং dএর bবিপরীতে যুক্ত করতে ব্যবহৃত হয়

সংকলন -DL=forআপনাকে 2 বাইট সংরক্ষণ করতে পারে।

যে আঁচড়ের দাগ; গণিত ভুল করছেন।

তবে আপনি i=o;যদি ব্যবহার করেন তবে আউটপুট মানটি ফিরিয়ে দিতে পারবেন -O0, আপনার 5 বাইট সংরক্ষণ করুন।



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