今天就用這題開啟吧!!
這題看起來需求就比較多了,終於可以不要只拆那一點點的東西了(?
貼圖實在是太累了,所以從今天開始我決定程式碼的部分用文字的方式試試看
這題題目的需求是,要轉轉轉轉轉,然後輸入的數字字串長度有多長,他就會轉幾次,什麼意思呢?
就是今天輸入了56789,我的數字往左移,5要移到最後面這時候就等於轉1次。
轉第2次的時候就要注意了,第1個數字就不動了,所以67895,往左轉但第1個數字不動,就變68957。
第3次也是,第1、2個數字不動,所以68957會變成68579。
題目看清楚了就來拆一下題目吧!
呼 這一次似乎好像複雜了一點點,耶,來開始寫Code吧!!
先寫測試囉
經過前幾天的練習,覺得要var那個又要var這個實在是很麻煩,其實就可以直接寫成這個樣子了。
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Input_1_Should_Be_1()
{
Assert.AreEqual(1,Kata.MaxRot(1));
}
}
而Production Code 也就是老樣子會長成這個樣子
public class Kata
{
public static long MaxRot(long n)
{
throw new System.NotImplementedException();
}
}
老樣子,跑個測試,沒過很正常,commit一下
接下來把Production Code改一下,用最小步伐讓Test Case Pass吧!
這一步改出來的Code就相對的醜很多,不過沒關係,忍住,先不Refactor他,先過現在的測試
public static long MaxRot(long n)
{
if (n.ToString().Length < 2)
{
return n;
}
var nString = n.ToString();
var nChar0 = nString[1];
var roatedN = int.Parse(nChar0 + nString.Substring(0, 1));
if (roatedN > n)
return roatedN;
return n;
}
接下來跑個測試,PASS!
來寫個第3個測試案例唄
[TestMethod]
public void Input_123_Should_Be_231()
{
Assert.AreEqual(231,Kata.MaxRot(123));
}
接下來跑一下測試吧,紅燈! Commit!
接下來因為要考慮到較長數字的輸入,所以就用List add來做,順便判斷List內最大值了。
然後剛才再改的時候發生了很多次的錯誤,原來是因為string方法把remove誤用成substring,難怪第3個測試會一直失敗,於是就改成了這個樣子。
public static long MaxRot(long n)
{
var nString = n.ToString();
var resultList = new List<long>();
resultList.Add(n);
for (var i = 0; i < nString.Length - 1; i++)
{
var charIndex = nString[i];
resultList.Add(int.Parse(nString.Remove(i, 1) + charIndex));
nString = nString.Remove(i, 1) + charIndex;
}
return resultList.Max();
}
現在我們完成他了,就來跑個測試,PASS,Commit一下唄!
Refactor之前來多寫幾個測項來驗證一下會不會錯唄。一樣pass,commit!
接下來refacotr一下唄!
其實仔細看就發現可以把很多去掉跟修飾,就會變成下面這個樣子
public static long MaxRot(long n)
{
var resultList = new List<long> { n };
var nString = n.ToString();
for (var i = 0; i < nString.Length; i++)
{
nString += nString[i];
nString = nString.Remove(i, 1);
resultList.Add(long.Parse(nString));
}
return resultList.Max();
}
然後再Codewars上提交! Pass!!
通過!
老樣子我最喜歡的部分就是去看看別人寫這題寫得如何XD
哦這個方法也可以,我當初好像直覺思考就是要用到max,沒有思考到其實根本可以不用add,然後再max出來,中間就可以做掉了呢
看來還可以再加強XD
Git url : https://github.com/SQZ777/Codewars_RotateForAMax
今天把程式碼改成文字方式呈現 好像方便多了 嗚嗚
之後應該都會用這樣的方式吧XD
不然貼圖好累
下一題,明天見!