我正在解决这个问题http://www.spoj.com/problems/NEXTODD/
在这个问题中你必须用最小的字节数来解决它。
我的代码: - {print$1%2?$1+2:$1+1}
,即21个字节。
最佳解决方案是10个字节。
有没有其他方法可以在不使用print或printf语句的情况下打印$ 0,这可以帮助我减少代码。
答案 0 :(得分:4)
在AWK的模式/动作语言中,当模式评估为true时,存在打印$ 0的隐式动作,但没有描述明确的动作。关于您的挑战,请参阅此示例(13个字符):
{$0+=$0%2+1}1
帽子提示给'某个人',他在抽奖时比我更快发布代码。
答案 1 :(得分:3)
缩短两个字符:
'{$0%2?$0+=2:$0+=1}1'
1
此处代替{print $0}
。 1
是模式,匹配任何记录。 {print $0}
是默认操作。
已编辑。更好(-6个字符):
{$0+=$0%2?2:1}1
答案 2 :(得分:2)
您只需要条件,因为它永远不会为非零,因此将始终调用打印当前记录的默认操作:
awk '$0+=$0%2+1'
答案 3 :(得分:0)
我也为此研究了一个技巧..这可以打高尔夫吗?
{$0=or($0+1,1)}1