Enthalten zwei Zahlen eindeutige Fakultäten?

11

Teilen Sie zwei Zahlen in ihre Fakultäten auf. Wenn sie einen teilen, geben Sie einen Falsey-Wert zurück. Andernfalls geben Sie einen wahrheitsgemäßen Wert zurück. (inspiriert von dieser aktuellen Frage )

Mit anderen Worten, schreiben Sie jede Eingabenummer als die Summe der Fakultäten (positiver Ganzzahlen) auf die gierigste Art und Weise; Geben Sie einen Wahrheitswert zurück, wenn in beiden Darstellungen keine Fakultät erscheint, andernfalls einen Falschwert.

Beispiel

Gegeben 20 und 49:

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

In beiden Darstellungen wird keine Fakultät angezeigt. Geben Sie daher einen wahrheitsgemäßen Wert zurück.

Gegeben 32 und 132:

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

3! erscheint in beiden Darstellungen, geben Sie also einen False-Wert zurück.

I / O.

Die Ein- und Ausgabe kann über jedes Standardmittel erfolgen .

Die Eingabe besteht immer aus zwei nichtnegativen Ganzzahlen. Keine Obergrenze für diese Ganzzahlen außer den Anforderungen Ihrer Sprache.

Die Ausgabe sollte ein wahrer oder falscher Wert sein . Diese Werte müssen nicht unbedingt für verschiedene Eingaben konsistent sein, solange jede Ausgabe korrekt wahr / falsch ist.

Testfälle

Wenn eine Eingabe ist 0, ist die Antwort immer wahr. Andere wahrheitsgemäße Testfälle:

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

Wenn beide Eingänge ungerade ganze Zahlen sind oder wenn beide Eingänge dieselbe positive ganze Zahl sind, ist der Ausgang immer falsch. Andere Falsey-Testfälle:

{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}

Dies ist , also gewinnen die wenigsten Bytes!

Greg Martin
quelle
"Schreiben Sie jede Eingangsnummer als die Summe der Fakultäten (positiver Ganzzahlen) auf die gierigste Art und Weise" meinen Sie nicht stattdessen die faulste Art und Weise ?
user41805
4
@KritixiLithos Nr. Er bezieht sich auf die Klasse von Algorithmen, die als gierige Algorithmen bekannt sind und durch Maximieren einer Metrik nach jedem Schritt funktionieren. Nehmen Sie immer so viel wie möglich.
John Dvorak

Antworten:

9

Gelee , 7 Bytes

Æ!ṠḄ&/¬

Probieren Sie es online aus!

Wie es funktioniert

Æ!ṠḄ&/¬  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.
Dennis
quelle
Æ!scheint in bestimmten Szenarien wahnsinnig nützlich zu sein.
Magic Octopus Urn
Gibt es etwas zu gewinnen, wenn versucht wird, die Fakultätsbasislisten direkt elementweise zu multiplizieren, ohne Zeichen zu nehmen?
Greg Martin
@ GregMartin Das glaube ich nicht. Die Ziffern-Arrays müssten auf dieselbe Länge aufgefüllt oder abgeschnitten werden, was wahrscheinlich mehr Bytes kostet, als es spart.
Dennis
2

JavaScript (ES6), 71 Byte

(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))

Die Ganzzahlen von JavaScript sind auf 53 Bit Genauigkeit begrenzt, was gerade für 18! Ausreicht. Dies bedeutet, dass ich eine Maske von 18 Bit verwenden kann, um zu verfolgen, welche Fakultäten benötigt werden.

Neil
quelle
2

PHP, 109 Bytes

for(;$a?:$a=$argv[++$i];$a-=$r[$i][]=$f,$i<2?:$t+=in_array($f,$r[1]))for($c=$f=1;($a/$f*=$c)>=++$c;);echo!$t;

Probieren Sie es online aus!

Jörg Hülsermann
quelle
0

Mathematica, 73 Bytes

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

Eingabeformular

[x1, x2]

J42161217
quelle
Ich bekomme mehrere Fehler beim Testen ...
Scott Milner
Geben Sie
Ah. Ich habe eine Liste anstelle von zwei separaten Ganzzahlen eingegeben. Sie können es weiter mit ±x_:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[±#,±#2]&[4,61](69 Bytes) Golf spielen . Bei der ISO 8859-1-Codierung ±ist dies ein Byte.
Scott Milner
0

C 122 119 Bytes

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);}

Qist die Hauptfunktion. Es sollte mit genau zwei positiven ganzzahligen Werten aufgerufen werden. Diese Ausgänge mit einem Exit - Code von 0für truthy und 1für falsy.

Obwohl dies unter TIO nicht zu funktionieren scheint, funktioniert es auf meinem System mit dem mitgelieferten Homebrewgcc 7.1.0 .

Ich habe Cschon eine ganze Weile nicht mehr Golf gespielt, daher werden Golftipps sehr geschätzt!

R. Kap
quelle