啊啊 快要跨年啦,各位不知道有甚麼計劃呢XDDD?
連假我一樣會努力地寫文章的,還蠻有可能一天多寫幾篇撐到跨年結束呢XDD
一起參加鐵人競賽的鐵人朋友們 一起加油啊!!!
這個題目敘述是有故事的XD
他說他覺得他們的博物館很無聊,所以決定移除一些展覽的物品,所以他決定幫他們做一些評分,最無聊的要移除。
今天的題目還很貼心地告訴你,只要移除一個最無聊的就好,看測試資料應該是最左邊的那一個。
現在就來拆一下題目吧。
首先來吧! Test Code!!!
很明顯的今天就會用到跟以往不同的Assert。
因為今天要做的事Collection的判斷,所以我們需要用Collection來驗證他,否則他都會給你紅燈喔!
[TestMethod]
public void Input_NothingArray_Should_Be_NothingArray()
{
CollectionAssert.AreEqual(new List<int>(), Remover.RemoveSmallest(new List<int>()));
}
而Production Code 也就是老樣子會長成這個樣子
public static List<int> RemoveSmallest(List<int> numbers)
{
throw new NotImplementedException();
}
老樣子,跑個測試,沒過很正常,commit一下
接下來把Production Code改一下,用最簡單的方式解決他!
public static List<int> RemoveSmallest(List<int> numbers)
{
return new List<int>();
}
接下來跑個測試,PASS!
接下來寫個只輸入一個的測試吧,只輸入一個數值想當然的就……只會回傳空的,所以就輸入1來測試1個輸入的測是囉。
[TestMethod]
public void Input_1_Should_Be_NothingArray()
{
CollectionAssert.AreEqual(new List<int>(), Remover.RemoveSmallest(new List<int> { 1 }));
}
接下來寫輸入兩個的測試
[TestMethod]
public void Input_1_Should_Be_NothingArray()
{
CollectionAssert.AreEqual(new List<int>{2}, Remover.RemoveSmallest(new List<int> { 1, 2 }));
}
接下來跑一下測試吧,紅燈! Commit!
這裡就可以看到剛才寫1個輸入時pass的畫面了。
接下來就要做第2、3個需求了,所以你要找到最小的數字是誰,然後找到他在哪裏,最後再移除他,就變這個樣子。
public static List<int> RemoveSmallest(List<int> numbers)
{
if (numbers.Count == 0)
{
return new List<int>();
}
var findMin = numbers.Min();
var minIndex = numbers.FindIndex(x => x == findMin);
numbers.RemoveAt(minIndex);
return numbers;
}
現在我們完成他了,就來跑個測試,PASS,Commit一下唄!
接下來照著補上測試案例,然後Production Code也跟著補上。
接下來因為Code有點長,所以我們來Refactor他吧!
public static List<int> RemoveSmallest(List<int> numbers)
{
if (numbers.Count == 0)
return new List<int>();
numbers.RemoveAt(numbers.FindIndex(x => x == numbers.Min()));
return numbers;
}
接下來補上一個test case 這一支會改變我們的人生(X
[TestMethod]
public void Input_22121_Should_Be_2221()
{
CollectionAssert.AreEqual(new List<int> { 2, 2, 1, 2, 1 }, Remover.RemoveSmallest(new List<int> { 2, 2, 2, 1 }));
}
接下來跑測試果真是Fail了,然後這裡我卡了很久,原來!!!!!!!
是我的測試寫錯了,寫反了!!!!!!!! (詳情請看上面ˊ_>ˋ
哇哩勒
然後把它改回來
就過了!!!
然後再Codewars上提交! Pass!!
通過! PASS!
老樣子我最喜歡的部分就是去看看別人寫這題寫得怎麼樣XD
大致上跟我寫得差不多,然後DefaultIfEmpty這個方法我倒是第一次看到呢!!!
原來這個方法就是如果他是空的,他就會回傳預設值。
長知識長知識!
https://github.com/SQZ777/Codewars_RemoveTheMinium
下一題,明天見!