LoginSignup
0
0

More than 5 years have passed since last update.

ボールカウント:野球

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

void BallCount::initNowCountInfo()
{
    for(int i=0; i<COUNTINFONUMBER; i++){
        m_nowCountInfo[i] = 0;
    }
}

void BallCount::ballStrikeOutRenew()
{
    if(m_nowCountInfo[2] == 4){
        m_nowCountInfo[2] = 0;
        m_nowCountInfo[1] = 0;
    }
    if(m_nowCountInfo[1] == 3){
        m_nowCountInfo[2] = 0;
        m_nowCountInfo[1] = 0;
        m_nowCountInfo[0]++;
    }
    if(m_nowCountInfo[0] == 3){
        m_nowCountInfo[2] = 0;
        m_nowCountInfo[1] = 0;
        m_nowCountInfo[0] = 0;
    }
}

void BallCount::s_process()
{
    m_nowCountInfo[1]++;
}

void BallCount::b_process()
{
    m_nowCountInfo[2]++;
}

void BallCount::f_process()
{
    if(m_nowCountInfo[1] != 2)
        m_nowCountInfo[1]++;
}

void BallCount::h_process()
{
    m_nowCountInfo[2] = 4;
}

void BallCount::p_process()
{
    m_nowCountInfo[1] = 3;
}

void BallCount::nowCountInfoRenew(const char& addChar)
{
    std::string result = "";
    if(addChar == 's'){
        s_process();
    }
    if(addChar == 'b'){
        b_process();
    }
    if(addChar == 'f'){
        f_process();
    }
    if(addChar == 'h'){
        h_process();
    }
    if(addChar == 'p'){
        p_process();
    }
    ballStrikeOutRenew();
}

const std::string BallCount::changeString()
{
    std::string result = "";
    for(int i=0; i<COUNTINFONUMBER; i++){
        result += std::to_string(m_nowCountInfo[i]);
    }
    result += ",";
    return result;
}

const std::string BallCount::solve(const std::string& input)
{
    initNowCountInfo();
    std::string result;
    for(int i=0; i<input.size(); i++){
        nowCountInfoRenew(input.at(i));
        result += changeString();
    }
    result.erase(--result.end());
    return result;
}

void  BallCount::test(const std::string& inputStr)
{
    std::string input, output;
    int index = inputStr.find("-", 0);
    input = inputStr.substr(0,index-1);
    output = inputStr.substr(index+3);

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

int main()
{
    BallCount bc;
    bc.test("s -> 010");
    bc.test("sss -> 010,020,100");
    bc.test("bbbb -> 001,002,003,000");
    bc.test("ssbbbb -> 010,020,021,022,023,000");
    bc.test("hsbhfhbh -> 000,010,011,000,010,000,001,000");
    bc.test("psbpfpbp -> 100,110,111,200,210,000,001,100");
    bc.test("ppp -> 100,200,000");
    bc.test("ffffs -> 010,020,020,020,100");
    bc.test("ssspfffs -> 010,020,100,200,210,220,220,000");
    bc.test("bbbsfbppp -> 001,002,003,013,023,000,100,200,000");
    bc.test("sssbbbbsbhsbppp -> 010,020,100,101,102,103,100,110,111,100,110,111,200,000,100");
    bc.test("ssffpffssp -> 010,020,020,020,100,110,120,200,210,000");
    return 0;
}
Header.h
#ifndef _HEADER_H
#define _HEADER_H

#include <string>
#include <iostream>

#define COUNTINFONUMBER 3

class BallCount
{
public:
    void test(const std::string& inputStr);
    int m_nowCountInfo[COUNTINFONUMBER];
private:
    void initNowCountInfo();
    const std::string solve(const std::string& input);
    const std::string changeString();
    void nowCountInfoRenew(const char& addChar);
    void ballStrikeOutRenew();
    void s_process();
    void b_process();
    void f_process();
    void h_process();
    void p_process();
};

#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