দশমিক প্রতিনিধির পুনরাবৃত্তিটি সন্ধান করুন!


12

ইন এই প্রতিদ্বন্দ্বিতা 2 বছর আগে, আমরা দেখেছি সময়ের একটি ইউনিট ভগ্নাংশের ( 1/n where n is a natural number)।

এখন, আপনার কাজটি হ'ল ইউনিট ভগ্নাংশের পুনরায় প্রদর্শন করার জন্য একটি প্রোগ্রাম / ফাংশন লিখুন ।

Repetend দশমিক সম্প্রসারণ যা অসীম পুনরাবৃত্তি, মত অংশ বিশেষ:

  • দশমিক প্রতিনিধিত্ব 1/6হয় 0.16666..., তারপরে পুনরাবৃত্তি হয় 6
  • দশমিক প্রতিনিধিত্ব 1/11হয় 0.090909..., তারপরে পুনরাবৃত্তি হয় 09
  • দশমিক প্রতিনিধিত্ব 1/28হয় 0.0357142857142857142857..., তারপরে পুনরাবৃত্তি হয় 571428

চশমা

  • যে কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট।
  • দশমিক, স্ট্রিং বা তালিকায় রিপেন্ডকে আউটপুট দেয় ।
  • জন্য 1/7( 0.142857142857...), আপনি আউটপুট অবশ্যই 142857পরিবর্তে 428571
  • জন্য 1/13( 0.076923076923076923...), আপনি আউটপুট অবশ্যই 076923পরিবর্তে 76923
  • কোন নিষ্ঠুর বাহিনী, দয়া করে।

Testcases

Input    Output
1        0
2        0
3        3
7        142857
13       076923
17       0588235294117647
28       571428
70       142857
98       102040816326530612244897959183673469387755
9899     000101020305081321345590463683200323264976260228305889483786241034447924032730578846348115971310233356904737852308313971108192746742095161127386604707546216789574704515607637135064147893726639054449944438832205273259925244974239822204263056874431760783917567431053641781998181634508536215779371653702394181230427315890493989291847661379937367410849580765733912516415799575714718658450348520052530558642287099707041115264168097787655318719062531568845337912920497019901

স্কোরিং

এটি । বাইট জিতে সংক্ষিপ্ত সমাধান।

কোনও উত্তর গৃহীত হবে না, কারণ লক্ষ্যটি হ'ল সংক্ষিপ্ততম সমাধান তৈরি করতে সক্ষম ভাষাকে খুঁজে পাওয়া নয়, তবে প্রতিটি ভাষার সংক্ষিপ্ত সমাধান solution

লিডারবোর্ড



1
আপনি কীভাবে সিদ্ধান্ত নেবেন যে 13 এর রিপিটেন্ডটি 076923 এবং 769230 নয়?
অডিটসু ছেড়ে গেছে কারণ এসই

@aditsu কারণ 1/13হয় 0.076923076923...না0.769230769230...
লিকি নূনের

3
খোলামেলাভাবে উল্লেখ করে যে আপনি কোনও উত্তর কখনই গ্রহণ করবেন না এটি এটিকে একটি ক্যাটালগ তৈরি করে। শুধু কিছু বলবেন না এবং কোনও উত্তর কখনই গ্রহণ করবেন না।
ডেনিস

1
আপনি প্রতিটি ভাষার সংক্ষিপ্ত সমাধান দেখানোর জন্য একটি স্ট্যাক স্নিপেট যুক্ত করতে পারেন।
অ্যাডিটসু প্রস্থান করুন কারণ এসই এভিল

উত্তর:


5

জাভা, 150 বাইট:

String p(int n){int a=1,p;String r="";for(;n%10<1;n/=10);for(;n%2<1;n/=2)a*=5;for(;n%5<1;n/=5)a*=2;for(p=a%=n;;){p*=10;r+=p/n;if(a==(p%=n))return r;}}

সাদা স্পেস যুক্ত হয়েছে:

String p(int n){
    int a=1,p;
    String r="";
    for(;n%10<1;n/=10);
    for(;n%2<1;n/=2)
        a*=5;
    for(;n%5<1;n/=5)
        a*=2;
    for(p=a%=n;;){
        p*=10;
        r+=p/n;
        if(a==(p%=n))
            return r;
    }
}

অবহেলিত, সম্পূর্ণ প্রোগ্রাম:

import java.util.Scanner;

public class A036275 {
    public static String period(int a,int n){
        if(n%10==0) return period(a,n/10);
        if(n%2==0) return period(a*5,n/2);
        if(n%5==0) return period(a*2,n/5);
        a %= n;
        int pow = a;
        String period = "";
        while(true){
            pow *= 10;
            period += pow/n;
            pow %= n;
            if(pow == a){
                return period;
            }
        }
    }
    public static String period(int n){
        return period(1,n);
    }
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();
        System.out.println(period(n));
    }
}

for(;;)while(2<3)অসীম লুপ থাকা সত্ত্বেও কম বাইট হবে ! (এবং while(1)@ মাল্টেসেনের চেয়ে কম বাইটস )
মারভ

@ মারভ আমি কীভাবে তা ভুলে যেতে পারি? ধন্যবাদ!
ফাঁস নুন

লুপগুলির জন্য aএবং rএর জন্য ঘোষণাগুলি রাখুন । বাইটস বাঁচায়!
ক্যালকুলেটরফলাইন

1
@ ক্যাটস আরে ফ্লুফি এটি তাদের অ্যাক্সেসযোগ্য করে তুলবে ...
লিকি নুন

3

সিজেম, 26

riL{_XW$%A*:X|X@-}g_X#>\f/

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

ব্যাখ্যা:

প্রোগ্রামটি দশমিক প্রসারণের গণনায় জড়িত একাধিক লভ্যাংশ তৈরি করে, যতক্ষণ না এটি এর আগে কোনও ডিভিডেন্ড খুঁজে পায়। তারপরে এটি একটি দিয়ে শুরু করে সমস্ত লভ্যাংশ নেয় এবং পুনরাবৃত্তের অঙ্কগুলি পেতে তাদের n দ্বারা ভাগ করে।

ri       read the input and convert to integer (n)
L        push an empty array (will add the dividends to it)
{…}g     do … while
  _      copy the current array of dividends
  X      push the latest dividend (initially 1 by default)
  W$     copy n from the bottom of the stack
  %A*    calculate X mod n and multiply by 10
  :X     store in X (this is the next dividend)
  |      perform set union with the array of dividends
  X@     push X and bring the old array to the top
  -      set difference; it is empty iff the old array already contained X
          this becomes the do-while loop condition
_X#      duplicate the array of dividends and find the position of X
>        take all dividends from that position
\f/      swap the array with n and divide all dividends by n


2

জেলি , 12 10 বাইট

%³×⁵
1ÇÐḶ:

লভ্যাংশের উপর নজর রেখে 2 বাইট সংরক্ষণ করা, একটি ধারণা আমি @ অ্যাডিটসুর সিজেএম উত্তর থেকে নিয়েছি ।

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

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

%³×⁵     Helper link. Argument: d (dividend)

%³       Yield the remainder of the division of d by n.
  ×⁵     Multiply by 10.


1ÇÐḶ:    Main link. Argument: n

1        Yield 1 (initial dividend).
 ÇÐḶ     Apply the helper link until its results are no longer unique.
         Yield the loop, i.e., everything from the first repeated result
         up to and including the last unique one.
    :    Divide each dividend by n.

1

গেমমেকার ল্যাঙ্গুয়েজ, 152 বাইট

কেনির উত্তরের ভিত্তিতে

n=argument0;a=1r=0while(n mod 2<1){a*=5n/=2}while(n mod 5<1){a*=2n/=5}a=a mod n;p=a;while(1){p*=10r=r*10+p/n;r=r mod $5f5e107;p=p mod n;if(a=p)return r}

আমি আমার পদ্ধতির মধ্যে একটি বাগ খুঁজে পেয়েছি এবং এটি ঠিক করেছি, তাই সম্ভবত আপনারও এটি আপডেট করার প্রয়োজন হবে।
লিকি নুন


1

পার্ল 6 , 37 বাইট

{(1.FatRat/$_).base-repeating[1]||~0}
~0 max (1.FatRat/*).base-repeating[1]

আপনি যদি যত্ন না নেন তবে এটি কেবলমাত্র ডিনোমিনেটরদের সাথে কাজ করবে যা a৪ বিট পূর্ণসংখ্যার সাথে মানিয়ে যায় আপনি মেথড কলটি সরাতে পারেন .FatRat

ব্যাখ্যা:

# return 「"0"」 if 「.base-repeating」 would return 「""」
~0

# 「&infix<max>」 returns the numerically largest value
# or it's first value if they are numerically equal
max

(
  # turn 1 into a FatRat so it will work
  # with denominators of arbitrary size
  1.FatRat

  # divided by
  /

  # the input
  *

# get the second value from calling the
# method 「.base-repeating」
).base-repeating[1]

টেস্ট:

#! /usr/bin/env perl6
use v6.c;
use Test;

my &code = ~0 max (1.FatRat/*).base-repeating[1];
# stupid highlighter */
# Perl has never had // or /* */ comments

my @tests = (
  1    => '0',
  2    => '0',
  3    => '3',
  6    => '6',
  7    => '142857',
  11   => '09',
  13   => '076923',
  17   => '0588235294117647',
  28   => '571428',
  70   => '142857',
  98   => '102040816326530612244897959183673469387755',
  9899 => '000101020305081321345590463683200323264976260228305889483786241034447924032730578846348115971310233356904737852308313971108192746742095161127386604707546216789574704515607637135064147893726639054449944438832205273259925244974239822204263056874431760783917567431053641781998181634508536215779371653702394181230427315890493989291847661379937367410849580765733912516415799575714718658450348520052530558642287099707041115264168097787655318719062531568845337912920497019901',
);

plan +@tests;

for @tests -> $_ ( :key($input), :value($expected) ) {
  is code($input), $expected, "1/$input";
}
1..12
ok 1 - 1/1
ok 2 - 1/2
ok 3 - 1/3
ok 4 - 1/6
ok 5 - 1/7
ok 6 - 1/11
ok 7 - 1/13
ok 8 - 1/17
ok 9 - 1/28
ok 10 - 1/70
ok 11 - 1/98
ok 12 - 1/9899


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