เขียนตัวเลขเป็นส่วนต่างของพลัง Nth


24

ท้าทาย

มีตัวเลขมากมายที่สามารถแสดงเป็นความแตกต่างของสองสแควร์สหรือความแตกต่างของสองคิวบ์หรืออาจจะเป็นพลังที่สูงกว่า เมื่อพูดถึงสแควร์สมีวิธีการเขียนตัวเลขที่หลากหลายพูดได้ 75 ว่าเป็นความแตกต่างของสแควร์ส 2 คุณสามารถเขียน:

75 = (10)^2 - (5)^2 
   = (14)^2 - (11)^2 
   = (38)^2 - (37)^2         

ถ้าอย่างนั้นเรามาพูดถึงความท้าทาย ประการแรกผู้ใช้ป้อนตัวเลขจากนั้นเขาป้อนค่าสำหรับ n คุณต้องแสดงวิธีการทั้งหมดที่สามารถเขียนหมายเลขนั้นในรูปแบบของⁿ - bⁿ

อินพุตและเอาต์พุต

ข้อมูลที่ป้อนจะเป็นตัวเลขและค่าของ n ผลลัพธ์ของคุณจะต้องมีคู่ของ 'a' และ 'b' ทั้งหมดที่ตรงตามเงื่อนไขที่ระบุไว้ข้างต้น ตัวเลขตัวแรกในคู่ต้องมากกว่าตัวที่สอง โปรดทราบว่าA, B, n และจำนวนการป้อนข้อมูลที่เป็นจำนวนเต็มบวกทั้งหมดและ n> 1

ตัวอย่าง

50, 2 -> (none)

32, 2 -> (9,7), (6, 2)

7, 3 -> (2,1)

665, 6 -> (3, 2)

81, 4 -> (none)

เกณฑ์การให้คะแนน

นี่คือดังนั้นรหัสที่สั้นที่สุดชนะ!

คำตอบ:


9

เยลลี่ขนาด 8 ไบต์

p*ƓIFẹ+d

นี่คือลิงก์ monadic ที่ใช้ตัวเลขเป็นอาร์กิวเมนต์และอ่านnจาก STDIN

ลองออนไลน์!

มันทำงานอย่างไร

p*ƓIFẹ+d  Main link. Argument: k

p         Cartesian product; yield all pairs [b, a] with b and a in [1, ..., k].
  Ɠ       Get; read an integer n from STDIN.
 *        Power; map each [b, a] to [b**n, a**n].
   I      Increments; map each [b**n, a**n] to [a**n-b**n].
    F     Flatten the resulting list of singleton arrays.
     ẹ    Every; find all indices of k in the list we built.
      +   Add k to the indices to correct the offset.
       d  Divmod; map each index j to [j/k, j%k].

6

Haskell , 42 ไบต์

k#n=[(a,b)|b<-[1..k],a<-[b..k],a^n-b^n==k]

ลองออนไลน์!

Ungolfed กับUniHaskellและ-XUnicodeSyntax

import UniHaskell

f      Int  Int  [(Int, Int)]
f k n = [(a, b) | b  1  k, a  b  k, a^n - b^n  k]

ไม่สามารถเปลี่ยนแปลงอะไรได้อีกมากมาย ...


ที่จริงแล้วเครื่องหมายเท่ากับ==ใน UniHaskell ค่อนข้างสับสนเนื่องจากเป็นการบ่งบอกถึงความสอดคล้องกันในวิชาคณิตศาสตร์
user202729

4

05AB1E , 9 ไบต์

ไม่มีประสิทธิภาพมากสำหรับค่าอินพุตที่ใหญ่ขึ้น

LãDImƹQÏ

ลองออนไลน์!

คำอธิบาย

L           # range [1 ... input_1]
 ã          # cartesian product with itself
  D         # duplicate
   Im       # raise each to the power of input_2
     Æ      # reduce each pair by subtraction
      ¹QÏ   # keep only values in the first copy which are true in this copy

4

MATL 11 ไบต์

t:i^&-!=&fh

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

t     % Implicit input: M. Duplicate
:     % Range [1 2 ... M]
i     % Input: n
^     % Power, element-wise. Gives [1^n 2^n ... M^n]
&-    % Matrix of pairwise differences (size n×n)
!     % Transpose. Needed so the two numbers in each pair are sorted as required
=     % Is equal? Element-wise. Gives true for entries of the matrix equal to M
&f    % Row and column indices of true entries
h     % Concatenate horizontally. Implicit display



2

เยลลี่ 10 ไบต์

*Iċ³
ṗ2çÐf

การโปรแกรมเต็มรูปแบบiและnพิมพ์คู่ออก[b,a]ด้วยเอาต์พุตว่างเมื่อไม่มี

ลองออนไลน์!

อย่างไร?

*Iċ³ - Link 1, isValid?: pair of +ve integers, [b,a]; +ve integer, n
*    - exponentiate             -> [b^n,a^n]
 I   - incremental differences  -> [a^n-b^n]
   ³ - program's third argument -> i
  ċ  - count occurrences        -> 1 if a^n-b^n == i, otherwise 0

ṗ2çÐf - Main link: +ve integer i, +ve integer n
ṗ2    - second Cartesian power = [[1,1],[1,2],...,[1,i],[2,1],...,[2,i],...,[i,i]]
   Ðf - filter keeping if:
  ç   -   call last link (1) as a dyad (left = one of the pairs, right = n)
      - implicit print of Jelly representation of the list

1
โอเคไม่เป็นไร คุณสามารถเก็บมันได้ตามที่คุณต้องการ
Manish Kundu

2

JavaScript (ES7), 64 ไบต์

recursive (n)(p)อินพุตฟังก์ชั่นการในไวยากรณ์ความดีความชอบ ส่งคืนรายการคู่ของจำนวนเต็มหรือช่องว่างหากไม่มีวิธีแก้ไข ใช้วิธีการเดียวกับuser202729 คำตอบของงูหลาม

n=>p=>(g=x=>x--?((y=(x**p+n)**(1/p))%1?[]:[y,x]+' ')+g(x):[])(n)

หรือ60 ไบต์ที่สิ้นสุดด้วย 0

n=>p=>(g=x=>x--&&((y=(x**p+n)**(1/p))%1?g(x):[y,x,g(x)]))(n)

นี้การส่งออกหากว่า[ 9, 7, [ 6, 2, 0 ] ]สำหรับf (32) (2)

กรณีทดสอบ



2

Python 3 , 71 ไบต์

ขอบคุณ Mr.Xcoder สำหรับบันทึกไบต์!

lambda x,n:[(a,b)for b in range(1,x)for a in[(b**n+x)**(1/n)]if a%1==0]

ลองออนไลน์!


Python 3 , 69 ไบต์

lambda x,n:[(a,b)for b in range(1,x)for a in range(x)if a**n-b**n==x]

ลองออนไลน์!

ใช้วิธีการเดรัจฉานแรง ^ x 2 ของมนุษย์โดยสิ้นเชิงช่วยประหยัดไบต์



3
น่าเสียดายที่การบังคับให้สัตว์เดรัจฉานเป็นวิธีที่สั้นที่สุด : P
สิ้นเชิงมนุษย์

'b in range (x)' ทำงานบน TIO นั่นทำให้ 67 ไบต์
Alix Eisenhardt



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.