সেভেনের চক্রের সমষ্টি


17

7 × 0 থেকে 7 × 9 থেকে সপ্তরের গুণফলটি একবার দেখুন:

0, 7, 14, 21, 28, 35, 42, 49, 56, 63

আমরা যদি কেবল তার জায়গায় অঙ্কগুলি দেখি তবে আমরা 0 থেকে 9 এর মধ্যে সংখ্যার অনুমান পেতে পারি:

0, 7, 4, 1, 8, 5, 2, 9, 6, 3

কিছু ধনাত্মক দশমিক পূর্ণসংখ্যক এন নেওয়ার বিষয়ে বিবেচনা করুন এবং এন এর প্রতিটি ডিজিটের ডি প্রতিস্থাপিত করে one's ডিগ্রি ডিগ্রি ডিগ্রিটির সাথে প্রতিস্থাপিত করুন।

উদাহরণস্বরূপ, 15209হয়ে যায় 75403কারণ 1মানচিত্র 7, 5মানচিত্র 5, 2মানচিত্র 4, 0মানচিত্র 0, এবং 9মানচিত্র 3

আমরা কোনও চক্র না হওয়া অবধি এই নতুন দশমিক পূর্ণসংখ্যার সাথে এই প্রক্রিয়াটির পুনরাবৃত্তি করি, অর্থাৎ আমরা ইতিমধ্যে দেখেছি এমন কোনও পূর্ণসংখ্যা না আসা পর্যন্ত।

উদাহরণস্বরূপ, সাথে 15209আমরা চক্রটি পাই

15209 -> 75403 -> 95801 -> 35607 -> 15209 -> repeats...
                                      ^
                                      |
                             cycle restarts here

অন্য উদাহরণ হিসাবে, 505সংক্ষিপ্ত চক্র রয়েছে

505 -> 505 -> repeats...
        ^
        |
cycle restarts here

দেখা যাচ্ছে যে কোনও এন এর জন্য এই চক্রটিতে সর্বদা ঠিক 1 বা 4 স্বতন্ত্র পূর্ণসংখ্যা থাকে। (এটি কেন তা খুঁজে বের করার জন্য আমি এটি ছেড়ে দেব leave) মজার বিষয়টি হ'ল আপনি যদি একটি চক্রের সমস্ত স্বতন্ত্র পূর্ণসংখ্যার যোগফল যোগ করেন তবে আপনি প্রায়শই একটি দশমিক পূর্ণসংখ্যা পাবেন যা কেবলমাত্র 2এবং এর সমন্বিত থাকে0 ' এর সমন্বিত থাকে।

উদাহরণস্বরূপ, 15209 + 75403 + 95801 + 35607 = 222020।

এন = 505 ব্যতিক্রমগুলির মধ্যে একটি। চক্রের একমাত্র পূর্ণসংখ্যা 505 সুতরাং মোট যোগফলটি নিজেই 505।

এন = 1 থেকে 60 এর জন্য চক্রের যোগফলগুলি এখানে রয়েছে:

N sum
1 20
2 20
3 20
4 20
5 5
6 20
7 20
8 20
9 20
10 200
11 220
12 220
13 220
14 220
15 220
16 220
17 220
18 220
19 220
20 200
21 220
22 220
23 220
24 220
25 220
26 220
27 220
28 220
29 220
30 200
31 220
32 220
33 220
34 220
35 220
36 220
37 220
38 220
39 220
40 200
41 220
42 220
43 220
44 220
45 220
46 220
47 220
48 220
49 220
50 50
51 220
52 220
53 220
54 220
55 55
56 220
57 220
58 220
59 220
60 200

আমরা এটিকে সাতটি সাইকেল চক্রের সিকোয়েন্স বলব।

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা সাতটি চক্রের যোগফলের সাথে সম্পর্কিত দশমিক দশমিক পূর্ণসংখ্যা N এবং দশমিক দশকে, মুদ্রণ করে বা ফেরত দেয়।

উদাহরণস্বরূপ, যদি ইনপুট হয় 95801তবে আউটপুটটি হওয়া উচিত 222020। যদি ইনপুট হয় 505তবে আউটপুট হওয়া উচিত 505। যদি ইনপুট হয় 54তবে আউটপুট হওয়া উচিত 220

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


1
অবশ্যই, আপনি এক চক্র থেকে নম্বর নিয়ে সংখ্যাবৃদ্ধি তাদের চার মাধ্যমে আপনি পাবেন যে যদি সব তাদের সংখ্যা যার শুধুমাত্র সংখ্যা 2 এবং 0. দিতে
পিটার টেলর

উত্তর:


1

পাইথ, 14 বাইট

s.uieM*R7jNTTQ

নিশ্চিত নন, প্রত্যেকে কেন সংখ্যার নিদর্শন দেখে ফলাফল নির্ধারণ করে। প্রক্রিয়াটি কেবল সহজভাবে করা, সমস্ত সংখ্যার বৃত্তের গণনা করা এবং তাদের যোগফল সংক্ষিপ্ত করা। কমপক্ষে পাইথ এ ;-)

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

বিটিডব্লিউ, এটি আমার 200 ম কোড-গল্ফ উত্তর। সুতরাং এই পোস্টটি আমাকে সোনার কোড-গল্ফ ব্যাজ উপার্জন করে।

ব্যাখ্যা:

s.uieM*R7jNTTQ   implicit: Q = input number
 .u          Q   apply the following expression to N=Q until it reaches a circle
         jNT        convert N to base 10
      *R7           multiply each digit with 7
    eM              and perform modulo 10 for each number
   i        T       convert digits from base 10 to a number
                    update N
                 .u returns the list of all intermediate results of N, 
                 so we have now all numbers of the circle
s                sum them up

কোড ... এটির জন্য অপেক্ষা করুন ... গল্ফ! :) অভিনন্দন, এবং এর দুর্দান্ত ব্যবহার.u
FryAmTheEggman

6

পাইথন 2, 69 বাইট

lambda n:[''.join('02'[x>'0']for x in`n`)+'0',n][set(`n`)<=set('05')]

ফাংশনটি বর্ণনা করা সহজ:

  • যদি n কেবল 0 এবং 5 এর সমন্বয়ে থাকে তবে আউটপুট এটি অপরিবর্তিত থাকে।
  • অন্যথায়, 0 প্রতি 0 0 বাদে এন এর প্রতিটি অঙ্ক 2 এর সাথে প্রতিস্থাপন করুন এবং 0 এ শেষ পর্যন্ত টেক করুন।

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

ফাংশনের বিকল্প বিবৃতিটি হ'ল

  • এন-তে, 0 হিসাবে 0 থাকে না বাদে প্রতিটি অঙ্ক 5 এর সাথে প্রতিস্থাপন করুন
  • যদি এটি পরিবর্তিত হয় (এটি 0 বা 5 ব্যতীত একটি অঙ্ক ছিল), ফলাফলটিকে 4 দিয়ে গুণ করুন

4

পাইথন 2, 63 বাইট

lambda s:s.strip('05')and''.join(`(c>'0')*2`for c in s)+'0'or s

ইনপুট আর্গুমেন্টটি একটি স্ট্রিং হিসাবে প্রত্যাশিত।


1
বাহ, আমার stripএভাবে ধারণা করা কোন ধারণা ছিল না ।
xsot

আসুন, টাইপ রূপান্তরগুলি (স্ট্রিং & হারার; সংখ্যা) মজাদার একটি যথেষ্ট অংশ (যেমন কোডের দৈর্ঘ্য; ও)!
চার্লি

4

সিজেম, 16 বাইট

সবার মতো একই অ্যালগরিদম ব্যবহার করে:

r_50s-{:~2fe&0}&

পরীক্ষা স্যুট. (1 থেকে ইনপুট পর্যন্ত সমস্ত ফলাফল উত্পন্ন করে))

ব্যাখ্যা

r_      e# Read input and duplicate
50s     e# Push the string "50".
-       e# Remove all '5' and '0' characters from the input.
{       e# If any characters remained in the input...
  :~    e#   Evaluate each digit character to turn it into an integer.
  2fe&  e#   Map (&& 2) over the list. Due to short-circuiting, zeros remain zeros and
        e#   everything else becomes 2.
  0     e#   Push a trailing zero.
}&

3

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

এক্সনোর এর পদ্ধতি ব্যবহার করে :

n=>/[^05]/.test(n)?`${n}0`.replace(/./g,d=>+d&&2):n

@ চার্লি ধন্যবাদ 3 বাইট সংরক্ষণ করা !

ব্যাখ্যা

n=>
  (s=n+"").match`[^05]`          // if there are any digits which aren't 5 or 0
    ?s.replace(/\d/g,d=>+d&&2)+0 //     replace every digit except 0 with 2 then add a 0
  :s                             // else return the input unchanged

পরীক্ষা

নিষ্পাপ পদ্ধতি, ১০২ বাইট

n=>(c=x=>~r.indexOf(x+=m="")?eval(r.join`+`):[...r[++i]=x].map(d=>m+="0741852963"[d])&&c(m))(n,i=r=[])
n=>
  (c=x=>                  // c = recursive function
    ~r.indexOf(           // if we have calculated this number before
      x+=m="")?           // cast x to a string, m = calculated result
        eval(r.join`+`):  //     return the sum of all the calculated numbers
    [...r[++i]=x].map(d=> // else add x to the list of calculated numbers
      m+="0741852963"[d]  // map each digit of x to the "seven" digits
    )&&c(m)               // calculate the value of the result
  )(n,i=r=[])             // r = array of previously calculated values


51 বাইট:n=>/[^05]/.test(n)?`${n}0`.replace(/./g,d=>+d&&2):n
চার্লি

1
40 বাইট:n=>n-(s=`${n}`.replace(/[^0]/g,5))?s*4:n
চার্লি

1
@ চার্লি বাহ, সেই s*4কৌশলটি দুর্দান্ত! আমি মনে করি আপনার পৃথক উত্তর হিসাবে এটি পোস্ট করা উচিত কারণ পদ্ধতিটি যথেষ্ট আলাদা এবং এটি আমার চেয়ে অনেক ছোট। :)
user81655

ঠিক আছে, আমি নম্রভাবে করব; ও)
চার্লি

2

গণিত, 83 77 60 টি অক্ষর

Tr@Union@NestList[FromDigits@Mod[7IntegerDigits@#,10]&,#,4]&

Ungolfed

Tr@
  Union@
   NestList[
    FromDigits@Mod[7 IntegerDigits@#, 10] &,
    #,
    4
   ] &

2

জাভাস্ক্রিপ্ট (ES5), 40 বাইট

n=>(s=`${n}`.replace(/[^0]/g,5))^n?s*4:n

Xnor দ্বারা বর্ণিত বিকল্প পদ্ধতির সাহায্যে এটি ব্যবহারকারীর 81655 এর সমাধানটির বিবর্তন

ব্যাখ্যা

4-চক্রের একটি অ-শূন্য অঙ্কের যোগফল সর্বদা 20 হয়, যেহেতু অঙ্কের চক্রটি 1 → 7 → 9 → 3, বা 2 → 4 → 8 → 6, বা 5 → 5 → 5 → 5 এর মধ্য দিয়ে হয়। সুতরাং এই জাতীয় প্রতিটি অঙ্কের 5 এর সাথে প্রতিস্থাপনের যোগফল পরিবর্তন করে না।

এই প্রতিস্থাপনের ক্রিয়াটি 4-চক্রকে 1-চক্র থেকে আলাদা করতে পুনরায় ব্যবহৃত হয় - যদি প্রতিস্থাপনের ফলাফলটি ইনপুট থেকে আলাদা হয়, তবে এটি একটি 4-চক্র, অন্যথায় এটি 1-চক্র।

নোট: টেমপ্লেট স্ট্রিংটি কেবল `${n}`পঠনযোগ্যতার জন্য, (n+'')একই দৈর্ঘ্য রয়েছে।


কোনও রেজিএক্সএক্স নেই - 47 বাইট:n=>(s=[...`${n}`].map(d=>+d&&5).join``)^n?s*4:n
চার্লি 16

0

সেড, 26 বাইট

/[^05]/{s/[^0]/2/g;s/$/0/}

(আরেকটি "2 এর প্রতিস্থাপন" পদ্ধতির দিকে এগিয়ে যান))

উদাহরণ

echo '500' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'500

echo '501' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'2020


0

পার্ল 6 ,  68 55 53 36  33 বাইট

{[+] $^a,{[~] $^b.comb.map: {'0741852963'.comb[$_]}}...^{$++*?/$a/}} # 68
{$_=@=$_.comb;[~] (@$_,(|.map(2*?+*),0))[$_qw<0 5>]} # 55
{[~] ($_=@=$_.comb)⊆qw<0 5>??@$_!!(|.map(2*?+*),0)} # 53
{/^<[05]>+$/??$_!!S:g/./{2*?+$/}/~0} # 36

{m/^<[05]>+$/||S:g/./{2*?+$/}/~0} # 33

এটি অবশ্যই এটি করার ভুল উপায়, যদি সংখ্যাটি কেবলমাত্র 5গুলি এবং 0এর সমন্বিত থাকে তবে এটি একটি ম্যাচ অবজেক্টকে ফিরিয়ে দেবে, অন্যথায় এটি 0একটি ব্যতীত সমস্ত কিছু প্রতিস্থাপন করে এবং শেষ পর্যন্ত 2একটি সংযোজন 0করে।
(ম্যাচ অবজেক্টটি যদি আপনি এটির হিসাবে ব্যবহার করেন তবে সংখ্যার মতো আচরণ করবে)

যদিও এটি এটি ভুল করছে, তবুও gistপদ্ধতিটি কল করে বিরল সংখ্যাগুলি চিহ্নিত করা সহজ করে তোলে ।

ব্যবহার:

# give it a name
my &code = {...}

.say for (0..60,505,15209).flat.map({ code($_).gist.fmt: '%4s' }).rotor(1,10 xx 6,:partial)

( 0」)
(  20   20   20   20  5   20   20   20   20  200)
( 220  220  220  220  220  220  220  220  220  200)
( 220  220  220  220  220  220  220  220  220  200)
( 220  220  220  220  220  220  220  220  220  200)
( 220  220  220  220  220  220  220  220  220 50」)
( 220  220  220  220 55  220  220  220  220  200)
(「505」)
(222020)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.