যৌক্তিক গণনা কার্য


11

একটি ফাংশন তৈরি করুন যা একটি প্রাকৃতিক সংখ্যা নিয়ে থাকে (০ টি অন্তর্ভুক্ত থেকে শুরু করে) এবং ধনাত্মক পূর্ণসংখ্যার এক জোড়া দেয়, যা যথাক্রমে সংখ্যার এবং ডিনোমিনেটর। তির্যক ট্র্যাভারসাল ব্যবহার করুন। পূর্ববর্তী-গণনা করা নম্বরগুলি অবশ্যই এড়িয়ে যেতে হবে। (আপনি বাদ দেওয়া মানগুলির সেটটি মুখস্থ করতে পারেন)

নকশা:

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

লাল বাদ দেওয়া মান

মান:

  • f (0) = 1, 1
  • f (1) = 2, 1
  • f (2) = 1, 2
  • f (3) = 1, 3
  • f (4) = 3, 1 (এড়িয়ে যাওয়া লক্ষ্য করুন)
  • f (5) = 4, 1
  • f (6) = 3, 2
  • f (7) = 2, 3
  • f (8) = 1, 4
  • f (9) = 1, 5
  • f (10) = 5, 1 (এড়িয়ে যাওয়া লক্ষ্য করুন)

আপনি যদি যুক্তিযুক্ত ডেটা কাঠামো এবং তাদের ক্রিয়াকলাপগুলির উপস্থিত থাকে তবে তাদের ব্যবহার করতে পারেন। সংক্ষিপ্ততম কোড জিতেছে।


1
প্রতিটি তির্যকটিতে গণনা করা যুক্তিসঙ্গত সংখ্যার সংখ্যাটি সেই তির্যকের সাধারণ অঙ্কের মোট কার্যফল।
লিকি নুন

আমি জানি যে এই চ্যালেঞ্জটি পুরানো, তবে স্বীকৃত উত্তরটির চেয়ে কম সংক্ষিপ্ত উত্তর রয়েছে, সুতরাং আপনি আবার গ্রহণ করতে চাইতে পারেন।
ফলত এশোলং ফল

উত্তর:


4

জে, 41 36 টি অক্ষর

একটি পূর্ণসংখ্যা নেয় এবং দুটি পূর্ণসংখ্যার সমন্বয়ে একটি ভেক্টর দেয়। আমার প্রথম সমাধান যা সম্পূর্ণরূপে স্বচ্ছ নয় বা সম্পূর্ণ সুস্পষ্ট নয়।

{3 :'~.;<`(<@|.)/.(,%+.)"0/~1+i.1+y'

এখানে উপযুক্ত স্থান সন্নিবেশ সহ সমাধান রয়েছে:

{ 3 : '~. ; <`(<@|.)/. (, % +.)"0/~ 1 + i. 1 + y'

একটি ব্যাখ্যা:

  1. x (, % +.) yদৈর্ঘ্য 2 এর ভেক্টর সংখ্যা xএবং ডিনোমিনেটরের সাথে ভগ্নাংশকে yক্ষুদ্রতম সংখ্যায় কমিয়ে দেয়
  2. 1 + i. 1 + yথেকে পূর্ণসংখ্যার ভেক্টর 1toy + 1
  3. (, % +.)"0/~ 1 + i. 1 + yথেকে unreduced হর এবং সীমার মধ্যে লব সঙ্গে সব কমে ভগ্নাংশের -a ম্যাট্রিক্স 1থেকে y + 1
  4. <`(<@|.)/. yম্যাট্রিক্সের তির্যক ত্রিভুজগুলির একটি অ্যারে y, একে অপরকে তির্যকভাবে উল্টিয়ে ফেলে
  5. ~. ; yDiaএকটি অ্যারেণগুলি ডুপ্লিকেটগুলি সরানো সহ উপাদানগুলির একটি ভেক্টরে ভেঙে পড়ে
  6. x { yএই অবস্থান xএ আইটেমy
  7. (u v) yহিসাবে একই স্বয়ংক্রিয়ভাবে y u v y। এই বিশেষ ব্যবহারের ক্ষেত্রে, uহয় {এবং vহয়3 : '~. ; <`(<@|.)/. (, % +.)"0/~ 1 + i. 1 + y'


8

হাস্কেল, 78 টি অক্ষর

q(r,f)=[(r-b,b)|b<-f[1..r-1],r`gcd`b==1]
d=reverse:id:d
f=((zip[2..]d>>=q)!!)

নমুনা রান:

> map f [0..10]
[(1,1),(2,1),(1,2),(1,3),(3,1),(4,1),(3,2),(2,3),(1,4),(1,5),(5,1)]
> f 100
(17,1)
> f 1000
(3,55)

  • সম্পাদনা: (100 100 87) আমাকে বোকা, কেবলমাত্র জিসিডি পরীক্ষা করা যথেষ্ট!
  • সম্পাদনা করুন: (87 → 85) চতুর কৌশল cycleএবং বিকল্প সারি ক্রমের ক্রিয়াগুলি
  • সম্পাদনা করুন: (85 → 82) cycleহাত-নির্মিত অসীম তালিকার সাথে প্রতিস্থাপন করুনd
  • সম্পাদনা করুন: (82 → 78) gcdমাটাসের পরামর্শ অনুসারে প্রয়োগ পরিচয়

সংজ্ঞা অনুসারে, gcd (r-b) b == gcd r bএবং আপনি আরও চারটি অক্ষর শেভ করতে পারেন।
মাতাসাস জিওভান্নিনি


2

রুবি 1.9, 109 106

F=->n{x=y=d=1
e=0
n.times{(x+=d).gcd(y+=e)>1&&redo
x<2?d<0?d=0:(d,e=1,-1):y<2?e<0?e=0:(d,e=-1,1):0}
[x,y]}

2

OCaml + ব্যাটারি, 182 168 টি অক্ষর

এটি হ্যাসকেলে প্রাকৃতিক হতে পারে তবে ওসি ক্যামলে কেবল সবে সম্ভব:

open LazyList
let rec r(i,j)=lazy(let a,b=if(i+j)mod 2=0then i,j else j,i in
Cons((a,b),filter(fun(c,d)->a*d<>c*b)(r(if j=1 then 1,i+1else i+1,j-1))))
let f=nth(r(1,1))

সম্পাদনা: তির্যকটি অপ্রয়োজনীয়


0

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

{(({|(1…($+=2)…1)}…*)Z/(1,{|(1…(($||=1)+=2)…1)}…*)).unique[$_]}

এটা পরীক্ষা করো

এটি মূলত যুক্তিযুক্ত মানগুলির পুরো ক্রম উত্পন্ন করে, কেবলমাত্র সূচকযুক্ত মান উত্পন্ন হওয়ার পরে বন্ধ হয়ে যায়।

( আমার গল্ফের উপর ভিত্তি করে অন্য একটি চ্যালেঞ্জ)

সম্প্রসারিত:

{  # bare block lambda with implicit parameter $_

  (
      ( # sequence of numerators

        {
          |( # slip into outer sequence (flatten)

            1      # start at one
            
            (
              $    # state variable
              += 2 # increment it by two each time this block is called
            )
            
            1      # finish at one
          )

        }
         * # never stop generating values
      )


    Z/   # zip using &infix:« /  » (generates Rats)


      ( # sequence of denominators

        1,  # start with an extra one

        {
          |( # slip into outer sequence (flatten)

            1
            
            (
              ( $ ||= 1 ) # state variable that starts with 1 (rather than 0)
              += 2        # increment it by two each time this is called
            )
            
            1
          )
        }
         * # never stop generating values
      )


  ).unique                # get only the unique values
  .[ $_ ]                 # index into the sequence
}

({1…($+=2)…1}…*)সংখ্যার অসীম অনুক্রম তৈরি করে ( |(…)উপরে সমতল করতে ব্যবহৃত হয়)

(1 2 1)
(1 2 3 4 3 2 1)
(1 2 3 4 5 6 5 4 3 2 1)
(1 2 3 4 5 6 7 8 7 6 5 4 3 2 1)
(1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1)

(1,{1…(($||=1)+=2)…1}…*) ডিনোমিনেটরদের অসীম ক্রম উত্পন্ন করে

1
(1 2 3 2 1)
(1 2 3 4 5 4 3 2 1)
(1 2 3 4 5 6 7 6 5 4 3 2 1)
(1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1)
(1 2 3 4 5 6 7 8 9 10 11 10 9 8 7 6 5 4 3 2 1)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.