İki sayı benzersiz faktörler içeriyor mu?


11

İki sayıyı faktöriyelerine ayırın; eğer paylaşırlarsa, bir falsey değeri döndürün. Aksi takdirde, gerçek bir değer döndürün. ( bu son sorudan esinlenerek )

Diğer bir deyişle, her girdi numarasını faktöriyellerin (pozitif tamsayıların) toplamı olarak en açgözlü şekilde yazın; her iki göstergede faktöryel görünmüyorsa gerçek bir değer döndürür, aksi takdirde bir falsey değer verir.

Misal

Verilen 20 ve 49:

20 = 3! + 3! + 3! + 2!
49 = 4! + 4! + 1!

Her iki gösterimde de faktöriyel görünmez, bu nedenle gerçek bir değer döndürün.

32 ve 132 verildi:

132 = 5! + 3! + 3!
 32 = 4! + 3! + 2!

3! her iki gösterimde de görünür, bu nedenle bir falsey değeri döndürün.

I / O

Giriş ve çıkış herhangi bir standart yöntemle yapılabilir .

Girdi her zaman iki negatif olmayan tamsayı olacaktır; dilinizin gerektirdiğinden başka bu tamsayılarda üst sınır yoktur.

Çıktı doğruluk veya falsey bir değer olmalıdır . Her çıktının doğru / falsey olduğu sürece, bu değerlerin farklı girdiler için tutarlı olması gerekmez.

Test Durumları

Eğer bir girdi varsa 0, cevap her zaman doğrudur. Diğer doğruluk testi vakaları:

{6, 3}, {4, 61}, {73, 2}, {12, 1}, {240, 2}, {5, 264}, {2, 91}, {673, 18},
 {3, 12}, {72, 10}, {121, 26}, {127, 746}

Her iki giriş de tek tamsayı ise veya her iki giriş de aynı pozitif tamsayı ise, çıkış her zaman falsey olur. Diğer falsey test vakaları:

{8, 5}, {7, 5}, {27, 47}, {53, 11}, {13, 123}, {75, 77}, {163, 160}, {148, 53},
 {225, 178}, {285, 169}, {39, 51}, {207, 334}, {153, 21}, {390, 128}, {506, 584},
 {626, 370}, {819, 354}

Bu , çok az bayt kazanır!


"Her girdi numarasını faktöriyelerin (pozitif tamsayıların) toplamı olarak en açgözlü şekilde yazın" bunun yerine mümkün olan en tembel yolu kastetmiyor musunuz?
user41805

4
@KritixiLithos no. Her adımdan sonra bazı metrikleri en üst düzeye çıkararak çalışan açgözlü algoritmalar olarak bilinen algoritma sınıfından bahsediyor. Olduğu gibi, her zaman olabildiğince almak.
John Dvorak

Yanıtlar:


9

Jöle , 7 bayt

Æ!ṠḄ&/¬

Çevrimiçi deneyin!

Nasıl çalışır

Æ!ṠḄ&/¬  Main link. Argument: (x, y) (pair of integers)

Æ!       Convert x and y to factorial base.
  Ṡ      Apply the sign function to each digit.
   Ḅ     Unbinary; convert each resulting Boolean array from base 2 to integer.
    &/   Reduce the resulting pair of integers by bitwise AND.
      ¬  Take the logical NOT of the result.

Æ!bazı senaryolarda delicesine faydalı görünüyor.
Sihirli Ahtapot Urn

Faktör-temel listelerini işaret almadan direkt olarak çarpmaya çalışarak kazanılacak bir şey var mı?
Greg Martin

@GregMartin Sanmıyorum. Rakam dizilerinin aynı uzunlukta doldurulması veya kesilmesi gerekir, bu da muhtemelen kaydettiğinden daha fazla bayt maliyeti olacaktır.
Dennis



2

JavaScript (ES6), 71 bayt

(a,b,g=(n,e=1,f=1)=>n>=f&&g(n,++e,f*e)+((n/f|0)%e&&1<<e))=>!(g(a)&g(b))

JavaScript'in tam sayıları 18 bitle sınırlıdır, bu 18 için yeterlidir ;; Bu, hangi faktöriyelerin gerekli olduğunu izlemek için 18 bitlik bir maske kullanabileceğim anlamına gelir.



0

Mathematica, 73 bayt

F[x_]:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[F@#,F@#2]&

giriş formu

[X1, x2]


Bunu test eden birkaç hata alıyorum ...
Scott Milner

Sadece sonuna yazın [x1, x2]
J42161217

Ah. İki ayrı tamsayı yerine bir liste giriyordum. ±x_:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[±#,±#2]&[4,61](69 bayt) ile daha fazla golf yapabilirsiniz . ISO 8859-1 kodlamasında, ±bir bayttır.
Scott Milner

0

C, 122119 bayt

G(q,i){return gamma(q+1)>i?gamma(q):G(q+1,i);}
Q(a,b,u,v){while(a&&b){a-=u=G(1,a);b-=v=G(1,b);if(a==b)exit();}exit(0);}

Qana işlevdir. Tam olarak iki pozitif tamsayı değeri ile çağrılmalıdır. Bir ile bu çıkışların çıkış kodunun ait 0truthy ve 1falsy için.

Bu TIO üzerinde çalışmıyor gibi görünse de, sağlanan Homebrew ile sistemim üzerinde çalışıyor gcc 7.1.0.

Ben de golfed değil Cgolf ipuçları çok takdir böylece, uzunca bir süre içinde!

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.