ডিজিটাল সেলুলার অটোমাতা


17

একটি প্রোগ্রাম বা ফাংশন লিখুন যা বিজোড় ধনাত্মক পূর্ণসংখ্যা N এবং দশমিক অঙ্কগুলির স্ট্রিং নেয় 0123456789। স্ট্রিংটি দশ-রাজ্যের এক-মাত্রিক সেলুলার অটোমেটনের প্রতিনিধিত্ব করে । প্রতিটি অঙ্ক একটি কক্ষ দখল করে থাকে এবং এক প্রজন্ম থেকে পরবর্তী প্রজন্মের আপডেটের নিয়মটি হ'ল প্রতিটি সেলটি অঙ্কিত হয় N কোষের যোগফলের ফলে কোষকে কেন্দ্র করে, মডুলো 10।

প্রথম এবং শেষের কোষগুলি আশেপাশে মোড়ানো থাকে যেন প্রতিবেশী থাকে, তাই কোষগুলি সর্বদা তাদের কোষকে কেন্দ্র করে এন কোষ রাখতে পারে। দ্রষ্টব্য যে এন স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে বড় হতে পারে যার অর্থ এটি প্রায় একাধিক বার মোড়ানো হতে পারে এবং কিছু সংখ্যাকে ততক্ষণে একাধিকবার যোগফলে করা হবে।

উদাহরণস্বরূপ, যদি এন 7 হয় এবং স্ট্রিংটি হয় 038, কোষগুলির সংমিশ্রণের জন্য কল্পনা করতে আমরা 038উভয় দিক দিয়ে অসীম পুনরাবৃত্তি লিখতে পারি

...038038038038038...

তারপরে যে 0অঙ্কটি পরিবর্তিত হবে তা হ'ল কোনও 0সংখ্যাকে কেন্দ্র করে digit সংখ্যার যোগফল , 10:

...038038038038038...
      ^_____^
         |
    sum all these

এটি (0+3+8+0+3+8+0)%10, যা হয় 2

একইভাবে অঙ্কগুলি 3এবং এর মধ্যে 8পরিবর্তনগুলি যথাক্রমে (3+8+0+3+8+0+3)%10= 5এবং (8+0+3+8+0+3+8)%10= দ্বারা সংজ্ঞায়িত হয় 0

সুতরাং, প্রজন্মের পর 038হয় 250যখন এন 7।

আপনার প্রোগ্রাম বা ফাংশনটির ইনপুট অঙ্কের স্ট্রিংয়ের পরবর্তী পরবর্তী প্রজন্মের অঙ্কের স্ট্রিংটি মুদ্রণ বা ফিরে আসা দরকার। অর্থাত্ প্রতিটি ঘরে একবার আপডেটের নিয়ম প্রয়োগ করুন এবং আউটপুট দিন। বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

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

[digit string] -> [N = 1], [N = 3], [N = 5], [N = 7], [N = 9], [N = 43]
0 -> 0, 0, 0, 0, 0, 0
1 -> 1, 3, 5, 7, 9, 3
2 -> 2, 6, 0, 4, 8, 6
3 -> 3, 9, 5, 1, 7, 9
4 -> 4, 2, 0, 8, 6, 2
5 -> 5, 5, 5, 5, 5, 5
6 -> 6, 8, 0, 2, 4, 8
7 -> 7, 1, 5, 9, 3, 1
8 -> 8, 4, 0, 6, 2, 4
9 -> 9, 7, 5, 3, 1, 7
00 -> 00, 00, 00, 00, 00, 00
07 -> 07, 47, 41, 81, 85, 47
10 -> 10, 12, 32, 34, 54, 12
11 -> 11, 33, 55, 77, 99, 33
12 -> 12, 54, 78, 10, 34, 54
34 -> 34, 10, 78, 54, 12, 10
66 -> 66, 88, 00, 22, 44, 88
80 -> 80, 86, 46, 42, 02, 86
038 -> 038, 111, 294, 250, 333, 472
101 -> 101, 222, 343, 545, 666, 989
987 -> 987, 444, 901, 765, 222, 543
1234 -> 1234, 7698, 3412, 9876, 1234, 7698
26697 -> 26697, 54128, 00000, 56982, 84413, 54128
001002 -> 001002, 211122, 331332, 335334, 455544, 113112
129577020 -> 129577020, 326194923, 474081605, 961120291, 333333333, 183342413
6023845292173530 -> 6023845292173530, 6853571632015189, 1197228291289874, 9238433109901549, 0110956118726779, 1982123699138828

@ LegionMammal978 এটিকে স্ট্রিং হিসাবে রাখতে দেয়।
ক্যালভিনের শখ

@ লেজিমনম্যামাল ৯9৮ নং আমি স্বীকার করি যে আমি এটির প্রাথমিকভাবে অনুমতি দিতে পারতাম তবে এখন তা করা অন্যায্যভাবে বিদ্যমান উত্তরগুলিতে প্রভাব ফেলবে যা স্ট্রিংগুলি ব্যবহার করে।
ক্যালভিনের শখ 22

ঠিক আছে, আমার উত্তরের আকার প্রায় দ্বিগুণ করার জন্য ধন্যবাদ ...
LegionMammal978

উত্তর:



10

সিজেম, 21 বাইট

l~_,\2/f-l:~fm>:.+Af%

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

l~   e# Read and evaluate N.
_,   e# Duplicate and turn into range [0 1 ... N-1]
\2/  e# Swap with other copy and (integer) divide by 2.
f-   e# Subtract this from each element in the range to get
     e# [-(N-1)/2 ... -1 0 1 ... (N-1)/2]
l:~  e# Read string and evaluate each digit separately.
fm>  e# Make one copy of the result for each element i in the range, shifting the array
     e# i cells to the right, cyclically.
:.+  e# Sum the columns of the resulting matrix.
Af%  e# Take each of those sums modulo 10.

5

গণিত, 85 বাইট

""<>ToString/@CellularAutomaton[{Tr@#~Mod~10&,{},#/2-1/2},FromDigits/@Characters@#2]&

আপনি কি .5পরিবর্তে ব্যবহার করতে পারেন 1/2?
mbomb007

@ mbomb007 না, এটি একটি পূর্ণসংখ্যা হওয়া দরকার।
LegionMammal978

4

পাইথন 3, 114 92 86 80 বাইট

বন্ধ 6 বাইট ধন্যবাদ টুক Sp3000 এবং অন্য 6 ধন্যবাদ বাইট xnor !

a=lambda N,D,i=0:D[i:]and str(int((D*N)[(i-N//2)%len(D):][:N],11)%10)+a(N,D,i+1)

একটি নামযুক্ত ফাংশন সংজ্ঞা দেয় aযা গ্রহণ করে Nএবং Dপরামিতি হিসাবে, চ্যালেঞ্জে সংজ্ঞায়িত N এবং অঙ্কের স্ট্রিং।

ব্যাখ্যা

পাইথন 3 এ, andদুটি স্ট্রিংয়ের মধ্যবর্তীটি শেষেরটি হয়ে যাবে। সুতরাং, D[i:]and ...সমস্ত কেন্দ্রের অবস্থানগুলি একবারে শর্ট সার্কিটগুলি পুনরাবৃত্তি হয়ে গেছে কারণ D[i:]এটি একটি খালি স্ট্রিং হবে এবং ফলস্বরূপ। (D*N)[(i-N//2)%len(D):][:N]অঙ্কের স্ট্রিংটিকে একগুচ্ছ বারের সদৃশ করে, তারপরে কেন্দ্র হিসাবে সঠিক অঙ্ক রয়েছে এমন স্ট্রিংটি দেওয়ার জন্য এটি সঠিক জায়গায় টুকরো টুকরো করে। একটি মুহূর্ত একটি বেস 10 সংখ্যা মডিউল 9 ডিজিটের যোগফল সংখ্যা হিসাবে একই জন্য রিকল নিজেই 9. modulo str(int(...,10)%10)একইরূপে ফলে নম্বর-স্ট্রিং হিসেবে যদি এটা বেস 11 এবং বাকি মডিউল 10 পায়, তারপর ফিরে পরিবর্তিত স্ট্রিং। অবশেষে,a(N,D,i+1) পরবর্তী কেন্দ্রের অবস্থানে চলে যায়। কারণ +, একবার পুনরাবৃত্তি হয়ে গেলে, ফলাফলের সমস্ত অঙ্ক একসাথে লম্পট করে ফিরে আসে returned


3

হাস্কেল, 92 বাইট

স্ট্রিং রূপান্তরটি হাস্কেলের মধ্যে সত্যিই ব্যয়বহুল ...

x!n=last.show.sum.map(read.pure).take n.(`drop`cycle x).fst<$>zip[div(1-n)2`mod`length x..]x

এটি !নিম্নলিখিত হিসাবে ব্যবহৃত একটি ইনফিক্স ফাংশন সংজ্ঞায়িত করে:

> "1234"!3
"7698"

ব্যাখ্যা

আমাদের ডানদিকে [div(1-n)2`mod`length x..], যা কেবলমাত্র (1-n)/2মডুলো থেকে শুরু হওয়া পূর্ণসংখ্যার তালিকা length(x)(আমরা মডিউলটি গ্রহণ করি, কারণ আমরা প্রথম উপাদানটি অ-নেতিবাচক হতে চাই)। এগুলি সিএ পাড়াগুলির সূচনা সূচকের সাথে মিলে যায়। আমরা xসঠিক দৈর্ঘ্যের একটি তালিকা পেতে এটি দিয়ে জিপ করি ।

ফাংশনটি <$>হ'ল ইনফিক্স সংস্করণ mapএবং এর বাম আর্গুমেন্টটি ডান থেকে বামে পড়া একটি ফাংশন রচনা। সুতরাং উপরের তালিকার প্রতিটি পূর্ণসংখ্যার জন্য (এর সাথে এক্সট্রাক্ট করা fst), আমরা অনেকগুলি অক্ষর cycle x(যা অসীমের সমাহার এর অনুলিপিগুলি হতে পারে x) nথেকে বাদ দেয়, বাকী থেকে অক্ষর গ্রহণ করে, তারগুলিতে স্ট্রিংতে রূপান্তর করে এবং তারপরে পূর্ণসংখ্যার সাথে read.pureযোগফল গ্রহণ করে, এটিকে স্ট্রিংয়ে রূপান্তর করুন show, এবং এর শেষ চরিত্রটি গ্রহণ করুন, যা বাকি মড 10 এর সাথে মিলে যায়।


2

NARS2000 এপিএল, 37 টি অক্ষর (72 বাইট)

⎕←10⊥10∣+⌿⊃({⍵..-⍵}⌊⎕÷2)∘.⌽⊂49-⍨⎕AV⍳⍞

ব্যাখ্যা:

  ⎕←10⊥10∣+⌿⊃({⍵..-⍵}⌊⎕÷2)∘.⌽⊂49-⍨⎕AV⍳⍞
⍝ ⎕←                                    output
⍝   10⊥                                 the base-10 digits in
⍝      10∣                              the modulo-10
⍝         +⌿                            column-wise sum of
⍝           ⊃                           the matrix version of
⍝                         ∘.⌽           the outer-product rotation of
⍝                            ⊂            the scalar version of
⍝                                 ⎕AV⍳    the index in the atomic vector of
⍝                                     ⍞   an input string
⍝                             49-⍨        minus 49 ('0' + 1)
⍝                                       by
⍝             {⍵..-⍵}                     the range ⍵ to -⍵, where ⍵ is
⍝                    ⌊                    the floor of
⍝                     ⎕                   an input integer
⍝                      ÷2                 divided by 2

এনকোডিংটি ইউটিএফ -8 না হওয়ায় এপিএল চরিত্র অনুযায়ী প্রতি বাইট নয়? এপিএল এপিএল কোড পৃষ্ঠাটি ব্যবহার করে ।
mbomb007

@ mbomb007 NARS2000 যতটা আমি জানি এপিএল কোড পৃষ্ঠা সমর্থন করে না, এবং আদিমটি মানহীন ..এবং এইভাবে "বহনযোগ্য" নয়।
ওবেরন

ডায়ালগ এপিএল ব্যবহার করা কি আরও কম হবে?
mbomb007

1

অক্টাভা, 64 বাইট

@(s,n)["" mod(sum(bsxfun(@shift,s'-48,(1:n)-ceil(n/2))'),10)+48]

1

জে, 41 বাইট

"."0@]{~(1":10|+/@:)#@]|-:@<:@[-~(+/&i.#)

আমার প্রত্যাশার চেয়ে বেশি সময় বেরিয়েছে। গল্ফযোগ্য হতে হবে।

আমরা একটি সারিতে উপাদানগুলির সাথে একটি ম্যাট্রিক্স উত্পন্ন করি যা পজিশনের যোগফল পেতে তার মানগুলি যুক্ত করতে (মান 10) হওয়া উচিত showing

ব্যবহার:

   7 ("."0@]{~(1":10|+/@:)#@]|-:@<:@[-~(+/&i.#)) '038'
250

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

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