V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
windirt
V2EX  ›  程序员

一个租房广告引发的代码战争

  •  
  •   windirt ·
    windirt · 2016-06-22 11:19:50 +08:00 · 19250 次点击
    这是一个创建于 2836 天前的主题,其中的信息可能已经有所发展或是发生改变。
    起因是有人在群里贴了这个租房广告



    然后有人贴了随手写的解决方案





    跟着又是贴各种精简版







    106 条回复    2016-06-24 13:57:54 +08:00
    1  2  
    guizer
        1
    guizer  
       2016-06-22 11:33:08 +08:00
    这是什么语言啊,第一张图片我居然看懂了
    mnsw
        2
    mnsw  
       2016-06-22 11:35:10 +08:00 via Android
    有意思
    xx314327475
        3
    xx314327475  
       2016-06-22 11:37:26 +08:00
    代码程序要是设计的再复杂一点就好了
    yhxx
        4
    yhxx  
       2016-06-22 11:41:31 +08:00
    @guizer Java
    SvenWong
        5
    SvenWong  
       2016-06-22 11:42:09 +08:00
    java 代码的缩进有点问题
    viko16
        6
    viko16  
       2016-06-22 11:42:31 +08:00
    第一眼就觉得是 HR 的新阴谋!
    lichun
        7
    lichun  
       2016-06-22 11:45:45 +08:00
    tel = '18013820100'

    arr = list(set(tel))

    index = [arr.index(number) for number in tel]
    fcicq
        8
    fcicq  
       2016-06-22 11:47:35 +08:00
    正常的语言不应该能执行的. 越界了.
    sunchen
        9
    sunchen  
       2016-06-22 11:48:54 +08:00
    坚决不和 Java 程序员合租。他们做事太繁琐。我这样说可以引起骂战吗,哈哈哈
    lichun
        10
    lichun  
       2016-06-22 11:50:33 +08:00
    @lichun tel = ''.join(arr[i] for i in index)
    kindjeff
        11
    kindjeff  
       2016-06-22 11:53:56 +08:00 via iPhone   ❤️ 4
    缩进没对齐,+=前面不加空格,冒号前面加了个空格。天呐,怎么能和这样的人当室友。
    ipconfiger
        12
    ipconfiger  
       2016-06-22 11:56:02 +08:00   ❤️ 1
    租房代码生成器
    ipconfiger
        13
    ipconfiger  
       2016-06-22 11:56:53 +08:00
    zzzreg
        14
    zzzreg  
       2016-06-22 12:01:47 +08:00
    ruby 版的还可以再精简,不用 to_s 的
    ```ruby
    index.map { |i| arr[i] }.join
    ```
    guizer
        15
    guizer  
       2016-06-22 12:41:37 +08:00
    啊。我写个 shell 吧 ,不会精简.... /惊哭
    arr=(8 2 1 0 3)
    index=(2 0 3 2 4 0 1 3 2 3 3)
    for i in ${index[*]};do
    tel+=${arr[$i]}
    done
    printf "$tel\n"
    Biwood
        16
    Biwood  
       2016-06-22 12:46:05 +08:00
    虽然不知道是什么语言,但是这个逻辑本身就很简单,目测就能写出号码了: 18013820100
    guizer
        17
    guizer  
       2016-06-22 12:46:19 +08:00
    @yhxx 感谢
    asj
        18
    asj  
       2016-06-22 12:53:31 +08:00
    Haskell
    putStrLn $ ($ (head.show) `map` [8,2,1,0,3]) `map` (flip(!!) `map` [2,0,3,2,4,0,1,3,2,3,3])
    inisun
        19
    inisun  
       2016-06-22 12:58:38 +08:00
    看见这种写法,一般都是近几年的年轻人了,工作量大的时候,看这种 foreach 很累人
    majunbo
        20
    majunbo  
       2016-06-22 13:19:00 +08:00
    var arr = [8,2,1,0,3];
    var index = [2,0,3,2,4,0,1,3,2,3,3];
    var tel = "";
    index.forEach(function(e){
    tel+=arr[e];
    })
    document.write("联系方式:"+tel);
    broadliyn
        21
    broadliyn  
       2016-06-22 13:19:19 +08:00
    还不如画张图找最短路径组成的手机号。。。
    比这个无脑的 foreach 要高级多了
    21grams
        22
    21grams  
       2016-06-22 13:22:15 +08:00
    这是在秀智商下限吗?
    RemRain
        23
    RemRain  
       2016-06-22 13:26:34 +08:00
    图片上的解法无非都是把多行写到一行,我来贴个简单的:
    RemRain
        24
    RemRain  
       2016-06-22 13:26:43 +08:00
    print "18013820100"
    ethanlu
        25
    ethanlu  
       2016-06-22 13:27:29 +08:00 via Android
    学过一点 swift 居然对了
    solaya
        26
    solaya  
       2016-06-22 13:28:55 +08:00   ❤️ 12
    别去,写 java 的人不会自己做垃圾回收的
    ajan
        27
    ajan  
       2016-06-22 13:30:40 +08:00   ❤️ 3
    [2,0,3,2,4,0,1,3,2,3,3].map(i=>[8,2,1,0,3][i]).join('')
    surfire91
        28
    surfire91  
       2016-06-22 13:32:25 +08:00
    毫无 ps 痕迹啊
    dahvlh
        29
    dahvlh  
       2016-06-22 13:38:50 +08:00
    @sunchen 抗议 抗议
    yuyang1110
        30
    yuyang1110  
       2016-06-22 13:41:58 +08:00
    屎一般的缩进。。。。果断不能去啊。。
    ifake
        31
    ifake  
       2016-06-22 13:50:21 +08:00
    难道就我关心……群租该举报?
    palmers
        32
    palmers  
       2016-06-22 13:52:16 +08:00
    哈哈哈哈哈
    doushiyinweini
        33
    doushiyinweini  
       2016-06-22 14:01:49 +08:00
    $arr = [8,2,1,0,3];
    $index = [2,0,3,2,4,0,1,3,2,3,3];
    echo implode('', array_map(function($i) use ($arr){ return $arr[$i]; }, $index));
    npc0der
        34
    npc0der  
       2016-06-22 14:06:10 +08:00
    我的号码只包含 1805 开头也是 1805
    ChaosPark
        35
    ChaosPark  
       2016-06-22 14:10:41 +08:00
    这样水平的人不适合当室友。
    hiboshi
        36
    hiboshi  
       2016-06-22 14:19:12 +08:00
    <?php

    $arr = [8,2,1,0,3];
    $index = [2,0,3,2,4,0,1,3,2,3,3];

    foreach ($index as $k=>$v) {
    echo $arr[$v];
    }

    我是来引杖的。。。。。。。。。。。。。。。
    chuhemiao
        37
    chuhemiao  
       2016-06-22 14:23:26 +08:00
    还是 rust 看着帅!!!
    tangzhehao
        38
    tangzhehao  
       2016-06-22 14:23:58 +08:00
    卧槽,这个还要这么复杂么?直接推理就能猜出来。
    即使不懂代码,也知道 $arr 和 $index 一个是数集,一个是序列,按照手机号是 11 位,即可以推测出 $index 是序列, $arr 作为数集只有 5 个数字,序列之中有 0 没有 5 ,自然是 0 开始计数。如此对应下来:
    ——————————————————
    序号 0 1 2 3 4
    数集 8 2 1 0 3
    ——————————————————
    20324013233
    18013820100

    对否?
    sunchen
        39
    sunchen  
       2016-06-22 14:24:03 +08:00
    @solaya 但是他们有保洁呀
    woshiyigexiaohao
        40
    woshiyigexiaohao  
       2016-06-22 14:24:42 +08:00
    @hiboshi

    不应该写成
    $arr[]和 $index[]吗
    chuhemiao
        41
    chuhemiao  
       2016-06-22 14:28:04 +08:00
    @tangzhehao 赞,原来这才是作者的初始目地
    lingo233
        42
    lingo233  
       2016-06-22 14:29:12 +08:00
    ''.join(map(lambda i:str([8,2,1,0,3][i]), [2,0,3,2,4,0,1,3,2,3,3]))
    4641585
        43
    4641585  
       2016-06-22 14:29:48 +08:00
    一般来说

    print var //是 python2

    console.log() //是 js

    system.out.println(); //是 java

    这几个比较有特点。。
    slfmessi
        44
    slfmessi  
       2016-06-22 14:31:24 +08:00
    550 ,好便宜
    chuhemiao
        45
    chuhemiao  
       2016-06-22 14:31:32 +08:00
    @4641585 let 是 rust
    jixiangqd
        46
    jixiangqd  
       2016-06-22 14:31:57 +08:00
    @ajan 你这是强行写到一行,与楼主发的 python 版实现并没大区别
    tangzhehao
        47
    tangzhehao  
       2016-06-22 14:32:46 +08:00
    @chuhemiao 其实可以了,愿意这样去推理的,肯定也是有心想要去租房的、且有点头脑的。
    ys0290
        48
    ys0290  
       2016-06-22 14:33:55 +08:00 via iPhone
    没人在意这个号码被打爆吗?
    yiios
        49
    yiios  
       2016-06-22 14:45:19 +08:00
    func tel () -> String {
    let count = [1,2,3,5,7,0]
    let index = [0,3,4,3,2,5,2,5,5,1,5]
    var tel = ""
    for i in index {
    tel = tel + String(count[i])
    }
    return tel
    }
    tatsuteng
        50
    tatsuteng  
       2016-06-22 14:57:23 +08:00
    脸酸
    virusdefender
        51
    virusdefender  
       2016-06-22 15:05:16 +08:00   ❤️ 2
    不能和写 Java 的做室友,因为他们很多不会自己进行垃圾回收
    cashew
        52
    cashew  
       2016-06-22 15:10:23 +08:00
    慎重选择用三个字符缩进的室友。。。。。
    florije
        53
    florije  
       2016-06-22 15:13:20 +08:00
    妈蛋,都上当了,这是中介看不懂,然后发帖引诱小伙伴们帮忙解答……
    karnaugh
        54
    karnaugh  
       2016-06-22 15:36:17 +08:00
    @florije 是真的。。然后那哥们电话被打爆了。。。。
    KKKKKK
        55
    KKKKKK  
       2016-06-22 15:41:44 +08:00 via Android
    @chuhemiao rust 你给不打 分号, 我发死你。:doge:

    而且讲道理 rust 输出要用 println! 宏
    kkurs
        56
    kkurs  
       2016-06-22 15:47:03 +08:00
    @chuhemiao 别闹了,这里面哪有 Rust...
    warcraft1236
        57
    warcraft1236  
       2016-06-22 15:50:52 +08:00
    把 Java 改成其他语言而已
    zcqshine
        58
    zcqshine  
       2016-06-22 15:51:07 +08:00
    你们难道没发现这段代码实际上的输出应该是: 联系方式: 25
    吗?????
    zcqshine
        59
    zcqshine  
       2016-06-22 15:52:33 +08:00
    @zcqshine 啊啊啊, 我错了, 没仔细看, 原来已经定义了 tel 变量为 String 类型
    zcqshine
        60
    zcqshine  
       2016-06-22 15:58:25 +08:00
    @kindjeff java 语法冒号前面要加空格的, 哈哈哈
    ccloli
        61
    ccloli  
       2016-06-22 16:05:00 +08:00
    建议下次用位运算提升难度
    kkurs
        62
    kkurs  
       2016-06-22 16:05:06 +08:00
    fn main() {
    let arr = [8, 2, 1, 0, 3];
    let index = [2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3];
    println!("{}", index.iter().fold(String::new(), |phone, &i| phone+&arr[i].to_string()));
    }

    我贴个 Rust 的好了
    cocacold
        63
    cocacold  
       2016-06-22 16:08:56 +08:00
    var num = [8,2,1,0,3];
    var index = [2,0,3,2,4,0,1,3,2,3,3];
    var tel = "";
    for(var i in index){tel += num[index[i]];}
    console.log(tel);
    fanTasy
        64
    fanTasy  
       2016-06-22 16:15:46 +08:00
    ([2,0,3,2,4,0,1,3,2,3,3].map(n => { return [8,2,1,0,3][n] })).join('')
    welsonla
        65
    welsonla  
       2016-06-22 16:25:01 +08:00
    @guizer Ruby
    homfen
        66
    homfen  
       2016-06-22 16:26:52 +08:00
    console.log([2,0,3,2,4,0,1,3,2,3,3].reduce((a, b) => a + [8,2,1,0,3][b], ''))
    Ouyangan
        67
    Ouyangan  
       2016-06-22 16:29:03 +08:00
    为何又把我 java 黑了一圈
    easing
        68
    easing  
       2016-06-22 16:44:37 +08:00
    秀优越的无非是用高阶函数替换 foreach 而已,也并不一定比原来 java 的简洁易懂。作为中立方,这里支持 java 一把。
    KDr2
        69
    KDr2  
       2016-06-22 17:34:31 +08:00
    Rscript -e 'c(8,2,1,0,3)[c(2,0,3,2,4,0,1,3,2,3,3)+1]'
    aitaii
        70
    aitaii  
       2016-06-22 17:38:37 +08:00
    lBoleBzoloo
    shuax
        71
    shuax  
       2016-06-22 17:46:30 +08:00   ❤️ 1
    print("18013820100")
    人工智能语言,不服不辨
    ihuzhou
        72
    ihuzhou  
       2016-06-22 17:46:57 +08:00
    真是给南京程序员丢人
    zencoding
        73
    zencoding  
       2016-06-22 18:00:53 +08:00   ❤️ 1
    我也恶搞一下
    <?php
    foreach ([2,0,3,2,4,0,1,3,2,3,3] as $i) echo [8,2,1,0,3][$i];
    Dreawer
        74
    Dreawer  
       2016-06-22 18:03:47 +08:00
    ruby 版

    arr = [8, 2, 1, 0 ,3]
    index = [2, 0, 3, 2, 4, 0, 1, 3, 2 ,3 ,3]
    tel = ""
    for i in 0..index.size
    tel += arr[index[i]].to_s
    end
    puts "联系方式:" + tel
    irockytan
        75
    irockytan  
       2016-06-22 18:15:19 +08:00 via iPhone
    贴代码的都是 Mac
    uztyzrxd
        76
    uztyzrxd  
       2016-06-22 18:48:30 +08:00
    不过是展示下各种语言的特性, 谈不上秀优越吧

    @guizer bash?

    arr=(8 2 1 0 3)
    tel=$(eval echo '${arr['{2,0,3,2,4,0,1,3,2,3,3}']}')
    echo "联系方式:" ${tel// }

    这样如何?
    guizer
        77
    guizer  
       2016-06-22 19:16:28 +08:00 via iPhone
    @uztyzrxd 初入行,这种写法有点转不过来😂
    guizer
        78
    guizer  
       2016-06-22 19:17:57 +08:00 via iPhone
    @welsonla 确定吗,这语言和 java 差不多吗?前面有朋友说是 java ,公司同事也说是 JAVA …
    magicdawn
        79
    magicdawn  
       2016-06-22 19:35:42 +08:00
    Node.js / JavaScript 报道

    ![untitled1.png](//dn-cnode.qbox.me/Fgy7ko9yDxbSTdBupixA7hEBvMna)
    magicdawn
        80
    magicdawn  
       2016-06-22 19:36:05 +08:00
    KomeijiSatori
        81
    KomeijiSatori  
       2016-06-22 19:44:42 +08:00
    <?php
    $arr = [8,2,1,0,3];
    $index = [2,0,3,2,4,0,1,3,2,3,3];
    foreach ($index as $i)
    echo $arr[$i];
    nameldk
        82
    nameldk  
       2016-06-22 20:04:26 +08:00
    来个 PHP 版的:
    echo join('', array_map(function($i){return [8,2,1,0,3][$i];}, [2,0,3,2,4,0,1,3,2,3,3]));
    welsonla
        83
    welsonla  
       2016-06-22 20:28:36 +08:00
    @guizer 我是说出租广告下面的第一个代码
    msg7086
        84
    msg7086  
       2016-06-22 20:33:30 +08:00   ❤️ 1
    @Dreawer 这根本不能叫 ruby 。
    takashiki
        85
    takashiki  
       2016-06-22 20:49:04 +08:00
    <?php
    echo implode('', array_map(function ($i) {return [8, 2, 1, 0 ,3][$i];}, [2, 0, 3, 2, 4, 0, 1, 3, 2 ,3 ,3]));
    lululau
        86
    lululau  
       2016-06-22 21:02:16 +08:00
    ```
    (let ((arr '(8 2 1 0 3))
    (idx '(2 0 3 2 4 0 1 3 2 3 3)))
    (--reduce-from (+ (* acc 10) (nth it arr)) 0 idx))
    ```
    chuhemiao
        87
    chuhemiao  
       2016-06-22 21:07:14 +08:00
    @KKKKKK 我错了,刚学 rust 。。。
    guizer
        88
    guizer  
       2016-06-22 21:56:14 +08:00 via iPhone
    @welsonla 我也在说这个…
    zhuangzhuang1988
        89
    zhuangzhuang1988  
       2016-06-22 21:58:31 +08:00
    都闲得蛋疼..
    eoo
        90
    eoo  
       2016-06-22 22:06:52 +08:00 via Android
    echo "18013820100";
    lujiajing1126
        91
    lujiajing1126  
       2016-06-22 22:29:27 +08:00 via iPhone
    第一眼觉得为什么不用 StringBuilder😂😂
    Henrybsbhp
        92
    Henrybsbhp  
       2016-06-22 22:34:49 +08:00
    这个可以自己心算然后写出来吧...
    bullettrain1433
        93
    bullettrain1433  
       2016-06-22 22:57:46 +08:00
    都没缩进,好着急
    SonicY
        94
    SonicY  
       2016-06-22 23:19:42 +08:00
    我去楼上诸位的看起来都好复杂
    foreach (@arr[@index]) {
    print $_;
    }
    twl007
        95
    twl007  
       2016-06-22 23:52:36 +08:00 via iPhone
    @SonicY 终于看见 perl 了……
    SonicY
        96
    SonicY  
       2016-06-22 23:58:09 +08:00   ❤️ 1
    @twl007 哈哈其实干脆这样写 print @arr = (8, 2, 1, 0, 3)[2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3];
    twl007
        97
    twl007  
       2016-06-23 01:11:31 +08:00
    噗 - - 好吧…… perl 果然是自由哎~~
    webjin1
        98
    webjin1  
       2016-06-23 03:14:19 +08:00 via Android
    @SonicY 这是 python?
    araraloren
        99
    araraloren  
       2016-06-23 09:17:14 +08:00
    @webjin1 那是 Perl
    如果改用 Perl6 来写就是这样
    ```perl6

    say ([8, 2, 1, 3, 0][2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3]).join('');

    ```
    qian0206
        100
    qian0206  
       2016-06-23 10:01:02 +08:00
    @inisun 不觉得 foreach 很累人, JAVA 的开发者都建议使用 foreach ,毕竟不会出现空指针异常
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2641 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.