ডিজিটাল রুট মুদ্রণ করুন


19

এটি আমার ওয়ার্ড থেকে আলাদা এটি আপনার শব্দটিকে কম জটিল বলে মারধর করতে পারে এবং কেবল এটির গণনা করা এবং এগুলি তুলনা না করার জন্য আপনাকে প্রয়োজন।

ডিজিটাল রুটটি সন্ধান করতে, একটি সংখ্যার সমস্ত অঙ্ক নিয়ে নিন, সেগুলি যুক্ত করুন, এবং আপনি এক-অঙ্কের নম্বর না পাওয়া পর্যন্ত পুনরাবৃত্তি করুন। উদাহরণস্বরূপ, যদি সংখ্যা ছিল 12345আপনার যোগ করা হবে 1, 2, 3, 4, এবং 5, পেয়ে 15। এর পরে আপনি যোগ হবে 1এবং 5, আপনি দান 6

তোমার কাজ

STDIN এর মাধ্যমে একটি পূর্ণসংখ্যা N (0 <= N <= 10000) দেওয়া , এন এর ডিজিটাল মূল মুদ্রণ করুন ।

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

1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7

মনে রাখবেন, এটি , তাই সর্বনিম্ন সংখ্যক বাইট বিজয়ী কোড।


1
এই চ্যালেঞ্জের একটি সাবটাস্ক হতে পারে ।
নিমি

3
এই চ্যালেঞ্জের সাথে খুব ঘনিষ্ঠভাবে জড়িত ... সম্ভবত একটি ডুপের জন্য যথেষ্ট কাছাকাছি।
অ্যাডমবর্কবার্ক

8
বলার সময় আরও সুনির্দিষ্ট হন number। নির্দিষ্টভাবে. ইনপুট 0সমর্থন করা আবশ্যক ?
টন হসপেল

2
@ টিমিমিডি আমি মনে করি যে এটি পূর্ণ সংশোধনকে চিঠি যোগ না করে দুটি মূল্যবোধের জন্য ফাংশনটি গণনা করে এবং আক্ষরিক সহ আরও ক্লিনার চ্যালেঞ্জ STALEMATE। এটির ডুপ হিসাবে অন্যটিকে বন্ধ করা ভাল।
মার্টিন এন্ডার

3
@ মার্টিনএন্ডার আমি আমার ঘনিষ্ঠ ভোট প্রত্যাহার করে নিয়েছি বলে আমি মনে করি যে আরও একটি জটিল চ্যালেঞ্জের ছাপ হিসাবে একটি ভাল চ্যালেঞ্জ বন্ধ করা অনুচিত।
এরিক আউটগল্ফার

উত্তর:



17

জেলি , 7 5 4 3 বাইট

ḃ9Ṫ

TryItOnline! বা সমস্ত পরীক্ষার কেস

কিভাবে?

ডিজিটাল রুট সূত্র (ঢ -1)% 9 + 1 টি মান্য করা পরিচিত হয়।
এটি বাইজিক বেস 9 এর শেষ অঙ্কের সমান
(এবং এটি বাস্তবায়নের কারণে 0ḃ9=[]এবং []Ṫ=0এটি শূন্যের প্রান্ত-কেস পরিচালনা করে)।

ḃ9Ṫ - Main link: n
ḃ9  - convert to bijective base 9 digits (a list)
  Ṫ - tail (get the last digit)

13

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

n=>--n%9+1

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


6

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

9X\

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

ফলাফল পাওয়ার জন্য প্রচুর (এখন মুছে দেওয়া উত্তর) মডুলো 9 ব্যবহার করার চেষ্টা করেছে। এটি একটি মহান শর্টকাট, কিন্তু দুর্ভাগ্যবশত 9. MATL এর গুণিতক জন্য কাজ করে না বিরতি উপর মডিউল জন্য একটি ফাংশন আছে [1, n]। এই মডুলোটি ব্যবহার করে, আমাদের 1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1ইত্যাদি রয়েছে This


6

গণিত, 27 11 বাইট

Mod[#,9,1]&

ম্যাথামেটিকাকে Modমডুলোর ফলাফলের পরিসরের অফসেট হিসাবে তৃতীয় প্যারামিটার লাগে। এটি ইনপুট হ্রাস করা এবং আউটপুটকে বাড়িয়ে তোলে।


6

পাইথন, 16 20 বাইট

+4 বাইট শূন্য প্রান্ত কেস পরিচালনা করতে।

lambda n:n and~-n%9+1

repl.it


1
কি দারুন. এটি এত সহজ যে কোনও ভাষায় পোর্ট করা যায়। আপনি এমনকি করতে পারেন~-input()%9+1
কার্ল ন্যাপফ

1
দুর্ভাগ্যক্রমে 0 এর জন্য কাজ করে না।
এমিগানা

@ কার্লনাপফ- এর কি দরকার নেই print?
জনাথন অ্যালান

@ জোনাথান অ্যালান আহ, সম্ভবত আমি কেবল এটি আরপিএল পরিবেশে পরীক্ষা করেছি এবং এটি এটি করেছে।
কার্ল ন্যাপফ

1
@ অনামী ব্যবহারকারী যিনি সম্পাদনা করার চেষ্টা করেছেন - এটি আসলে কোডটি ভেঙে ফেলবে ( পরিবর্তে 0ফলাফলের একটি ইনপুট তৈরি করেছিল , যা কোডের অংশ দ্বারা তৈরি করা হয় ) তদতিরিক্ত এটি 13 টি নয় 19 টি বাইট হিসাবে গণনা করা হত ( যেহেতু এবং স্থান অবশ্যই গণনা করা উচিত)। 90n andprint
জনাথন অ্যালান


4

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

<?=--$argn%9+1;

পূর্ববর্তী সংস্করণ পিএইচপি, 55 বাইট

$n=$argn;while($n>9)$n=array_sum(Str_split($n));echo$n;

ঠিক কীভাবে আমি এটা করেছি!
CT14.IT

@ CT14.IT আপনি চাইলে আমি এই পোস্টটি মুছতে পারি। আপনার মুছে ফেলা পোস্টের ws 1 মিনিট আগে এবং আপনি কেবলমাত্র লুপটি ভুলে গেছেন
Jörg Hülsermann

না মুছে দেওয়া উত্তরটি ভুল ছিল কারণ আমি প্রশ্নটি শুরু করার জন্য সঠিকভাবে পড়িনি, আমি উত্পন্ন সংখ্যাটি যোগ করার চেষ্টা
করিনি

2
আপনি অন্যান্য উত্তরের কৌশল যুক্ত করতে পারেন<?=--$argv[1]%9+1?>
ক্রিপ্টো


3

পার্ল, 15 বাইট

জন্য +2 অন্তর্ভুক্ত -lp

STDIN এ ইনপুট দিন

root.pl <<< 123

root.pl

#!/usr/bin/perl -lp
$_&&=~-$_%9+1

এটি বিরক্তিকর সমাধান যা ইতিমধ্যে অনেক ভাষায় দেওয়া হয়েছে, তবে কমপক্ষে এই সংস্করণটিও সমর্থন 0করে

সত্যিকারের পুনরাবৃত্তি সংযোজনগুলি করা আরও আকর্ষণীয় (যদিও অন্য ক্রমে) বাস্তবে কেবল 1 বাইট বেশি দীর্ঘ:

#!/usr/bin/perl -p
s%%$_+=chop%reg

3

আর, 72 67 29 বাইট

সম্পাদনা: দুটি বাইট বন্ধ করে দেওয়ার জন্য @ আর্টারনবুলকে ধন্যবাদ।

n=scan();`if`(n%%9|!n,n%%9,9)

আমি সম্প্রতি শিখেছি যে ifelseপ্রতিস্থাপন করা যেতে পারে `if`, অভিন্ন আচরণের সাথে, যা আপনাকে কয়েকটা বাইট সংরক্ষণ করে।
rturnbull

@ আর্টারনবুল আমি সর্বদা ভাবছিলাম যে ` if` কীভাবে কাজ করে। আপনি একটি উদাহরণ দিতে পারেন বা গল্ফ ইন
বিলিউব

এটি বোঝার সহজ উপায় হ'ল এটি একটি ভেক্টরযুক্ত ifelse। এই ক্ষেত্রে, `if`(n%%9|!n,n%%9,9)আপনার পোস্ট করা কোডটিতে অভিন্ন আচরণ সরবরাহ করে। আমি যতদূর বলতে পারি, এই আচরণটি অনিবন্ধিত! আমি টিপসের থ্রেডে একটি মন্তব্য যুক্ত করব।
rturnbull

3

রেটিনা , 7 বাইট

{`.
*
.

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

আমি প্রচুর গাণিতিক সমাধান দেখতে পাচ্ছি, কিন্তু রেটিনায় সোজা পদ্ধতিটি সেরা বলে মনে হচ্ছে।

ব্যাখ্যা

{`স্ট্রিংটি আর পরিবর্তন না হওয়া পর্যন্ত পুরো প্রোগ্রামটিকে একটি লুপে চালিত করে। লুপটি দুটি স্তর নিয়ে গঠিত:

.
*

প্রতিটি অঙ্ককে অ্যানারিতে রূপান্তর করুন।

.

অক্ষরের সংখ্যা গণনা করুন (= অ্যালারি সংখ্যাকে দশমিক রূপান্তর করুন)।

এটি কাজ করে কারণ সংখ্যার মধ্যে কোনও বিভাজক না করে প্রতিটি অঙ্ককে অ্যানারিতে রূপান্তরকরণের ফলে একটি একক অ্যানারি সংখ্যা তৈরি হয় যা সমস্ত অঙ্কের যোগফলের সমান।


2

ব্র্যাচল্যাগ , 9 বাইট

#0|@e+:0&

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

ব্যাখ্যা

#0            Input = Output = a digit
  |           OR
   @e         Split the input into a list of digits
     +        Sum
      :0&     Call this predicate recursively

বিকল্প পদ্ধতি, 11 বাইট

: আমি: {@ E +} আমি # 0

এই এক মেটা-সম্পৃক্ত ব্যবহার i - Iterateকলে Iসম্পৃক্ত বার {@e+}ইনপুটের। এই মান চেষ্টা করবে Iথেকে 0অনন্ত এক করে তোলে পর্যন্ত যাতে আউটপুট iএকটি একক অঙ্ক যা করে তোলে #0সত্য।


2

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

3 টি বাইট সংরক্ষণ করা হয়েছে, ব্যাসড্রপ কম্বারবুবউবউবকে ধন্যবাদ

একটি স্ট্রিং নেয় এবং ফেরত দেয়।

f=s=>s[1]?f(''+eval([...s].join`+`)):s

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


4
আপনি এ পরিবর্তন s.split``করতে পারেন[...s]
বাসপ্রডোম্ব কম্বারউবউবউবব

2

সিজেম , 19 13 বাইট

r{:~:+_s\9>}g

অনুবাদক

ব্যাখ্যা:

r{:~:+_s\9>}g Code
r             Get token
 {:~:+_s\9>}  Block: :~:+_s\9>
   ~          Eval
  :           Map
     +        Add
    :         Map
      _       Duplicate
       s      Convert to string
        \     Swap
         9    9
          >   Greater than
            g Do while (pop)

8478 (মার্টিন ইন্ডার) -6 বাইট জন্য ধন্যবাদ।


সিজেম, 6 বাইট

ri(9%)

8478 (মার্টিন ইন্ডার) দ্বারা প্রস্তাবিত। অনুবাদক

আমি এটি সম্পর্কে চিন্তা ছিল, কিন্তু মার্টিন আমার সামনে এটি পেয়েছিলাম। ব্যাখ্যা:

ri(9%) Code
r      Get token
 i     Convert to integer
  (    Decrement
   9   9
    %  Modulo
     ) Increment

একক কমান্ড মানচিত্র এবং হ্রাস উভয় উপসর্গ দিয়ে লেখা যেতে পারে :, তাই আপনি করতে পারেন :~:+। কমপক্ষে একবারে ব্লকটি চালানোতেও ক্ষতি হয় না যাতে আপনি gলুপের পরিবর্তে লুপ ব্যবহার করতে পারেন w
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার r{_,1>}{:~:+`}wকাজ করে, তবে আমি জানি না পৃথিবীতে আমার কীভাবে gএখানে ব্যবহার করার কথা ।
এরিক দ্য আউটগল্ফার

যেমন এর মতো: r{:~:+_s\9>}g(অবশ্যই বদ্ধ ফর্মের সমাধানটি ri(9%)খুব খাটো
মার্টিন এণ্ডার

@ মার্টিন ইন্ডার ওহ গাদ, বাস্তবের জন্য, আমি এখন এমন একজন শিক্ষানবিশ ...
এরিক দ্য আউটগল্ফার

দ্বিতীয়টি 9 এর
গুণকগুলিতে

2

জাভা 7, 63 বাইট

int f(int n){int s=0;for(;n>0;n/=10)s+=n%10;return s>9?f(s):s;}

পুনরাবৃত্ত ফাংশন যা কেবলমাত্র মোড / ডিভের সাথে অঙ্কগুলি পায়। অভিনব কিছু না।

সস্তা বন্দর

এর জনাথন অ্যালান'স একটি ছোটো 28 বাইট হতে হবে:

int f(int n){return~-n%9+1;}

1

পাইথন 2, 54 51 বাইট

i=input()
while~-len(i):i=`sum(map(int,i))`
print i 

অলিভার এবং কার্ল নেপফকে 3 বাইট বাঁচাতে সাহায্য করার জন্য ধন্যবাদ


আপনি একটি বাইট সংরক্ষণ করতে পরিবর্তন while len(i)>1করতে পারেন while~-len(i)
অলিভার নি

আমি মনে করি আপনি কাছাকাছি টিকগুলি বাদ দিতে পারেন input()এবং 2 বাইট সংরক্ষণ করতে ইনপুটটিকে উদ্ধৃতিতে আবদ্ধ করতে বাধ্য করতে পারেন ।
কার্ল ন্যাপফ

@ কার্লনাপ্ফ আমার মনে হয় না যে ইনপুটটি পূর্ণসংখ্যা হলে আপনি এটি করতে পারবেন।
এরিক দি আউটগল্ফার

@ এরিকথগল্ফার, ওপি বলেছেন যে ইনপুটটি স্ট্রিং হিসাবে নেওয়া যেতে পারে
ড্যানিয়েল ২

1

পাইথন, 45 বাইট

f=lambda x:x[1:]and f(`sum(map(int,x))`)or x

যুক্তিটিকে স্ট্রিং হিসাবে গ্রহণ করে।



1

সি, 64 29 বাইট

সি বন্দর জোনাথন অ্যালান এর উত্তর থেকে (বিশেষ কেস 0 সহ)।

f(i){return i>0?~-i%9+1:0;}

পূর্ববর্তী 64 বাইট কোড:

q(i){return i>9?i%10+q(i/10):i;}
f(i){i=q(i);return i>9?f(i):i;}

qক্রস সমষ্টি fগ্রহণ করে এবং একক অঙ্ক পর্যন্ত ক্রস সমষ্টি গ্রহণের পুনরাবৃত্তি করে।


1

রেটিনা , 15 বাইট

.+
$*
1{9}\B

1

এটি অনলাইন চেষ্টা করুন!(প্রথম লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))

ব্যাখ্যা

.+
$*

ইনপুটটিকে আনারিতে রূপান্তর করুন।

(1{9})*\B

তাদের পরে কমপক্ষে আরও একটি চরিত্র রয়েছে এমন নাইনগুলি সরিয়ে 1-ভিত্তিক মডুলো নিন।

1

দশমিকায় ফিরে রূপান্তর করতে অবশিষ্ট 1 টি সংখ্যা গণনা করুন।



1

কারখানা , 24

স্মার্ট , ম্যাথির উত্তর।

[ neg bitnot 9 mod 1 + ]

বোবা পুনরাবৃত্তি সমাধানের জন্য 63 :

[ [ dup 9 > ] [ number>string >array [ 48 - ] map sum ] while ]

1

ভোল্টেজ , 8 বাইট

?(_9%)!@

সমীকরণটি ব্যবহার করে (n-1)%9+1:

  • ? দশমিক হিসাবে ইনপুটটি পড়ে এবং স্ট্যাকের দিকে ঠেলে দেয়
  • ( স্ট্যাকের শীর্ষ হ্রাস
  • _ স্ট্যাকের শীর্ষে একটি শূন্য চাপ দেয়
  • 9 স্ট্যাকের শীর্ষে 10 অঙ্ক অঙ্কের ধাক্কা (এই ক্ষেত্রে 9)
  • % পপস y, পপস এক্স, x% y ঠেলাবেন
  • ) স্ট্যাকের শীর্ষগুলি বৃদ্ধি করে
  • ! স্ট্যাকের শীর্ষে পপ করে এবং একে দশমিক স্ট্রিং হিসাবে রাখে
  • @ প্রোগ্রামটি সমাপ্ত করে

1

পাইথ - 7 4 6 7 বাইট

সেরাটি নয়, তবে এখনও উত্তরের পরিমাণে উত্তরে:

|ejQ9 9

পূর্ববর্তী সংস্করণটির মতো, তবে 9 এর গুণকগুলির ক্ষেত্রেও লজিকাল বা ব্যবহার করে পরিচালনা করা।


এই সংস্করণটি 45 টি টেস্টকেস ব্যর্থ করে :

ejQ9

ব্যাখ্যা:

 jQ9  -> converting the input to base 9
e     -> taking the last digit

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

পূর্ববর্তী সংস্করণটি এখানে চেষ্টা করে দেখুন!


পূর্ববর্তী সমাধান:

&Qh%tQ9

ব্যাখ্যা :

    tQ    -> tail: Q-1
   %tQ9   -> Modulo: (Q-1)%9
  h%tQ9   -> head: (Q-1)%9+1
&Qh%tQ9   -> Logical 'and' - takes the first null value. If Q is 0 - returns zero, otherwise returns the (Q-1)%9+1 expression result

আপনি এখানে চেষ্টা করার জন্য আমন্ত্রিত !


আপনার 4-বাইট সংস্করণ পরীক্ষার কেস 45 কে ব্যর্থ করে ।
ডেনিস

এটি 9 এর গুণকগুলির জন্য 0 দেবে না?
xnor

হ্যাঁ, আমি এটি কেবল লক্ষ্য করেছি। সেখানে কিছু ফিক্সিং করবেন। স্পষ্টতই, jQ9জেলির মতো আচরণ করবেন না :ḃ9
ইয়োটাম সালমন


1

হেক্সাগনি, 19 15 বাইট

.?<9{(/>!@!/)%' 

আরও পঠনযোগ্য:

  . ? < 
 9 { ( /
> ! @ ! / 
 ) % ' .
  . . . 

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

-3 বাইটগুলি একটি ভিন্ন পদ্ধতির মাধ্যমে 0 প্রান্তের কেসকে তুচ্ছ করে তোলে।
0 প্রান্ত কেস বাগটি ঠিক করে -1 বাইট

পাশাপাশি সূত্রটি ((এন -1) মোড 9) +1 আরও অন্যান্য সমাধানগুলির মতো।


1

কে (ওকে) , 9 বাইট

সমাধান:

(+/.:'$)/

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

ব্যাখ্যা:

সুপার সোজা। সংখ্যাগুলিতে অঙ্ক করুন এবং যোগফল করুন - ফলাফলটি রূপান্তর না হওয়া পর্যন্ত এটি করুন:

(+/.:'$)/ / the solution
(      )/ / do this until result converges
      $   / string, 1234 => "1234"
   .:'    / value each, "1234" => 1 2 3 4
 +/       / sum over, 1 2 3 4 => 10

1
আমার কে প্রয়োগ করার সময় আমি প্রয়োজনীয় হিসাবে অনেকগুলি সংখ্যার ভিত্তিতে x\yএনকোড তৈরি করেছি , তাই এটি সামান্য খাটো:yx(+/10\)/
ngn

খুশী হলাম। কেডিবি + এর নতুন সংস্করণগুলিতে (আমি মনে করি 10\:3..৪ এবং এর উপরে) আপনি করতে পারেন .. তবে ওকে নয় - এবং .:'$এটি একই সংখ্যক বাইট - তাই আমি তার সাথে গেলাম :)
রাস্তার পাশে

ওকে \ ব্যবহার করে এবং বামে একটি তালিকা প্রয়োজন: `(, 10)` `
ngn

প্রকৃতপক্ষে, আপনার বাস্তবায়ন "প্রয়োজনীয় হিসাবে অনেকগুলি সংখ্যক" যোগ করেছে, যা \:আপনি কেডিবি + (3.4+) থেকে পেয়েছেন, কিন্তু ওকে জন্য আমার তালিকাগুলিতে কত দশকে রাখা উচিত তা আমার জানতে হবে।
স্ট্রিস্টার

1

কেগ , 6 বাইট (কেগ উইকিতে এসবিসিএস)

¿;9%1+

ব্যাখ্যা:

¿#      Take implicit input
 ;9%1+# Digital Root Formula
# Implicit output

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