装饰房间所需的壁纸卷(Javascript拼图)



我是Javascript的新手,正在与CodeWars的这个谜题作斗争。

约翰想用壁纸装饰房间。房间有尺寸:宽(w(,高(h(,长(l(。一卷壁纸宽52厘米,长10米。他想要的墙纸比他用来盖房间的墙纸多15%。如果出现错误或误判,他想购买比他需要的长度大15%的长度。

这就是我想到的:

function wallpaper(l, w, h) {
var totalArea= ((2*(l*h))+(2*(w*h))*1.15);  //wall area to be covered
var rollsNeeded= (Math.ceil(totalArea/5.2));
return rollsNeeded;

一些示例文本案例:

Test.describe("wallpaper",function() {
Test.it("Basic tests",function() { 
  testing(wallpaper(6.3, 4.5, 3.29), 16);
  testing(wallpaper(7.8, 2.9, 3.29), 16);
  testing(wallpaper(6.3, 5.8, 3.13), 17);
  testing(wallpaper(6.1, 6.7, 2.81), 16);
})})enter code here

但是我的函数总是比测试用例少返回一个。所以我得到的不是16,而是15,我得到的是16。我不知道我是在数学上还是在代码上犯了错误。。。

其他注意事项:所有卷(即使宽度不完整(都是边对边放置的0<=l、 w,h(浮点数(,w x h x l可能为零整数r(卷数(将始终小于或等于20

这更像是一个数学问题,而不是一个代码问题,所以让我们先纠正数学问题:

假设它是一个立方体形状的房间,它有四堵墙,每堵墙都是一个有宽度和高度的矩形。此外,相对的墙应该完全相等。

所以,约翰想在这四面墙的整个区域贴上壁纸。这大概是一个奇怪的房间,墙上没有门窗,但什么都没有。我猜想他是从天花板或地板进出的。

房间有

  • w的宽度
  • h的高度
  • l的长度

翻译为:

  • 使用宽度高度作为尺寸的两面墙,面积为w*h
  • 使用长度高度作为尺寸的另外两个墙的面积为l*h

这是总面积的公式:

[2*(l*h)] + [2*(w*h)]

为了得到约翰需要的额外材料,我们在总数上加15%。

{[2*(l*h)] + [2*(w*h)]} + {[2*(l*h)] + [2*(w*h)]}*0.15

{[2*(l*h)] + [2*(w*h)]}*1.15

您的代码执行以下计算

{[2*(l*h)] + [2*(w*h)]*1.15}

这使得仅两个壁的面积增加了15%。您希望(并且可能打算(将乘法放在外括号之外

function wallpaper(l, w, h) {
  var totalArea= ((2*(l*h))+(2*(w*h)))*1.15;  //corrected
  var rollsNeeded= (Math.ceil(totalArea/5.2));
  return rollsNeeded;
}
function testing(result, expected) {
  console.log("Expected: " + expected + 
              "ngot: "+ result +
              "nsuccess: " + (result === expected));
}
testing(wallpaper(6.3, 4.5, 3.29), 16);
testing(wallpaper(7.8, 2.9, 3.29), 16);
testing(wallpaper(6.3, 5.8, 3.13), 17);
testing(wallpaper(6.1, 6.7, 2.81), 16);

作为附录,您可以简化总面积公式

[2*(l*h)] + [2*(w*h)]
 = 2*l*h + 2*w*h
 = 2*h*(l + w)

这使得代码更短:

var totalArea = (2*h*(l + w))*1.15;  //simplified
//or          : 2*h*(l + w)*1.15
//or even     : 2.3*h*(l + w)

最新更新