Sayıları N'inci güçlerin farkı olarak yaz


24

Meydan okuma

İki karenin farkı veya iki küpün farkı, hatta belki daha yüksek güçler olarak ifade edilebilecek birçok sayı vardır. Kareler hakkında konuşurken, 2 karenin farkı olarak bir sayı yazmanın çeşitli yolları vardır, 75. Yazabilirsin:

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

Öyleyse meydan okuma hakkında konuşalım. İlk önce, kullanıcı bir sayı girer, ardından n için bir değer girer. Bu sayının aⁿ - bⁿ şeklinde yazılabileceği tüm yolları göstermeniz gerekir.

Giriş ve çıkış

Giriş, n'nin değeri ve değeri olacaktır. Çıktınız, yukarıda belirtilen koşulun yerine getirilmesi için tüm 'a' ve 'b' çiftlerine sahip olacaktır. Çiftteki ilk sayı, ikinci olandan büyük olmalıdır. Lütfen a, b, n ve giriş numaralarının tümünün pozitif tam sayı ve n> 1 olduğunu unutmayın .

Örnekler

50, 2 -> (none)

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

7, 3 -> (2,1)

665, 6 -> (3, 2)

81, 4 -> (none)

puanlama

Bu , yani en kısa kod kazanır!

Yanıtlar:


9

Jöle , 8 bayt

p*ƓIFẹ+d

Bu, sayıyı argüman olarak alan ve STDIN'den n okuyan monadik bir bağlantıdır .

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Çevrimiçi deneyin!

UniHaskell ile Ungolfed ve-XUnicodeSyntax

import UniHaskell

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

Başka bir şey değiştiremezsin ...


Aslında, ==UniHaskell'deki eşit işaret matematiğin uyumluluğunu ifade ettiği için biraz kafa karıştırıcıdır.
user202729

4

05AB1E , 9 bayt

Daha büyük giriş değerleri için çok verimsiz.

LãDImƹQÏ

Çevrimiçi deneyin!

açıklama

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 bayt

t:i^&-!=&fh

Çevrimiçi deneyin!Veya tüm test durumlarını doğrulayın .

açıklama

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

Jöle , 10 bayt

*Iċ³
ṗ2çÐf

Tam bir program alma ive hiçbiri olmadığında boş bir çıktıyla nçiftleri basan bir program [b,a].

Çevrimiçi deneyin!

Nasıl?

*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
Tamam iyi. Dilediğiniz gibi tutabilirsiniz.
Manish Kundu,

2

JavaScript (ES7), 64 bayt

Körleme sözdiziminde girdi alan özyinelemeli bir işlev (n)(p). Boşluklarla ayrılmış bir tam sayı çifti listesi veya çözüm yoksa boş bir dize döndürür. User202729'un Python cevabı ile aynı algoritmayı kullanır .

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

Veya 0-sonlandırılmış, kapsüllenmiş dizilerle 60 bayt :

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

Bu f (32) (2)[ 9, 7, [ 6, 2, 0 ] ] için çıktı olacaktır .

Test durumları



2

Python 3 , 71 bayt

Bazı baytları kaydettiğiniz için teşekkürler 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]

Çevrimiçi deneyin!


Python 3 , 69 bayt

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

Çevrimiçi deneyin!

Totallyhuman'ın x ^ 2 kaba kuvvet yaklaşımı kullanması aslında bayt tasarrufu sağlar.



3
Ne yazık ki, kaba zorlama genellikle en kısa yaklaşımdır. : P
tamamen insani

'b aralığında (x)' TIO'da çalışır. Bu 67 bayt yapar.
Alix Eisenhardt

@AlixEisenhardt Sanmıyorum .
user202729


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.