ছোট রামসে নাম্বার


13

পটভূমি: রামসে সংখ্যা ছেদচিহ্ন নূন্যতম কত দেয় v সম্পূর্ণ গ্রাফে কে বনাম যেমন যে একটি লাল / নীল প্রান্ত শোভা কে বনাম হয়েছে অন্তত একটি লাল কে অথবা এক নীল কে গুলি । বৃহত্তর আর , এর জন্য সীমাগুলি স্থাপন করা খুব কঠিন।R(r,s)vKvKvKrKsr,s

আপনার টাস্কটি 1 r , s 5 এর জন্য নম্বর আউটপুট করা ।R(r,s)1r,s5

ইনপুট

1 r 5 এবং 1 s 5 সহ দুটি পূর্ণসংখ্যার r,s1r51s5

আউটপুট

এই টেবিল দেওয়া হিসাবে:R(r,s)

  s   1    2    3    4      5
r +--------------------------
1 |   1    1    1    1      1
2 |   1    2    3    4      5
3 |   1    3    6    9     14
4 |   1    4    9   18     25
5 |   1    5   14   25  43-48

দ্রষ্টব্য যে এবং গুলিগুলি বিনিময়যোগ্য: আর ( আর , এস ) = আর ( গুলি , আর )rsR(r,s)=R(s,r)

জন্য আপনি may আউটপুট মধ্যে কোনো পূর্ণসংখ্যা 43 এবং 48 , সমেত। এই প্রশ্নটি পোস্ট করার সময় এগুলি সর্বাধিক পরিচিত সীমা।R(5,5)4348


আমি মনে করি (এমনকি সীমার সাথেও 5,5) এটি কলমোগোরভ-জটিলতার অধীনে ফিট হতে পারে (বা কেবল কোনও ইনপুট, স্থির আউটপুট ফিট করে?)
জোনাথন অ্যালান

49 কখন আর (5,5) এর জন্য বাদ ছিল? (আমি চ্যালেঞ্জিং নই; এক্সো এবং ম্যাককে এবং র‌্যাডিসিসোভস্কির পরে আমি কোনও কাগজ মিস করেছি বলে মনে হয়েছে।)
এরিক টাওয়ার


@ কিউবিআর: ধন্যবাদ! আমি এখন পর্যন্ত এটি উপভোগ করছি।
এরিক টাওয়ার

উত্তর:


7

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

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (r)(s)

r=>s=>--r*--s+[9,1,,13,2,,3,27,6][r<2|s<2||r*s%9]

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

কিভাবে?

প্রথম অনুমান হিসাবে, আমরা সূত্রটি ব্যবহার করি:

(r1)(s1)
 0  0  0  0  0
 0  1  2  3  4
 0  2  4  6  8
 0  3  6  9 12
 0  4  8 12 16

যদি আমাদের তবে আমরা কেবল 1 যোগ করি :min(r,s)<31

 1  1  1  1  1
 1  2  3  4  5
 1  3  -  -  -
 1  4  -  -  -
 1  5  -  -  -

অন্যথায়, আমরা একটি লুকআপ টেবিল যার চাবি থেকে বাছাই করা একটি মান যোগ দ্বারা সংজ্ঞায়িত হয়:k

k=(r1)(s1)mod9
 k:                    table[k]:           (r-1)(s-1):         output:
 -  -  -  -  -         -  -  -  -  -       -  -  -  -  -       -  -  -  -  -
 -  -  -  -  -         -  -  -  -  -       -  -  -  -  -       -  -  -  -  -
 -  -  4  6  8   -->   -  -  2  3  6   +   -  -  4  6  8   =   -  -  6  9 14
 -  -  6  0  3         -  -  3  9 13       -  -  6  9 12       -  -  9 18 25
 -  -  8  3  7         -  -  6 13 27       -  -  8 12 16       -  - 14 25 43

ভাল, প্রথম দুটি সারি একটি ঝরঝরে ভাব।
qwr

5

জাভাস্ক্রিপ্ট (নোড.জেএস) , 56 55 বাইট

f=(x,y)=>x<2|y<2||f(x,y-1)+f(x-1,y)-(x*y==12)-7*(x+y>8)

এটি অনলাইন চেষ্টা করুন! আমি লক্ষ্য করেছি যে টেবিলটি পাস্কালের ত্রিভুজটির সাথে সাদৃশ্যযুক্ত তবে সংশোধন কারণগুলির সাথে। সম্পাদনা: @ সুন্দরকে ধন্যবাদ 1 বাইট সংরক্ষিত


1
হ্যাঁ,
পাস্কেলের

1
আপনি 1 বাইট প্রতিস্থাপন সংরক্ষণ করতে পারবেন x*y>19সঙ্গে x+y>8
সূন্দর - মনিকার

@ সুন্দর ধন্যবাদ, আমার সূচকটি ভুল হওয়ার আগে আমার আসল সমাধানটি 50 বাইট ছিল এবং আমি এটি স্থির করার পরে আমি এটি আবার গল্ফ করার চেষ্টা করতে ভুলে গিয়েছিলাম।
নিল

4

জেলি ,  17  16 বাইট

’ScḢƊ_:¥9“ ı?0‘y

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

0+,-./R(5,5)434445464748

কিভাবে?

R(r,s)R(r1,s)+R(r,s1)

R(r,s)(r+s2r1)

এটি হ'ল ’ScḢƊএবং উত্পাদন করবে:

 1  1  1  1  1
 1  2  3  4  5
 1  3  6 10 15
 1  4 10 20 35
 1  5 15 35 70

যদি আমরা প্রতিবারের জন্য একটিকে বিয়োগ করে তবে নয়টি ফলাফলের দিকে যায় আমরা আমাদের লক্ষ্য নিয়ে আরও তিনটি সারিবদ্ধ করি (এটি দিয়ে অর্জন করা হয় _:¥9):

 1  1  1  1  1
 1  2  3  4  5
 1  3  6  9 14
 1  4  9 18 32
 1  5 14 32 63

বাকি দুটি ভুল মান, এবং পরে জেলি এর পরমাণু এবং কোড-পৃষ্ঠা সূচকগুলির সাহায্যে অনুবাদ করা যেতে পারে ।633263y“ ı?0‘y

’ScḢƊ_:¥9“ ı?0‘y - Link: list of integers [r, s]
’                - decrement              [r-1, s-1]
    Ɗ            - last 3 links as a monad i.e. f([r-1, s-1]):
 S               -   sum                  r-1+s-1 = r+s-2
   Ḣ             -   head                 r-1
  c              -   binomial             r+s-2 choose r-1
        9        - literal nine
       ¥         - last 2 links as a dyad i.e. f(r+s-2 choose r-1, 9):
      :          -   integer division     (r+s-2 choose r-1)//9
     _           -   subtract             (r+s-2 choose r-1)-((r+s-2 choose r-1)//9)
         “ ı?0‘  - code-page index list   [32,25,63,48]
               y - translate              change 32->25 and 63->48

আপনি যদি এটিকে কোনও সংখ্যায় সেট করতে পারেন তবে আমি ম্যাককে, র‌্যাডিসিসোভস্কি এবং এক্সু;) এর অনুমান অনুসারে 43 প্রস্তাব দিচ্ছি
Qwr

2

পাইথন 2 , 62 বাইট

def f(c):M=max(c);u=M<5;print[48,25-u*7,3*M+~u-u,M,1][-min(c)]

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


পাইথন 2 , 63 বাইট

def f(c):M=max(c);print[48,M%2*7+18,3*~-M+2*(M>4),M,1][-min(c)]

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

এটি হাস্যকর, খুব শীঘ্রই এটি পোস্ট করার পরে আমি দুঃখিত হব ... তবে এহ, ¯ \ _ (ツ) _ / ¯। আমাদের বদ্ধ জোনাথন অ্যালান ধন্যবাদ 1 বাইট বন্ধ । খুব শীঘ্রই যদিও প্রায় 20 বাইট দ্বারা আউটগল্ফড হয়ে যাবে ...



2

জুলিয়া 0.6 , 71 61 59 57 বাইট

A->((r,s)=sort(A);r<3?s^~-r:3r+(s^2-4s+3)*((r==s)+r-2)-3)

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

অবহেলিত (ভাল, আরও কিছুটা পাঠযোগ্য):

function f_(A)
  (r, s) = sort(A)

  if r < 3
    result = s^(r-1)
  else
    result = 3*r + 
               (s^2 - 4*s + 3) * ((r == s) + r - 2) -
               3
  end

  return result
end

এটার কাজ কি?

Aআর এবং এস সমন্বিত অ্যারে হিসাবে ইনপুট নেয় । আর এর মতো ছোট সংখ্যার সাথে আর ব্যবহার করে আরেগুলিকে আর এবং এসে আনপ্যাক করে (r,s)=sort(A)


sr1s0=1s1=s
r<3?s^(r-1)r<3?s^~-r

অন্যদের জন্য, আমি আউটপুটটি লক্ষ্য করে শুরু করেছি:

  • 2×3+[0,3,8]
  • 2×4+  [10,17]
  • 2×5+     [35]

(সুবিধার জন্য আমি প্রথমে f (5,5) = 45 দিয়ে কাজ করেছি))

এটি কোনও সম্ভাব্য ব্যবহারযোগ্য প্যাটার্নের মতো দেখায় - এগুলির সমস্ত 2rমিল রয়েছে, 17 হ'ল 8 * 2 + 1, 35 হ'ল 17 * 2 + 1, 10 হ'ল 3 * 3 + 1। আমি [0, 3, 8] থেকে বেস মানটি বের করে দিয়ে শুরু করেছি, কারণ [0 3 8][s-2](এটি পরে সংক্ষিপ্ত হয়ে উঠল (s^2-4s+3))।

এর সাথে r = 3, 4 এবং 5 এর জন্য সঠিক মান পাওয়ার চেষ্টা করা সহ অনেকগুলি পর্যায়ে গিয়েছিল

2r+[0 3 8][s-2]*(r>3?3-s+r:1)+(r-3)^3+(r>4?1:0)

এবং

2r+(v=[0 3 8][s-2])+(r-3)*(v+1)+(r==s)v

পরবর্তীটি প্রসারিত করা এবং এটিকে সরলকরণের ফলে পোস্ট কোডটির দিকে পরিচালিত।


2

x86, 49 37 বাইট

খুব অনুকূলিত হয় না, কেবল টেবিলের প্রথম তিনটি সারিগুলির বৈশিষ্ট্যগুলি ব্যবহার করে। আমি এটি লিখতে গিয়ে বুঝতে পারি কোডটি মূলত একটি জাম্প টেবিল যাতে একটি জাম্প টেবিলটি অনেকগুলি বাইট সংরক্ষণ করতে পারে। ইনপুট ইন eaxএবং ebx, আউটপুট ইন eax

-12 r >= 3কে একটি অনুসন্ধান সারণিতে (মূলত স্রেফ r >= 4) কেসগুলিকে একত্রিত করে এবং পিটার কর্ডেসের পরামর্শ cmp/ jae/ jneএখনও প্রস্তাবিত পতাকাগুলি দিয়ে সেট করে যাতে r1,r2,r3কেবল একটি দ্বারা আলাদা করা যায় cmp! এছাড়াও ধ্রুবক অফসেটটি স্মার্টলিমে টেবিলে সূচক করে।

start:
        cmp     %ebx, %eax
        jbe     r1
        xchg    %eax, %ebx              # ensure r <= s

r1:
        cmp     $2, %al             
        jae     r2                      # if r == 1: ret r
        ret

r2:     
        jne     r3                      # if r == 2: ret s 
        mov     %ebx, %eax
        ret

r3:
        mov     table-6(%ebx,%eax),%al  # use r+s-6 as index
        sub     %al, %bl                # temp = s - table_val
        cmp     $-10, %bl               # equal if s == 4, table_val == 14
        jne     exit
        add     $4, %al                 # ret 18 instead of 14 

exit:
        ret                        

table:
        .byte   6, 9, 14, 25, 43

Hexdump

00000507  39 d8 76 01 93 3c 02 73  01 c3 75 03 89 d8 c3 8a  |9.v..<.s..u.....|
00000517  84 03 21 05 00 00 28 c3  80 fb f6 75 02 04 04 c3  |..!...(....u....|
00000527  06 09 0e 19 2b                                    |....+|

2
কোনও জাম্প টেবিল অনুকূল হবে তা নিশ্চিত হন না। r1: cmp $2, %al/ jae r2এমন পতাকা তৈরি করবে যা আপনি r2: jne r3অন্যটি ছাড়া ব্যবহার করতে পারবেন cmp। এতে লাফানোর লক্ষ্যটি অন্য কোথাও r1হতে পারে retএবং পড়ে যেতে পারে r2। (শর্ত বিপরীত)। বিটিডাব্লু, এই প্রথম কোড-গল্ফ প্রশ্ন যা আমি আপনার শর্ট জাম্প অফসেট টেবিল ব্যবহারের প্রশ্নের উত্তরের পরে দেখেছি । আমি অনুমান করি যে আমি এইচএনকিউ থেকে ডানটি বেছে নিয়েছি :)
পিটার

1
r4এক নির্দেশ হতে পারে: mov table-8(%ebx,%eax), %al। আপনি কেন রেজিস্টারে টেবিলের ঠিকানাটি চালানোর জন্য পৃথক নির্দেশনা ব্যবহার করেছেন তা আইডিকে। তবে মূল বিষয়গুলির মধ্যে একটি হ'ল প্রতীকগুলি থেকে ধ্রুবক অফসেটগুলির জন্য অতিরিক্ত কিছু ব্যয় করা হয় না কারণ এটি ইতিমধ্যে 32-বিট পরম ঠিকানায় একত্রিত হয়। অবজেক্ট ফাইল ফর্ম্যাটগুলি লিংকার চূড়ান্ত ঠিকানায় পূরণ করার জন্য একটি অফসেট সহ প্রতীক রেফগুলি উপস্থাপন করতে পারে তাই সংকলকগণ কোনও কাঠামোর প্রতিটি ক্ষেত্রে বা প্রতিটি অ্যারের উপাদানগুলিতে পৃথক লেবেল লাগাতে হবে না ...
পিটার কর্ড

@ পিটারকর্ডস আমি এমনকি এটি তৈরি এইচএনকিউ বুঝতে পারি নি। এবং হ্যাঁ কিছু কারণে আমি ভেবেছিলাম যে আমার সিনট্যাক্সটি ভুল ছিল তা টের পাওয়ার আগে টেবিলের ঠিকানাটি একটি রেজিস্টারে থাকতে হবে। আমি এখানে কোডগলফ.স্ট্যাকেক্সেঞ্জাওএ / এ / 168503/17360 এটি ঠিক করেছি যা কেবল একটি দেখার টেবিল। তবে ধ্রুবক অফসেটটি কোনটি কার্যকর তা সম্পর্কে আমি জানতাম না। আমি মনে করি আমি গুণনের পরিবর্তে শেষ 3 সারিগুলির জন্য একটি টেবিল চেষ্টা করব।
Qwr

1
স্বরে নোট করুন: আর 1 retএবং আর 2 এর জন্য একটি ব্যবহার করে 1 বাইট সংরক্ষণ করা এখনও সম্ভব ।
qwr

1
সুন্দর আপডেট, ভাল লাগছে। আপনি যদি সরিয়ে নিয়ে mov %ebx, %eaxযান exit, তাই এটি সর্বদা r3 এর পরে চলে এবং আর 2 সেখানে লাফ দেয় বা r3 এর মধ্যে পড়ে? তারপরে আর 3 তার ফলাফল বিএল sub %bl, %al/ cmp $10, %al/ jne exit/ এর সাথে তৈরি করে add $4, %bl(নিরপেক্ষ আকারের পরিবর্তন: সিএমপি বনাম অ্যাড, আল, ইমি 8 সংক্ষিপ্ত রূপটি ব্যবহার করতে পারে)। লাভটি হ'ল এটি আর ret-2 থেকেও সরিয়ে দেয় । হুম না যা কাজ করে না, ভাল যদি আপনি টেবিল এন্ট্রি বা কিছু উপেক্ষা করেন? এবং সম্ভবত এটি আপনার প্রয়োজন কিছু ক্লোবার্স। আমি এটির মাধ্যমে ভেবে দেখিনি এবং দুর্ভাগ্যক্রমে এটি করার মতো সময় নেই: /
পিটার কর্ডেস


1

এমএটিএল, 25 21 বাইট

+2-lGqXnt8/k-t20/k6*-

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

জনাথন অ্যালান এর জেলি এমএটিএল উত্তর জড়িত করার চেষ্টা।

+2-lGqXn(r+s2r1)

t8/k - এটির নকল করুন, 8 এবং তল দিয়ে ভাগ করুন

- - পূর্ববর্তী ফলাফল থেকে বিয়োগ করুন (জেলি উত্তরে 9 এর পরিবর্তে 8 সংখ্যাটিতে কতবার বিয়োগ করে ফেলুন The ফলাফলটি এখানে 35 এবং 70 এর পরিবর্তে একই, যা এখানে 31 এবং 62 দেয়))

t20/k - ফলাফলটিও নকল করুন, 20 এবং তল দিয়ে ভাগ করুন (ইতিমধ্যে সঠিক ফলাফলের জন্য 0 দেয়, 31 এর জন্য 1, 62 এর জন্য 3)

6* - এটি 6 দ্বারা গুন করুন

- - ফলাফল থেকে বিয়োগ করুন (31 - 6 = 25, 62 - 18 = 44)


পুরোনো:

+t2-lGqXntb9<Q3w^/k-t20>+

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




0

জাভা 8, 62 বাইট

(r,s)->--r*--s+new int[]{9,1,0,13,2,0,3,27,6}[r<2|s<2?1:r*s%9]

লাম্বদা ফাংশন, আর্নল্ডের জাভাস্ক্রিপ্ট উত্তরের বন্দর । এটি এখানে অনলাইনে চেষ্টা করুন

জাভা, 83 বাইট

int f(int x,int y){return x<2|y<2?1:f(x,y-1)+f(x-1,y)-(x*y==12?1:0)-7*(x+y>8?1:0);}

পুনরাবৃত্তি ফাংশন, নীলের জাভাস্ক্রিপ্ট উত্তরের বন্দর । এটি এখানে অনলাইনে চেষ্টা করুন


0

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

f(x,y){x=x<2|y<2?:f(x,y-1)+f(x-1,y)-(x*y==12)-7*(x+y>8);}

পুনরাবৃত্তি ফাংশন, নীলের জাভাস্ক্রিপ্ট উত্তরের বন্দর । এটি এখানে অনলাইনে চেষ্টা করুন

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

f(r,s){r=--r*--s+(int[]){9,1,0,13,2,0,3,27,6}[r<2|s<2?:r*s%9];}

Arnauld এর জাভাস্ক্রিপ্ট উত্তর পোর্ট । এটি এখানে অনলাইনে চেষ্টা করুন


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