Due numeri contengono fattoriali unici?


11

Scomponi due numeri nei loro fattoriali; se ne condividono uno, restituisce un valore false. Altrimenti, restituisce un valore veritiero. (ispirato a questa recente domanda )

In altre parole, scrivi ogni numero di input come la somma dei fattoriali (di numeri interi positivi) nel modo più avido possibile; restituisce un valore di verità se non appare fattoriale in entrambe le rappresentazioni, altrimenti un valore di falsa.

Esempio

Dato 20 e 49:

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

Nessun fattoriale appare in entrambe le rappresentazioni, quindi restituisci un valore veritiero.

Dati 32 e 132:

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

3! appare in entrambe le rappresentazioni, quindi restituisce un valore false.

I / O

L'input e l'output possono avvenire con qualsiasi mezzo standard .

L'input sarà sempre due numeri interi non negativi; nessun limite superiore su questi numeri diversi da quello richiesto dalla tua lingua.

L'output dovrebbe essere un valore di verità o falsità . Questi valori non devono necessariamente essere coerenti per input diversi, purché ogni output sia correttamente verità / falsa.

Casi test

Se un input è 0, la risposta sarà sempre veritiera. Altri casi di test veritieri:

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

Se entrambi gli ingressi sono numeri dispari o se entrambi gli ingressi sono lo stesso numero intero positivo, l'output sarà sempre falso. Altri casi di falsi test:

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

Questo è , quindi vince meno byte!


"scrivi ogni numero di input come la somma dei fattoriali (di numeri interi positivi) nel modo più avido possibile" non intendi invece il modo più pigro possibile ?
user41805,

4
@KritixiLithos no. Si riferisce alla classe di algoritmi noti come algoritmi greedy, che funzionano massimizzando alcune metriche dopo ogni passaggio. Come in, prendendo sempre il più possibile.
John Dvorak,

Risposte:


9

Gelatina , 7 byte

Æ!ṠḄ&/¬

Provalo online!

Come funziona

Æ!ṠḄ&/¬  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.

Æ!sembra follemente utile in alcuni scenari.
Magic Octopus Urn

C'è qualcosa da guadagnare provando a moltiplicare elementalmente le liste fattoriali direttamente, senza prendere segni?
Greg Martin,

@GregMartin Non credo. Le matrici di cifre dovrebbero essere riempite o troncate alla stessa lunghezza, il che probabilmente costerà più byte di quanti ne risparmi.
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))

Gli interi di JavaScript sono limitati a 53 bit di precisione, che è quasi sufficiente per 18 !; questo significa che posso usare una maschera di 18 bit per tracciare quali fattoriali sono necessari.



0

Mathematica, 73 byte

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

modulo di input

[X1, x2]


Ricevo diversi errori durante il test di questo ...
Scott Milner,

Digita alla fine [x1, x2]
J42161217

Ah. Stavo inserendo un elenco, anziché due numeri interi separati. È possibile giocare a golf ulteriormente con ±x_:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[±#,±#2]&[4,61](69 byte). Nella codifica ISO 8859-1, ±è un byte.
Scott Milner,

0

C, 122 119 byte

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

Qè la funzione principale. Dovrebbe essere invocato con esattamente due valori interi positivi. Questo esce con un codice di uscita0 per verità e 1falsità.

Anche se questo non sembra funzionare su TIO, funziona sul mio sistema con l' homebrew fornito gcc 7.1.0.

Non gioco a golf da Cun po 'di tempo, quindi i suggerimenti per il golf sono molto apprezzati!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.