golfテクを4つ紹介する

,

適当な基準で$4$つ選びました。

C言語 三項演算子cast

三項演算子の第$2,3$項目の型が一致することを用いてcastできる。

main(ptr) {
    *ptr; // error: invalid type argument of unary ‘*’ (have ‘int’)
    *(0?"":ptr); // ok
}

http://golf.shinh.org/reveal.rb?Merge+Digits/nu%28tails%29_1461951633&c (tailsさん)

o;main(p,q){for(;~scanf("%ms%s"+o,&p,q);putchar(o?:10))o=*(0?"":bcmp(p,q)>0?p++:q++);}

perl/ruby/python 他言語経由での入力

読み取りに強い言語で入力を受けて処理本体が強い言語でevalすると短くなる場合がある。

http://atc002.contest.atcoder.jp/submissions/977052 (%20さん)

read N M P;python -c"print pow($N,$P,$M)"

参考として、普通に書くと:

n,m,p=map(int,input().split());print(pow(n,p,m))

bash 空白文字の差の利用

bashにとっては非空白文字だがwcにとっては空白文字であるといった認識の不一致がある文字が存在する。これを使えば'\の分を縮めることができる。

http://yukicoder.me/submissions/115983

垂直tab\vの例。tr n \ |wc -wから$1$byte縮む。

$ cat a.sh
tr n 
     |wc -w%

$ xxd a.sh
00000000: 7472 206e 200b 7c77 6320 2d77            tr n .|wc -w

sed等 改行文字の修正

いくらかのサービスでは提出時の改行コードが\r\nとなる。改行が他の文字で代替できない言語で問題になる。 しかし、(特にAtCoderでのそれは)ブラウザを介さず直接POSTすることで回避できる場合が多い。

つまりHTTP requestをブラウザを介さず発行すればよいため、適当な提出用scriptを借りてくるだけで回避できる。 いったん普通に提出しブラウザのDevelopper toolsのCopy as cURL機能を用いてcurlコマンドを得て%0D%0A%0Aに置換して実行するのでもよい。