Ben Rosalind sorunu Mortal Fibonacci Rabbits üzerinde çalışıyorum ve web sitesi benim algoritma yazılı JavaScript kullandığımda bana cevap yanlış olduğunu söylüyor tutar. Python'da aynı algoritmayı kullandığımda farklı (ve doğru) bir cevap alırım.Javascript aynı algoritma için farklı bir cevap veriyor Python
Tutarsızlık, yalnızca sonuç büyüdüğünde gerçekleşir. Örneğin fibd(90, 19)
, JavaScript'te 2870048561233730600
döndürür, ancak Python'da 2870048561233731259
alır.
JavaScript'te bana farklı bir yanıt veren veya JavaScript kodumda küçük bir hata yapan sayılar hakkında bir şeyler var mı?
JavaScript çözümü:
function fibd(n, m) {
// Create an array of length m and set all elements to 0
var rp = new Array(m);
rp = rp.map(function(e) { return 0; });
rp[0] = 1;
for (var i = 1; i < n; i++) {
// prepend the sum of all elements from 1 to the end of the array
rp.splice(0, 0, rp.reduce(function (e, s) { return s + e; }) - rp[0]);
// Remove the final element
rp.pop();
}
// Sum up all the elements
return rp.reduce(function (e, s) { return s + e; });
}
Python çözüm:
def fibd(n, m):
# Create an array of length m and set all elements to 0
rp = [0] * m
rp[0] = 1
for i in range(n-1):
# The sum of all elements from 1 the end and dropping the final element
rp = [sum(rp[1:])] + rp[:-1]
return sum(rp)
dönecek? Kodunuzu çalıştırıyorum ve giriş için aynı sonucu veriyor (10,10). Ancak bir yazım hatası görebiliyorum "rp.splice (0, 0, rp.reduce (işlev (e, s) {return s + e;}) - rP [0]);". Bu olabilir mi? Eğer değilse, bir sapma noktası var mı? –
İyi nokta. Bir örnek ekledim. Daha büyük girişlerde gerçekleşir. Yazım hatası iyi. Teşekkürler, ama sorun değil. Bu sadece değişken isimleri sözde aynı yapmaya çalışıyorum ve sadece güncellemek için bir değişken eksik. Yazım hatası şimdi düzeltildi – Cristian