Re: [問題] 請問如何寫出奇偶分離合併程式

作者: cyclone350 (老子我最神)   2014-10-02 19:36:56
※ 引述《realmeat (真肉)》之銘言:
: ※ 引述《psplay (亂世中一個小小書僮)》之銘言:
: public static String shuffffffffffffle(String in){
: if(in == null) return null;
: int len = in.length();
: StringBuilder strBuilder = new StringBuilder();
: for(int i=0; i<len; i++){
: int k = 0;
: if(i % 2 == 0){
: k = i >>> 1;
: }else{
: k = (len + i - 1 + 2*(len%2)) >>> 1 ;
: }
: strBuilder.append(in.substring(k, k));
: }
: return strBuilder.toString();
: }
: 請享用
純粹好奇, 這樣寫是單純想搞原po還是平常真的就用這種方式寫code?
例如今天題目突然變成切三等份後洗牌 (原本是切兩等分)
不就等於要重寫? 甚至維護的人會看不懂?
順便借這個機會問問大家 clean code 的粒度會到多細 ?
作者: carylorrk (carylorrk)   2014-10-02 20:10:00
解 online judge 不是都是這樣的嗎 XD
作者: HuangJC (吹笛牧童)   2014-10-02 23:38:00
很簡潔了啊;讓我想到以前讀'字串指令'函式的source code高手都在比簡潔的..我還看過 swap(a,b) 的寫法是 a^=b^=a^=b, 嚇到吐奶..而 a=a-a (其實就是 a=0),這種我比較不懂幹麻要這樣整人不過公司寫加密模組的同事就會這樣,故弄玄虛..
作者: cyclone350 (老子我最神)   2014-10-02 23:48:00
我指的不是這種簡潔... 是另外一種...
作者: psplay (亂世中一個小小書僮)   2014-10-02 23:59:00
是說我的code還是r大的code阿XD我是剛好沒事用5~6分鐘寫出來der Q_Q而且真的比不上版上一群鬼神的code XD
作者: LPH66 (-6.2598534e+18f)   2014-10-03 00:42:00
四樓提的那個東西很有趣, 它在 C/C++ 是未定義行為但是在 Java 裡是確實會把兩個變數交換的不過以編譯器的角度來看傳統交換寫法比較能編出"快"的程式
作者: HuangJC (吹笛牧童)   2014-10-03 00:48:00
未定義?我是在 C++ 看到的,而且我想這相容性應到達 C只要是整數型變數就應該有用,浮點數未必可以,沒測過基本上這寫法不快,而且出現在微軟範例程式中;我一直以為範例程式要簡單,目的是給你學,不是炫技;但我被閃到了。合理猜測是微軟大了,管不住太多員工的品質各模組分切或外包,偶爾會有奇怪的東西出現..java 有 >>> 運算子?
作者: LPH66 (-6.2598534e+18f)   2014-10-03 00:57:00
在 C/C++ 未定義這件事可以看我這篇 #1Deo3lyi (C_and_CPP)但是 java 規定運算元的效應要在運算子計算前結算完畢所以在 java 上它是確實可以運作的沒錯java 應該沒有 unsigned shift 吧? 連無號數都沒有了囧, 我弄錯了...java 還有另一條規定是先左後右所以 a^=b^=a^=b 這個寫法在 java 正好會變成我那篇文中會把值炸成 0 的那個順序, 所以這在 java 是不能用的
作者: HuangJC (吹笛牧童)   2014-10-03 01:14:00
文章已消失?
作者: LPH66 (-6.2598534e+18f)   2014-10-03 01:23:00
在 C_and_CPP 版, 不在這個版
作者: HuangJC (吹笛牧童)   2014-10-03 01:36:00
喔,我把括號內,當成是文章標題,難怪再找一次也沒有..
作者: AI3767 (AIIA)   2014-10-03 01:43:00
java有個 >>> 運算. 另外還有個隱藏版的 無號數 可以使用
作者: realmeat (真肉)   2014-10-03 09:37:00
單然是搞原po啊 =3=y~
作者: psplay (亂世中一個小小書僮)   2014-10-03 09:47:00
太銷魂了XD

Links booklink

Contact Us: admin [ a t ] ucptt.com