2

我正在解决这个问题http://www.spoj.com/problems/NEXTODD/

在这个问题中,您必须以最少的字节数解决它。

我的代码:-{print$1%2?$1+2:$1+1}这是 21 个字节。

最佳解决方案是 10 个字节。

有没有其他方法可以在不使用 print 或 printf 语句的情况下打印 $0 来帮助我减少代码。

4

4 回答 4

4

在 AWK 的模式/动作语言中,当模式评估为真时,有一个隐含的打印 $0 的动作,但没有描述明确的动作。关于您的挑战,请参阅此示例(13 个字符):

{$0+=$0%2+1}1

向“某个人”致敬,他在抽签上比我更快地发布代码。

于 2013-01-21T07:31:52.013 回答
3

缩短两个字符:

'{$0%2?$0+=2:$0+=1}1'

1在这里而不是{print $0}. 1是模式,匹配任何记录。{print $0}是默认动作。

已编辑。更好(-6 个字符):

{$0+=$0%2?2:1}1

于 2013-01-21T07:09:34.053 回答
2

您所需要的只是条件,因为它永远不会是非零的,因此将始终调用打印当前记录的默认操作:

awk '$0+=$0%2+1'
于 2013-01-21T13:49:38.127 回答
0

我还为此研究了一个技巧..这可以打高尔夫球吗?

{$0=or($0+1,1)}1
于 2013-01-24T10:13:53.493 回答