今天的題目讓我回想起了高中時代,那個時候還在學數位邏輯呢XDD
看到這題就是簡單的反向他,也就是霸!!! 隨便啦 反正就是Not的概念
把2進制的1變成0,把0變成1的概念啦!
現在就來拆一下題目吧。
首先來吧! Test Code!!!
[TestMethod]
public void Input_StringEmpty_Should_Be_StringEmpty()
{
Assert.AreEqual(string.Empty,Kata.OnesComplement(string.Empty));
}
而Production Code 也就是老樣子會長成這個樣子
public static string OnesComplement(string empty)
{
throw new NotImplementedException();
}
很正常的這一個會是紅燈! Commit!
接下來把Production Code改一下,用最簡單的方式解決他!
public static string OnesComplement(string empty)
{
return string.Empty;
}
接下來跑個測試,PASS!
接下來寫測試輸入1的狀況
[TestMethod]
public void Input_1_Should_Be_0()
{
Assert.AreEqual(“0”,Kata.OnesComplement("1"));
}
接下來跑一下測試吧,紅燈! Commit!
這裡就可以看到剛才寫1個輸入時fail的畫面了。
再來就來改一下production code唄
public static string OnesComplement(string n)
{
if (string.IsNullOrEmpty(n))
return string.Empty;
return "0";
}
很輕鬆的 Pass,接下來在新增一個輸入2個1的test case吧!
[TestMethod]
public void Input_11_Should_Be_11()
{
Assert.AreEqual("00", Kata.OnesComplement("11"));
}
接下來就要改一下Production Code了
public static string OnesComplement(string n)
{
if (string.IsNullOrEmpty(n))
return string.Empty;
var nArray = n.ToCharArray();
for (var i = 0; i < nArray.Length; i++)
{
nArray[i] = '0';
}
return new string(nArray);
}
跑個測試,Pass! Commit!
現在輸入1的需求大致上完成了,所以來寫個輸入0的測試吧!
[TestMethod]
public void Input_0_Should_Be_1()
{
Assert.AreEqual("1", Kata.OnesComplement("0"));
}
很明顯的一定會紅燈,接下來就來改一下Production Code吧!
這時候只要加上判斷就可以完成了!
public static string OnesComplement(string n)
{
if (string.IsNullOrEmpty(n))
return string.Empty;
var nArray = n.ToCharArray();
for (var i = 0; i < nArray.Length; i++)
{
if (nArray[i].Equals('0'))
{
nArray[i] = '1';
continue;
}
nArray[i] = '0';
}
return new string(nArray);
}
跑個測試,Pass! Commit!
再來就補一個輸入多個0的測試依然Pass,就再Commit一次吧!
基本上現在已經完成所有的需求了,現在就來Refactor!
很明顯的這一坨程式碼非常的……不是很好看,所以我們來把他抽出來吧!
所以就變成這個樣子!
public static string OnesComplement(string n)
{
if (string.IsNullOrEmpty(n))
return string.Empty;
var nArray = n.ToCharArray();
for (var i = 0; i < nArray.Length; i++)
{
nArray[i] = NotItNumber(nArray[i]);
}
return new string(nArray);
}
private static char NotItNumber(char nArray)
{
if (nArray.Equals('0'))
{
return '1';
}
return '0';
}
現在我們完成他了,就來跑個測試,PASS,Commit一下唄!
然後再Codewars上提交! Pass!!
老樣子我最喜歡的部分就是去看看別人寫這題寫得怎麼樣XD
原來還有這種寫法啊….
這個可能要研究一下了……..
看起來很厲害 哈哈哈哈哈
Git url:
https://github.com/SQZ777/Codewars_OnesComplement
下一題,明天見!