Viết các số như một sự khác biệt của quyền hạn Nth


24

Thử thách

Có nhiều con số có thể được biểu thị bằng sự khác biệt của hai hình vuông, hoặc là sự khác biệt của hai hình khối, hoặc thậm chí có thể có sức mạnh cao hơn. Nói về hình vuông, có nhiều cách viết một số, ví dụ 75, như sự khác biệt của 2 hình vuông. Bạn có thể viết:

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

Vậy hãy nói về thử thách. Đầu tiên, người dùng nhập một số và sau đó anh ta nhập một giá trị cho n. Bạn cần hiển thị tất cả các cách mà số đó có thể được viết dưới dạng aⁿ - bⁿ.

Đầu vào và đầu ra

Đầu vào sẽ là số và giá trị của n. Đầu ra của bạn sẽ có tất cả các cặp 'a' và 'b' như vậy để đáp ứng điều kiện nêu trên. Số đầu tiên trong cặp phải lớn hơn số thứ hai. Xin lưu ý rằng a, b, n và số đầu vào đều là các số nguyên dương và n> 1 .

Ví dụ

50, 2 -> (none)

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

7, 3 -> (2,1)

665, 6 -> (3, 2)

81, 4 -> (none)

Chấm điểm

Đây là , vì vậy đoạn mã ngắn nhất sẽ thắng!

Câu trả lời:


9

Thạch , 8 byte

p*ƓIFẹ+d

Đây là một liên kết đơn âm lấy số làm đối số và đọc n từ STDIN.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Hãy thử trực tuyến!

Ung dung với 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]

Không thể thay đổi nhiều thứ khác ...


Trên thực tế, dấu bằng ==trong UniHaskell có phần khó hiểu, vì nó biểu thị sự phù hợp trong toán học.
dùng202729

4

05AB1E , 9 byte

Rất không hiệu quả cho các giá trị đầu vào lớn hơn.

LãDImƹQÏ

Hãy thử trực tuyến!

Giải trình

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 byte

t:i^&-!=&fh

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

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

Thạch , 10 byte

*Iċ³
ṗ2çÐf

Một chương trình hoàn chỉnh i, và nin ra các cặp [b,a]có đầu ra trống khi không có.

Hãy thử trực tuyến!

Làm sao?

*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
Tốt. Bạn có thể giữ nó như bạn muốn.
Manish Kundu

2

JavaScript (ES7), 64 byte

Một hàm đệ quy lấy đầu vào trong cú pháp currying (n)(p). Trả về danh sách các cặp số nguyên được phân tách bằng dấu cách hoặc một chuỗi trống nếu không có giải pháp nào tồn tại. Sử dụng thuật toán tương tự như câu trả lời Python của user202729 .

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

Hoặc 60 byte với các mảng được kết thúc bằng 0, được đóng gói:

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

Điều này sẽ xuất ra [ 9, 7, [ 6, 2, 0 ] ]cho f (32) (2) .

Các trường hợp thử nghiệm



2

Python 3 , 71 byte

Cảm ơn Mr.Xcoder đã lưu một số byte!

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

Hãy thử trực tuyến!


Python 3 , 69 byte

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

Hãy thử trực tuyến!

Sử dụng phương pháp tiếp cận vũ lực x ^ 2 của hoàn toàn thực sự tiết kiệm byte.



3
Thật không may, cưỡng bức vũ phu thường là cách tiếp cận ngắn nhất. : P
hoàn toàn là

'b trong phạm vi (x)' hoạt động trên TIO. Điều đó tạo ra 67 byte.
Alix Eisenhardt



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.