0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Y字路巡り

Posted at
Source.cpp
#include "Header.h"

struct PlaceList{
	std::string nowPlace;
	std::string oldPlace;
	std::string leftPlace;
	std::string rightPlace;
};

PlaceList placeList[PLACEPATERN] = {
	{"A","B","D","C",},
	{"B","C","E","A",},
	{"C","A","F","B",},
	{"A","C","B","D",},
	{"C","B","A","F",},
	{"B","A","C","E",},

	{"A","D","C","B",},
	{"B","E","A","C",},
	{"C","F","B","A",},
	{"D","A","E","F",},
	{"E","B","F","D",},
	{"F","C","D","E",},

	{"D","E","F","A",},
	{"E","F","D","B",},
	{"F","D","E","C",},
	{"D","F","A","E",},
	{"F","E","C","D",},
	{"E","D","B","F",},
};

void Yjiro::initPlaceInfo()
{
	m_nowPlace = "A";
	m_oldPlace = "B";
}

void Yjiro::moveBack()
{
	std::swap(m_oldPlace, m_nowPlace);
}

void Yjiro::moveLeft(const unsigned int& placeInfoNumber)
{
	m_oldPlace = m_nowPlace;
	m_nowPlace = placeList[placeInfoNumber].leftPlace;
}

void Yjiro::moveRight(const unsigned int& placeInfoNumber)
{
	m_oldPlace = m_nowPlace;
	m_nowPlace = placeList[placeInfoNumber].rightPlace;
}

const unsigned int Yjiro::getPlaceInfoNumber()
{
	for(int i=0; i<PLACEPATERN; i++){
		if((placeList[i].nowPlace == m_nowPlace) && placeList[i].oldPlace == m_oldPlace)
			return i;
	}
}

void Yjiro::move(const char& input)
{
	if(input == 'b'){
		moveBack();
		return;
	}
	const unsigned int placeInfoNumber = getPlaceInfoNumber();
	input == 'r' ? moveRight(placeInfoNumber) : moveLeft(placeInfoNumber);
}

const std::string Yjiro::solve(const std::string& input)
{
	initPlaceInfo();
	std::string result = m_nowPlace;
	for(int i=0; i<input.size(); i++){
		move(input.at(i));
		result += m_nowPlace; 
	}
	return result;
}

void Yjiro::test(const std::string& input, const std::string& output)
{
	std::string result = solve(input);
	std::cout << output << ":" << result << std::endl;
	if(result == output){
		std::cout << "test is OK!" << std::endl;
	}else{
		std::cout << "test is NG!" << std::endl;
	}
}

int main()
{
	Yjiro yjiro;
	yjiro.test("b", "AB");
	yjiro.test("l", "AD");
	yjiro.test("r", "AC");
	yjiro.test("bbb", "ABAB");
	yjiro.test("rrr", "ACBA");
	yjiro.test("blll", "ABCAB");
	yjiro.test("llll", "ADEBA");
	yjiro.test("rbrl", "ACADE");
	yjiro.test("brrrr", "ABEDAB");
	yjiro.test("llrrr", "ADEFDE");
	yjiro.test("lrlll", "ADFEDF");
	yjiro.test("lrrrr", "ADFCAD");
	yjiro.test("rllll", "ACFDAC");
	yjiro.test("blrrrr", "ABCFEBC");
	yjiro.test("brllll", "ABEFCBE");
	yjiro.test("bbrllrrr", "ABACFDEFD");
	yjiro.test("rrrrblll", "ACBACABCA");
	yjiro.test("llrlrrbrb", "ADEFCADABA");
	yjiro.test("rrrbrllrr", "ACBABEFCAD");
	yjiro.test("llrllblrll", "ADEFCBCADEB");
	yjiro.test("lrrlllrbrl", "ADFCBEFDFCB");
	yjiro.test("lllrbrrlbrl", "ADEBCBACFCAB");
	yjiro.test("rrrrrrlrbrl", "ACBACBADFDEB");
	yjiro.test("lbrbbrbrbbrr", "ADABABEBCBCFE");
	yjiro.test("rrrrlbrblllr", "ACBACFCACFDAB");
	yjiro.test("lbbrblrlrlbll", "ADADFDABCFDFED");
	yjiro.test("rrbbrlrlrblrl", "ACBCBADFEBEFDA");
	yjiro.test("blrllblbrrrrll", "ABCFDADEDABEDFE");
	yjiro.test("blrllrlbllrrbr", "ABCFDABCBEFDEDA");
	yjiro.test("lbrbbrllllrblrr", "ADABABEFCBEDEBCF");
	yjiro.test("rrrrbllrlrbrbrr", "ACBACABCFDEDADFC");
	return 0;
}

Header.h
#ifndef _HEADER_H
#define _HEADER_H

#include <string>
#include <iostream>

#define PLACEPATERN 18

class Yjiro
{
public:
	void test(const std::string& input, const std::string& output);
private:
	const std::string solve(const std::string& input);
	void initPlaceInfo();
	const unsigned int getPlaceInfoNumber();
	void move(const char& input);
	void moveBack();
	void moveLeft(const unsigned int& placeInfoNumber);
	void moveRight(const unsigned int& placeInfoNumber);
	std::string m_nowPlace;
	std::string m_oldPlace;
};

#endif
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?