Aiuta Gödel con la sua funzione β [chiuso]


13

La funzione β di Gödel accetta tre numeri naturali come argomenti.

È definito come β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )

dove rem (a, b) indica il resto dopo la divisione intera di a per b.

Il β Lemma ora afferma che:

Per qualsiasi sequenza di numeri naturali (k_0, k_1,…, k_n), ci sono numeri naturali bec che tali, per ogni i ≤ n, β (b, c, i) = k_i.

Gödel ha bisogno di aiuto per trovare be cper ogni dato input (k_0, k_1, … , k_n), k_i ∈ ℕ.


Scrivi una funzione che accetta una matrice di lunghezza n, piena di numeri naturali, e fornisce un possibile b,coutput che soddisfa il Lemma per la matrice.


Non ottenere soluzioni con la forza bruta!

(Secondo la mia opinione totalmente poco professionale, è la forza bruta quando prima ottieni un numero e poi fai il calcolo. Questo è indovinare il numero e quindi vedere se l'indovinazione era corretta. Ciò che voglio essere codificato qui è una soluzione che calcola il numeri e non deve verificare se soddisfano il lemma perché sono stati calcolati per farlo.)

Costruiscili con le equazioni e le informazioni fornite. Il codice più corto vince, i punti bonus se lo fai Javascriptperché ci sto solo entrando:)


Esempio:

[5, 19, 7, 8] -> (1344595, 19)
1344505 % (1 + (0 + 1) * 19) = 5
1344505 % (1 + (1 + 1) * 19) = 19
1344505 % (1 + (2 + 1) * 19) = 7
1344505 % (1 + (3 + 1) * 19) = 8

5
Benvenuti in PPCG! Questa è una bella prima domanda, ma consiglierei di aggiungere alcuni casi di test per renderlo più chiaro.
Laikoni,

4
@Tweakimp Anche così, un singolo esempio funzionante potrebbe aiutare a chiarire la definizione piuttosto formale.
Martin Ender,


1
Non è chiaro cosa si qualifichi come "forza bruta". Ovviamente un approccio che scorre attraverso tutte le coppie (b, c)fino a quando non trova quello che funziona sarebbe una forza bruta, e un approccio che corre nel tempo lineare nella lunghezza dell'input non sarebbe, ma c'è un grande divario tra quelli. Dov'è tracciata la linea?
Peter Taylor,

6
Qualcuno ha detto Beta?
Decadimento beta

Risposte:


3

JavaScript (ES6), 104 byte

a=>[c=a.reduce(c=>c*++i,Math.max(...a),i=0),a.reduce(g=(x,k)=>x%m-k?g(x+n,k):(n*=m,m+=c,x),0,n=1,m=c+1)]

Restituisce [c, b]come un array. La soluzione che restituisce non è minima, cma penso che sia minima bper il dato c. Per 120 byte questo restituisce soluzioni minime in ce in bper il dato c:

f=(a,c=1,b=a.reduce(g=(x,k)=>x%m-k?d--?g(x+n,k):0/0:n%m?g(x,k,n+=o):(o=n,d=m+=c,x),0,o=n=1,d=m=c+1))=>1/b?[b,c]:f(a,c+1)

Solutore di soluzioni minime non golfate:

function godel(a) {
    for (c = 0;; c++) {
        var b = 0, n = 1, i = 0;
        for (;;) {
            var m = c * i + c + 1;
            // Increase b until β(b,c,i) = a[i]
            // Adding n won't change output for smaller i
            for (j = 0; j < m; j++) if (b % m != a[i]) b += n;
            if (j == m) break; // couldn't find a remainder, c too low
            i++;
            if (i == a.length) return [b, c]; // Result!
            // Next time we want adding n to b not to change β(b,c,i)
            for (j = 1; n * j % m != 0; j++);
            n *= j;
        }
    }
}

1
Grande! Saresti così gentile e commenterai il codice? :)
Tweakimp,
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.