সমাপ্তি, খাঁটি পর্যায়ক্রমিক বা শেষ পর্যন্ত পর্যায়ক্রমিক?


21

ভূমিকা

দশমিক সংখ্যার সীমাবদ্ধ সংখ্যা থাকলে একটি দশমিক সমাপ্ত হয়। উদাহরণস্বরূপ, 0.4 (2/5) সমাপ্ত হচ্ছে কারণ এটির একটি দশমিক সংখ্যা রয়েছে।

একটি দশমিক বিশিষ্ট পর্যায়ক্রমিক হয় যদি এর দশমিক অঙ্কের অসীম সংখ্যা থাকে এবং এর পুনরাবৃত্তের আগে দশমিক সংখ্যা না থাকে (দশমিকের যে অংশ পুনরাবৃত্তি করে।) উদাহরণস্বরূপ, 0.142857142857142 ... (1/7) খাঁটি পর্যায়ক্রমিক কারণ এর পুনরাবৃত্তি রয়েছে 142857, যা দশমিক পয়েন্টের সাথে সাথে পুনরাবৃত্তি শুরু করে।

একটি দশমিক শেষ পর্যন্ত পর্যায়ক্রমিক হয় যদি এর দশমিক অঙ্কের অসীম সংখ্যা থাকে এবং এর পুনরাবৃত্ত হওয়ার আগে দশমিক অঙ্কের সীমাবদ্ধ সংখ্যা থাকে (দশমিকের যে অংশটি পুনরাবৃত্তি করে।) উদাহরণস্বরূপ, 0.166666666666666 (1/6) পর্যায়ক্রমিক কারণ এটি তার পুনরাবৃত্তি 6 1 এর পরে পুনরাবৃত্তি শুরু করে।

তোমার কাজ

একটি প্রোগ্রাম বা ফাংশন লিখুন, যখন p এবং q সংখ্যা দেওয়া হয় (পূর্ণসংখ্যা, 0 <= p < q <= 100), পি / কিউ এর দশমিক প্রতিনিধিত্ব অবসান হয়, খাঁটি পর্যায়ক্রমিক বা শেষ পর্যন্ত পর্যায়ক্রমে নির্ধারণ করে।

আপনি অবশ্যই আউটপুট aযদি এটা সসীম (অর্থাত 0.1), bএটা বিশুদ্ধরূপে পর্যায়ক্রমিক যদি (অর্থাত 0,333 ...), অথবা cএটা শেষ পর্যন্ত পর্যায়ক্রমিক যদি (অর্থাত 0,166 ...), যেখানে a, bএবং cকোনো স্বতন্ত্র, আপনার পছন্দের ধ্রুবক স্ট্রিং হয়।

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

0/1 => Terminating
0/2 => Terminating
1/2 => Terminating
0/3 => Terminating
1/3 => Purely Periodic
2/3 => Purely Periodic
0/4 => Terminating
1/4 => Terminating
2/4 => Terminating
3/4 => Terminating
0/5 => Terminating
1/5 => Terminating
2/5 => Terminating
3/5 => Terminating
4/5 => Terminating
0/6 => Terminating
1/6 => Eventually Periodic
2/6 => Purely Periodic
3/6 => Terminating
4/6 => Purely Periodic
5/6 => Eventually Periodic
0/7 => Terminating
1/7 => Purely Periodic
2/7 => Purely Periodic
3/7 => Purely Periodic
4/7 => Purely Periodic
5/7 => Purely Periodic
6/7 => Purely Periodic
0/8 => Terminating
1/8 => Terminating
2/8 => Terminating
3/8 => Terminating
4/8 => Terminating
5/8 => Terminating
6/8 => Terminating
7/8 => Terminating
0/9 => Terminating
1/9 => Purely Periodic
2/9 => Purely Periodic
3/9 => Purely Periodic
4/9 => Purely Periodic
5/9 => Purely Periodic
6/9 => Purely Periodic
7/9 => Purely Periodic
8/9 => Purely Periodic
0/10 => Terminating
1/10 => Terminating
2/10 => Terminating
3/10 => Terminating
4/10 => Terminating
5/10 => Terminating
6/10 => Terminating
7/10 => Terminating
8/10 => Terminating
9/10 => Terminating
0/11 => Terminating
1/11 => Purely Periodic
2/11 => Purely Periodic
3/11 => Purely Periodic
4/11 => Purely Periodic
5/11 => Purely Periodic
6/11 => Purely Periodic
7/11 => Purely Periodic
8/11 => Purely Periodic
9/11 => Purely Periodic
10/11 => Purely Periodic
0/12 => Terminating
1/12 => Eventually Periodic
2/12 => Eventually Periodic
3/12 => Terminating
4/12 => Purely Periodic
5/12 => Eventually Periodic
6/12 => Terminating
7/12 => Eventually Periodic
8/12 => Purely Periodic
9/12 => Terminating
10/12 => Eventually Periodic
11/12 => Eventually Periodic
0/13 => Terminating
1/13 => Purely Periodic
2/13 => Purely Periodic
3/13 => Purely Periodic
4/13 => Purely Periodic
5/13 => Purely Periodic
6/13 => Purely Periodic
7/13 => Purely Periodic
8/13 => Purely Periodic
9/13 => Purely Periodic
10/13 => Purely Periodic
11/13 => Purely Periodic
12/13 => Purely Periodic
0/14 => Terminating
1/14 => Eventually Periodic
2/14 => Purely Periodic
3/14 => Eventually Periodic
4/14 => Purely Periodic
5/14 => Eventually Periodic
6/14 => Purely Periodic
7/14 => Terminating
8/14 => Purely Periodic
9/14 => Eventually Periodic
10/14 => Purely Periodic
11/14 => Eventually Periodic
12/14 => Purely Periodic
13/14 => Eventually Periodic
0/15 => Terminating
1/15 => Eventually Periodic
2/15 => Eventually Periodic
3/15 => Terminating
4/15 => Eventually Periodic
5/15 => Purely Periodic
6/15 => Terminating
7/15 => Eventually Periodic
8/15 => Eventually Periodic
9/15 => Terminating
10/15 => Purely Periodic
11/15 => Eventually Periodic
12/15 => Terminating
13/15 => Eventually Periodic
14/15 => Eventually Periodic

আপনি এখানে সমস্ত পরীক্ষার কেসগুলি খুঁজে পেতে পারেন ।

আউটপুটটির জন্য আপনাকে নিজের 3 মান পছন্দ করতে অনুমতি দেওয়া হয়েছে তবে এটি কোনটি তা পরিষ্কার হওয়া উচিত it

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

সংকেতগুলি

সসীম:

সর্বাধিক আকারে একটি দশমিক ডিনোমিনেটরের প্রধান উপাদানটি কেবল 2s এবং 5 এর সমন্বয়ে থাকে।

খাঁটি পর্যায়ক্রমিক:

খাঁটি পর্যায়ক্রমিক দশমিক ডিনোমিনেটরের সাধারণ ফর্মের মূল কারণটি কোনও 2s বা 5 এর অন্তর্ভুক্ত করে না।

শেষ পর্যন্ত পর্যায়ক্রমিক:

সাধারণ আকারে শেষ পর্যন্ত পর্যায়ক্রমিক দশমিক ডিনোমিনেটরের প্রধান কারণের মধ্যে অন্তত একটি 2 বা 5 অন্তর্ভুক্ত থাকে তবে এর মধ্যে অন্যান্য সংখ্যাও অন্তর্ভুক্ত থাকে।

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

# Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes



2
আমি যদি মনে করি এটি আসলে একটি সদৃশ, তবে আমি খুব কাছ থেকে একটি ভোট দিতাম। একটি কারণ আছে যে আমি " প্রায় " শব্দটি ব্যবহার করেছি ।
পিটার টেলর

1
পি / কিউ আকারে একটি ভগ্নাংশ দেওয়া হয়েছে কিভাবে? আমরা কি পৃথক ফাংশন আর্গুমেন্ট হিসাবে সংখ্যক এবং ডিনোমিনেটর নিতে পারি?
ডেনিস

2
আমরা কি স্থির হওয়ার জন্য মিথ্যা কিছু, খাঁটি পর্যায়ক্রমিক 1 এবং শেষ পর্যন্ত পর্যায়ক্রমিক 1 এর চেয়ে বড় কিছু নির্দিষ্ট শর্ত পূরণের জন্য একটি অ-ধ্রুবক মান আউটপুট করতে পারি?
ইটিএইচ প্রডাকশনগুলি

1
না, 1/13 নিখুঁতভাবে পর্যায়ক্রমিক কারণ পুনরাবৃত্তিটি '076923'। 0 পুনরাবৃত্তি সঙ্গে পুনরাবৃত্তি।
অলিভার নি

উত্তর:


8

জেলি , 10 বাইট

:gÆfḍ⁵ṢQ¬Ḅ

আর্গুমেন্ট হিসাবে ডিনোমিনেটর এবং অংকটি (সেই ক্রমে) গ্রহণ করে। রিটার্নস 0 সসীম, জন্য 1 বিশুদ্ধরূপে পর্যাবৃত্ত জন্য, এবং 2 অবশেষে নির্ধারিত সময়ের জন্য। এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

:gÆfḍ⁵ṢQ¬Ḅ  Main link. Arguments: d (denominator), n (numerator)

 g          Compute the GCD of d and n.
:           Divide d by the GCD, yielding the denominator of the simplified form.
  Æf        Yield all prime factors of the previous result.
    ḍ⁵      Test 10 for divisibility by each prime factor.
            This yields 1 for 2 and 5, 0 for all other primes.
      Ṣ     Sort the resulting Booleans.
       Q    Unique; deduplicate the sorted Booleans.
        ¬   Logical NOT; replace 0 with 1 and vice versa to yield one of the
            following arrays.
              [    ]  <- no prime factors (denominator 1)
              [   0]  <- only 2 and 5
              [1   ]  <- neither 2 nor 5
              [1, 0]  <- mixed
         Ḅ  Unbinary; convert from base 2 to integer.
            This maps [] and [0] to 0, [1] to 1, and [1, 0] to 2.

11

জাভাস্ক্রিপ্ট (ES6), 70 .. 68 53 বাইট

f=(a,b,s=[],x)=>a?(s[a]^=a)?f(a*10%b,b,s,x||a):x==a:0

খতম করার জন্য 0 প্রদান করে, খাঁটি পর্যায়ক্রমিকের জন্য সত্য এবং অবশেষে পর্যায়ক্রমিকের জন্য মিথ্যা

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

আমরা এখানে যা করছি তা হস্তান্তরিতভাবে একটি বিভাগের অনুকরণ করছে:

  1. a?...:0- সংখ্যাটি যদি শূন্য হয়, আমরা এখানে এসে থামব 0। ক্রমটি শেষ হচ্ছে
  2. (s[a]^=a)?...:x==a- যদি আমরা এর আগেও এই সংখ্যার মুখোমুখি হয়েছি তবে এর অর্থ এই যে ক্রমটি পর্যায়ক্রমিক এবং চিরতরে পুনরাবৃত্তি হতে চলেছে। আমরা এখানে থামুন এবং হয় আসতে trueযদি aপ্রথম মান সমান xক্রম (এর বিশুদ্ধরূপে পর্যাবৃত্ত ) অথবা false(এটা না হলে অবশেষে নির্ধারিত সময়ের )।
  3. f(a*10%b,b,s,x||a)- অন্যথায়, আমরা a10 দ্বারা সংখ্যাটি গুণ করি আমরা বিভাজন দ্বারা বিভাগের বাকী অংশ গণনা করি b। এবং আমরা এই অবশিষ্টাংশটিকে নতুন অঙ্ক হিসাবে ব্যবহার করে পুনরায় প্রক্রিয়াটি পুনরায় করি। ( aসিকোয়েন্সটি ইতিমধ্যে সঞ্চিত না থাকলে আমরা প্রথম মান হিসাবেও পাস করি x))

উদাহরণ

  • নীল : অঙ্ক = 1
  • সবুজ : ডিনোমিনেটর = 7
  • লাল : 10 দ্বারা গুণ
  • কালো : বাকী
  • ধূসর : ভাগফল সংখ্যা

বিভাগ


9

পাইথন, 62 61 59 বাইট

f=lambda n,d,r=[0,0]:(r[:3]+r).count(n)or f(10*n%d,d,r+[n])

মুদ্রণ 1 অবশেষে নির্ধারিত সময়ের জন্য 2 বিশুদ্ধরূপে পর্যাবৃত্ত জন্য, এবং 4 সসীম জন্য।

Repl.it এ সমস্ত পরীক্ষার কেস যাচাই করুন ।


আকর্ষনীয়! কি করে *r?
ইটিএইচ প্রডাকশনগুলি

এটি টিপল আর-কে আনপ্যাক করে । f(1, *(2, 3), 4)সমতূল্য f(1, 2, 3, 4)
ডেনিস

সুতরাং এটি f=(n,d,...r)=>n in r?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
জেএসে

আমার খারাপ, inf=(n,d,...r)=>~r.indexOf(r)?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
by৩

পছন্দ করুন আমার ধারণাও f=(n,d,...r)=>~(i=r.indexOf(n))?n&&!i:f(10*n%d,d,...r,n)কাজ করবে।
ডেনিস

6

পার্ল, 49 46 45 বাইট

জন্য +3 অন্তর্ভুক্ত -p

ডেনিসের মার্জিত ধারণার ভিত্তিতে কিন্তু কার্যকর উপায়ে প্রয়োগ করা হয়েছে

এসটিডিনে ইনপুট নম্বর দিন

terminating.pl <<< "2 26"

termninating.pl:

#!/usr/bin/perl -p
/ /;1until$a{$_=$_*10%$' or$`}++;$_=$a{$`}

সমাপ্ত হলে 2 টি প্রিন্ট করে। 1 যদি পর্যায়ক্রমিক হয় এবং শেষ পর্যন্ত পর্যায়ক্রমে কিছুই হয় না


একটি নির্দিষ্ট গ্রুপের সমস্ত সংখ্যার একই মান দিতে হয়।
অলিভার নি

@ অলিভারনি তারা এখনই করেন
টন হসপেল

3

ব্যাচ, 247 বাইট

@set/af=%1,g=%2
:g
@if not %f%==0 set/ah=g,g=f,f=h%%g&goto g
@set/ae=d=%2/g
:l
@set/ag=-~!(d%%2)*(!(d%%5)*4+1)
@if not %g%==1 set/ad/=g&goto l
@if %d%==1 (echo Terminating)else if %d%==%e% (echo Purely Periodic)else echo Eventually Periodic

ভগ্নাংশ থেকে সঠিক দশমিক পর্যন্ত আমার দ্রুত gcd10 কৌশল ব্যবহার করে । স্পষ্টতই আমি কাস্টম আউটপুট ফর্ম্যাটটি ব্যবহার করে একগুচ্ছ বাইটগুলি সংরক্ষণ করতে পারি।


আপনি কেন @if %d%==1 (echo T)else if %d%==%e% (echo P)else echo E42 বাইট সংরক্ষণ করতে চান না ?
ইটিএইচ প্রডাকশনগুলি 11:51

স্পষ্টতই আমি কাস্টম আউটপুট ফর্ম্যাটটি ব্যবহার করে একগুচ্ছ বাইটগুলি সংরক্ষণ করতে পারি।
অলিভার নি

অলিভার একটি উদ্ধৃতি দিয়ে বলেছে যে আমি এইচটি প্রডাকশনগুলি মনে করি তিনি চাইছেন না।
এরিক দ্য আউটগল্ফার

3

জাভাস্ক্রিপ্ট (ES6), 91 88 85 79 75 74 78 বাইট

f=(n,d,g=(a,b)=>b?g(b,a%b):a,t=g(d/=c=g(n,d),10))=>n*~-d?t-1?f(n/c,d/t)/0:1:+f

খণ্ডন NaN, 1খাঁটি পর্যায়ক্রমিক এবং Infinityশেষ পর্যন্ত পর্যায়ক্রমে আউটপুট ।

পরীক্ষার স্নিপেট

ব্যাখ্যা

প্রথমে, ভগ্নাংশটিকে এর সহজতম আকারে হ্রাস করতে আমরা n এবং d উভয়কে gcd (d, n) দ্বারা বিভক্ত করি । এটি আমাদের 2/6 এর মতো পরিস্থিতি এড়াতে দেয় যেখানে ফলাফলটি অন্যথায় সম্পূর্ণ পর্যায়ক্রমিক হিসাবে গণনা করা হয়। আমরা পরিবর্তনশীল সংজ্ঞায়িত টি হিসাবে GCD (ঘ, 10) ; এটি পরে ব্যবহার করা হবে।

প্রথম চেক কিনা তা ব্যবহারকারীকে এন হয় 0 বা হয় 1 । যদি এন * (ডি -1) 0 হয়, আমরা ফিরে আসি+f , বা নাএন : ভগ্নাংশটি সমাপ্ত হচ্ছে

পরবর্তী চেক কিনা তা ব্যবহারকারীকে টি হল 1 । যদি তা হয় তবে আমরা 1 ফিরে আসি: ভগ্নাংশটি সম্পূর্ণভাবে পর্যায়ক্রমিক

তাহলে টন হয় না 1 , আমরা বিভক্ত দ্বারা টন 0. দ্বারা, সমগ্র ফাংশন আবার চালানোর জন্য, এবং ডিভাইড তাহলে N / (ঘ / T) সসীম হয়, তাহলে এটি আয় NaN / 0 = NaN : ভগ্নাংশ হয় সসীম । অন্যথায়, এটি 1/0 = ইনফিনিটি ফেরত দেয় : ভগ্নাংশটি শেষ পর্যন্ত পর্যায়ক্রমিক হয়


সহজ ফর্মটি হ্রাস কোথায়?
টন হসপেল

@ টনহোস্পেল স্থির
ইটিএইচ প্রডাকশন

@ আরনাউল্ড আপনার অর্থ কী তা আমি নিশ্চিত নই। এটি Infinityসমস্ত মানগুলির জন্য ফিরে আসে ।
ETH প্রোডাকশনগুলি

@ আর্নল্ড আও, মানুষ, আমি ভেবেছিলাম যে আমি কখনই সামঞ্জস্য না করে পালিয়ে যেতে পারি n... তা উল্লেখ করার জন্য ধন্যবাদ
ইটিএইচ প্রডাকশনগুলি

3

গণিত, 41 বাইট

Ordering@{d=Denominator@#,GCD[d,10^d],1}&

{3,1,2}যদি ইনপুটটির {2,3,1}একটি সুস্পষ্ট পর্যায়ক্রমিক দশমিক প্রসার {3,2,1}থাকে এবং ইনপুটটির একটি পর্যায়ক্রমিক দশমিক বিস্তৃতি থাকে তবে ইনপুটটির একটি দশমিক দশমিক সম্প্রসারণ থাকে Out

স্নিগ্ধ কৌতুকের উপর ভিত্তি করে: যদি dসর্বনিম্ন পদগুলিতে ভগ্নাংশের ডিনোমিনেটর হয়, তবে এর সবচেয়ে বড় সাধারণ বিভাজক dএবং 10^dসমান হয় dযদি dএর প্রধান কারণের ক্ষেত্রে কেবল 2 এবং 5 গুলি থাকে; এর প্রধান কারণের ক্ষেত্রে 2s বা 5s না 1থাকলে সমান d; d2s / 5s এবং অন্যান্য প্রাইম থাকলে এর মধ্যে কিছু সংখ্যার সমান হয় ।

Orderingফাংশন শুধু রিপোর্ট যেখানে ট্রিপল ক্ষুদ্রতম, পরবর্তী ক্ষুদ্রতম, এবং বৃহত্তম উপাদান, বন্ধন ভেঙ্গে বাম-থেকে-ঠিক আছে।

ত্রুটি: ইনপুট 0 হলে {1,2,3}পরিবর্তে বৈকল্পিক আউটপুট প্রদান করে {3,1,2}

গণিত, 46 বাইট, বিকৃত

b[a][[Log[d=Denominator@#,GCD[d,10^d]]]][[1]]&

a[[1]]যদি ইনপুটটির b[[1]]একটি সুস্পষ্ট পর্যায় দশমিক প্রসার b[a]থাকে এবং ইনপুটটির অবশেষে পর্যায়ক্রমিক দশমিক বিস্তৃতি থাকে তবে ইনপুটটির একটি দশমিক দশমিক প্রসার ঘটে has সব ক্ষেত্রে একটি ত্রুটি ছুড়ে!

উপরের হিসাবে, আমরা জানতে চাই যে সেই সাধারণ সাধারণ বিভাজকটি 1, d, বা কোথাও কোথাও সমান in সেই জিসিডির বেস-ডি লোগারিদম 0, 1 বা এর মধ্যবর্তী কিছু সমান।

এখন আমরা গণিতকে নির্যাতন শুরু করি। অভিব্যক্তির b[a][[n]]মঞ্চকে বোঝায় । সুতরাং ফিরে আসে ; প্রত্যাবর্তন ; এবং , যেখানে 0 এবং 1 এর মধ্যে সংখ্যা রয়েছে সেখানে গাণিতিক ত্রুটিটি "পার্ট :: pkspec1: পার্থক্য স্পেসিফিকেশন হিসাবে ব্যবহার করতে পারে না makes " এবং মূল্যহীন ফেরত দেয়।nb[a]b[a][[1]]ab[a][[0]]bb[a][[x]]xxb[a][[x]]

এটি ইতিমধ্যে তিনটি ক্ষেত্রে যথাযথভাবে পৃথক করে, শেষ পর্যন্ত পর্যায়ক্রমিক কেসগুলির আউটপুট ছাড়া b[a][[x]], যা ধ্রুবক নয় কারণ xকোনও কিছুর আসল লগারিদম। সুতরাং আমরা [[1]]ইতিমধ্যে বর্ণিত ফলাফলগুলিতে প্রয়োগ করি । কিভাবে ম্যাথামেটিকাল অভ্যন্তরীণভাবে প্রতিনিধিত্ব করে কারণ b[a][[x]], ফল b[a][[x]][[1]]সহজভাবে হয় b[a]। অন্যদিকে, ফলাফলগুলিতে আলাদা ত্রুটির ফলে আবেদন [[1]]করা a"পার্ট :: পার্টড: পার্ট স্পেসিফিকেশন একটি [[1]] অবজেক্টের গভীরতার চেয়ে দীর্ঘ।" এবং a[[1]]অবমূল্যায়ন (এবং একইভাবে b) প্রদান করে।

ত্রুটি: 0 ইনপুট সম্পর্কে মিথ্যা, b[a]পরিবর্তে ফিরে a[[1]]


2

সি 173 বাইট

স্টিডিন থেকে দুটি পূর্ণসংখ্যা নেয়, খাঁটি পর্যায়ক্রমিক জন্য 1, শেষ পর্যন্ত পর্যায়ক্রমিক জন্য -1 এবং সমাপ্তির জন্য 0 প্রিন্ট করে।

int r;main(_,n,d){_-1?_-2?d-1?d%2&&d%5?r=1:d%2?main(3,n,d/5):main(3,n,d/2),r=r?-1:0:r=0:d?main(2,d,n%d):r=n:scanf("%d %d",&n,&d),main(2,n,d),main(3,n/r,d/r),printf("%d",r);}

Ungolfed:

// returns 1 for periodic, 0 for terminating, <0 for eventually periodic
int periodic(int num, int den) { // 3
    if (den == 1) return 0;
    if (den % 2 && den % 5) // pure periodic
        return 1;
    if (den % 2) return periodic(num,den/5) ? -1 : 0;
    return periodic(num,den/2) ? -1 : 0;
}

int gcd(int num, int den) { // 2
    if (den) 
        return gcd(den,num%den);
    return num;
}

int main(n,d) // 1
{
    scanf("%d %d",&n,&d);
    printf("%d",periodic(n/gcd(n,d),d/gcd(n,d)));
    return 0;
}   

হাফ-golfed:

int r;main(_,n,d){
    _-1? 
    _-2?
    // periodic
    d-1?
        d%2&&d%5?
            r=1:
                d%2?
                    main(3,n,d/5): //periodic
                    main(3,n,d/2), //periodic
                        r=r?-1:0:
                r=0
    // gcd
    :d?main(2,d,n%d):r=n // gcd
    // main
    :scanf("%d %d",&n,&d),
     main(2,n,d), // gcd
     main(3,n/r,d/r), // periodic
     printf("%d",r);
}

2

আসলে , 15 বাইট

এটি ডেনিসের জেলি উত্তরের উপর ভিত্তি করে । 0 সমাপ্ত হচ্ছে, 1 খাঁটি পর্যায়ক্রমিক এবং 2 শেষ পর্যন্ত পর্যায়ক্রমিক। গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

▼Ny9u♀%SR♂b╔2@¿

Ungolfing

      Implicit input [a, b].
▼     Divide a and b by gcd(a,b).
Ny    Get the unique prime divisors of the reduced denominator.
9u    Push 10.
♀%    10 mod every member of uniq_p_d.
SR    Sort the mods and reverse.
♂b    Logical buffer. Converts every (10 % p != 0) to 1, and everything else to 0.
        Meaning if 2 or 5 divided b, they are now 0, and every other prime is now 1.
╔     Uniquify the list.
        If terminating, return [0].
        If purely periodic, return [1].
        If eventually periodic, return [1, 0].
        Else, (if b was 1), return [].
2@¿   Convert from binary to decimal. Return 0, 1, or 2.
      Implicit return.

1

গণিত, 44 বাইট

If[ListQ@Last@#,Length@#==1]&@@RealDigits@#&

খাঁটি পর্যায়ক্রমে এবং শেষ পর্যন্ত পর্যায়ক্রমে সমাপ্তির Nullজন্য ফেরত দেয় ।TrueFalse

ব্যাখ্যা

RealDigits

এন এর দশমিক সম্প্রসারণ সন্ধান করুন (পুনরাবৃত্ত সংখ্যাগুলি অতিরিক্ত মাথা দিয়ে ঘিরে থাকে List {})।

ListQ@Last@#

দশমিক প্রসারণের শেষ উপাদানটি a List

Length@#==1

উপরের শর্তটি যদি হয় Trueতবে পুরো দশমিক দশমিক একটি জিনিসই অন্তর্ভুক্ত কিনা তা পরীক্ষা করে দেখুন। (একটি Listসত্তা হিসাবে গণনা করা হয়)। (রিটার্ন Trueবা False)

(শর্তটি যদি থাকে Falseতবে একটি Nullফেরত দেওয়া হয় কারণ এর জন্য তৃতীয় কোন যুক্তি নেই If)


1

পাইথ , 31 27 বাইট

AQ={P/HiGH?l@H=j25T?l-HT1Z2

ইনপুট

4,12

আপনি এটি এখানে চেষ্টা করতে পারেন । ছাপেশেষ পর্যন্ত পর্যায়ক্রমিক জন্য 1 , খাঁটি পর্যায়ক্রমিকের জন্য 2 এবং সমাপ্তির জন্য 0 টি । এই কোডগল্ফ আমার উত্তর প্রথম। কোন পরামর্শ স্বাগত।

ব্যাখ্যা

AQ                                              // 1st element to G and 2nd element to H
    ={P                                         // Assign unique prime factors to H
        /H                                      // Simplify denominator
            iGH                                 // Find GCD
                ?l                              // Check length of filtered H
                    @H                          // Filter H by Y
                        =j25T                   // Assign a set [2,5] to T
                                ?l-HT           // Check length of H - T
                                        1Z2     // Print result

দ্রষ্টব্য যে [২,৩] [২,৫] = [২] তবে [২,৩,৫] - [২,৫] = [৩] দ্বারা ফিল্টার হয়েছে।


1

PARI / GP, 64 বাইট

f(x,y)=if(setminus(factor(y=y/gcd(x,y))[,1]~,[2,5]),gcd(y,10)>1)

সমাপ্তির জন্য আউটপুট কিছুই না, 0 খাঁটি জন্য এবং 1 পর্যায়ক্রমিকভাবে 1।

খুব অভিনব নয়, আমি যখন শুরু করি তখন আরও ভাল কিছু আশা করি।


1

05 এ বি 1 ই , 16 ই 11 বাইট

সংরক্ষিত 5 বাইট @ আদনানকে ধন্যবাদ!

¿²r/fTrÖbÙJ

খাঁটি পর্যায়ক্রমিকের জন্য 0, সমাপ্তির জন্য 1 এবং অবশেষে পর্যায়ক্রমিক 10 টি প্রিন্ট করে।

ব্যাখ্যা:

                 # Implicit input
                 # Implicit input
  ¿              # Take GCD of numbers
   ²             # Push top value from input register
    r            # Reverse stack order
     /           # Divide (denominator by GCD)
      f          # Find unique prime factors
       TrÖ       # Test 10 for divisibility
          b      # Convert (True -> 1, False -> 0)
           Ù     # Deduplicate array
            J    # Join chars in array
                 # Implicit print

ইনপুট p নিউলাইন q হিসাবে নেওয়া হয় ।

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


আপনাকে 05AB1E :) ব্যবহার করে দেখে ভাল লাগল। ওসাবিও অন্তর্নিহিত ইনপুট ব্যবহার করে যা আমাদের প্রথম দু'জনকে সরাতে দেয় I। তদ্ব্যতীত, একটি ধ্রুবক পূর্বনির্ধারিত 10হয় T। একই জন্য 2B, যা b:)।
আদনান

আপনি ইনপুট রেজিস্টারগুলিও ব্যবহার করতে পারেন, যা আমাদের ¿²r/fTrÖbÙJচূড়ান্ত কোড হিসাবে দেয় :)।
আদনান

1

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

$d=$argv[2];$a[]=$n=$argv[1];while($n%$d&&!$t){$n*=10;$t=in_array($n%=$d,$a);$a[]=$n;}if($a[1]&&$t)$t+=$a[0]!=end($a);echo+$t;

শেষ হওয়ার জন্য 0 এবং শেষ পর্যন্ত 2 টি পিরিওলি পর্যায়ক্রমে 1 টি মুদ্রণ করে। কোনও সংখ্যক অ্যারেতে দু'বার থাকলে এখানে পর্যায়ক্রমিক সেশন শুরু হয় যদি এটি সমাপ্ত হয় তবে echo end($a);মানটি 0 যদি আপনি বিশ্বাস না $t=count($a)>$d?2:0;করেন তবে লুপটিতে রাখুন

করতে এটি আরো স্পষ্ট যোগ করুন print_r($a);বা var_dump($a);বা json_encode($a);লুপ পর

আপনি যদি একটি অঙ্ক দু'বার বা অ্যারের শেষে শূন্য দেখতে পারেন যদি কোনও অঙ্ক দুটি করে দুটি আইটেমের মধ্যে আইটেম গণনা করে থাকে এবং আপনি পর্যায়টির দৈর্ঘ্য পেতে পারেন এবং আপনি প্রথম সংখ্যাটির দ্বারা অবস্থান দেখতে পারেন যেখানে পর্যায় শুরু হয়

সুতরাং এর পরে আমরা অবস্থান এবং এর সাথে পর্যায়ক্রমিক ক্রমের দৈর্ঘ্যটি খুঁজে পেতে পারি if($t){echo $p=array_search(end($a),$a);echo $l=count($a)-$p-1;}

পর্যায়ক্রমিক কল্পনা

$d=$argv[2];
$a[]=$n=$argv[1]; #array numerator
$r[]=$n/$d^0; #array result of the division
$r[]=".";
while($n%$d&&!$t){
    $n*=10; 
    $n-=$d*$r[]=$n/$d^0;
    $t=in_array($n%=$d,$a); #stop if numerator is twice 
    $a[]=$n;
}
if($a[1]&&$t)$t+=$a[0]!=end($a); #periodic term starts directly?
if($t){
    echo $p=array_search(end($a),$a)."\n"; #output the beginning position of the periodic term
    echo $l=count($a)-$p-1; #output the length of the periodic term
    echo "\n";
    echo str_repeat(" ",2+$p).str_repeat("_",$l-1)."\n"; #visualize the periodic term
    #echo join(array_slice($r,0,1+$p)).join(array_slice($r,1+$p))."\n";# if you want only the periodic term 
    echo join($r); #result if the division
}
echo+$t; # 0 terminated 1+2 periodic 2 periodic start not directly

আউটপুট পর্যায়ক্রমিক শব্দটি ভিজ্যুয়ালাইজ করে

1/18
   _
0.05

1/12
    _
0.083

1/13
  ______
0.076923

1/14
   ______
0.0714285

130 বাইট সহ অন্য একটি উপায়

$r=bcdiv(($z=$argv)[1],$z[2],400);for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;echo strlen(rtrim($r,0))<50?0:$p;

প্রসারিত সংস্করণ

$r=bcdiv(($z=$argv)[1],$z[2],400); # 100 is the maximal denominator 
# we need a string length with the double value of the sum the length from 1 until the denominator
for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;
# all results begin with 0. 
#take two substrings with the same length after that and comparize both. 
#if we found 2 same substrings we have a periodic which starts at the first decimal place
echo strlen(rtrim($r,0))<50?0:$p; 
# if we can trim the length of the result we have a terminated result


@ নীল আপনার মানে কি অন্য প্রশ্নের উত্তর দেওয়ার জন্য আমার কোডটি পরিবর্তন করা উচিত?
জার্গ হালসারম্যান

ঠিক আছে, আমি কেবল ভাবছিলাম যে অন্য প্রশ্নের পিএইচপি উত্তর নেই; সম্ভবত আপনি একটি সরবরাহ করতে চান।
নিল

@ রোসলুপি উদাহরণস্বরূপ 3/53 এর জন্য এই অ্যারে তৈরি করা হবে[3,30,35,32,2,20,41,39,19,31,45,26,48,3]
জার্গ হালসারম্যান

3/103 = 0.0291262135922330097087378640776699029126213592233009708 এবং একই সময়ে একই অঙ্কটি উপস্থিত হতে পারে (উদাহরণস্বরূপ, সংখ্যাটি 00 ... 00 এর মধ্যে) তবে আপনি যদি অ্যারের কথা বলেন তবে অঙ্কটির এক নয় তবে {d এর অ্যারে = 10 * (d% বি) - যেখানে আমি মনে করি ঠিক এর চেয়ে
অঙ্কটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.