我是Javascript的新手,我正在努力解决CodeWars的这个难题。
约翰想用壁纸装饰一个房间。房间有尺寸:宽度(w),高度(h),长度(l)。一种壁纸卷的尺寸为52cm宽,10m长。他希望壁纸比他需要的壁纸多15%。如果出现错误或计算错误,他希望购买比他需要的长15%的长度。
这就是我提出的:
import pandas as pd
alpha = pd.read_csv(filepath,delimiter=';')
alpha.Column1
0 1
1 2
2 3
3 4
4 5
Name: Column1, dtype: int64
一些示例文本案例:
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;
但是我的函数总是比测试用例少一个。因此,而不是16,我得到15,而不是17,我得到16.我不知道我是否犯了数学或代码错误...
其他说明: 所有卷(即使是不完整的宽度)都是边缘到边缘 0 <= 1,w,h(浮点数),可能发生w x h x l为零 整数r(滚动次数)总是小于或等于20
答案 0 :(得分:2)
这更像是一个数学问题,而不是一个代码问题,所以让我们先做正确的数学:
假设它是一个立方体形状的房间,它有四个墙,每个都是一个宽度和高度的矩形。而且,对面的墙应该完全相同。
所以,John希望将壁纸放在所有这四面墙的整个区域上。它可能是一个奇怪的房间,墙壁上没有门窗,但无论如何。
房间有宽度( w ),高度( h )和长度( l ),它们使用宽度转换为两面墙高度为尺寸(面积为 w * h ),另外两个墙使用长度和高度作为尺寸(给我们 l * h ),所以这里是公式总面积:
[2*(l*h)] + [2*(w*h)]
为了获得John需要的额外材料,我们将总计增加了15%。
{2*[(l*h)] + [2*(w*h)]}*0.15 + {[2*(l*h)] + [2*(w*h)]}
或
{[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);
&#13;
作为附录,您可以简化从[2*(l*h)] + [2*(w*h)]
到2h*(l+w)
的总面积公式,这样可以缩短范围。