ইতিবাচক যুক্তি সংখ্যা


14

ইতিবাচক যুক্তিযুক্ত সংখ্যাগুলি নিম্নলিখিত প্রক্রিয়াটির সাথে সংখ্যাযুক্ত হিসাবে দেখানো যেতে পারে:

  1. জিরোর অর্ডিনাল 0 রয়েছে
  2. অন্যান্য নম্বরগুলিকে একটি গ্রিডে সাজান যাতে একটি সারি ক, কলামে একটি / বি থাকে
  3. উপরের থেকে নীচে বামে একটি তির্যক জিগ-জাগটি প্লট করুন
  4. জিগ-জাগের সাথে যে অনন্য সংখ্যার মুখোমুখি হয়েছে তার চলমান ট্যালি রাখুন

এখানে জিগ-জাগের একটি চিত্র:

1/1 থেকে শুরু করুন, প্রারম্ভিক ডানদিকে যান

সুতরাং, সম্মুখীন সংখ্যাগুলি হয়, ক্রম

1/1, 2/1, 1/2, 1/3, 2/2, 3/1, 4/1, 3/2, 2/3, 1/4, 1/5, 2/4, 3/3, 4/2, 5/1, 6/1, 5/2, 4/3, 3/4, 2/5, 1/6, 1/7, 2/6, 3/5, 4/4, 5/3 ...

এবং সহজ সরল, অনন্য নম্বরগুলি হ'ল

1, 2, 1/2, 1/3, 3, 4, 3/2, 2/3, 1/4, 1/5, 5, 6, 5/2, 4/3, 3/4, 2/5, 1/6, 1/7, 3/5, 5/3, ...

চ্যালেঞ্জ:

  • প্রদত্ত দুটি বৃহত্তর-তুলনায়-জিরো পূর্ণসংখ্যার পি এবং কুই , আউটপুট পূরণবাচক সংখ্যা P / Q এর
  • p এবং q অগত্যা সহ-প্রধান নয়
  • সংক্ষিপ্ততম কোড জিতেছে
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে

পরীক্ষার কেস:

এখানে প্রথম 24 টি যৌক্তিক সংখ্যার মুখোমুখি হয়েছে এবং প্রত্যেকটির জন্য পছন্দসই আউটপুট রয়েছে:

1/1: 1
2/1: 2
1/2: 3
1/3: 4
2/2: 1
3/1: 5
4/1: 6
3/2: 7
2/3: 8
1/4: 9
1/5: 10
2/4: 3
3/3: 1
4/2: 2
5/1: 11
6/1: 12
5/2: 13
4/3: 14
3/4: 15
2/5: 16
1/6: 17
1/7: 18
2/6: 4
3/5: 19

এবং, আরও পরীক্ষার মামলার জন্য, এখানে প্রথমে 200 টি ইতিবাচক যুক্তিযুক্ত নম্বর রয়েছে:

1, 2, 1/2, 1/3, 3, 4, 3/2, 2/3, 1/4, 1/5, 
5, 6, 5/2, 4/3, 3/4, 2/5, 1/6, 1/7, 3/5, 5/3, 
7, 8, 7/2, 5/4, 4/5, 2/7, 1/8, 1/9, 3/7, 7/3, 
9, 10, 9/2, 8/3, 7/4, 6/5, 5/6, 4/7, 3/8, 2/9, 
1/10, 1/11, 5/7, 7/5, 11, 12, 11/2, 10/3, 9/4, 8/5, 
7/6, 6/7, 5/8, 4/9, 3/10, 2/11, 1/12, 1/13, 3/11, 5/9, 
9/5, 11/3, 13, 14, 13/2, 11/4, 8/7, 7/8, 4/11, 2/13, 
1/14, 1/15, 3/13, 5/11, 7/9, 9/7, 11/5, 13/3, 15, 16, 
15/2, 14/3, 13/4, 12/5, 11/6, 10/7, 9/8, 8/9, 7/10, 6/11, 
5/12, 4/13, 3/14, 2/15, 1/16, 1/17, 5/13, 7/11, 11/7, 13/5, 
17, 18, 17/2, 16/3, 15/4, 14/5, 13/6, 12/7, 11/8, 10/9, 
9/10, 8/11, 7/12, 6/13, 5/14, 4/15, 3/16, 2/17, 1/18, 1/19, 
3/17, 7/13, 9/11, 11/9, 13/7, 17/3, 19, 20, 19/2, 17/4, 
16/5, 13/8, 11/10, 10/11, 8/13, 5/16, 4/17, 2/19, 1/20, 1/21, 
3/19, 5/17, 7/15, 9/13, 13/9, 15/7, 17/5, 19/3, 21, 22, 
21/2, 20/3, 19/4, 18/5, 17/6, 16/7, 15/8, 14/9, 13/10, 12/11, 
11/12, 10/13, 9/14, 8/15, 7/16, 6/17, 5/18, 4/19, 3/20, 2/21, 
1/22, 1/23, 5/19, 7/17, 11/13, 13/11, 17/7, 19/5, 23, 24, 
23/2, 22/3, 21/4, 19/6, 18/7, 17/8, 16/9, 14/11, 13/12, 12/13, 
11/14, 9/16, 8/17, 7/18, 6/19, 4/21, 3/22, 2/23, 1/24, 1/25 

বিপরীত প্রশ্নে চিৎকার করুন , প্রথম পদক্ষেপটি যেখানে নীচে রয়েছে তাই আপনি অতিরিক্ত পরীক্ষার কেস উত্পন্ন করতে উত্তরগুলি ব্যবহার করতে পারবেন না।


আমি ভাবছি যদি বিকল্প সংখ্যায়ন প্রকল্পগুলি সংক্ষিপ্ত কোডের জন্য তৈরি করে থাকে তবে।
qwr

1
ভগ্নাংশের numerators: oeis.org/A157807 denominators,: oeis.org/A157813 : কোন পূরণবাচক ক্রম জন্য ম্যাচ oeis.org/...
qwr

আমি দেখি. আপনাকে ভগ্নাংশ হ্রাস করতে হবে এবং তারপরে গণনা করতে হবে। এটি কেবল জিগ-জাগ নয়
উজ্জ্বল করুন

উত্তর:


4

জেলি ,  21  20 বাইট

কিছু চালাক গণিত ব্যবহার করে সম্ভবত বেশ কয়েকটি বাইট দ্বারা প্রহারযোগ্য ...

:g/
ǵSRRUĖ€UÐeẎÇ€Qi

একটি তালিকা গ্রহণ করে একটি মোনাডিক লিঙ্ক, [p,q]যার দ্বারা নির্ধারিত প্রাকৃতিক সংখ্যাটি দেয় p/q

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

প্রথম দ্রষ্টব্য যে এন থ্রি ত্রিভুজের মুখোমুখি হয়েছে গ্রিডের সমস্ত যুক্তিযুক্ত সংখ্যা রয়েছে যার জন্য অঙ্ক এবং ডিনোমিনেটরের যোগফল N + 1 এর সমান , সুতরাং একটি ফাংশন দেওয়া হয়েছে যা একটি [p,q]জোড়কে সর্বাধিক আকারে হ্রাস করে ( [p/gcd(p,q),q/gcd(p,q)]) আমরা যতদূর ত্রিভুজগুলি তৈরি করতে পারি প্রয়োজন *, সমস্ত এন্ট্রি হ্রাস, অনুলিপি করা এবং সরলকৃত ইনপুটটির সূচকটি সন্ধান করুন।

* আসলে এখানে আরও একটি বাইট সংরক্ষণ করুন

:g/ - Link 1, simplify a pair: list of integers, [a, b]
  / - reduce using:
 g  - Greatest Common Divisor -> gcd(a, b)
:   - integer division (vectorises) -> [a/gcd(a,b), b/gcd(a,b)]

ǵSRRUĖ€UÐeẎÇ€Qi - Main Link: list of integers, [p, q]
Ç                - call last Link as a monad (simplify)
 µ               - start a new monadic chain (call that V)
  S              - sum -> the diagonal V will be in plus one
   R             - range -> [1,2,3,...,diag(V)+1]
    R            - range (vectorises) -> [[1],[1,2],[1,2,3],...,[1,2,3,...,diag(V)+1]]
     U           - reverse each       -> [[1],[2,1],[3,2,1],[diag(V)+1,...,3,2,1]]
      Ė€         - enumerate €ach     -> [[[1,1]],[[1,2],[2,1]],[[1,3],[2,2],[3,1]],[[1,diag(V)+1],...,[diag(V)-1,3],[diag(V),2],[diag(V)+1,1]]]
         Ðe      - apply only to the even indexed items:
        U        -   reverse each     -> [[[1,1]],[[2,1],[1,2]],[[1,3],[2,2],[3,1]],[[4,1],[3,2],[2,3],[1,4]],...]
           Ẏ     - tighten            -> [[1,1],[2,1],[1,2],[1,3],[2,2],[3,1],[4,1],[3,2],[2,3],[1,4],...]
            Ç€   - for €ach: call last Link as a monad (simplify each)
                 -                    -> [[1,1],[2,1],[1,2],[1,3],[1,1],[3,1],[4,1],[3,2],[2,3],[1,4],...]
              Q  - de-duplicate       -> [[1,1],[2,1],[1,2],[1,3],[3,1],[4,1],[3,2],[2,3],[1,4],...]
               i - index of V in that list

3

পার্ল 6 ,  94  90 বাইট

->\p,\q{(({|(1…($+=2)…1)}…*)Z/(1,{|(1…(($||=1)+=2)…1)}…*)).unique.first(p/q,:k)+1}

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

{(({|(1…($+=2)…1)}…*)Z/(1,{|(1…(($||=1)+=2)…1)}…*)).unique.first($^p/$^q):k+1}

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

এটি মূলত মানগুলির পুরো ক্রম উত্পন্ন করে এবং কোনও মিল খুঁজে পেলে থামে।

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

{  # bare block lambda with placeholder parameters $p,$q

  (
      ( # 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
  .first( $^p / $^q ) # find the first one that matches the input
  :k                  # get the index instead (0 based)
  + 1                 # add one               (1 based)
}

({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)

3

পাইথন 2 , 157 144 137 134 126 125 বাইট

def f(p,q):a=[((j-i)/(i+1.))**(j%-2|1)for j in range(p-~q)for i in range(j)];return-~sorted(set(a),key=a.index).index(p*1./q)

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

মিঃ এক্সকোডারের কারণে 4 বাইট সংরক্ষণ করা হয়েছে ; জোনাথন ফ্রেচের 1 বাইট ।

মিঃ এক্সকোডার হিসাবে উল্লেখ করা হয়েছে, পাইথন 3-তে আমরা কিছুটা আরও ভাল করতে পারি যেহেতু অন্যান্য বিষয়গুলির মধ্যে, পূর্ণসংখ্যার বিভাগটি ফলশ্রুতিতে ফলশ্রুতিতে ডিফল্ট হয় এবং আমরা আরও সহজেই আনপ্যাক করতে পারি list:

পাইথন 3 , 117 বাইট

def f(p,q):a=[((j-i)/-~i)**(j%-2|1)for j in range(p-~q)for i in range(j)];return-~sorted({*a},key=a.index).index(p/q)

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


ভগ্নাংশটি অদলবদল করে এবং ব্যবহার করে **(j%-2|1)এবং এর মাধ্যমে 128 বাইট (-6)p-~q
মিঃ এক্সকোডার

@জনাব. এক্সকোডার: আপনি আজ সব নেতিবাচক মডুলোর সম্পর্কে! :) আমি মনে করি আমার এখনও +1শেষ হওয়া দরকার , যেহেতু 1,1'অবশ্যই' দিতে হবে 1, না 0
চ্যাস ব্রাউন


124 বাইট :) হ্যাঁ নেতিবাচক মডুলো সত্যই সহায়ক হতে দেখা যাচ্ছে!
মিঃ এক্সকোডার


3

পাইথন 3 ,157, 146, 140, 133 বাইট

def f(p,q):a=[(i+i-abs(j-i-i))/(abs(j-i-i+.5)+.5)for i in range(p+q)for j in range(4*i)];return sorted(set(a),key=a.index).index(p/q)

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

জনাথন ফ্রেচের জন্য ধন্যবাদ 11 বাইট জিতেছে

আরও 6 টি বাইট জিতেছে এবং তারপরে চাস ব্রাউনকে 7 টি ধন্যবাদ




@ বোব্রোববব: পিপিসিজিতে আপনাকে স্বাগতম! আপনার অ্যালগরিদম কীভাবে কাজ করে তা আমি পুরোপুরি নিশ্চিত নই (যদিও এটি স্পষ্টভাবে কার্যকর হয়); কিন্তু পরীক্ষামূলকভাবে, আপনার প্রতিস্থাপন আরো কিছু বাইট সংরক্ষণ করতে পারবেন বলে মনে হয় range(max(p,q)+1)সঙ্গে range(p+q)
চ্যাস ব্রাউন

1
{*a}পরিবর্তে ব্যবহার করে আপনি আরও কিছু বাইট সংরক্ষণ করতে পারেন set(a)
মিস্টার এক্সকোডার

2

জে, 41 , 35 , 30 বাইট

-11 বাইটস ফ্রাউনফ্রোগের জন্য ধন্যবাদ

%i.~0~.@,@,[:]`|./.[:%/~1+i.@*

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

মূল 41 বাইট ব্যাখ্যা সহ পোস্ট

%>:@i.~[:([:~.@;[:<@|.`</.%"1 0)~(1+i.@*)

ungolfed

% >:@i.~ [: ([: ~.@; [: <@|.`</. %"1 0)~ 1 + i.@*

ব্যাখ্যা

                  +
                  | Everything to the right of this
                  | calculates the list
p (left arg)      |                                      create the
divided by q      |                                      diagonals.  yes,
      (right)     |                                     +this is a         +create this list
   |              |        ++ finally rmv ^alternately  |primitive ADVERB  |1..(p*q), and pass
   |   + the index          | the boxes,  |box, or      |in J              |it as both the left
   |   | of that  |         | and remove  |reverse and  |                  |and right arg to the
   |   | in the   |         | any dups    |box, each    |                  |middle verb, where each
   |   | list on  |         |             |diagonal     |                  |element will divide the
   |   | the right|         |             |             |       +----------+entire list, producing
   |   | plus 1   |         |             |             |       |          |the undiagonalized grid
   |   |          |         |             |             |       |          |
   |   |          |         |             |             |       |          |
   |   |          +         |             |             |       |          |
  ┌+┬──|──────────┬─────────|─────────────|─────────────|───────|──────────|─────────────┐
  │%│┌─+───────┬─┐│┌──┬─────|─────────────|─────────────|───────|────────┬─|────────────┐│
  │ ││┌──┬─┬──┐│~│││[:│┌────|─────────────|─────────────|───────|─────┬─┐│┌+┬─┬────────┐││
  │ │││>:│@│i.││ │││  ││┌──┬|───────┬─────|─────────────|───────|────┐│~│││1│+│┌──┬─┬─┐│││
  │ ││└──┴─┴──┘│ │││  │││[:│+──┬─┬─┐│┌──┬─|─────────────|─┬─────|───┐││ │││ │ ││i.│@│*││││
  │ │└─────────┴─┘││  │││  ││~.│@│;│││[:│┌|───────────┬─+┐│┌─┬─┬+──┐│││ │││ │ │└──┴─┴─┘│││
  │ │             ││  │││  │└──┴─┴─┘││  ││+────────┬─┐│/.│││%│"│1 0││││ ││└─┴─┴────────┘││
  │ │             ││  │││  │        ││  │││┌─┬─┬──┐│<││  ││└─┴─┴───┘│││ ││              ││
  │ │             ││  │││  │        ││  ││││<│@│|.││ ││  ││         │││ ││              ││
  │ │             ││  │││  │        ││  │││└─┴─┴──┘│ ││  ││         │││ ││              ││
  │ │             ││  │││  │        ││  ││└────────┴─┘│  ││         │││ ││              ││
  │ │             ││  │││  │        ││  │└────────────┴──┘│         │││ ││              ││
  │ │             ││  │││  │        │└──┴─────────────────┴─────────┘││ ││              ││
  │ │             ││  ││└──┴────────┴────────────────────────────────┘│ ││              ││
  │ │             ││  │└──────────────────────────────────────────────┴─┘│              ││
  │ │             │└──┴──────────────────────────────────────────────────┴──────────────┘│
  └─┴─────────────┴──────────────────────────────────────────────────────────────────────┘

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


35:1+~.@;@([:<@|.`</.%~/~)@(1+i.@*)i.%
ফ্রাউনফ্রোগ

তোমাকে ধন্যবাদ, খুব সুন্দর! আমি এটি পুরোপুরি পরে আপডেট করব কারণ এর ব্যাখ্যাটি পুনরায় করা প্রয়োজন ...
জোনা

এবং 30:%i.~0~.@,@,[:]`|./.[:%/~1+i.@*
ফ্রাউনফ্রগ

যে চালাক, 0 এবং use ব্যবহার করুন। বক্সিং এবং ইনক্রিমেন্ট এড়াতে, আমি এটি পছন্দ করি
জোনা

2

পাইথন 3, 121 বাইট

import math
def o(x,y):
 p=q=n=1
 while x*q!=p*y:a=p+q&1;p+=1+a*~-~-(p<2);q+=1-~-a*~-~-(q<2);n+=math.gcd(p,q)<2
 return n

2

মরিচা, 244 বাইট

আমি ধাঁধাটির সীমাবদ্ধতা ছাড়াই, একটি "প্লেইন" জিগজ্যাগের "প্লেইন" অর্ডিনালটি খুঁজতে, ত্রিভুজাকার সংখ্যার সূত্র ব্যবহার করে: https://www.mathsisfun.com/algebra/triangular-numbers.html । এই তাদের দিক ধাঁধা প্রতিটি তির্যক সারি আলোকসম্পাতের Zig-zags জন্য অ্যাকাউন্টে মডিউল 2 সংশোধন করা হয়েছে। এটি ফাংশন এইচ ()

তারপরে এই ধাঁধার মূল কৌশলটির জন্য: জিগ-জাগ ট্রেইলে 3/3 বনাম 1/1, 4/2 বনাম 2/1 এর মতো নির্দিষ্ট পুনরাবৃত্তি মানগুলি কীভাবে 'গণনা করা যায় না'। আমি 1-200 উদাহরণগুলি দৌড়েছি, এবং একটি সরল জিগ-জাগ ত্রিভুজাকার কাউন্টারের মধ্যে পার্থক্যটি লক্ষ্য করেছি এবং ধাঁধাটি যার জন্য শুভেচ্ছাসূচক চায় তার একটি প্যাটার্ন রয়েছে। "অনুপস্থিত" সংখ্যার প্যাটার্নটি 5, 12, 13, 14, 23 ইত্যাদি রয়েছে, যার ফলশ্রুতি ওইআইএস-এ হিট হয়েছিল। এটি রবার্ট এ স্টম্প দ্বারা বর্ণিত একটি, https://oeis.org/A076537 তে , 3/3, 4/2, এবং 1/1 এর মতো "অনুলিপি" করতে, আপনি জিসিডি> 1 এর জন্য কিনা পরীক্ষা করতে পারবেন জিগজ্যাগের সমস্ত "পূর্ববর্তী" অধ্যাদেশগুলির x, y। এটি 'ফর' লুপ এবং জি () যা জিসিডি।

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

fn f(x:i64,y:i64)->i64 {
        fn h(x:i64,y:i64)->i64 {let s=x+y;(s*s-3*s+4)/2-1+(s+1)%2*x+s%2*y}
        fn g(x:i64,y:i64)->i64 {if x==0 {y} else {g(y%x,x)}}
        let mut a=h(x,y);
        for i in 1..x+y {for j in 1..y+x {if h(i,j)<h(x,y) && g(i,j)>1 {a-=1;}}}
        a
}


0

জাভাস্ক্রিপ্ট, 79 বাইট

a=(p,q)=>p*q==1?1:1+((p+q)%2?q==1?a(p-1,q):a(p+1,q-1):p==1?a(p,q-1):a(p-1,q+1))

(আমি কোড গল্ফিংয়ে নতুন, তাই সম্ভবত এটি সহজেই উন্নত করা যেতে পারে)

ব্যাখ্যা

let a = (p, q) => p * q == 1 // If they are both 1
    ? 1
    // Do a recursive call and increment the result by 1
    : 1 + (
        (p + q) % 2 // If on an even-numbered diagonal
        ? q == 1 // If at the beginning of the diagonal
            ? a(p - 1, q) // Go to previous diagonal
            : a(p + 1, q - 1) // Go one back
        : p == 1 // rougly the same
            ? a(p, q - 1)
            : a(p - 1, q + 1)
    )

4
(3,5)ফলে উচিত 19(না 24) যেহেতু (1,1)==(2,2)==(3,3), (2,4)==(1,2), (4,2)==(2,1)এবং (2,6)==(1,3)। (যেমন , না (2,2)হওয়া ইত্যাদি ইত্যাদি হওয়া উচিত )15
জোনাথন অ্যালান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.