読者です 読者をやめる 読者になる 読者になる

メモ

yukicoderで遊んでいる競プロゆるふわ勢

yukicoder No.423 ハムスター語初級(数詞)

問題はこちら
No.423 ハムスター語初級(数詞) - yukicoder

入力の末尾に"ham"をつけるだけ……ではない
入力が0のとき、かつその時に限り、入力をそのまま出力することになる

char s[99];
main(){
	gets(s);
	printf(strcmp(s,"ham")?"%sham":"%s",s);
	return 0;
}

入力が"ham"かどうかは4文字目を見れば判別できる

char s[];x;main(){x=!printf(s[3]?"%sham":"%s",gets(s));}

50文字くらいならintに読み込んでも通りそう

s;main(){s=!printf(s>>24?"%sham":"%s",gets(&s));}

出力を縮められないか考える。
"%s\0%sham"+(s>>24?3:0)
みたいなのを短く書きたい。後半部分の猶予は5B
sに入る値は"ham"のとき7168360、"hamu"のとき1970102632
前者のとき0、後者のとき3になるものを探すと、s/4%5というものがあった

s;main(){s=!printf("%s\0%sham"+s/4%5,gets(&s));}

48B