Memorandums?

This blog is written about technical-discovery and daily-event.

AOJを解く part3

problem 2522:

ユーザーが設定したパスワードが条件を満たすかどうか判定せよ

  1. 6文字以上である
  2. 数字・大文字英字・小文字英字をそれぞれ1つ以上含んでいる

これらの条件を満たせば,"VALID", 満たしていなければ,"INVALID"と表示せよ

#include<stdio.h>

int main()
{
	int i = 0;
	char password[20];
	int check = 0b0000;
	
	scanf("%s", password);
	
	do{
		if(password[i]>='0'&&password[i]<='9')	check |= 0b0001;
		if(password[i]>='a'&&password[i]<='z')	check |= 0b0010;
		if(password[i]>='A'&&password[i]<='Z')	check |= 0b0100;
		i++;
	}while(password[i] != '\0');
	
	if(i >= 6)	check |= 0b1000;
	
	puts((check == 0b1111) ? ("VALID") : ("INVALID"));
	
	return 0;
}

このコードのポイントは以下の通り.

  1. checkを4bit二進数とし,4つの条件を満たすかをbitで管理→1変数簡単化
  2. 三項演算子で出力も1行