我正在hackerrank进行练习,我要求比较一组三胞胎以获得分数。在我最初提交之后,我想尝试一些更优雅的东西(也就是说有更少的条件),所以我做了以下代码:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core"
publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0"
newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
但我收到以下错误:
def solve(a0, a1, a2, b0, b1, b2)
# Complete this function
aS = 0
bS = 0
alpha = [a0, a1, a2]
beta = [b0, b1, b2]
(1..3).each do |i|
if (alpha.(i) > beta.(i)) then aS++ end
if (alpha.(i) < beta.(i)) then bS++ end
end
return aS, bS
end
如果我删除每个if语句的solution.rb:12: syntax error, unexpected keyword_end
.(i) > beta.(i)) then aS++ end
^
solution.rb:13: syntax error, unexpected keyword_end
.(i) < beta.(i)) then bS++ end
^
solution.rb:31: syntax error, unexpected end-of-input, expecting keyword_end
,我会收到一个新错误,指出语法错误,意外的输入结束,期望keyword_end位于类的end
。
我最好的猜测是,我没有正确关闭或构建我的if,我希望有人能指出我正确的方向。
答案 0 :(得分:4)
Ruby没有增量一元运算符。相反,bS+=1
。请参阅以下内容作为使用irb
irb(main):001:0> x = 2
=> 2
irb(main):002:0> if x > 1 then x++ end
SyntaxError: (irb):2: syntax error, unexpected keyword_end
from /opt/chefdk/embedded/bin/irb:11:in `<main>'
irb(main):003:0> if x > 1 then x+=1 end
=> 3
答案 1 :(得分:3)
Ruby中没有增量运算符++
,而是使用value += 1
。
尝试:
def solve(a0, a1, a2, b0, b1, b2)
aS = 0
bS = 0
alpha = [a0, a1, a2]
beta = [b0, b1, b2]
(0..2).to_a.each do |i|
aS += 1 if alpha[i] > beta[i]
bS += 1 if alpha[i] < beta[i]
end
[aS, bS]
end
p solve(1, 2, 3, 4, 5, 6)
# => [0, 3]
在Ruby中,您不需要指定return
它将是您在函数(或范围)中放置的最后一个值,您也必须要转换为数组范围( 1..3),并且当您使用它的每个索引来检查alpha
和beta
数组时,当索引获取时,您将获得nil
数字3,因为这些数组上没有索引3,请尝试使用(0..2).to_a
要增加初始变量,请使用+=
代替++
并检查数组的索引,您可以使用方括号alpha[i]
来执行此操作(不需要使用方括号syntax error
点或作为方法)。
要返回多个值,请尝试将其作为数组执行,只需&#34; plain&#34;对象将抛出if ... then ... end
。
do_something if this_happens
可缩短为@ECATS_ID