メモ

yukicoderでゆるふわgolf

yukicoder No.587 七対子

問題はこちら
No.587 七対子 - yukicoder

各文字が何個あるかを数える。
ちょうど2個ある文字がちょうど6種類あるとき、その時に限り、残りの1種類と同じ文字を加えることで7ペアにできる

a[999],ans,c,i;
main(){
	for(i=0;i<13;i++)a[getchar()]++;
	for(i='a';i<='z';i++){
		if(a[i]==2)c++;
		if(a[i]==1)ans=i;
	}
	if(t==6)printf("%c",x);
	else printf("Impossible");
}

2つのfor文のindexの範囲が被っていないので、そのまま合体させることができる

a[999],t,x;
main(i){
	for(;i<128;a[++i]==1?x=i:0)a[getchar(t+=a[i]==2)]++;
	printf(t-6?"Impossible":"%c",x);
}

104B

別方針も考えたが110Bにしかならず

a[999],s,t;
main(x){
	for(;(x=getchar())-10;s+=1<<4/++a[x])t^=1<<x;
	printf(s-136?"Impossible":"%c",x=log2(t)+96);
}
//s+=++a[x]==2 //aabbccddeefffで死ぬ
//s+=2/a[x] //1+1=2+0なのでaabbccdd eeefghで死ぬ
//s+=1<<2/a[x] //2+2+2=4+1+1なのでaabbcc ddddefghで死ぬ

2018/01/25追記

aが余っているのでxの代わりにつかうことができる。またそれにより出力がputsでよくなるため大幅に短縮できる。

それから自明な1Bの短縮を合わせて計9B短縮

a[999],t;
main(i){
	for(;i<128;a[++i]&1?*a=i:0)a[getchar(t+=a[i]==2)]++;
	puts(t-6?"Impossible":a);
}

95B