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