সংযোজন অধ্যবসায়


20

সমস্ত সম্ভাব্যতা পাস করার জন্য সংক্ষিপ্ততম কোড।

গণিতে, একটি সংখ্যার অধ্যবসায় পরিমাপ করে যে নির্দিষ্ট নির্দিষ্ট শর্ত না আসা পর্যন্ত কোনও নির্দিষ্ট অপারেশনকে তার অঙ্কগুলিতে কতবার প্রয়োগ করতে হবে। আপনি পূর্ণসংখ্যার সংখ্যার যোগ করে এবং পুনরাবৃত্তি করে ধনাত্মক পূর্ণসংখ্যার যোগ করার জন্য দৃ .়তা নির্ধারণ করতে পারেন। একটি অঙ্কের নম্বর না পাওয়া পর্যন্ত আপনি যোগফলের অঙ্কগুলি যোগ করতে থাকবেন। একক সংখ্যা সংখ্যায় পৌঁছাতে যে পুনরাবৃত্তির সংখ্যা নিয়েছিল তা হ'ল সেই সংখ্যার যুক্তিযুক্ত অধ্যবসায়।

84523 ব্যবহার করে উদাহরণ:

84523
8 + 4 + 5 + 2 + 3 = 22
2 + 2 = 4

It took two repetitions to find the single digit number.
So the additive persistence of 84523 is 2.

আপনাকে ইতিবাচক পূর্ণসংখ্যার একটি সিকোয়েন্স দেওয়া হবে যা এর যোগমূলক দৃistence়তা গণনা করতে হবে। প্রতিটি লাইনে প্রক্রিয়া করার জন্য পৃথক পূর্ণসংখ্যা থাকবে। ইনপুট যে কোনও মানক I / O পদ্ধতিতে থাকতে পারে ।

প্রতিটি পূর্ণসংখ্যার জন্য, আপনাকে পূর্ণসংখ্যার আউটপুট করতে হবে, তার পরে একটি একক স্থান এবং তার সংযোজনীয় অধ্যবসাসের পরে। প্রক্রিয়াকৃত প্রতিটি পূর্ণসংখ্যার অবশ্যই তার নিজস্ব লাইনে থাকতে হবে।

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


ইনপুট আউটপুট

99999999999 3
10 1
8 0
19999999999999999999999 4
6234 2
74621 2
39 2
2677889 3
0 0

1
আপনার পরীক্ষার ক্ষেত্রে এমন কিছু মান অন্তর্ভুক্ত থাকে যা 2 ^ 64 এর বেশি হয় এবং আপনার অনুমান অনুসারে প্রোগ্রামটি কেবল 2 ^ 32 পর্যন্ত মানগুলি পরিচালনা করতে পারে। এটি পরিষ্কার করার মতো হতে পারে।
পিটার টেলর

@ পিটার টেইলর, এই সীমাগুলি সরাতে ভুলে গেছেন। যদি কোনও প্রোগ্রাম আমার সরবরাহ করা ইনপুট পরিচালনা করতে পারে তবে এতে সীমাবদ্ধতার কোনও সমস্যা হওয়া উচিত নয়।
কেভিন ব্রাউন

5
999999999999 এর দৃistence়তা 3 এর পরিবর্তে 2 নয়?
ইলেভেক্স

@ ইভেলিক্স, আমার ধারণা এটি শেষ মুহুর্তের একটি ভুল ছিল change সংশোধন করা হয়েছে।
কেভিন ব্রাউন 21

এখানে বেশ কয়েকটি উত্তর stdout এ আউটপুট দিচ্ছে না বরং কমান্ড লাইন ইনপুট নেওয়ার পরে ফলাফল ফিরিয়ে জে এর "ইন্টারেক্টিভ" আউটপুট ব্যবহার করবে। (এটিতে আরও 2 জে জবাব রয়েছে এবং আমি অনুমান করছি, কে উত্তর।) এটি কি বৈধ হিসাবে বিবেচিত হবে? কারণ আমি যদি 18-ইশ অক্ষরগুলি চালিত করতে পারি তবে।
জেসি মিলিকান

উত্তর:


6

কে - 29 চরগুলি

ইনপুট হল একটি ফাইল নাম যা আর্গুমেন্ট হিসাবে পাস হয়েছে, 29 টি ফাইলের নাম সহ নয়।

`0:{5:x,-1+#(+/10_vs)\x}'.:'0:"file"
  • 35 -> 31: বাইরের ফাংশন সরান।
  • 31 -> 29: পেরেনগুলি সরান।


4

পাইথন 84 চর rs

while 1:
 m=n=int(raw_input());c=0
 while n>9:c+=1;n=sum(map(int,str(n)))
 print m,c

চ্যালেঞ্জের কেস: 06234.. ফলাফল সফল চ্যালেঞ্জ :-)
কুইসোটিক

@ দেবানজান ধন্যবাদ সংশোধন।
fR0DDY


4

পাইথন (93 বাইট)

f=lambda n,c:n>9and f(sum(map(int,str(n))),c+1)or c
while 1:n=int(raw_input());print n,f(n,0)

আমি মনে করি আপনি 9এবং and
এররের

@ st0le: ধন্যবাদ :-)
Quixotic

এবং এর input()পরিবর্তে int(raw_input())....
st0le

@ st0le: যে সংশোধন সহ এই ইনপুট করার চেষ্টা করুন: 06234
কুইসোটিক

4

হুশ , 10 15 বাইট

ভয়াবহ আই / ও প্রয়োজনীয়তার জন্য +5 বাইট

m(wΓ·,LU¡oΣdr)¶

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

ব্যাখ্যা

একাধিক ইনপুট সমর্থন করতে, আমাদের ব্যবহার করতে হবে m(₁r)¶( আকর্ষণীয় গণনাটি কোথায় কাজ করছে):

m(₁r)¶  -- expects newline-separated inputs: "x₁␤x₂␤…␤xₙ"
     ¶  -- split on newlines: ["x₁","x₂",…,"xₙ"]
m(  )   -- map over each string
 ( r)   -- | read integer: [x₁,x₂,…,xₙ]
 (₁ )   -- | apply the function described below

ফাংশনটি নিম্নলিখিতগুলি করে:

wΓ·,LU¡(Σd)  -- input is an integer, eg: 1234
      ¡(  )  -- iterate the following forever and collect results in list:
       ( d)  -- | digits: [1,2,3,4]
       (Σ )  -- | sum: 10
             -- : [1234,10,1,1,1,…
     U       -- keep longest prefix until repetition: [1234,10,1]
 Γ           -- pattern match (x = first element (1234), xs = tail ([10,1])) with:
  · L        -- | length of xs: 2
   ,         -- | construct tuple: (1234,2)
w            -- join with space: "1234 2"

3

বাশ, 105 টি অক্ষর

while read x
do
for((i=0,z=x;x>9;i++))do
for((y=0;x>0;y+=x%10,x/=10))do :
done
x=$y
done
echo $z $i
done

আসলেই কোনও গল্ফ জড়িত, তবে কীভাবে এটি উন্নত করা যায় তা আমি দেখতে পাচ্ছি না।


3

হাস্কেল - 114

s t n|n>9=s(t+1)$sum$map(read.(:[]))$show n|1>0=show t
f n=show n++" "++s 0n++"\n"
main=interact$(f.read=<<).lines

এর পরিবর্তে কোনও অপারেটর ব্যবহার pureকরে (:[])এবং সংজ্ঞায়িত করে আপনি 4 বাইট সংরক্ষণ করতে পারেন s, এটি অনলাইনে চেষ্টা করুন!
22

3

রুবি, 85 চর rs

puts $<.map{|n|v=n.chop!;c=0;[c+=1,n="#{n.sum-n.size*48}"] while n[1];[v,c]*' '}*"\n"

আমাকে অ্যালেক্সের কাছ থেকে "সম-আকার * 48" ধারণা ধার করতে হয়েছিল, কারণ এটি মিস করার পক্ষে খুব ঝরঝরে (কমপক্ষে রুবিতে)।



3

জে - 45 চারস

স্টিডিনের কাছ থেকে পড়ে

(,' ',[:":@<:@#+/&.:("."0)^:a:)&><;._2(1!:1)3

আমি ^:a:নিজেকে ব্যবহার করার চেষ্টা করছিলাম কিন্তু আমি সঠিক কোনও ডকুমেন্টেশন পাইনি ... কোনও ইঙ্গিত?
ইলেভেক্স

1
তোমার জন্য অভিধান এন্ট্রি ^: N ব্যবহারের উপর তথ্য রয়েছে কিন্তু একটু ঘন হয়। a: ক: পাওয়ারে অন্য কলগুলির মতো এটি কিন্তু ফল সংগ্রহ করে এবং শেষ হয় যখন পরপর কলগুলির যুক্তি একই হয় (রূপান্তর হয়)।
isawdrones

1
@Eelvex FWIW আমি আবিষ্কৃত a:মাধ্যমে ^:a:এ কৌতুক জে রেফারেন্স কার্ড [পিডিএফ]
জেবি

@ জেবি: ^:a:আমি জানতাম যে এটিই কেবলমাত্র রেফারেন্স : ডি
ইভেলেক্স

@ এলভেক্স ওহ আমার তখন বিপরীত অভিজ্ঞতা ছিল। আমি অভিধানে কার্যকারিতাটি আবিষ্কার ^:(<'')করেছি এবং এটি কার্ডে স্পষ্ট না করে এবং a:অনুষ্ঠানের জন্য না জানার আগে পর্যন্ত এটি প্রথমে (সম্ভবত কপ্রেকারের জন্য) কিছু রূপ হিসাবে ব্যবহার করেছি ।
জেবি

3

সি - 519

(বা 137 যদি আপনি আমাকে কাঠামোর জন্য ক্রেডিট করেন ...)

কেবলমাত্র এই একটি অপারেশনটি সমাধান করার পরিবর্তে, আমি দৃ .়তার সমস্ত সমস্যা সমাধানের জন্য একটি কাঠামো তৈরি করার সিদ্ধান্ত নিয়েছি ।

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char*(*O)(char*);
char*b(char*s){long long int v=0,i,l=0;char*t=0;l=strlen(s);t=malloc(l+2);
for(i=0;i<l;i++)v+=s[i]-'0';snprintf(t,l+2,"%lld",v);return t;}
int a(char**s,O o){int r;char*n;n=o(*s);r=!strcmp(*s,n);free(*s);
*s=n;return r;}
int main(int c, char**v){size_t l, m=0;char *d,*n=0;O o=b;FILE*f=stdin;
while(((l=getline(&n,&m,f))>1)&&!feof(f)){int i=0;n=strsep(&n,"\n");
d=strdup(n);while(!a(&n,o))i++;printf("%s %d\n",d,i);free(d);free(n);n=0;m=0;}}

কেবল দুটি লাইনই char*bএই সমস্যাটির জন্য অনন্য।

এটি ইনপুটটিকে স্ট্রিং হিসাবে বিবেচনা করে, যার অর্থ আউটপুট পর্যায়ে "0" গুলি আগে স্ট্রিপ হয় না।

উপরেরটির মন্তব্য, ত্রুটি পরীক্ষা করা এবং প্রতিবেদন করা এবং ফাইল পড়া (স্ট্যান্ডার্ড ইনপুট থেকে অবশ্যই ইনপুট আসতে হবে) রয়েছে:

/* persistence.c
 *
 * A general framework for finding the "persistence" of input strings
 * on opperations.
 *
 * Persistence is defined as the number of times we must apply
 *
 *    value_n+1 <-- Opperation(value_n)
 *
 * before we first reach a fixed point.
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../getline.h"

/* A function pointer type for operations */
typedef char*(op_func)(char*);
typedef op_func* op_ptr;
/* Op functions must
 * + Accept the signature above
 * + return a point to a newly allocated buffer containing the updated str
 */

char* addop(char*s){
  int i,l=0;
  long long int v=0;
  char *t=NULL;
  /* protect against bad input */
  if (NULL==s) return s;
  /* allocate the new buffer */
  l = strlen(s);
  t = malloc(l+2);
  if (NULL==t) return t;
  /* walk the characters of the original adding as we go */
  for (i=0; i<l; i++) v += s[i]-'0';
  //fprintf(stderr,"   '%s' (%d) yields %lld\n",s,l,v);
  snprintf(t,l+2,"%lld",v);
  //fprintf(stderr,"   %lld is converted to '%s'\n",v,t);
  return t;
}

/* Apply op(str), return true if the argument is a fixed point fo
 * falsse otherwise,
 */ 
int apply(char**str, op_ptr op){ 
  int r;
  char*nstr;
  /* protect against bad input */
  if ( NULL==op ) exit(1); 
  if ( NULL==*str ) exit(4); 
  /* apply */
  nstr = op(*str); 
  /* test for bad output */
  if ( NULL==nstr ) exit(2); 
  r = !strcmp(*str,nstr); 
  /* free previous buffer, and reasign the new one */
  free(*str); 
  *str = nstr; 
  return r; 
}

int main(int argc, char**argv){
  size_t len, llen=0;
  char *c,*line=NULL;
  op_ptr op=addop;
  FILE *f=stdin;
  if (argc > 1) f = fopen(argv[1],"r");
  while( ((len=getline(&line,&llen,f))>1) && line!=NULL && !feof(f) ){
    int i=0;
    line=strsep(&line,"\n"); // Strip the ending newline
    /* keep a copy for later */
    c = strdup(line);
    /* count necessary applications */
    while(!apply(&line,op)) i++;
    printf("%s %d\n",c,i);
    /* memory management */
    free(c);
    free(line);
    line=NULL;
    llen=0;
  }
}

আমরা যদি চালুনির মতো স্মৃতি ফাঁস করতে ইচ্ছুক থাকতাম তবে আরও কিছুটা বাঁচানো যেত। একইভাবে #defineরিটার্ন এবং লাইক দিয়েও, তবে এই মুহুর্তে আমি এটিকে কোনও কুরুচিপূর্ণ করে তোলার কোনও যত্ন করি না।



2

জে, 74 অক্ষর

i=:<;._2(1!:1)3
i&((],' ',":@(0 i.~9<[:".([:":[:+/"."0)^:(i.9)))@>@{~)i.#i

সম্পাদনাগুলি

  • (86 → 83)[: এটস-এর কয়েকটি ক্যাপস@
  • (83 → 79) অপ্রয়োজনীয় বন্ধনী
  • (79 → 75) পরিবর্তন 0".করা ".জিনিসগুলিকে সরল করে
  • (75 → 74) ভাল কাটা

যেমন

i=:<;._2(1!:1)3
74621
39
2677889
0
i&((],' ',":@(0 i.~9<[:".([:":[:+/"."0)^:(i.9)))@>@{~)i.#i
74621 2  
39 2     
2677889 3
0 0  

একাধিক ইনপুটগুলির জন্য আউটপুট ভুল ফর্ম্যাট করা হয়। "একক স্থান"
জেসি মিলিকান

@ জেসি: আমি কিছুই ভুল দেখছি না। আপনি একটি উদাহরণ লিখতে পারেন দয়া করে?
ইলেভেক্স

আমার ধারণা নেই, আমি অনুমান করার জিনিসগুলি দেখছি।
জেসি মিলিকান

1

আমি মনে করি এটি আমি নিয়ে আসতে পারে সেরা সম্পর্কে।

রুবি 101 চর

f=->(n){n.sum-n.size*48}
$<.each{|l|i=0;i+=1 while(i+=1;n=f[(n||l.chop!).to_s])>10
puts "#{l} #{i}"}

আসলে, চপ! চম্পের বদলে! আমাকে একটি চরিত্রের সঞ্চয় দেয়। 97 চর।
অ্যালেক্স বার্তলো

এটিতে আরও কিছু গল্ফ করছিল - ৯১ টি চর।
অ্যালেক্স বার্তলো

1

পারি / জিপি 101 চরস

s(n)=r=0;while(n>0,r+=n%10;n\=10);r
f(n)=c=0;while(n>9,c++;n=s(n));c
while(n=input(),print(n," ",f(n)))

দুর্ভাগ্যক্রমে, জিপির জন্য কোনও ইনপুট ফাংশন নেই, তাই আমি অনুমান করি এটির আইও অংশের অভাব রয়েছে la :( স্থির: ধন্যবাদ ইভেলেক্স! :)


অবশ্যই আছে: input():)
এলেভেক্স

@ এলভেক্স, সম্পন্ন :)
st0le

1

জাভাস্ক্রিপ্ট - 95

i=prompt();while(i>9){i=''+i;t=0;for(j=0;j<i.length;j++)t+=parseInt(i.charAt(j));i=t;}alert(t);

সম্পাদনা: হুফ মাল্টি-লাইনগুলি করে না


1
কেবলমাত্র লক্ষ্য করা গেছে এটি সঠিকভাবে আউটপুট দেয় না।
কেভিন ব্রাউন

1

জে, 78

f=:[:+/"."0&":
r=:>:@$:@f`0:@.(=f)
(4(1!:2)~LF,~[:":@([,r)".@,&'x');._2(1!:1)3

পুনরাবৃত্তির সমাধান। স্টিডিনের কাছ থেকে পড়ে। স্টাডাউটকে লিখেছেন , তাই আমাকে কিছুটা স্ল্যাক কেটে দিন - এটি অতিরিক্ত 18-ইশ অক্ষর লাগে।


1

পার্ল - 77 টি অক্ষর

sub'_{split//,shift;@_<2?0:1+_(eval join'+',@_)}chop,print$_,$",(_$_),$/for<>

1

জাভাস্ক্রিপ্ট , 57 47 বাইট

-10 বাইট @ l4m2 ধন্যবাদ!

f=(s,c=0)=>s>9?f(eval([...s+""].join`+`),++c):c

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


f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x*1+y*1),++c):c
l4m2

f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x- -y),++c):c
l4m2

1
f=(s,c=0)=>s>9?f(eval([...s+""].join`+`)),++c):c
l4m2

@ l4m2 ধন্যবাদ! s>9এবং evalদুর্দান্ত ধারণা ছিল। আমার মনে হয় আপনি সেখানে অতিরিক্ত প্যারেন রেখেছিলেন, এটির মাধ্যমে আপনি আমাকে মোট 10 টি বাইট সংরক্ষণ করেছেন :-)
অলিভার

কড়া আই / ও;) নোট করুন
শেজি

1

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

ε.µΔSO¼}¾}<ø»

পূর্ণসংখ্যার একটি তালিকা হিসাবে ইনপুট।

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

ব্যাখ্যা:

ε     # Map each integer in the (implicit) input to:
    #  Reset the counter variable to 0
 Δ    #  Loop until the integer no longer changes:
  S   #   Convert it to a list of digits
   O  #   And take the sum of those
  ¼   #   Increase the counter variable by 1
    #  After the inner loop: Push the counter variable
}<    # After the map: decrease each value by 1
  ø   # Zip/transpose it with the (implicit) input to create a paired list
   »  # Join each pair by a space, and then each string by newlines
      # (after which the result is output implicitly)

1

ম্যাথগল্ফ , 11 বাইট

hÅ_Σ]▀£(k ?

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

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

সংযোজনীয় অধ্যবসায় সংখ্যার অঙ্কের সংখ্যার চেয়ে কম বা সমান fact এই সত্যটি ব্যবহার করে। সমস্ত পরীক্ষার কেসগুলি এখন স্বাচ্ছন্দ্যে পাস করে।

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

ব্যাখ্যা (ব্যবহার করে n = 6234)

h             push length of number without popping (6234, 4)
 Å            loop 4 times using next 2 operators
  _           duplicate TOS
   Σ          get the digit sum
    ]         wrap stack in array
              this gives the array [6234, 15, 6, 6, 6]
     ▀        unique elements of string/list ([6234, 15, 6])
      £       length of array/string with pop (3)
       (      decrement (2)
        k ?   push input, space, and rotate top 3 elements to produce output (6234 2)


1

স্ট্যাক্স , 8 11 বাইট

ªwæMε∞ö?îm⌐

এটি চালান এবং এটি ডিবাগ করুন

+3 বাইটস @ খুলড্রেসথকে ধন্যবাদ (প্রথম জবাবটির সাথে সম্মতিযুক্ত আউটপুট নেই)


1
আমি একই সমাধানে পৌঁছেছি, তবে তার iজায়গায় u। কঠোর আইও স্পেসিফিকেশন মেনে চলা, এটি 11 বাইট হয়ে যায় ।
খুলদ্রেশেথ না বারিয়া

উফ। আমার ধারণা আমি খুব ভাল আইও প্রয়োজনীয়তা পড়েনি। আমি আমার উত্তর আপডেট করব।
পুনরাবৃত্তি



0

জাভা (ওপেনজেডিকে 8) , 79 বাইট

a->{int d=0;while(a/10>0){int c=0;d++;while(a>0){c+=a%10;a/=10;}a=c;}return d;}

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

এটি আরও গল্ফ করার সম্ভাবনা রয়েছে, তবে ভবিষ্যতে আমি এটি সন্ধান করব, তবে আপাতত, আমি এই সামান্য ফলাফলটি নিয়ে বেশ খুশি।




0

পাইথন 3 , 82 বাইট

while 1:f=lambda n:n//10and 1+f(sum(map(int,str(n))));i=input();print(i,f(int(i)))



0

পিএইচপি, 72 + 1 বাইট

-Rপতাকা জন্য +1 ।

for($i=0,$a=$argn;$a>9;$i++)$a=array_sum(str_split($a));echo"$argn $i
";

পাইপ হিসাবে চালান -R

  • পাইপ হিসাবে পিএইচপি চালানো প্রতিটি ইনপুট লাইনের জন্য কোডটি একবার কার্যকর করে
  • তবে এটি ভেরিয়েবলগুলি ইনবিটওয়ানের মধ্যে আনসেট করে না; সুতরাং $iআরম্ভ করা আবশ্যক।
    (এছাড়াও, এটি 0সূচনা ছাড়া একক অঙ্কের পরিবর্তে কিছুই মুদ্রণ করতে পারে ))

0

বাশ + কোর্টিলস, 83 বাইট

[ $1 -le 9 ]&&exit $2
let x=$2+1
for z in `fold -w1<<<$1`
do let y+=$z
done
a $y $x

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

যাকে বলা হয় aএবং সিস্টেমের মধ্যে স্থাপন করা হয় এমন কোনও স্ক্রিপ্টে সংরক্ষণ করা উচিত PATH, কারণ এটি নিজেকে পুনরাবৃত্তি বলে। কমান্ড লাইন থেকে ইনপুট নেয় a 1999। প্রস্থান কোড দ্বারা ফিরে আসে।

স্ক্রিপ্টের সাহায্যে টিআইওর আপনি কী করতে পারেন তার কিছু সীমাবদ্ধতা রয়েছে, তাই হেডারে এই রানটি করার জন্য কিছু বয়লারপ্লেট কোড রয়েছে।

stderrবাশ পূর্ণসংখ্যার চেয়ে বড় ইনপুটটির জন্য কোনও ত্রুটি মুদ্রণ করে , তবে যেহেতু প্রকৃত গণনাটি স্ট্রিং দিয়ে করা হয়, এটি এখনও যাইহোক সঠিক ফলাফল দেয়।

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