这是RubyMonk上的错误还是我逻辑思维中的一些缺陷?

时间:2016-01-28 06:19:08

标签: logic

我正在使用Rubymonk.com学习Ruby

以下是项目说明:

招聘程序员 - Ruby中的布尔表达式

让我们假设您正在为新创业公司招募团队成员!给定一个候选者,你需要一个表达式来告诉你它们是否适合某些类型。这是候选对象的外观:

candidate.years_of_experience = 4
candidate.github_points = 293
candidate.languages_worked_with = ['C', 'Ruby', 'Python', 'Clojure']
candidate.applied_recently? = false
candidate.age = 26

我们希望聘请经验丰富的Ruby程序员。我们理想的候选人有2年或更多年的经验,但有些程序员甚至在此之前变得非常好。我们将考虑他们的Github积分(一个优秀的程序员的一个很好的指标),即使他们没有经验,具有500 Github积分或更多的候选人也可以申请。还有一个问题:Ruby是一种很酷且令人敬畏的语言,很多聪明的年轻人都非常擅长。我们喜欢那些孩子,但对于这项特殊的工作,我们宁愿让他们在学校学习而不是工作。让我们筛选出年龄小于15岁的候选人。此外,我们不想考虑最近申请参加此次开幕的候选人。

基于以上描述,我得出结论,下面列出的项目必须为真:

  1. candidate.languages_worked_with.include?('Ruby')
  2. candidate.years_of_exprience> = 2 || candidate.github_points> = 500
  3. candidate.age> 15
  4. candidate.applied_recently? == false
  5. 我的答案是:

    is_an_experienced_programmer = (candidate.years_of_exprience >= 2 
    || candidate.github_points >= 500) && candidate.languages_worked_with.include? 'Ruby' 
    && (candidate.age > 15) && !(candidate.applied_recently?)
    

    然后回答是:

    is_an_experienced_ruby_programmer =  (candidate.years_of_experience >= 2 
    || candidate.github_points >= 500) && (candidate.languages_worked_with.include? 'Ruby') 
    && ! (candidate.age < 15 || candidate.applied_recently?)
    

    我的答案和答案之间的唯一区别是:

     (candidate.age > 15) && !(candidate.applied_recently?)
    

    上面说候选人必须年龄超过15岁并且最近没有申请。

    和答案:

    ! (candidate.age < 15 || candidate.applied_recently?)
    

    上面的代码基本上说,候选人不能小于15岁并且最近没有申请。

    它们不一样吗?或者我的逻辑中有什么缺陷?

2 个答案:

答案 0 :(得分:0)

你唯一缺少的就是&gt; =

(candidate.age >= 15) && !(candidate_applied_recently?)

这就是为什么你可能得错了答案。

希望它有所帮助。

答案 1 :(得分:0)

我得出结论,测试逻辑与RubyMonk上的项目有关: 当我使用下面的代码时,我通过了测试:

is_an_experienced_ruby_programmer =  (candidate.years_of_experience >= 2 || candidate.github_points >= 500) && (candidate.languages_worked_with.include? 'Ruby') && !candidate.applied_recently? && (candidate.age > 15)

当我在下面使用时,我没有通过测试:

is_an_experienced_programmer = (candidate.years_of_exprience >= 2 || candidate.github_points >= 500) && (candidate.languages_worked_with.include? 'Ruby') && (candidate.age > 15) && !(candidate.applied_recently?)

所以

!(candidate.applied_recently?) && (candidate.age > 15)

不同
(candidate.age > 15) && !(candidate.applied_recently?)

在Rubymonk心中?