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

看板java作者 (老子我最神)時間10年前 (2014/10/02 19:36), 編輯推噓12(12021)
留言33則, 7人參與, 最新討論串6/8 (看更多)
※ 引述《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 的粒度會到多細 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1412249818.A.FF9.html

10/02 20:10, , 1F
解 online judge 不是都是這樣的嗎 XD
10/02 20:10, 1F

10/02 23:38, , 2F
很簡潔了啊;讓我想到以前讀'字串指令'函式的source code
10/02 23:38, 2F

10/02 23:38, , 3F
高手都在比簡潔的..
10/02 23:38, 3F

10/02 23:39, , 4F
我還看過 swap(a,b) 的寫法是 a^=b^=a^=b, 嚇到吐奶..
10/02 23:39, 4F

10/02 23:40, , 5F
而 a=a-a (其實就是 a=0),這種我比較不懂幹麻要這樣整人
10/02 23:40, 5F

10/02 23:42, , 6F
不過公司寫加密模組的同事就會這樣,故弄玄虛..
10/02 23:42, 6F

10/02 23:48, , 7F
我指的不是這種簡潔... 是另外一種...
10/02 23:48, 7F

10/02 23:59, , 8F
是說我的code還是r大的code阿XD
10/02 23:59, 8F

10/03 00:00, , 9F
我是剛好沒事用5~6分鐘寫出來der Q_Q
10/03 00:00, 9F

10/03 00:00, , 10F
而且真的比不上版上一群鬼神的code XD
10/03 00:00, 10F

10/03 00:42, , 11F
四樓提的那個東西很有趣, 它在 C/C++ 是未定義行為
10/03 00:42, 11F

10/03 00:42, , 12F
但是在 Java 裡是確實會把兩個變數交換的
10/03 00:42, 12F

10/03 00:45, , 13F
不過以編譯器的角度來看傳統交換寫法比較能編出"快"的程式
10/03 00:45, 13F

10/03 00:48, , 14F
未定義?我是在 C++ 看到的,而且我想這相容性應到達 C
10/03 00:48, 14F

10/03 00:49, , 15F
只要是整數型變數就應該有用,浮點數未必可以,沒測過
10/03 00:49, 15F

10/03 00:50, , 16F
基本上這寫法不快,而且出現在微軟範例程式中;我一直以
10/03 00:50, 16F

10/03 00:51, , 17F
為範例程式要簡單,目的是給你學,不是炫技;但我被閃到
10/03 00:51, 17F

10/03 00:51, , 18F
了。合理猜測是微軟大了,管不住太多員工的品質
10/03 00:51, 18F

10/03 00:51, , 19F
各模組分切或外包,偶爾會有奇怪的東西出現..
10/03 00:51, 19F

10/03 00:56, , 20F
java 有 >>> 運算子?
10/03 00:56, 20F

10/03 00:57, , 21F
在 C/C++ 未定義這件事可以看我這篇 #1Deo3lyi (C_and_CPP)
10/03 00:57, 21F

10/03 00:57, , 22F
但是 java 規定運算元的效應要在運算子計算前結算完畢
10/03 00:57, 22F

10/03 00:57, , 23F
所以在 java 上它是確實可以運作的沒錯
10/03 00:57, 23F

10/03 00:59, , 24F
java 應該沒有 unsigned shift 吧? 連無號數都沒有了
10/03 00:59, 24F

10/03 01:00, , 25F
囧, 我弄錯了...java 還有另一條規定是先左後右
10/03 01:00, 25F

10/03 01:01, , 26F
所以 a^=b^=a^=b 這個寫法在 java 正好會變成我那篇文中
10/03 01:01, 26F

10/03 01:01, , 27F
會把值炸成 0 的那個順序, 所以這在 java 是不能用的
10/03 01:01, 27F

10/03 01:14, , 28F
文章已消失?
10/03 01:14, 28F

10/03 01:23, , 29F
在 C_and_CPP 版, 不在這個版
10/03 01:23, 29F

10/03 01:36, , 30F
喔,我把括號內,當成是文章標題,難怪再找一次也沒有..
10/03 01:36, 30F

10/03 01:43, , 31F
java有個 >>> 運算. 另外還有個隱藏版的 無號數 可以使用
10/03 01:43, 31F

10/03 09:37, , 32F
單然是搞原po啊 =3=y~
10/03 09:37, 32F

10/03 09:47, , 33F
太銷魂了XD
10/03 09:47, 33F
文章代碼(AID): #1KBJZQ_v (java)
討論串 (同標題文章)
文章代碼(AID): #1KBJZQ_v (java)