2

この質問を解決しています http://www.spoj.com/problems/NEXTODD/

この質問では、最小バイト数で解決する必要があります。

私のコード:-{print$1%2?$1+2:$1+1}これは21バイトです。

最適なソリューションは 10 バイトです。

コードを減らすのに役立つ print または printf ステートメントを使用せずに $0 を印刷する他の方法はありますか?

4

4 に答える 4

4

AWK のパターン/アクション言語では、パターンが true と評価されたときに $0 を出力するという暗黙のアクションがありますが、明示的なアクションは記述されていません。あなたの課題については、次の例 (13 文字) を参照してください。

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

抽選で私よりもコードを投稿するのが早かった「ある人」に敬意を表します。

于 2013-01-21T07:31:52.013 に答える
3

2文字短く:

'{$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 に答える