জ্যামিতিক অনুক্রমগুলি প্রবেশ করান fer


18

হাস্কেলের এই ঝরঝরে (-দর্শনীয়) বৈশিষ্ট্য রয়েছে যেখানে আপনি এটি তিনটি নম্বর দিতে পারেন এবং এটি তাদের কাছ থেকে একটি গাণিতিক ক্রম অনুমান করতে পারে। উদাহরণস্বরূপ, [1, 3..27]সমান [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]

এটি দুর্দান্ত এবং সমস্ত পাটিগণিত ক্রমগুলি মোটামুটি সীমাবদ্ধ। সংযোজন, pfft । গুণ যেখানে এটি সেখানে। এটি [1, 3..27]ফেরত দেওয়ার মতো জ্যামিতিক অনুক্রমগুলি করা কি শীতল হবে না [1, 3, 9, 27]?

চ্যালেঞ্জ

একটি প্রোগ্রাম / ফাংশন লিখুন যাতে তিনটি ধনাত্মক পূর্ণসংখ্যক , , এবং সি এবং আউটপুট লাগে যেখানে x হ'ল সর্বনিম্ন পূর্ণসংখ্যা represented সি যেখানে n ধনাত্মক পূর্ণসংখ্যা হিসাবে উপস্থাপিত হতে পারে ।[a, b, b × (b ÷ a), b × (b ÷ a)2, ..., x]b × (b ÷ a)n

অর্থাৎ আউটপুটটি আর হওয়া উচিত , যেমন:

r0 = a
r1 = b
rn = b × (b ÷ a)n-1
rlast = greatest integer ≤ c that can be represented as b × (b ÷ a)n
         where n is a positive integer

বিশেষ উল্লেখ

  • স্ট্যান্ডার্ড আই / ও বিধি প্রযোজ্য
  • স্ট্যান্ডার্ড সমস্যা হয় নিষিদ্ধ
  • সবসময় দ্বারা বিভাজ্য হতে হবে একটি
  • a < bc
  • এই চ্যালেঞ্জটি সমস্ত ভাষায় স্বল্পতম পদ্ধতির সন্ধান সম্পর্কে নয়, বরং এটি প্রতিটি ভাষায় স্বল্পতম পদ্ধতির সন্ধান সম্পর্কে ।
  • আপনার কোডটি বাইকে স্কোর করা হবে , সাধারণত এনকোডিং ইউটিএফ -8 এ অন্যথায় নির্দিষ্ট না করা হয়।
  • অন্তর্নির্মিত ফাংশনগুলি (ম্যাথামেটিকায় একটিতে থাকতে পারে: পি) যা এই অনুক্রমের গণনা করার অনুমতি দেওয়া হয় তবে কোনও বিল্ট-ইন নির্ভর করে না এমন একটি সমাধান সহ উত্সাহ দেওয়া হয়।
  • এমনকি "ব্যবহারিক" ভাষার জন্য ব্যাখ্যাগুলি উত্সাহিত করা হয়

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

a   b   c     r

1   2   11    [1, 2, 4, 8]
2   6   100   [2, 6, 18, 54]
3   12  57    [3, 12, 48]
4   20  253   [4, 20, 100]
5   25  625   [5, 25, 125, 625]
6   42  42    [6, 42]

কয়েকটি আরও ভাল ফর্ম্যাটে:

1 2 11
2 6 100
3 12 57
4 20 253
5 25 625
6 42 42

1, 2, 11
2, 6, 100
3, 12, 57
4, 20, 253
5, 25, 625
6, 42, 42

@ অ্যাডম নং (প্রথম পরীক্ষার
কেসটি দেখুন

1
মনে রাখবেন যে সূত্রটি কেবলমাত্র b ^ n / a ^ n-1এন = 0
এইচপিউইজ

2
অবশ্যই ম্যাথামেটিকাল হয়েছে একটি বিল্ট-ইন ...
নিল

ভাসমান পয়েন্ট ত্রুটির কারণে ফলাফলগুলি ঠিক পূর্ণসংখ্যার না হলে এটি গ্রহণযোগ্য?
লুইস মেন্ডো

@ লুইস মেন্ডো হ্যাঁ
সম্পূর্ণমানবিক

উত্তর:


6

কাস্তে , 8 বাইট

~↑≤Ṡ¡o//

ইনপুটটি ক্রমে খ, সি, ক হয়এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

~↑≤Ṡ¡o//  Implicit inputs.
       /  a/b as exact rational number.
     o/   Divide by a/b (so multiply by b/a).
    ¡     Iterate that function
   Ṡ      on a. Result is the infinite list [a, b, b^2/a, b^3/a^2, ..
 ↑        Take elements from it while
~ ≤       they are at most c.

এই প্রোগ্রামটির নিয়ন্ত্রণ প্রবাহটি অনুসরণ করা কিছুটা শক্ত। প্রথমত, ডানদিকের খাওয়ানো হয় /, একটি ফাংশন উত্পাদক /bযে ভাগ । এর পরে, ~তিনভাগে অবশিষ্ট প্রোগ্রাম splits: ~(↑)(≤)(Ṡ¡o//b)। এই ফিড করতে এবং একটি থেকে Ṡ¡o//b, এবং সম্মিলন সঙ্গে ফলাফল । এর ফলাফলটি ≤cএকটি ফাংশন যা এটির তর্ক সর্বাধিক কিনা তা পরীক্ষা করে সি , এবং↑≤c এটি যে উপাদানগুলির জন্য এটি বহন করে তার দীর্ঘতম উপসর্গ গ্রহণ করে।

এটি কীভাবে (Ṡ¡o//b)aপছন্দসই অসীম তালিকার মূল্যায়ন করে তা দেখানো বাকি রয়েছে । বন্ধনীগুলির অংশটি বিভক্ত Ṡ(¡)(o//b)। তারপর ফিড একটি থেকে o//b, এর ফলাফলের ফিড ¡, এবং তারপর দেয় একটি দ্বিতীয় যুক্তি। এক্সপ্রেশন (o//b)aএকটি ফাংশন দেয় যা একটি সংখ্যা নেয় এবং এটিকে একটি / বি দ্বারা ভাগ করে এবং ¡এই ফাংশনটিকে তার দ্বিতীয় যুক্তিতে পুনরাবৃত্তি করে, যা একটি

এখানে বর্ণনাকে রূপান্তর করার একটি সিরিজ এখানে দেওয়া হয়েছে:

  (~↑≤Ṡ¡o//) b c a
= (~↑≤Ṡ¡o/(/b)) c a
= ~(↑)(≤)(Ṡ¡o/(/b)) c a
= ↑(≤c)((Ṡ¡o/(/b)) a)
= ↑(≤c)(Ṡ(¡)(o/(/b)) a)
= ↑(≤c)(¡(o/(/b)a) a)
= ↑(≤c)(¡(/(/ba))a)
Last line in English: takeWhile (atMost c) (iterate (divideBy (divideBy b a)) a)

ক, খ, সি ক্রমে সুস্পষ্ট ভেরিয়েবল ব্যবহার করে বিকল্প সমাধান :

↑≤⁰¡*/⁵²


4

প্রোটন , 35 বাইট

f=(a,b,c)=>c//a?[a]+f(b,b*b/a,c):[]

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


1
মানুষ আসলে এই ভাষা মনে আছে? : ডি
হাইপারনিউট্রিনো


3
আমি জানি যে আমি সম্ভবত কোনও উত্তর পাচ্ছি না, তবে কেন ডাউনটা?
মিঃ এক্সকোডার

3

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

সংরক্ষিত 4 বাইট @ নীলকে ধন্যবাদ

হিসাবে ইনপুট লাগে (b,c)(a)

(b,c)=>g=a=>a>c?[]:[a,...g(b,b*=b/a)]

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

মন্তব্য

(b, c) =>                 // main function taking b and c
  g = a =>                // g = recursive function taking a
    a > c ?               //   if a is greater than c:
      []                  //     stop recursion and return an empty array
    :                     //   else:
      [ a,                //     return an array consisting of a, followed by 
        ...g(             //     the expanded result of a recursive call to g()
          b,              //       with a = b
          b *= b / a      //       and b = b * ratio
        ) ]               //     end of recursive call

1
যুক্তিগুলি পুনরায় সাজানো আমাকে দেয় (b,c)=>g=a=>a>c?[]:[a,...g(b,b*=b/a)]
নীল



2

পাইথন 3, 93 90 74 73 বাইট

x=lambda a,b,c,i=0,q=[]:a*(b/a)**i>c and q or x(a,b,c,i+1,q+[a*(b/a)**i])

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

আমাকে কিছুটা বাইট কমাতে সাহায্য করার জন্য রড এবং ব্যবহারকারীর জন্য ধন্যবাদ 202729 !


1
def + return -> lambda। পাইথন টিপস।
ব্যবহারকারী 202729

1
এছাড়াও আপনি পারেন import*
ব্যবহারকারী 202729

1
আপনি while i<=c:i++প্রচুর বাইট সংরক্ষণ করতে (পরিবর্তে বোধন + লগ তালিকা) ব্যবহার করতে পারেন
রড

@ রড লগ ছাড়া আমার কীভাবে লুপটি ব্যবহার করা উচিত? idk কতক্ষণ পুনরাবৃত্তি করতে হবে
মণীশ কুন্ডু



2

পার্ল 6 , 26 24 বাইট

{$^a,$^b,$b²/$a...^*>$^c}
{$^a,*×$^b/$a...^*>$^c}

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

পার্ল 6 এর সিকোয়েন্স অপারেটর ...জ্যামিতিক সিরিজগুলিকে স্থানীয়ভাবে অনুমান করতে পারে।

আপডেট: ... এটি পারে তবে এই পরিস্থিতিতে অনুমান করাটা কিছুটা ছোট।



1

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

t:,qtiw^w]x/tb>~)

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

এমএটিএল-এ কেবল বলটি ঘোরানো। আমি ভাবতে পারি না যে এটির সমাধানের কোনও কম ভার্বোস উপায় নেই।


1
... দয়া করে ট্রিপল নেগেশন নেই।
ব্যবহারকারী 202729

2
@ user202729 আমি দেখতে পাচ্ছি না আপনি কীভাবে এটি অর্জন করতে পারতেন না যে এটি কোনও দুর্ঘটনা নয়। :)
সান্চাইজস

আপনার অর্থ এই নয় যে "আমি বুঝতে পারি না যে আপনি কীভাবে অজান্তেই কাজটি করতে পারেননি": পি
হাইপার নিউট্রিনো

@HyperNeutrino নং
Sanchises


1

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

(a#b)c|a>c=[]|d<-div b a*b=a:(b#d)c

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


1
34 বাইট । (আরও "চ্যালেঞ্জের চেতনায়", ভয়ানক ভাসমান পয়েন্ট ত্রুটি)
ব্যবহারকারী 202729

@ ব্যবহারকারী 202729: দয়া করে এটি আলাদা উত্তর হিসাবে পোস্ট করুন (তবে একটি বাইট সংরক্ষণ করুন exp<$>[...])
নিমি

1

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

y/ivZlZ}3$:W

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

y     % Implicitly take two inputs, and duplicate the first onto the top
/     % Divide
i     % Take third input
v     % Vertically concatenate the three numbers into a column vector
Zl    % Binary logarithm, element-wise
Z}    % Split the vector into its three components
3$:   % Three-input range. Arguments are start, step, upper limit
W     % 2 raised to that, element-wise. Implicit display

1
এটি সত্যিই দুর্দান্ত। আমি পুনরায় ব্যবহার করে aএবং c(আমার অনেকগুলি ব্যর্থ প্রচেষ্টা শুরু হওয়ার সাথে লড়াই করে y/i) লড়াই করে যাচ্ছিলাম , তবে এই পদ্ধতিটি ব্যবহার করে আপনি ঝরঝরে সমস্ত কিছু একসাথে রাখছেন।
সান্চাইজস

1
এই অ্যাপ্রোচটিও আসলে অক্টোবায় খুব কম 3 বাইট ছিল।
সান্চাইজস

0

পার্ল, 38 বাইট

+3জন্য অন্তর্ভুক্ত-n ( use 5.10.0পার্ল আনলক করতে 5.10 বৈশিষ্ট্যগুলি বিনামূল্যে)

#!/usr/bin/perl -n
use 5.10.0;
/ \d+/;say,$_*=$&/$`until($_+=0)>$'

তারপরে চালান:

geosequence.pl <<< "1 3 26"




0

টিআই-বেসিক, 31 বাইট

ব্যবহারকারীর কাছ থেকে ইনপুট নেয় এবং আউটপুটগুলি Ans। আমি এন = সি = বি এন / এ এন -1 এ সমাধান করেছি , এন = 1 + এলএন (সি / বি) / এলএন (বি / এ) পেয়েছি। এটি n = 1 + লগ বি / এ (সি / বি) এর সমান । গল্ফ করার উদ্দেশ্যে, আমি আমার সিকোয়েন্সটি -1 এ শুরু করি এবং এটি 0 থেকে এন এর পরিবর্তে এন -1 এ শেষ করি।

Prompt A,B,C
seq(B(B/A)^N,N,-1,logBASE(C/B,B/A

0

এপিএল (ডায়ালগ ইউনিকোড) , 38 বাইট

{(g≤⊃⌽⍵)⊆gf,(⍵[1]*p+1)÷(f←⊃⍵)*p←⍳⊃⌽⍵}

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

উপসর্গ Dfn। ক্রমে ইনপুট নেয় a b cএবং ব্যবহার করে ⎕IO←0( I ndex O) rigin)

আমি এটি পোস্ট করার আগেই এর মধ্যে 6 বাইট মুণ্ডন করার জন্য @ এরিকআউটগলফারকে ধন্যবাদ জানাই।

কিভাবে?

{(g≤⊃⌽⍵)⊆gf,(⍵[1]*p+1)÷(f←⊃⍵)*p←⍳⊃⌽⍵}  Prefix Dfn. Input  is a vector
                                    ⌽⍵   Reverse ⍵. Yields c b a
                                        Pick the first element (c)
                                        Index. Yields the integers 0..c-1
                                p       Assign to the variable p
                               *         Exponentiate
                         (f←⊃⍵)          Pick the first element of  (a) and assign to f
                                         This yields the vector (a^0, a^1, ..., a^c-1)
                        ÷                Element-wise division
                    p+1)                 The vector 1..c
                   *                     Exponentiate
              (⍵[1]                      Second element (because of IO0) of  (b)
                                         This yields the vector (b^1, b^2, ..., b^c)
            f,                           Prepend f (a). This yields the vector 
                                         (a, b^1/a^0, b^2/a^1, ...)
          g                             Assign the vector to g
                                        Partition. This takes a boolean vector as left
                                         argument and drops falsy elements of the right argument.
     ⊃⌽⍵)                                Pick the last element of  (c)
  (g                                    Check if each element of gc. Yields the boolean
                                         vector that is the left argument for 

0

স্ট্যাক্স , 14 বাইট সিপি 437

ü╞¥ß¥║/,5å╘⌂åº

আনপ্যাক করা অবস্থায় 16 বাইট,

E~Y/y{;^<}{[*gfm

চালান এবং অনলাইন ডিবাগ!

আকারে ইনপুট নেয় [b, a, c]

খুব নিশ্চিত যে @ রিসার্সিভের আরও ভাল সমাধান রয়েছে।

ব্যাখ্যা

E~                              Parse  input, put `c` on input stack
  Y/                            Store `a` in register `y` and calculate `b`/`a`
    y                           Put `y` back to main stack, stack now (from top to bottom): [`a`, `b`/`a`]
     {   }{  gf                 generator
      ;^<                       Condition: if the generated number is smaller than the top of input stack (i.e. `c`)
           [*                   duplicate the second item in main stack and multiply it with the item at the top
                                   i.e. multiply last generated value by `b/a` and generate the value
              m                 Output array, one element on each line

0

সিলোস , 73 বাইট

readIO
k=i
readIO
j=i
readIO
r=j/k
a=k
lbla
printInt a
a*r
b=i-a+1
if b a

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

আমরা তিনটি সংখ্যা পড়ি। দ্বিতীয় অনুপাত / প্রথম এক দিয়ে সাধারণ অনুপাত গণনা করুন। তারপরে আমরা সিরিজটি চালিয়ে যাব যতক্ষণ না আমরা উপরের সীমানা থেকে বড়।


0

সি (জিসিসি), 82 বাইট

n;f(a,b,c){float r=0;for(n=0;r<=c;)(r=pow(b,n)/pow(a,n++-1))<=c&&printf("%f ",r);}

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

r_n = b^n/a^(n-1)পর্যন্ত গণনা করে এবং মুদ্রণ করেr_n > c

সংকলন করা আবশ্যক -lm!


69 বাইট n;f(a,b,c){for(float r=n=0;r=pow(b/a,n++)*a,r<=c&&printf("%f ",r););}
সিলিংক্যাট

0

এপিএল (ডায়ালগ) , 23 বাইট ( এসবিসিএস )

এই আর্গুমেন্ট লাগে AB বাম এবং উপর ডান দিকে,

{⊃(⍵∘≥⊆⊢)⊣/⍵2⍴⍺,÷\⍵⍴⌽⍺}

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

আরও ছোট একটি উপায় সম্ভবত আছে, তবে আমি ভেবেছিলাম তা ÷\খুব সুন্দর।

ব্যাখ্যা:

{...}অনিয়ম ফাংশন is হয় a b, হয় c। চল বলিa b c = 2 6 100

⌽⍺বিপরীত :6 2

⍵⍴পুনরাবৃত্তি বার:6 2 6 2 6 2 6 2 ...

÷\ উপসর্গগুলিতে বিভাগ দ্বারা হ্রাস করুন: 6 (6÷2) (6÷(2÷6)) (6÷(2÷(6÷2))).. = 6 3 18 9 54 ..

⍺, শুরুতে যোগ :2 6 6 3 18 9 54 27 162 81 ...

⊣/⍵2⍴ প্রতিটি অন্যান্য উপাদান পান (কিছু অনুমানের পুনরাবৃত্তি):

  ⍵2⍴একটি সারি করুন,2থেকে কলাম ম্যাট্রিক্স2 6 6 3 18 9 54 ...

  ⊣/ প্রথম কলামটি পান

⊆⊢ অ্যারেগুলিকে যেখানে ব্লকে ভাগ করে নিন

⍵∘≥ সমস্ত উপাদানের চেয়ে বড় বা সমান

এই জাতীয় প্রথম ব্লক নিন

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