合法SESおじさんがPGを目指す日記

合法SESおじさんがICT現場でひたすら足搔く様子はなるたけ書かない技術ブログです

ABC始めました 〜今は遠き緑の勲章〜

こんばんは。せのです。

ファイターズの勝利に酔いしれてたらこんな時間になってました。

定時上がり出来たので更新します。

senobro.hatenablog.com

さて、前回のあらすじです。
・ABCのB問題に挑戦

その前にABCとはなんぞやから始めますか。

詳しくはこちら。

AtCoder Beginner Contest 089 - AtCoder

AtCoder Beginner Contest(ABC)とは?
プログラミングには興味あるけど、何をしていいかわからない...
そんな人のためのコンテンツです。
原文ママ

つまり「見習いプログラマーはこれでコード書いて知的好奇心を満たせ」ってやつです。
合法SESおじさんは見習いプログラマーにもなれていない感が満載なので、
こうやってひたすらコードを書くしかないのです

そんなわけで今回挑戦した問題はこれ!

B - Hina Arare

難しかったです。結局自力でB問題を解くことは出来ませんでした。
何も理解してないんだな俺ってのを痛感しました。吊ってきます

僕が無い頭フル活用して調べながら必死こいて書いたクソコードがこちらです。
ローカル開発環境で書いたんですが、コンパイルエラーで提出すら出来ませんでした。まじ死にてえ

#include <bits/stdc++.h>
using namespace std;

enum arare{
	P,
	W,
	G,
	Y
};

int main() {
	enum arare S;
	int N;
	int A[3] = {};
//	string S;

	cin >> N;
	cin >> S;

	for (int i = 0; i < N; i++) {

	switch(S){
		case P:
			A[0] = 1;
			break;
		case W:
			A[1] = 1;
			break;
		case G:
			A[2] = 1;
			break;
		case Y:
			A[3] = 1;
			break;
		defalt:
			break;
	}

	cout << A[0] << endl;
	cout << A[1] << endl;
	cout << A[2] << endl;
	cout << A[3] << endl;

	if ( (A[0] == 1 && A[1] == 1 && A[2] == 1) || (A[1] == 1 && A[2] == 1 && A[3] == 1 ) ) {
		cout << "Three" << endl;
	}else if( (A[0] == 1 && A[1] == 1 && A[2] == 1 && A[3] == 1 ) ){
		cout << "Four" << endl;
	}else{
		cout << "error" << endl;
	}
} 

ちなみに、人様の書いたコードでコンパイル通って満点だったコードがこちらになります。
将来拡張性を持たせるために少々アレンジしてます。
え?拡張性なんてABCの問題に無い?うっせーな!あるかもしれないじゃん!

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	bool flag = false;
	for(int i = 0; i<n; i++){
		string s;
		cin >> s;
		if (s=="Y"){
			flag = true;
		}else{
			;//nothing to do
		}
	}
	cout << ( flag ? "Four" : "Three" ) << endl;
}

はい素晴らしいですね。ちゃんと満点……って待て待て!
これバグコードじゃねえか!
全網羅テストして気付きましたが、明らかにバグコードです。

これだとYがあったら1つでも2つでもFourになります。
少し考えますので時間下さい。
考え方は良いと思うので、どんな状態でも正しくthreeとFourが出るコードに修正してみます。

もう11時も近いので寝ます。
続きはまた次回。

期待しないで待ってて下さい。