分享 最难面试的 IT 公司!-- 你敢来挑战吗?

jobthoughtworks · 2014年04月29日 · 最后由 knwang 回复于 2014年05月20日 · 6419 次阅读

以下只是文案

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

找工作=简历 + 面试?No ! 拉勾网携手 ThoughtWorks 招代码奇才,不看简历,代码说话。无需干爹,不必爸爸是李刚,you can you up.

从看到消息这一秒开始——你就可以潜心写代码,Java,C++ , C# , Ruby,Javascript , Python 都可以,鼓励使用单元测试,展示你出色的面向对象能力。

5 月 4 日上午 9:00 前把作品传回来给我们; 5 月 4 日——7 日,我们会夜以继日推敲你的代码; 5 月 8 日——9 日,通过代码测试的你,会接到我们温柔的电话; 5 月 10 日——11 日,来 ThoughtWorks 感受一天独特面试。(包括逻辑笔试、结对编程、技术对话)

ThoughtWorks 被评为全球最难面试科技公司,就算没吃到猪肉,你也将成为一个见过猪跑的人! “世之奇伟、瑰怪、非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也”,国际环境,风口行业,神一样的队友,不看简历,代码说话。程序猿们!爆发吧!扬眉吐气、验明正身的时刻到了!

查阅题目、上传作品戳这里:http://www.lagou.com/subject/s_thoughtworks.html?joinName=shouye

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

这样会吸引到你们去参加活动么?

我看微博上好多人蠢蠢欲动,但是实际行动的貌似不多。

How about u!

只会 Erlang,又被鄙视了 ...

#1 楼 @bhuztez 哪有….. 难道这些语言还不够大众么?捂脸哭

看起来挺有意思的,瞄了一眼题目,似乎在哪里见过的。回头也投一个试试。

#2 楼 @jobthoughtworks Erlang 才是大众语言

#1 楼 @bhuztez 其实里面详情有这样的说明: 代码要求:

1,语言不限,Java, C#, Ruby, C++, Js, Python, Scala, objective-C 统统可以,小语种也没问题,只要你擅长;

#2 楼 @jobthoughtworks

小语种也没问题,只要你擅长

可以用自己设计的语言么?

for(i=1;i<101;i++){print((i%3?"":"Fizz")+(i%5?"":"Buzz")+(i%7?"":"Whizz")||i)}

php 算小语种。。。

图片霸气侧漏!

#8 楼 @mahone3297 php 在等等里面,木有分类在小语种~

大家不要纠结这些小事情上了啦~都不是重点嘛~

通俗版 APL 解法

A←,/(100 1⍴'' '' 'Fizz'),(100 1⍴'' '' '' '' 'Buzz'),(100 1⍴'' '' '' '' '' '' 'Whizz')
N←(A∊⊂'')/⍳100
A[N]←N
A

#11 楼 @bhuztez 还有规则 5 如果数字中包含了第一个特殊数,那么忽略规则 3 和规则 4

#12 楼 @zhanglinjie 好吧,还有坑啊

#11 楼 @bhuztez 很吊的样子。。。

写了一个让人觉得高(看)大(不)上(懂)Ruby 函数式:

n = [3,5,7]
w = %w(Fizz Buzz Whizz)

l = -> a,fn {[fn.(a)] + a.combination(2).map{|_| fn.(_)} + a}
ns, ws = l.(n, -> _ {_.inject(:lcm)}), l.(w, -> _ {_.join})

1.upto(100).map{|i| i.to_s =~ /#{n[0]}/ ? w[0] : (f = ns.find_index{|l| i % l == 0}) ? ws[f] : i }

#7 楼 @bhuztez 没有体现出 ruby 的函数式编程,打回重写,哈哈哈

#15 楼 @quakewang 你这都没 APL 好懂

#17 楼 @bhuztez 嗯,常用 Rails 的 ruby 程序员一定不觉得这是 ruby 代码 ...

手机打的…不然应该可以写成一行?求指导…

Spc = ARGV
M = lambda {|i,n|
    t = ((i%n[0].to_i == 0)?"Fizz":"") +
        ((i%n[1].to_i == 0)?"Bizz":"") +
        ((i%n[2].to_i == 0)?"Whizz":"")
    !(t.empty?)?t:i
}
for i in 1...100 do
  puts ((i.to_s.include?Spc[0])?
    "Fizz":(M.call(i.to_i,Spc)))
end

觉得好像运算做得有点多,变量也比较多…

#11 楼 @bhuztez b 大果然高端……

A←,/(100 1⍴'' '' 'Fizz'),(100 1⍴'' '' '' '' 'Buzz'),(100 1⍴'' '' '' '' '' '' 'Whizz')
N←(A∊⊂'')/⍳100
A[N]←N
T←(×+/(⍕100 1⍴⍳100)∊'3')/⍳100
A[T]←(⍴T)/⊂'Fizz'
A
⍝ 有100名学生排成一队按顺序报数
A←⍳100
⍝ 如果所报数字是3的倍数
M←0=3|⍳100
⍝ 那么不能说该数字,而要说Fizz
A[M/⍳100]←⊂'Fizz'
⍝ 如果所报数字是5的倍数
M←0=5|⍳100
⍝ 那么不能说该数字,而要说Buzz
A[M/⍳100]←⊂'Buzz'
⍝ 如果所报数字是7的倍数
M←0=7|⍳100
⍝ 那么不能说该数字,而要说Whizz
A[M/⍳100]←⊂'Whizz'
⍝ 如果所报数字是3和5的倍数
M←0=15|⍳100
⍝ 那么不能说该数字,而是要说FizzBuzz
A[M/⍳100]←⊂'FizzBuzz'
⍝ 如果所报数字是3和7的倍数
M←0=21|⍳100
⍝ 那么不能说该数字,而是要说FizzWhizz
A[M/⍳100]←⊂'FizzWhizz'
⍝ 如果所报数字是5和7的倍数
M←0=35|⍳100
⍝ 那么不能说该数字,而是要说BuzzWhizz
A[M/⍳100]←⊂'BuzzWhizz'
⍝ 如果所报数字是3、5和7的倍数
M←0=105|⍳100
⍝ 那么不能说该数字,而是要说FizzBuzzWhizz
A[M/⍳100]←⊂'FizzBuzzWhizz'
⍝ 如果所报数字中包含了3
M←∨/(⍕100 1⍴⍳100)∊'3'
⍝ 那么只报Fizz
A[M/⍳100]←⊂'Fizz'
⍝ 显示结果
A

┌─┬─┬────┬─┬────┬────┬─────┬─┬────┬────┬──┬────┬───[...277 columns of output...]──┐
│1│2│Fizz│4│Buzz│Fizz│Whizz│8│Fizz│Buzz│11│Fizz│Fiz[...277 columns of output...]zz│
└─┴─┴────┴─┴────┴────┴─────┴─┴────┴────┴──┴────┴───[...277 columns of output...]──┘
class Fizz
  def initialize(*ns)
    h = Hash[ns.zip(%w(Fizz Buzz Whizz))]
    @rs = [->(i){i.to_s.index(ns[0].to_s) ? h[ns[0]] : ''}, ->(i){ns.inject('') {|s,n| i%n==0 ? s+h[n] : s}}, ->(i){i.to_s}]
  end
  def rule(i)
    @rs.each {|r| s = r.call(i); return s if s.length > 0 }
  end
  def reports
    1.upto(100).each {|i| puts rule(i)}
  end
end
Fizz.new(3,5,7).reports

quakewang 果然高大上

#15 楼 @quakewang 好像规定必须 10 行啊

@5swords :plus1: 符号 ->这是依次执行的意思么?

#26 楼 @jyootai 是 Ruby1.9.3 之后的语法糖…等同于 lambda

匿名 #28 2014年04月30日

乍一看感觉这图里是藏了什么信息的…

@cassiuschen 有木有这样符号的相关文档?

import Data.Char
tran (a,b,c) n =
  if a `elem` (show n) then "Fizz"   -- rule5
  else if result /= [] then result else  show n
  where
    result = check a "Fizz" ++ check b "Buzz" ++ check c "Whizz"
    check t s = if n `mod` (digitToInt t) == 0 then s else []

main = do (a:',':b:',':c:_) <- getContents
          mapM_ (putStrLn . (tran (a,b,c))) [1..100]

没有 Julia 不好玩!

#32 楼 @yfractal 贴一下你的解决方案吧

#33 楼 @Martin91 没做啊。。。我太懒了。。。

n = [3, 5, 7] w = %w(Fizz Buzz Whizz) ns = [n.inject(:)]+n.combination(2).map { |b| b.inject(:) } + n ws = [w.join]+w.combination(2).map { |b| b.join } + w 1.upto(20).map { |i| i.to_s =~ /#{n[0]}/ ? w[0] : (f = ns.find_index { |l| i % l == 0 }) ? ws[f] : i }

floor 15 good

n = [3, 5, 7]
w = %w(Fizz Buzz Whizz)
l = lambda { |a, fn| [fn.call(a)] + a.combination(2).map { |b| fn.call(b) } + a }
ns = l.call(n, lambda { |a| a.inject(:*) })
ws = l.call(w, lambda { |a| a.join })
1.upto(10).map { |i| i.to_s =~ /#{n[0]}/ ? w[0] : (f = ns.find_index { |l| i % l == 0 }) ? ws[f] : i }
38 楼 已删除
39 楼 已删除
40 楼 已删除
41 楼 已删除
42 楼 已删除

活动已经结束了~多谢大家的关注!以后有类似的活动猫姐会第一时间来 Ruby China 宣传给大家~

函数数据流风格

fizzfy = ->((n, words)) {n % 3 == 0 ? [n, words << 'Fizz'] : [n, words]}
buzzfy = ->((n, words)) {n % 5 == 0 ? [n, words << 'Buzz'] : [n, words]}
whizzfy = ->((n, words)) {n % 7 == 0 ? [n, words << 'Whizz'] : [n, words]}
special_fizzfy = -> ((n, words)) {n.to_s.include?("3") ? [n, ["Fizz"]] : [n, words]}
initialize = ->(n) {[n, []]}
normalize = -> ((n, words)) {words.empty? ? n : words.reduce(:+)}

puts (1..100).map(&initialize).map(&fizzfy).map(&buzzfy).map(&whizzfy).map(&special_fizzfy).map(&normalize)
jobthoughtworks 扒一扒 ThoughtWorks 面试的那点事 提及了此话题。 04月03日 10:57
需要 登录 后方可回复, 如果你还没有账号请 注册新账号