Bantu Gödel dengan fungsi β-nya [ditutup]


13

Fungsi β Gödel mengambil tiga bilangan asli sebagai argumen.

Ini didefinisikan sebagai β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )

di mana rem (a, b) menunjukkan sisa setelah pembagian bilangan bulat oleh b.

Β Lemma sekarang menyatakan bahwa:

Untuk setiap urutan bilangan alami (k_0, k_1, ..., k_n), ada bilangan alami b dan c sedemikian rupa sehingga, untuk setiap i ≤ n, β (b, c, i) = k_i.

Gödel membutuhkan bantuan untuk menemukan bdan cuntuk setiap masukan yang diberikan (k_0, k_1, … , k_n), k_i ∈ ℕ.


Tulis fungsi yang membutuhkan array panjang n, diisi dengan bilangan alami, dan memberikan kemungkinan b,coutput yang memenuhi Lemma untuk array.


Jangan mendapatkan solusi dengan kekerasan!

(Menurut pendapat saya benar-benar tidak profesional, itu adalah kekerasan ketika Anda pertama kali mendapatkan nomor dan kemudian melakukan perhitungan. Itu menebak nomor dan kemudian mencari apakah tebakan itu benar. Apa yang ingin saya kodekan di sini adalah solusi yang menghitung angka dan tidak harus memeriksa apakah mereka memenuhi lemma karena mereka dihitung untuk melakukannya.)

Bangun mereka dengan persamaan dan informasi yang diberikan. Kode terpendek menang, poin bonus jika Anda melakukannya Javascriptkarena saya baru saja membahasnya:)


Contoh:

[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
Selamat datang di PPCG! Ini adalah pertanyaan pertama yang bagus, tetapi saya akan merekomendasikan untuk menambahkan beberapa test case agar lebih jelas.
Laikoni

4
@Tweakimp Meski begitu, satu contoh yang berfungsi bisa membantu memperjelas definisi yang agak formal.
Martin Ender


1
Tidak jelas apa yang memenuhi syarat sebagai "brute force". Jelas pendekatan yang dilakukan melalui semua pasangan (b, c)sampai menemukan yang bekerja akan menjadi kekuatan kasar, dan pendekatan yang berjalan dalam waktu linier dalam panjang input tidak akan, tetapi ada kesenjangan besar di antara mereka. Di mana garis ditarik?
Peter Taylor

6
Apakah ada yang mengatakan Beta?
Beta Decay

Jawaban:


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

Kembali [c, b] sebagai array. Solusi yang dikembalikan tidak minimal, ctetapi saya pikir minimalb untuk yang diberikan c. Untuk 120 byte ini mengembalikan solusi minimal masuk cdan masukb untuk diberikan 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)

Pemecah solusi minimal yang tidak digabungkan:

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
Bagus! Apakah Anda akan baik dan berkomentar kodenya? :)
Tweakimp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.