強壯先生說你好(?
今天的題目長這樣
今天題目是要判斷這個數字是不是正方形,然後只需要考慮到整數即可
然而要知道這個數字是不是可以組成一個正方形,我們需要知道這個數字是不是一個被某個數字平方出來的數字,就可以知道他是不是一個正方形了。
現在就來拆一下題目吧。
現在就來想一下最簡單的測試案例吧!
既然是要先印出最大的數字,那就先從找出最大數字來寫測試案例吧!
[TestMethod]
public void Input_0_Should_Be_False()
{
Assert.IsFalse(Kata.IsSquare(0));
}
而Production Code 也就是老樣子會長成這個樣子
public static bool IsSquare(int n)
{
throw new System.NotImplementedException();
}
老樣子,跑個測試,沒過很正常,commit一下
接下來把Production Code改一下,用最簡單的方式解決他!
public static bool IsSquare(int n)
{
return false;
}
接下來跑個測試,PASS!
接下來寫一個測試讓他fail吧!
[TestMethod]
public void Input_1_Should_Be_true()
{
Assert.IsTrue(Kata.IsSquare(1));
}
接下來跑一下測試吧,紅燈!
之後再把Production Code改一下
public static bool IsSquare(int n)
{
if (n > 0)
{
return true;
}
return false;
}
寫完就來跑個測試,PASS,Commit一下唄!
接下來再寫1個測試案例讓他fail吧! 然後就commit
[TestMethod]
public void Input_2_Should_Be_False()
{
Assert.IsFalse(Kata.IsSquare(2));
}
再來改Production Code!
public static bool IsSquare(int n)
{
if (n - 1 * n - 1 == n || n == 1)
{
return true;
}
return false;
}
接下來就來寫輸入4的測試案例吧,這時候ProductionCode就需要for迴圈了
[TestMethod]
public void Input_4_Should_Be_True()
{
Assert.IsTrue(Kata.IsSquare(4));
}
Production Code就會變成這個樣子
public static bool IsSquare(int n)
{
for (int i = 1; i <= n / 2 + 1; i++)
{
if (i * i == n)
{
return true;
}
}
return false;
}
這樣應該就可以涵蓋到所有測試範圍了
所以,接下來就多寫幾個測試案例,跑個測試,Pass,Commit!
都過了之後就來重構一下程式碼吧!
public static bool IsSquare(int n)
{
return Enumerable.Range(1, n / 2 + 1).Any(a => a * a == n);
}
然後再Codewars上提交! Pass!!
通過! PASS!
老樣子我最喜歡的部分就是去看看別人寫這題寫得怎麼樣勒
原來有這個Math.Sqrt的方法可以使用啊…
第一次看到
那我剛才寫的這麼辛苦………QAQ
Git url :
https://github.com/SQZ777/Codewars_YouAreSquare
下一題,明天見!