問題はこちら
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