Gödel'e β işlevi [Yardım] ile yardım et


13

Gödel'in β işlevi argüman olarak üç doğal sayı alır.

Olarak tanımlanır β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )

burada rem (a, b), a'nın b tamsayı bölünmesinden sonraki geri kalan kısmı belirtir.

Β Lemma şimdi şöyle diyor:

Herhangi bir doğal sayı dizisi için (k_0, k_1,…, k_n), her i ≤ n, β (b, c, i) = k_i olacak şekilde b ve c doğal sayıları vardır.

Gödel'in herhangi bir girdiyi bulmak bve bulmak ciçin yardıma ihtiyacı var (k_0, k_1, … , k_n), k_i ∈ ℕ.


Bir dizi uzunluğu alan n, doğal sayılarla dolu olan b,cve dizi için Lemma'yı yerine getiren olası bir çıktı veren bir işlev yazın .


Kaba kuvvetle çözüm elde etmeyin!

(Benim tamamen işsiz görüşüme göre, önce bir sayı almak ve sonra hesaplama yapmak kaba kuvvettir. Bu sayı tahmin ve sonra tahmin doğru olup olmadığına bakmak. Burada kodlamak istiyorum ne hesaplayan bir çözümdür rakamları vardır ve bunu yapmak için hesaplandıklarından, kemiği yerine getirip getirmediklerini kontrol etmek zorunda değildir.)

Bunları verilen denklemler ve bilgilerle inşa edin. En kısa kod kazanır, eğer yaparsanız bonus puan kazanırsınız Javascriptçünkü sadece içine giriyorum:)


Misal:

[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
PPCG'ye Hoşgeldiniz! Bu güzel bir ilk soru, ancak daha açık hale getirmek için bazı test örnekleri eklemenizi tavsiye ederim.
Laikoni

4
@Tweakimp Yine de, işe yaramış tek bir örnek, oldukça resmi tanımı netleştirmeye yardımcı olabilir.
Martin Ender


1
Neyin "kaba kuvvet" olarak nitelendirildiği açık değildir. Açıkçası, (b, c)işe yarayan bir kuvvet bulana kadar tüm çiftler arasında yinelenen bir yaklaşım ve girdinin uzunluğu boyunca doğrusal olarak çalışan bir yaklaşım olmazdı, ancak bunlar arasında büyük bir boşluk var. Çizgi nerede çizilir?
Peter Taylor

6
Birisi Beta mı dedi?
Beta Çürümesi

Yanıtlar:


3

JavaScript (ES6), 104 bayt

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

İade [c, b]bir dizi olarak. Döndürdüğü çözüm minimal değil cama bverilen için minimum olduğunu düşünüyorum c. 120 bayt için bu , verilen çözümler için en az cve en az çözümleri döndürür :bc

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)

Ungolfed minimal çözüm çözücü:

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
Harika! Bu kadar kibar ve kodu yorumlamak ister misiniz? :)
Tweakimp
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.