কুজনেটসভের সিকোয়েন্স


18

কুজনেটসভের সিকোয়েন্স

(I made the name up, don't bother with Wikipedia or Google)

যে কোনও সংখ্যা দেওয়া হয়েছে n > 0, সংখ্যার rবিপরীতে উপস্থাপন করুন n। চূড়ান্ত ফলাফল শূন্য না হওয়া পর্যন্ত ইট্রেট করুন, নীচের ক্রিয়াকলাপটি দ্বারা পুনরাবৃত্তি বা আপনার পছন্দসই পদ্ধতি ব্যবহার করে প্রতিটি পুনরাবৃত্তির ফলাফলটি ফাংশনে ফিরিয়ে দিন:

  • যদি r > nসেই পুনরাবৃত্তির জন্য ফলাফল হয় r % n
  • যদি n > rসেই পুনরাবৃত্তির জন্য ফলাফল হয় n % r
  • যদি n % r = 0বা r % n = 0, আপনি পুনরাবৃত্তি সমাপ্ত করেন।

প্রতিটি সম্পাদনের মধ্যবর্তী ফলাফল নিন এবং চূড়ান্ত উত্তরের জন্য একটি অ্যারেতে সংরক্ষণ করুন। প্রাথমিক সংখ্যাটি nক্রমের অংশ নয়, নয় 0; উদাহরণগুলি সবকিছুকে আরও স্পষ্ট করে তুলবে।

যেখানে একটি উদাহরণ দিয়ে যেতে দেয় n=32452345

54325423 % 32452345 = 21873078 # r > n, uses r % n
87037812 % 21873078 = 21418578 # r > n, uses r % n
87581412 % 21418578 = 1907100  # r > n, uses r % n
1907100 % 17091 = 9999         # n > r, uses n % r
9999 % 9999 = 0                # r % n = n % r = 0, terminated

Result: [21873078, 21418578, 1907100, 9999]     

আরেকটি উদাহরণ n=12345678:

87654321 % 12345678 = 1234575 # r > n, uses r % n
5754321 % 1234575 = 816021    # r > n, uses r % n
816021 % 120618 = 92313       # n > r, uses n % r
92313 % 31329 = 29655         # n > r, uses n % r
55692 % 29655 = 26037         # r > n, uses r % n
73062 % 26037 = 20988         # r > n, uses r % n
88902 % 20988 = 4950          # r > n, uses r % n
4950 % 594 = 198              # n > r, uses n % r
891 % 198 = 99                # r > n, uses r % n
99 % 99 = 0                   # r % n = n % r = 0, terminated

Result: [1234575, 816021, 92313, 29655, 26037, 20988, 4950, 198, 99]

একটি চূড়ান্ত উদাহরণ n=11000:

11000 % 11 = 0 # n % r = 0, terminated

Result: []

এটি সর্বনিম্ন বাইট-কাউন্ট জেতা।


2
গণনাগুলি হওয়ার সাথে সাথে ফলাফলগুলি মুদ্রিত করা যেতে পারে বা এটি কোনও অ্যারে তৈরি করতে হবে?
ফ্লিপট্যাক

আমি ধরে নিলাম ডিফল্ট আউটপুট নিয়মগুলি প্রযোজ্য হবে, যাতে আপনি আউটপুট ফরমার্ট চয়ন করতে পারেন (অ্যারে, স্থানগুলি দ্বারা পৃথক করা সংখ্যাগুলি ...)
লুই মেন্ডো

@ Flp.Tkc আমি যতক্ষণ প্রয়োজনীয় সংখ্যা প্রদর্শিত হয় ততক্ষণ আউটপুটকে সীমাবদ্ধ রাখব না।
যাদু অক্টোপাস উরান

2
কেবল একটি নোট যে কোনও সংখ্যার 'বিপরীতমুখী' কেবল কোনও নির্দিষ্ট বেসের প্রতি সম্মান সহকারে অর্থবহ।
ডেভিড কনরাড

1
@ এসপি 3000 ধরণের; ব্যতীত আপনার প্রতিটি পুনরাবৃত্তির বিপরীতে নেওয়া দরকার। আপনি গণনার মাধ্যমে কেবল একটি সংখ্যার থ্রেড করেন, দুটি নয় এবং প্রথমটিকে সর্বদা প্রথমটির বিপরীতে রাখুন।
টমসডিং

উত্তর:



6

পাওয়ারশেল ভি 2+, 89 বাইট

param($n)for(){$r=-join"$n"["$n".length..0];if(!($n=(($r%$n),($n%$r))[$n-gt$r])){exit}$n}

Iterative সমাধান। দৈর্ঘ্য কারণ কোনও অ্যারেকে উল্টানোর কোনও সহজ উপায় নেই, সুতরাং আমরা এটি স্ট্রাইফাই করি এবং এতে সঞ্চয় করতে পিছনে পিছনে সূচক করি $r। তারপরে একটি সিউডো-টেরিনারি উপযুক্ত মডুলোটি টেনে আনতে এবং $nপরবর্তী রাউন্ডের জন্য পুনরায় সঞ্চয় করতে । যাইহোক, ফলাফল শূন্য হয়, এর অর্থ !($n...)হবে $true, সুতরাং আমরা exitপরিবর্তে $n। নম্বরগুলি পাইপলাইনে রেখে যায় এবং (স্পষ্টতই) অ্যারে হিসাবে ফিরে আসে, তবে কোনও এনপ্যাপুলেটিং পাইপলাইন না করে বা ফলগুলিকে ভেরিয়েবলে সংরক্ষণ না করে ডিফল্ট Write-Outputএকটি নতুন লাইনে স্টিক করে।

এটি অনলাইন চেষ্টা করুন! (হ্যাঁ, মৃত গুরুতর))
পাওয়ারশেল এখন টিআইও-তে রয়েছে! আপনি এটি একটি বা দ্বিতীয় দিতে হবে, কারণ পাওয়ারশেল শুরু করার জন্য একটি জন্তু, তবে এখন আপনি, হ্যাঁ আপনি , আপনার ব্রাউজারে পাওয়ারশেল কোডটি যাচাই করতে পারবেন!


গাহ, আমাকে এর সাথে এবং একই পদ্ধতির সাথে মারধর করুন। নিস!
ব্রিটিশবাদী

6

পার্ল, 43 38 + 1 = 39 বাইট

-nপতাকা নিয়ে দৌড়াও

say while$_=($;=reverse)>$_?$;%$_:$_%$

এটি অনলাইন চেষ্টা করুন! দুটি খালি উদাহরণ অন্তর্ভুক্ত করে।

ব্যাখ্যা চার্ট

-n: পুরো প্রোগ্রামটি মোড়ানো while(<>){ ... ;}। এর ফলে, নিম্নলিখিত লাইন মধ্যে উপরের কোড সক্রিয়: while(<>){say while$_=($;=reverse)>$_?$;%$_:$_%$;}। লক্ষ্য করুন, একটি সেমিকোলন পেছনে যোগ করা হয়েছে $, সুতরাং এটি এখন চলকটির উদাহরণ হয়ে দাঁড়িয়েছে $;। একটি অবস্থার মধ্যে whileলুপ, <>স্বয়ংক্রিয়ভাবে ইনপুটের এক লাইন পড়ে এবং এটা সংরক্ষণ $_পরিবর্তনশীল। সুতরাং এখন আসুন দেখে নেওয়া যাক বাইরের whileলুপের ভিতরে দোভাষী কী পড়ছেন :

say while$_=($;=reverse)>$_?$;%$_:$_%$;
[op][mod][         condition          ]     #While is acting as a statement modifier.
                                            #It evaluates the operation as long as the condition is truthy.
            ($;=reverse)>$_?$;%$_:$_%$;     #The meat of the program: a ternary operation
            ($;=reverse)                    #The reverse function takes $_ as a parameter by default, and reverses the value.
                                            #The value returned by reverse is stored in the variable $;
                        >$_                 #A condition asking if $% is greater than $_.  Condition of the ternary operation
                           ?$;%$_           #If true, then return $; modulo $_
                                 :$_%$;     #If false, return $_ modulo $;
         $_=                                #Assign the result of the ternary operation back into $_
                                            #If $_ is non-zero, then the condition is true, and while will evaluate the operation
say                                         #Implicitly takes the $_ variable as parameter, and outputs its contents

আসল কোড, উত্তরোত্তর জন্য সংরক্ষিত: 43 + 1 = 44 বাইট

say$_=$%>$_?$%%$_:$_%$%while$_-($%=reverse)

$%>$_?$%%$_:$_%$%আপনি কি $%এই লাইনের জন্য উদ্দেশ্য হিসাবে পরিবর্তনশীল চয়ন করেছেন ?
টমসডিং

প্রায়শই - আমি বিবৃতি দেওয়ার আগে শেষ অক্ষরের জন্য একটি অ-অক্ষরীয় অক্ষর ব্যবহার করেও 1 বাইট সংরক্ষণ করি, সুতরাং আমার কোনও শ্বেতস্থান প্রয়োজন নেই।
এগুলি

5

পাইথ, 13 12 বাইট

t.u|%F_S,s_`

@ দ্য বাইকিংভিকিংকে ধন্যবাদ।

অনলাইনে চেষ্টা করুন: বিক্ষোভ

আমার পুরানো কোড:

W
W=Q%F_S,s_`

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

t.u|%F_S,s_`NNNQ  implicit Ns and Q at the end
               Q  start with N = Q (Q = input number)
        ,         create a pair with the numbers
         s_`N        convert N to string -> reverse-> convert to int
             N       and N
       S          sort
      _           reverse
    %F            fold by modulo
   |          N   or N (if the result is zero use N instead to stop)
 .u               apply this ^ procedure until a value repeats
                  print all intermediate values
 t                except the first one (the original number)


1
@ দ্য বাইকিংভিাইকিং ধন্যবাদ, এটি সত্যই চালাক।
জাকুব

4

জেলি , 15 14 13 বাইট

,ṚḌṢṚ%/
ÇÇпḊ

TryItOnline

কিভাবে?

,ṚḌṢṚ%/ - Link 1, iterative procedure: n
,       - pair n with
 Ṛ      - reverse n
  Ḍ     - undecimal (int of digit list)
   Ṣ    - sort
    Ṛ   - reverse
     %/ - reduce with mod

ÇÇпḊ - Main link: n
  п  - collect while
 Ç    - last link as a monad is truthy
Ç     -     last link as a monad
    Ḋ - dequeue (remove the input from the head of the resulting list)

4

জেলি , 13 12 বাইট

,ṚḌṢṚ%/Ṅß$Ṡ¡

এটি একটি monadic লিঙ্ক / ফাংশন যা STDOUT- এ প্রিন্ট করে।

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

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

,ṚḌṢṚ%/Ṅß$Ṡ¡  Monadic link. Argument: n

,Ṛ            Pair n and its reversed digit list.
  Ḍ           Convert the digit list into an integer.
   ṢṚ         Sort and reverse.
     %/       Reduce by modulo. Result: m
          Ṡ¡  Do sign(m) times:
       Ṅß$    Print with a newline and call the link recursively.

ফুটার কি জন্য? যদি অপসারণ করা হয় কোডটি 0
লুইস মেন্ডো

এটাই সঠিক. 0 ফাংশন, যা ব্যাখ্যাকারী কপি করে প্রিন্ট যদি এটা বাতিল করা হয় না ফেরত মান। অনুযায়ী এই মেটা আলোচনা , যে অনুমতি দেওয়া হচ্ছে।
ডেনিস

4

পাইথন 2, 92 87 81 73 61 বাইট

পুনরাবৃত্তি সমাধান:

def f(n):
    r=int(`n`[::-1]);x=min(r%n,n%r)
    if x:print x;f(x)

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

Iterative সমাধান: (এছাড়াও 61 বাইট )

n=input()
while n:r=int(`n`[::-1]);n=min(r%n,n%r);print n/n*n

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


আমি আপনাকে যে পুনরাবৃত্তি সমাধানটি দিয়েছি তা আসলে 59 বাইট, তবে আমি নিশ্চিত নই যে এটি বৈধ কিনা কারণ এটি ইনপুট প্রিন্ট করে। যদি এটি হয় তবে আপনি কেবলমাত্র করে 2 বাইট গল্ফ করতে পারেন while n:। অন্যথায়, আপনি এটি 61 বাইট দিয়ে করতে পারেন ।
ফ্লিপট্যাক

3

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

`tVPUhSPZ}\tt]xx

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

ব্যাখ্যা

`         % Do...while
  t       %   Duplicate. Takes input implicitly in the first iteration
  VPU     %   Transform the number at the top of the stack by reversing its digits
  hSPZ}   %   Concatenate the two numbers into an array, sort, reverse, split the
          %   array: this moves the smaller number to the top
  \       %   Modulo
  t       %   Duplicate. The original copy is left on the stack for displaying, 
          %   and the duplicate will be used for computing the next number
  t       %   Duplicate. This copy will be used as loop condition: exit if 0
]         % End
xx        % Delete the two zeros at the top. Implicitly display rest of the stack

2

পিএইচপি, 78 বাইট

function a($n){while(($r=strrev($n))&&($n=$r>$n?$r%$n:$n%$r)!=0){echo$n.' ';}}

2

ব্যাচ, 140 বাইট

@echo off
set/pn=
:l
set/am=n,l=0
:r
set/al=l*10+m%%10,m/=10
if %m% gtr 0 goto r
set/an=l%%n%%l+n%%l%%n
if %n% gtr 0 echo %n%&goto l

STDIN এ ইনপুট নেয় এবং পৃথক লাইনে ক্রমটি আউটপুট করে। ব্যাচের শর্তাধীন বিবৃতি রয়েছে (যা কিছুটা ভার্বোজ) তবে শর্তসাপেক্ষ প্রকাশ নেই তাই %গণনা করা সহজ (গুলিগুলি উদ্ধৃত করেও ) r%n%r(যা সমান r%nহলে n<rশূন্য যদি হয় n>r) এবং n%r%n(যা n%rযদি হয় n>rবা শূন্যের সমান হয় n<r) এবং যোগ করুন তাদের একসাথে।


2

গণিত, 68 বাইট

পরিবর্তে আমি ব্যবহার করার পরামর্শ দেওয়ার জন্য গ্রেগ মার্টিনকে ধন্যবাদ :FixedPointListNestWhileList

FixedPointList[Mod[(r=IntegerReverse@#)~Max~#,r~Min~#]&,#][[2;;-4]]&

আমার আসল সমাধানটি সবচেয়ে কম পেয়ে আমি FixedPointListপেয়েছিলাম 73৩ বাইট:

NestWhileList[Mod[(r=IntegerReverse@#)~Max~#,r~Min~#]&,#,#!=0&][[2;;-2]]&

1
মনে রাখবেন যে আপনার বেশিরভাগ সঠিক সমাপ্তির শর্ত নেই (উদাহরণ ইনপুট চেষ্টা করুন 11000)। আপনার শেষ অনুচ্ছেদে বর্ণিত কৌশলটিতে স্যুইচ করে আপনি এটি পেতে পারেন। তবে কীভাবে Restবা Mostএইভাবে মুক্তি পাবেন তা আমি দেখছি না । অন্যদিকে, FixedPointList[ Mod[(r = IntegerReverse@#)~Max~#, r~Min~#] &, #][[2 ;; -4]] &স্পেসগুলি সরিয়ে ফেলার পরে শুধুমাত্র 68 বাইট হয় (কয়েকটি ত্রুটি নিক্ষেপ করে, এনবিডি)।
গ্রেগ মার্টিন

আমি নিজেকে একরকম নিশ্চিত করেছিলাম যে স্প্যানগুলি {a,b,c,d}[[2;;-4]]ফাঁকা তালিকার চেয়ে একটি ত্রুটি দেবে (আমি সম্ভবত কমা ব্যবহার করার পরিবর্তে সম্ভবত ব্যবহার করেছি ;;)। কিছু শিখেছি।
নেজেনিসিস

আপনি পুরো মিনিট / সর্বাধিক ব্যবসায়ের সাথে SortFixedPointList[-Mod@@Sort@-{#,IntegerReverse@#}&,#][[2;;-4]]&
মার্টিন ইন্ডার

1

জাভাস্ক্রিপ্ট, 72 70 বাইট

f=(s,...o)=>(u=s>(z=[...s+''].reverse().join``)?s%z:z%s)?f(u,...o,u):o

console.log(...[32452345, 12345678, 11000].map(x=>f(x)))
.as-console-wrapper{max-height:100%!important}

সম্পাদিত:

-২ বাইট : স্প্রেড অপারেটর স্ট্রিং সংমিশ্রনের জন্য অপেক্ষা করে।


1

আর, 126 117 বাইট

x=scan();while(x){y=sort(c(x,as.double(paste(rev(el(strsplit(c(x,""),""))),collapse=""))));if(x<-y[2]%%y[1])print(x)}

দুঃখের বিষয়, একটি সংখ্যার ( as.double(paste(rev(el(strsplit(c(x,""),""))),collapse="")))) বিপরীত করা বেশ কথামূলক। বিশ্রামটি বেশ সহজ। ব্যবহারসমূহsortঅপ্রত্যক্ষভাবে যা উচ্চতর তা পরীক্ষা করতে করে।

বাকিটি সোজা, এটি লুপিং অবধি রাখে x=0এবং সমস্ত পদক্ষেপ মুদ্রণ করে।


1

সি, 87 বাইট

t;r;f(n){while(t=n){r=0;while(t)r=10*r+t%10,t/=10;n=r>n?r%n:n%r;if(n)printf("%d ",n);}}

tবিপরীত জন্য অস্থায়ী। অভ্যন্তরীণ লুপ শিফটr 1 টি বামে স্থানান্তর করে এবং শেষ tনা হওয়া অবধি শেষ অঙ্কটি যুক্ত করে। আউটপুটটি প্রথম পুনরাবৃত্তির পরে হয় এবং কেবলমাত্র যদি প্রথম এবং শেষ আইটেমটি প্রদর্শিত না হয় তবে শূন্য হয়।

অবরুদ্ধ এবং ব্যবহার:

t;r;
f(n){
  while (t = n){
    r = 0;
    while (t)
      r = 10*r + t%10,
      t /= 10; 
    n = r>n ? r%n : n%r;
    if(n)
      printf("%d ",n);
  }
}

0

গণিত, 64 বাইট

NestWhileList[#2~If[#<=#2,Mod,#0]~#&[IntegerReverse@#,#]&,#,#>0&]&

উপরের কোডটি একটি খাঁটি ফাংশন উপস্থাপন করে যা একটি একক ইনপুট নেয় এবং কুজনেটসভ সিকোয়েন্সটি প্রদান করে। গণিত সম্পর্কিত সত্যিই সুন্দর জিনিসটি হ'ল আপনি খাঁটি ফাংশনগুলির স্তরের উপরে স্তর রাখতে পারেন ... কোডটি ব্যাখ্যা করার জন্য আমাকে অনুমতি দিন;)

অনুক্রমের প্রতিটি শব্দ নিজেই নীচের ফাংশন দিয়ে গণনা করা হয়, যা একটি ইনপুট নেয় এবং পরবর্তী শব্দটি প্রদান করে।

#2~If[#<=#2,Mod,#0]~#&[IntegerReverse@#,#]&

কোডটি IntegerReverse@#কেবল আর তৈরি করে, বিপরীত মান। কোডটি #2~If[#<=#2,Mod,#0]~#&এমন একটি ফাংশন যা দুটি ইনপুট নেয় এবং হয় মোড অপারেশন করে, বা ইনপুটগুলিকে বিপরীত করে আবার নিজেকে কল করে। এটি লেখার আর একটি উপায় If[#<=#2, Mod, #0][#2, #]&, বা এটি নিয়মিত ফাংশন হিসাবে এটি লেখা যেতে পারে:k[a_, b_] := If[a <= b, Mod, k][b, a]


0

180 বাইট র‌্যাকেট

(let p((n n)(ol'()))(let*((v reverse)(o modulo)
(r(string->number(list->string(v(string->list(number->string n))))))
(m(if(> n r)(o n r)(o r n))))(if(= m 0)(v ol)(p m(cons m ol)))))

Ungolfed:

(define (f n)
  (let loop ((n n)
             (ol '()))
    (let* ((r (string->number
               (list->string
                (reverse
                 (string->list
                  (number->string n))))))
           (m (if (> n r)
                  (modulo n r)
                  (modulo r n))))
      (if (= m 0)
          (reverse ol)
          (loop m (cons m ol))))))

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

(f 32452345)
(f 12345678)

Ouput:

'(21873078 21418578 1907100 9999)
'(1234575 816021 92313 29655 26037 20988 4950 198 99)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.