মার্জিন খুব সংকীর্ণ


30

১ 163737 সালের দিকে, পিয়েরে ডি ফেরমাট তার অ্যারিমেটিকার অনুলিপিটির মার্জিনে লিখেছিলেন:

It is impossible to separate a cube into two cubes, or a fourth power 
into two fourth powers, or in general, any power higher than the 
second, into two like powers. I have discovered a truly marvelous 
proof of this, which this margin is too narrow to contain.

দুর্ভাগ্যক্রমে আমাদের পক্ষে, প্রমাণটি ধারণ করতে মার্জিনটি এখনও খুব সংকীর্ণ। আজ, আমরা মার্জিনগুলিতে একটি সাধারণ প্রোগ্রাম লিখতে যাচ্ছি যা স্বেচ্ছাসেবী ইনপুটগুলির প্রমাণকে নিশ্চিত করে।

চ্যালেঞ্জ

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


ইনপুট

ক্ষমতা ও শক্তি সংখ্যা: c,x

সীমাবদ্ধতা: c > 2এবংx > 2

ইনপুট প্রোগ্রাম আর্গুমেন্ট, ফাংশন আর্গুমেন্ট বা ব্যবহারকারীর মাধ্যমে হতে পারে।

আউটপুট

ঠিক এই পংক্তি: " a^x + b^x < c^x" সঙ্গে a, b, c, এবং xতাদের আক্ষরিক পূর্ণসংখ্যা মান দিয়ে প্রতিস্থাপিত। aএবং bযাতে মনোনীত করা আবশ্যক a^x + b^x < c^xএবং অন্য কোন মান aবা bএটা কাছাকাছি হবেc^x । এছাড়াও:a>=b>0

আউটপুট ফাংশন রিটার্ন মান, স্টডআউট, কোনও ফাইলে সংরক্ষণ করা বা স্ক্রিনে প্রদর্শিত হতে পারে।


উদাহরণ:

> 3 3
2^3 + 2^3 < 3^3
> 4 3
3^3 + 3^3 < 4^3
> 5 3
4^3 + 3^3 < 5^3
> 6 3
5^3 + 4^3 < 6^3
> 7 3
6^3 + 5^3 < 7^3
> 8 3
7^3 + 5^3 < 8^3

ফার্মেটের গড় লেখার দক্ষতার কারণে, অরক্ষিত অক্ষরগুলি অনুমোদিত নয়। ন্যূনতম সংখ্যার সাথে প্রোগ্রামটি জয়ী হয়।


লিডারবোর্ড

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

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

## Language Name, N characters

বিকল্পভাবে, আপনি এটি দিয়ে শুরু করতে পারেন:

## 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


1
আমি মনে করি এটি হওয়া উচিত a>=b>0বা আপনার প্রথম উদাহরণটি অবৈধ হবে। <আপনি যখন এটি চান তা কেন আমাদের প্রদর্শন করতে হবে <=?
flawr

@ ফ্লোয়ার ফিক্সড :)
TheNumberOne

বিপরীত ক্রমে যুক্তিগুলি গ্রহণ করা কি ঠিক হবে? আগে x, তাহলে c?
রেটো কোরাডি

@ রিটোকোরাডি শিওর :)
TheNumberOne

উত্তর:


9

পাইথ, 38 বাইট

Ls^Rvzbjd.imj\^,dz+eoyNf<yTy]Q^UQ2Q"+<

এই বিন্যাসে ইনপুট নেয়:

x
c

8

মতলব, 169 153 বাইট

মন্তব্যে অমীমাংসিত সমস্যার উপর নির্ভর করে স্কোরটি +1 করা যেতে পারে =) স্কোর একই থাকে। এটি সেরা (a,b)জুটির জন্য কেবল একটি ব্রুটফোর্স অনুসন্ধান ।

Pretty disappointing: I first tried experimented with some 'fancy' stuff and then realized two simple nested for loops are way shorter...

function f(c,x);
m=0;p=@(x)int2str(x);
X=['^' p(x)];
for b=1:c;for a=b:c;
n=a^x+b^x;
if n<c^x&n>m;m=n;s=[p(a) X ' + ' p(b) X ' < ' p(c) X];end;end;end;
disp(s)

Old version:

function q=f(c,x);
[b,a]=meshgrid(1:c);
z=a.^x+b.^x;
k=find(z==max(z(z(:)<c^x & a(:)>=b(:))),1);
p=@(x)int2str(x);x=['^' p(x)];
disp([p(a(k)) x ' + ' p(b(k)) x ' < ' p(c) x])

Remove the spaces in m = 0? Still, that won't get you close to my answer :-PP
Luis Mendo

Also, it looks like you could remove q= from the function definition
Luis Mendo

I don't see the q variable being used anywhere. You can shave off a couple of bytes by simply doing function f(c,x) and removing the semi-colon as well.
rayryeng - Reinstate Monica

8

Mathematica, 79 95 80 bytes

This just might fit on the margin.

c_~f~x_:=Inactivate[a^x+b^x<c^x]/.Last@Solve[a^x+b^x<c^x&&a>=b>0,{a,b},Integers]

Testing

f[3, 3]
f[4, 3]
f[5, 3]
f[6, 3]
f[7, 3]
f[8, 3]

output


7

CJam, 51 46 43 bytes

q~_2m*\f+{W$f#)\:+_@<*}$W='^@s+f+"+<".{S\S}

This full program reads the power, then the base from STDIN.

Try it online in the CJam interpreter.


6

Matlab, 141 140 bytes

This is coded as function that displays the result in stdout.

function f(c,x)
b=(1:c).^x;d=bsxfun(@plus,b,b');d(d>c^x)=0;[~,r]=max(d(:));sprintf('%i^%i + %i^%i < %i^%i',[mod(r-1,c)+1 ceil(r/c) c;x x x])

Example use:

>> f(8,3)
ans =
7^3 + 5^3 < 8^3

Or try it online in Octave.

Thanks to @flawr for removing one byte.


I always avoided sprintf because it seemed so complicated while actually it really isn't! And I forgot about bsxfun once again, so thats a very elegant solution. I especially like the way you abused the single/double indexing in the last argument=) (You could remove a space there too!)
flawr

Thanks! I usually use disp too, except in Code Golf :-P
Luis Mendo

If you use fprintf instead of sprintf, it doesn't display "ans"
Jonas

@Jonas But it prints the result and then the prompt >> in the same line, which is a bit strange
Luis Mendo

You can use fprintf, but you'd have to insert a manual carriage return.
rayryeng - Reinstate Monica

5

CJam, 53 51 bytes

l~:C\:X#:U;C2m*{Xf#:+_U<*}$W=~"^"X+:T" + "@T" < "CT

Try it online

The input format is x c, which is the reverse of the order used in the examples.

Explanation:

l~    Read and interpret input.
:C    Store c in variable C.
\     Swap x to top.
:X    Store it in variable X.
#     Calculate c^x.
:U;   Store it in variable U as the upper limit, and pop it from stack.
C2m*  Generate all pairs of values less than c. These are candidates for a/b.
{     Start of mapping function for sort.
  X     Get value of x.
  f#    Apply power to calculate [a^x b^x] for a/b candidates.
  :+    Sum them to get a^x+b^x.
  _U<   Compare value to upper limit.
  *     Multiply value and comparison result to get 0 for values above limit.
}$    End of sort block.
W=    Last a/b pair in sorted list is the solution.
~     Unpack it.
"^"X+ Build "^x" string with value of x.
:T    Store it in variable T, will use it 2 more times in output.
" + " Constant part of output.
@     Rotate b to top of stack.
T     "^x" again.
" < " Constant part of output.
C     Value of c.
T     And "^x" one more time, to conclude the output.

5

R, 139 characters

function(c,x)with(expand.grid(a=1:c,b=1:c),{d=a^x+b^x-c^x
d[d>0]=-Inf
i=which.max(d)
sprintf("%i^%4$i + %i^%4$i < %i^%4$i",a[i],b[i],c,x)})

4

Python 2, 182 161 157 bytes

I usually answer in MATLAB, but because there are already two solutions in that language, I'd figure I'd try another language :)

def f(c,x):print max([('%d^%d + %d^%d < %d^%d'%(a,x,b,x,c,x),a**x+b**x) for b in range(1,c+1) for a in range(b,c+1) if a**x+b**x<c**x],key=lambda x:x[1])[0]

Ungolfed code with explanations

def f(c,x): # Function declaration - takes in c and x as inputs

    # This generates a list of tuples where the first element is 
    # the a^x + b^x < c^x string and the second element is a^x + b^x
    # Only values that satisfy the theorem have their strings and their
    # corresponding values here
    # This is a brute force method for searching
    lst = [('%d^%d + %d^%d < %d^%d'%(a,x,b,x,c,x),a**x+b**x) for b in range(1,c+1) for a in range(b,c+1) if a**x+b**x<c**x]

    # Get the tuple that provides the largest a^x + b^x value
    i = max(lst, key=lambda x:x[1])

    # Print out the string for this corresponding tuple
    print(i[0])

Example Runs

I ran this in IPython:

In [46]: f(3,3)
2^3 + 2^3 < 3^3

In [47]: f(4,3)
3^3 + 3^3 < 4^3

In [48]: f(5,3)
4^3 + 3^3 < 5^3

In [49]: f(6,3)
5^3 + 4^3 < 6^3

In [50]: f(7,3)
6^3 + 5^3 < 7^3

In [51]: f(8,3)
7^3 + 5^3 < 8^3

Try it online!

http://ideone.com/tMjGdh

If you want to run the code, click on the edit link near the top, then modify the STDIN parameter with two integers separated by a space. The first integer is c and the next one is x. Right now, c=3 and x=3 and its result is currently displayed.




2

C, 175 bytes

a,b,m,A,B,M;p(
a,x){return--x
?a*p(a,x):a;}f
(c,x){M=p(c,x)
;for(a=c,b=1;a
>=b;)(m=p(c,x)
-p(a,x)-p(b,x
))<0?--a:m<M?
(M=m,B=b++,A=
a):b++;printf
("%d^%d + %d"
"^%d < %d^%d",
A,x,B,x,c,x);}

To fit the code into the margin, I've inserted newlines and split a string literal above - the golfed code to be counted/compiled is

a,b,m,A,B,M;p(a,x){return--x?a*p(a,x):a;}f(c,x){M=p(c,x);for(a=c,b=1;a>=b;)(m=p(c,x)-p(a,x)-p(b,x))<0?--a:m<M?(M=m,B=b++,A=a):b++;printf("%d^%d + %d^%d < %d^%d",A,x,B,x,c,x);}

Function f takes c and x as arguments, and produces the result on stdout.

Explanation

This is an iterative solution that zigzags the line defined by a^x + b^x = c^x. We start with a=c and b=1. Obviously, that puts us on the wrong side of the line, because c^x + 1 > c^x. We decrement a until we cross the line. When we're below the line, we increment b until we cross it in the other direction. Repeat until b meets a, remembering the best solution in A and B as we go. Then print it.

p is a simple recursive implementation of a^x (for x>0) since C provides no operator for exponentiation.

In pseudo-code:

a=c
b=1
M = c^x

while a >= b
do
   m = c^x - a^x - b^x
   if m < 0
      a -= 1
   else // (m > 0, by Fermat's Last Theorem)
      if m < M
         A,B,M = a,b,m
      b += 1
done
return A,B

Limitations

c^x must be representable within the range of int. If that limitation is too restrictive, the signature of p could be trivially modified to long p(long,int) or double p(double,int), and m and M to long or double respectively, without any modification to f().

Test program

This accepts c and x as command-line arguments, and prints the result.

#include<stdio.h>
int main(int argc, char**argv) {
    if (argc <= 2) return 1;
    int c = atoi(argv[1]);
    int x = atoi(argv[2]);
    f(c,x);
    puts("");
    return 0;
}

1

Haskell, 120 bytes

I think I've golfed this as much as I can:

c%x=a&" + "++b&" < "++c&""where(_,a,b)=maximum[(a^x+b^x,a,b)|b<-[1..c],a<-[b..c],a^x+b^x<c^x];u&v=show u++"^"++show c++v

Ungolfed:

fn c x = format a " + " ++ format b " < " ++ format c ""
    where format :: Integer -> String -> String
          -- `format u v` converts `u`, appends an exponent string, and appends `v`
          format u v = show u ++ "^" ++ show c ++ v
          -- this defines the variables `a` and `b` above
          (_, a, b) = maximum [(a^x + b^x, a, b) | b <- [1..c], 
                                                   a <- [b..c],
                                                   a^x + b^x < c^x]

Usage:

Prelude> 30 % 11
"28^30 + 28^30 < 30^30"

0

Haskell, 132 128 bytes

x!y=x++show y
c#x=(\[_,a,b]->""!a++"^"!x++" + "!b++"^"!x++" < "!c++"^"!x)$maximum[[a^x+b^x,a,b]|a<-[0..c],b<-[0..a],a^x+b^x<c^x]

Usage example: 7 # 3 returns the string "6^3 + 5^3 < 7^3".


0

Perl 5, 119 bytes

A subroutine:

{for$b(1..($z=$_[0])){for(1..$b){@c=("$b^$o + $_^$o < $z^$o",$d)if($d=$b**($o=$_[1])+$_**$o)<$z**$o and$d>$c[1]}}$c[0]}

Use as e.g.:

print sub{...}->(8,3)

0

Ruby, 125 bytes

Anonymous function. Builds a list of a values, uses it to construct a,b pairs, then finds the max for the ones that fit the criteria and returns a string from there.

->c,x{r=[];(1..c).map{|a|r+=([a]*a).zip 1..a}
a,b=r.max_by{|a,b|z=a**x+b**x;z<c**x ?z:0}
"#{a}^#{x} + #{b}^#{x} < #{c}^#{x}"}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.