メモ

yukicoderでゆるふわgolf

yukicoder No.591 (^o^)/

問題はこちら
No.591 (^o^)/ - yukicoder

言われたとおりにやるだけ

main(){
	char a,b;
	scanf("%c %c",&a,&b);//"%c%c"だと2文字目が得られない(改行の読み飛ばし)
	printf("(%c%c%c)/",a,b,a);
}

読み込みを次のようにまとめることが出来る

a;
main(){
	gets(gets(&a)+1);
	printf("(%s%c)/",&a,a);
}

50B
aをメインの引数にするとセグフォになる。ぐぬぬ
一応解説。
&aはint*型だが、getsの引数に与えて暗黙にchar*に変換され、入力の1文字がaの下位8bitに入る。ここまではよくやる。
ここでgetsの返り値はchar*なので(実際にはincludeを省略しているのでint!)、+1することにより、aの次の8bitを指すアドレスを得る事ができる。
よって、例えばサンプル1が入力として与えられた場合、gets(gets(&a)+1)が終わった時点でa='^'+'o'*256となっている。
つまり(char*)&aは"^o\0"となっているので、最初の2文字はまとめて出力することができる。
更に、%cで出力する際にint型の変数を渡すと下位8bitのみが使われるので、3文字目もそのまま出力することができる。