Tulis angka sebagai perbedaan kekuatan Nth


24

Tantangan

Ada banyak angka yang dapat dinyatakan sebagai perbedaan dua kotak, atau sebagai perbedaan dua kubus, atau bahkan kekuatan yang lebih tinggi. Berbicara tentang kotak, ada berbagai cara menulis angka, katakanlah 75, sebagai perbedaan 2 kotak. Kamu bisa menulis:

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

Jadi mari kita bicara tentang tantangannya. Pertama, pengguna memasukkan angka dan kemudian ia memasukkan nilai untuk n. Anda perlu menampilkan semua cara di mana angka itu dapat ditulis dalam bentuk aⁿ - bⁿ.

Masukan dan keluaran

Input akan berupa angka dan nilai n. Output Anda akan memiliki semua pasangan 'a' dan 'b' sedemikian rupa sehingga kondisi yang disebutkan di atas terpenuhi. Angka pertama dalam pasangan harus lebih besar dari yang kedua. Harap dicatat bahwa a, b, n dan nomor input semuanya bilangan bulat positif, dan n> 1 .

Contohnya

50, 2 -> (none)

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

7, 3 -> (2,1)

665, 6 -> (3, 2)

81, 4 -> (none)

Mencetak gol

Ini adalah , jadi kode terpendek menang!

Jawaban:


9

Jelly , 8 byte

p*ƓIFẹ+d

Ini adalah tautan monadik yang menjadikan angka sebagai argumen dan membaca n dari STDIN.

Cobalah online!

Bagaimana itu bekerja

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]

Cobalah online!

Tidak disatukan dengan UniHaskell dan-XUnicodeSyntax

import UniHaskell

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

Tidak bisa banyak berubah ...


Sebenarnya, tanda sama ==dalam UniHaskell agak membingungkan, karena menunjukkan kesesuaian dalam matematika.
user202729

4

05AB1E , 9 byte

Sangat tidak efisien untuk nilai input yang lebih besar.

LãDImƹQÏ

Cobalah online!

Penjelasan

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

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

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

Jelly , 10 byte

*Iċ³
ṗ2çÐf

Pengambilan program penuh i, dan nyang mencetak pasangan [b,a]dengan output kosong ketika tidak ada.

Cobalah online!

Bagaimana?

*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
Oke, baiklah. Anda dapat menyimpannya sesuai keinginan.
Manish Kundu

2

JavaScript (ES7), 64 byte

Fungsi rekursif mengambil input dalam sintaks currying (n)(p). Mengembalikan daftar pasangan integer yang dipisahkan oleh ruang, atau string kosong jika tidak ada solusi. Menggunakan algoritma yang sama dengan jawaban Python user202729 .

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

Atau 60 byte dengan array 0-terminated, enkapsulasi:

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

Ini akan menghasilkan [ 9, 7, [ 6, 2, 0 ] ]untuk f (32) (2) .

Uji kasus



2

Python 3 , 71 byte

Terima kasih Mr.Xcoder untuk menghemat beberapa byte!

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

Cobalah online!


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]

Cobalah online!

Menggunakan pendekatan brute force x ^ 2 yang benar-benar manusia benar-benar menghemat byte.



3
Sayangnya, brute forcing biasanya merupakan pendekatan terpendek. : P
totallyhuman

'b in range (x)' bekerja di TIO. Itu membuat 67 byte.
Alix Eisenhardt

@AlixEisenhardt, kurasa tidak .
user202729


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.