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