SUDSI সিকোয়েন্স তৈরি করুন


15

SUDSI সিকোয়েন্স ( su m, d ifferences , s wap, i ncrement) একটি কৌতূহলী পূর্ণসংখ্যার ক্রম যা বিশৃঙ্খল আচরণের পরিবর্তে প্রদর্শিত হয়। এটি নিম্নলিখিত হিসাবে উত্পন্ন করা যেতে পারে:

যাক এস স্বাভাবিক সংখ্যার অসীম তালিকা হতে: 1 2 3 4 5 6 ...। যাক এস আমি বোঝাতে এক ইন্ডেক্স আমি তম উপাদান এস । সুতরাং প্রাথমিকভাবে, এস 1 হ'ল 1, এস 2 হ'ল 2 ইত্যাদি (কোনও এস 0 নেই )।

এস 1 এবং এস 2 দিয়ে শুরু হচ্ছে ...

  • তাদের যোগফল গণনা করুন: sum = S1 + S2
  • তাদের নিখুঁত পার্থক্য গণনা করুন (বৃহত্তর এক বিয়োগফল আরও ছোট): diff = |S1 - S2|
  • যোগফল এবং পার্থক্যের সূচকগুলিতে এস এ দুটি মান অদলবদল করুন :swap(Ssum, Sdiff)

  • আপনি যে এস এর সাথে কাজ করছেন তার সূচকগুলি বাড়িয়ে দিন । সুতরাং পরের বার আপনি এস 2 এবং এস 3 এর যোগফল এবং পার্থক্যটি গণনা করবেন এবং তার পরে সময়টি হবে এস 3 এবং এস 4 ইত্যাদি etc.

  • এই প্রক্রিয়াটি অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করুন।

এই প্রক্রিয়াটি প্রয়োগ হওয়ার সাথে সাথে এখানে এস এর প্রথম কয়েকটি পর্যায় রয়েছে । বন্ধনী []দুটি সংক্ষিপ্ত এবং পার্থক্য করতে চলেছে দুটি মানকে ঘিরে।

আসল এস :

[1 2] 3 4 5 6 7 8 9 10 11 12 ...

পরে এস 3 ( 3 = 1 + 2) এবং এস 1 ( 1 = |1 - 2|) আনা হয়:

3 [2 1] 4 5 6 7 8 9 10 11 12 ...

পরে এস 3 এবং এস 1 অদলবদল করা হয়:

1 2 [3 4] 5 6 7 8 9 10 11 12 ...

পরে এস 7 এবং এস 1 অদলবদল করা হয়:

7 2 3 [4 5] 6 1 8 9 10 11 12 ...

পরে এস 9 এবং এস 1 অদলবদল করা হয়:

9 2 3 4 [5 6] 1 8 7 10 11 12 ...

পরে এস 11 এবং এস 1 অদলবদল করা হয়:

11 2 3 4 5 [6 1] 8 7 10 9 12 ...

পরে এস 7 এবং এস 5 আনা হয়:

11 2 3 4 1 6 [5 8] 7 10 9 12 ...

প্রভৃতি

SUDSI ক্রম এই তালিকাগুলির প্রত্যেকটিতে প্রথম উপাদানগুলির ক্রম হিসাবে সংজ্ঞায়িত করা হয়। সুতরাং SUDSI ক্রমের প্রথম কয়েকটি শর্ত 1 3 1 7 9 11 11

এখানে এসডিডিএসআই সিকোয়েন্সের প্রথম 200 শর্তাদি (প্রতি লাইন 20):

1 3 1 7 9 11 11 11 15 15 19 19 19 19 19 19 19 19 19 19 
19 19 19 19 19 19 19 19 57 59 59 59 59 59 59 59 59 59 77 79 
81 83 85 87 89 91 91 91 91 91 91 91 91 91 91 91 91 91 115 115 
121 123 125 127 127 127 127 127 137 139 141 143 145 147 147 147 147 147 147 147 
147 147 147 147 167 167 167 167 167 167 167 167 167 167 167 167 167 167 167 167 
167 167 167 167 209 211 211 211 211 211 221 223 223 223 223 223 223 223 223 223 
223 223 243 243 243 243 243 243 257 259 261 263 263 263 263 263 263 263 263 263 
263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 
263 263 325 327 329 331 331 331 331 331 331 331 331 331 349 351 351 351 351 351 
361 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363

এটি অস্পষ্ট (কমপক্ষে আমার কাছে) কীভাবে কেউ ভবিষ্যতের শর্তাদি পূর্বাভাস দিতে পারে। কেবল এটি বলা নিরাপদ বোধ করে যে শর্তাবলী সর্বদা অদ্ভুত, অ-হ্রাসযোগ্য নয় (দ্বিতীয় পদের পরে) এবং কিছু সংখ্যক বহুবার পুনরাবৃত্তি হয়।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি ধনাত্মক পূর্ণসংখ্যার n এবং SUDSI অনুক্রমের n ম পদটি প্রিন্ট করে বা প্রদান করে। উদাহরণস্বরূপ, এন যদি 1 হয় তবে আউটপুট হয় 1, যদি এন হয় 2, আউটপুট হয় 3, এন যদি 200 হয়, আউটপুট হয় 363

যে কোনও সাধারণ উপায়ে ইনপুট নিন (স্টিডিন / কমান্ড লাইন / ফাংশন আর্গ)। বাইটস মধ্যে
সংক্ষিপ্ত উত্তর ।
(এই সাইটটি ইউটিএফ -8 এ জিনিসগুলি এনকোড করে, তবে আপনি যে কোনও ডার্ক বিদ্যমান এনকোডিং ব্যবহার করতে পারেন))

ম্যাথি বোনাস: (অনুগ্রহের জন্য সম্ভাব্য যোগ্য)

  • SUDSI ক্রম সম্পর্কে আমাকে আরও বলুন। কোন সংখ্যাটি এর অংশ এবং এর মধ্যে কতগুলি রয়েছে তার অন্তর্নিহিত প্যাটার্নটি কী (এবং এর মতো স্টাফ)? (আমি না হয়ে SUDSI খুঁজে পাইনি OEIS প্রণালী দ্বারা।)

আবার হিসাবে। এনকোডিং সম্পর্কে বিভ্রান্তি তৈরির চেয়ে আরও ভাল লিঙ্ক না।
অপটিমাইজার

@ অপ্টিমাইজার আমি বয়সের সাথে একই বাক্সের সাথে সেই বাইট কাউন্টারের সাথে যুক্ত করছি । হঠাৎ কেন এটি আগের চেয়ে বেশি বিভ্রান্তির সৃষ্টি করবে?
ক্যালভিনের

1
@ অরલ્પ আমি অনুমান করি যে এটি একটি দুর্দান্ত অতিরিক্ত বৈশিষ্ট্য হবে তবে আমি ব্যক্তিগতভাবে অনুলিপি-পেস্ট করতে পেরে নির্ভর করি যেহেতু আমার জমা দেওয়ার জন্য খুব কমই উত্স ফাইল রয়েছে।
মার্টিন ইন্ডার

1
@orlp তবে তবে এর দরকার কার? ফাইলটি থাকলে তারা সরাসরি আকারটি দেখতে পারে। এবং কিছু অপারেটিং সিস্টেমে শেষ পর্যন্ত নিউলাইনটি সরানো এত সহজ নয়।
জিমি 23013

2
@ মার্টিনবটনার আমি বিরক্ত হয়েছিলেন: meta.codegolf.stackexchange.com/questions/4944/…
orlp

উত্তর:


5

পাইথ, 45 41 40 38 বাইট

MXGH_HhugGm@Gtd,s<>GH2.a-@GH@GhHtQr1yQ

আমি লক্ষ্য করেছি (যেমন মার্টিন Büttner করেনি), একটি বিন্যাস পদক্ষেপ সর্বোচ্চ ক্ষতিগ্রস্ত নম্বরে যে kহয় 2k + 1। তবে যেহেতু আমাদের কেবল n - 1পদক্ষেপ রয়েছে, আমাদের কেবলমাত্র সংখ্যাগুলির একটি তালিকা প্রয়োজন 2n - 1

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

M                       define a function g(G, H): return
                        (G is the list of numbers, H is a tuple)
 XGH_H                     a translation of G
                           (replaces the elements in H with the elements in reversed H)
                           in this application it swaps two values in the list G


                        implicit: Q = input()
 u     tQr1yQ           reduce, G = [1, 2, ..., 2*Q-1]
                        for each H in [0, 1, ..., Q - 2]:
                           G = 
  gG...                        g(G, ...)
h                       print the first element of the resulting list

And the second argument ... of the function call g is:

     ,                  create the tuple (
      s<>GH2               sum(G[H:][:2]), 
            .a-@GH@GhH     abs(G[H],G[H+1])
                        )
m@Gtd                   and map each value d to G[d - 1]

লাইব্রেরির বাইরে পাইথ ব্যবহার করার জন্য কি জরিমানা আছে?
অ্যালেক্স এ।

1
@ অ্যালেক্স এ। হা, না। বই না ফেরার জন্য একটি আছে।
জাকুবে

18

গণিত, 88 বাইট

Last[f@n_:=n;(r=f@1;{f@a,f@b}={f[b=+##],f[a=Abs[#-#2]]};r)&@@f/@{#,#+1}&/@Range@Input[]]

এটি একটি সম্পূর্ণ প্রোগ্রাম, একটি প্রম্পট থেকে ইনপুট পড়া। এটি সংজ্ঞাটির একটি প্রত্যক্ষ বাস্তবায়ন, যেখানে আমি বর্তমান অনুক্রমের উপর নজর রাখছি f(যার মানগুলি f[n]ডিফল্ট হয় n)।

এখানে আরও কিছুটা পাঠযোগ্য সংস্করণ:

Last[
  f@n_ := n;
  (
    r = f@1;
    {f@a,f@b} = {f[b=+##],f[a=Abs[#-#2]]};
    r
  ) & @@ f /@ {#,#+1} & /@ Range @ Input[]
]

কিছু বিশ্লেষণ

আমি সিকোয়েন্সের প্রথম 2000 উপাদানগুলি প্লট করেছি (এটি পরে আরও আকর্ষণীয় হয়ে ওঠে না):

এখানে চিত্র বর্ণনা লিখুন

সুতরাং ক্রমটি মূলত slাল 2 সহ লিনিয়ার এবং সর্বদা সেই ধাপগুলির কয়েকটি থাকে। দেখে মনে হচ্ছে যে পদক্ষেপগুলি সাবলাইনালভাবে বৃদ্ধি পেয়েছে (যদি তারা এমনকি সীমানা নাও থাকে), যেহেতু আপনি যে পরিকল্পনা করেছেন তার পয়েন্ট সংখ্যা বাড়ানোর সাথে সাথে তারা সবেমাত্র লক্ষণীয় হয়ে ওঠে।

আমরা খুব সহজেই বিভিন্ন রৈখিক বৃদ্ধি ন্যায্যতা করতে পারেন (এটি একটি বিট handwavy, কিন্তু আমি মনে করি এটা আনয়ন দ্বারা একটি কঠোর প্রমাণ পর্যন্ত ধরে রাখতে হবে): প্রথমে একটি বিন্যাস পদক্ষেপ সর্বোচ্চ ক্ষতিগ্রস্ত নম্বরে nহয় n + (n+1) = 2n + 1। এছাড়াও মনে রাখবেন এই সংখ্যা সবসময় সরানো হবে 1, যেহেতু |n - (n+1)| = 1। সুতরাং এটি আশ্চর্যজনক নয় যে আমরা সংখ্যাগুলি পাই যা প্রায় 2nঅনুক্রমের মতো। তবে, আমরা এও নোট করতে পারি যে এন পর্যন্ত ধাপগুলির জন্য , এস এন + 1 সর্বদা n + 1 দ্বারা আবদ্ধ থাকে , যার অর্থ কোনও অদলবদল পদক্ষেপ দুটি সংখ্যার অদলবদল করতে পারে না যা উভয় n এর চেয়ে বড় । সুতরাং, যে সংখ্যাগুলি এখনও প্রসেস করা দরকার তাদের প্রাথমিক মানের চেয়ে কম বা সমান হবে। তাই,2n + 1 ক্রম নিজেই জন্য আবদ্ধ হয়।

আমি মনে করি পদক্ষেপগুলির দৈর্ঘ্যের জন্য একটি যুক্তি খুঁজে পাওয়া জটিল হবে।


3
ভাল সমাধানের জন্য +1 তবে বেশিরভাগই খুব আকর্ষণীয় এবং তথ্যবহুল বিশ্লেষণের জন্য!
অ্যালেক্স এ

4

সিজেম, 45 40 39 বাইট

শুধু একটি নির্বোধ পদ্ধতির। আরও গল্ফ করা যেতে পারে। একটি অ্যারে সোয়াপ ফাংশন খুব বেশি অনুপস্থিত।

ri_K*,\{\:L>2<L1$:+:S@:-z:DL=tDSL=t}/1=

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

ri_                             "Read the input, convert to integer and copy it";
   K*,                          "Multiply the copy by 20 and get 0 to 20*input-1 array";
      \{ ... }/1=               "Swap and put input on stack and run the loop that many";
                                "times. After the loop, take the second element as";
                                "we have a 0 based array while series is 1 based";
{\:L>2<L1$:+:S@:-z:DL=tDSL=t}
 \:L                            "Swap to put iteration index behind the array";
                                "and store array in L";
    >2<                         "In each loop, the iteration index will be on stack";
                                "Get the two elements from the array starting at that";
       L1$                      "Put the array on stack and copy the tuple";
          :+:S                  "Get the sum and store it in S";
              @:-z:D            "Get the absolute difference of the tuple and store in D";
                    L=t         "Put the element at S diff at sum index";
                       DSL=t    "Put the element at S sum at diff index";

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


4

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

f#n=let b=f$n+1;l=f n+b;r=abs$f n-b;y x|x==l=f r|x==r=f l|1<2=f x in y
p n=foldl(#)id[1..n-1]$1

ব্যবহারের উদাহরণ: p 70->139

আমি ক্রমটি কোনও তালিকা বা অ্যারেতে সঞ্চয় করি না। বর্তমান পদক্ষেপের দুটি উপাদান অদলবদল করে আমি বারবার পরিচয় ফাংশনটি একটি ফাংশনে আপডেট করি। nপদক্ষেপের পরে আমি পরামিতি সহ ফলাফল ফাংশন কল 1



1

Pyth, 55 53 51

সম্ভবত আরও গল্ফ করা যেতে পারে। আমার পক্ষে কতটা ধীরে ধীরে nঅ্যারে লাগবে এবং আমি একটি ব্যবহার করেছি তা নির্ধারণ করতে আমি অলস হয়ে উঠতে পারায় বড় হয়ে যেতে পারে n^n

আমি সর্বাধিক ব্যবহার করতে পারি তা নির্দেশ করার জন্য ভোলাটিলিটি এবং মার্টিন বাটনারকে ধন্যবাদ 3n

KU*3QFNr1QJ@KN=G@tKNAJG,+JG.a-JG=Y@KJ XXKJ@KGGY)@K1

ব্যাখ্যা

                   Q = input (implicit)
KU*3Q              K = range(3 * Q)
FNr1Q              for N in range(1, Q):
 J@KN               J = K[N]
 =G@tKN             G = K[1:][N]
 AJG,+JG.a-JG       J, G = J + G, abs(J - G)
 =Y@KJ              Y = K[J]
 XXKJ@KGGY          K[J], K[G] = K[G], Y
)
@K1                print K[1]

আমি কিছু পরীক্ষার দৌড়ে গিয়ে মনে হচ্ছে যে করা প্রয়োজন তালিকার দৈর্ঘ্যে এগোয় 2*nবৃহৎ জন্য n, সর্বোচ্চ সঙ্গে 3*nজন্য n=1
অস্থিরতা

@Volatility মূলত, সর্বোচ্চ 2n+1, যেমন আপনি বলতে এটা সর্বোচ্চ যা 3জন্য n=1এবং (একটি উপায় মধ্যে) র দিকে এগোয় 2n। এটি খুব আশ্চর্যজনক নয় যেহেতু নিরবিচ্ছিন্ন ক্রমের জন্য এটি সর্বাধিক, এবং প্রক্রিয়াটির কোনও পদক্ষেপই এখনও এগিয়ে থাকা সংখ্যাকে বাড়িয়ে তুলতে পারে না। আমি আমার উত্তরে এটি যুক্ত করতে পারি।
মার্টিন ইন্ডার

আমি দেখতে পাচ্ছি আপনি ইতিমধ্যে আমার .aকাজটি ভাল কাজের জন্য রেখেছেন ! পথে আরও অনেক গুডিজ রয়েছে, তবে ইস্যাক
orlp

@ অরলপ, কোডটি লেখার সময় আমি দস্তাবেজগুলি পড়ার ক্ষেত্রে ঘটছিলাম (আমি সাধারণত doc.txtএকটি ম্যানুয়ালের জন্য গিটহাবের উপর ব্যবহার করি ) এবং আপডেটটি দেখেছি। ভাগ্যক্রমে, যেহেতু আমি কেবল এটি এড়িয়ে গিয়ে একটি কাস্টম বাস্তবায়ন লিখতে পারি ...
PurkkaKoodari

1

পাইথন 2, 117 106 101

j=input();a=range(3*j)
for i in range(1,j):b,c=a[i:i+2];d=abs(b-c);a[b+c],a[d]=a[d],a[b+c]
print a[1]

dictস্বেচ্ছাসেবক সূচকগুলি ব্যবহার করতে মানগুলি সংরক্ষণ করতে একটি (মানচিত্র) ব্যবহার করে। g(n)একটি nআইটেম ফিরে ফাংশন । তারপরে কেবল input-1বারবার পুনরাবৃত্তি করে এবং প্রথম আইটেমটি আউটপুট করে।

আমার পাইথ উত্তর থেকে পদ্ধতিগুলি ব্যবহার করে এটি সংক্ষিপ্ত হয়ে গেছে।

5 বাইট সংরক্ষণের জন্য xnor ধন্যবাদ ।


আপনি unpacking তালিকা ব্যবহার করতে পারেন: b,c=a[i:i+2]। এছাড়াও, b+cযথেষ্ট সংক্ষিপ্ত যে এটিকে একটি ভেরিয়েবলে সংরক্ষণ sকরা দু'বার লেখার চেয়ে অক্ষর হারিয়ে ফেলে।
xnor

1

150 যাও

func f(j int){a:=make([]int,j*2);for i:=range a{a[i]=i};for i:=1;i<j;i++{b,c:=a[i],a[i+1];v:=b-c;if v<0{v*=-1};a[b+c],a[v]=a[v],a[b+c]};println(a[1])}

অবহেলিত, কৌশলযুক্ত কিছুই নয়, বেশিরভাগই @ পিটু ১৯৯৮ থেকে চুরি হয়ে গেছে

func f(j int) {
    a := make([]int, j*2) // Build the array we will be working on
    for i := range a {
        a[i] = i
    }
    for i := 1; i < j; i++ {
        b, c := a[i], a[i+1]
        v := b - c
        if v < 0 {
            v *= -1
        }
        a[b+c], a[v] = a[v], a[b+c]
    }
    println(a[1])
}

http://play.golang.org/p/IWkT0c4Ev5


1

জাভা, 162

int f(int n){int a[]=new int[2*n],s,d,x,t;for(x=0;x<2*n;)a[x]=++x;for(x=0;++x<n;){s=a[x]+a[x-1]-1;d=Math.abs(a[x]-a[x-1])-1;t=a[s];a[s]=a[d];a[d]=t;}return a[0];}

ব্যাখ্যা

int f(int n) {
    int a[] = new int[2 * n], sum, diff, x, temp;
    for (x = 0; x < 2 * n;) {
        a[x] = ++x;  // set initial array
    }
    for (x = 0; ++x < n;) {
        sum = a[x] + a[x - 1] - 1;
        diff = Math.abs(a[x] - a[x - 1]) - 1;
        temp = a[sum];
        a[sum] = a[diff];
        a[diff] = temp;
    }
    return a[0];
}

দ্বিতীয় লুপের বডিটি স্টেটমেন্টের ইনক্রিমেন্ট ক্লোজে সরিয়ে আপনি দুটি বাইট সংরক্ষণ করতে পারেন। (সেমিকোলার চেয়ে কম্যাটাস দিয়ে বিবৃতি আলাদা করুন।)
জে ম্যান্সফিল্ড

1

ডিসি, 134 132 131 বাইট

[_1*]sOdsn2*ddslsSsa[ladd:S1-dsa0<P]dsPx1d0rsN:N[la1+dsad;SdS@r1+;SdS@rL@L@r+Ss-d0>Od;SrLsdSsrLs;Sr:S:S1;SladsN:Nlaln>G]dsGxln1-;Nf

ব্যবহারের echo $n $code | dc, যেখানে $nহয় এন এবং $codeহচ্ছে ... কোড ( খাবি )। স্বাদ উদ্ধৃতি।

সম্পাদনা করুন: আপনি যদি আমাকে কোনও ব্যাখ্যার জন্য ছিটিয়ে না দেন তবে আমি কখনই এটির কাছাকাছি পাব না।


`-E` এর জন্য আমাকে কি তিনটি বাইট যুক্ত করতে হবে?
জো

@ স্যার, আপনার দেখা যাচ্ছে না! [ কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওয়েশন
জো

এটা কি নিজের সাথে কথোপকথন ছিল?
ননওনিহিরে

@ নন আইনেহির: হ্যাঁ, নিশ্চিত ছিল। এটি সবার জন্য উন্মুক্ত প্রশ্ন ছিল, তবে আমি উত্তরটি পেয়েছি।
জো

0

পার্ল 5, 131

একটি নিষ্পাপ সমাধান (অর্থাত্ সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন)। একটি সাবরুটাইন, এটি 1পছন্দসই দৈর্ঘ্যের গুলিগুলির তালিকা হিসাবে ইনপুট নেয় ।

{map$a[$_]=$_,1..3*@_;($a[$a[$_-1]+$a[$_]],$a[abs($a[$_-1]-$a[$_])])=($a[abs($a[$_-1]-$a[$_])],$a[$a[$_-1]+$a[$_]])for 2..@_;$a[1]}

উদাহরণস্বরূপ এর আউটপুট ভিজ্যুয়ালাইজ করুন print sub...->(1,1,1,1,1)

ব্যাখ্যা:

map$a[$_]=$_,1..3*@_অ্যারে তৈরি করে @a, প্রতিটি পূর্ণসংখ্যাকে 1 থেকে 3 গুণ @_(ইনপুট) এর আকার থেকে নিজেই সূচীকরণ করে ।

($a[$a[$_-1]+$a[$_]],$a[abs($a[$_-1]-$a[$_])])=($a[abs($a[$_-1]-$a[$_])],$a[$a[$_-1]+$a[$_]])for 2..@_switcheroo বারবার (আকার একাধিক কম বার পুনরাবৃত্তি করে @_), সুইচিং $a[$a[$_-1]+$a[$_]]সঙ্গে $a[abs($a[$_-1]-$a[$_])]যেমন $_রেঞ্জ 2 থেকে আকারের @_

এবং তারপরে সাবরুটাইন ফিরে আসে $a[1]


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