ひねりなくC++で解いてみました。
もう少し工夫をしたかったのですが、途中でもたついたら、ここに到達するだけで1時間を消費してしまいました。
お題はこちらです。
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
struct Cell
{
int value;
int length;
Cell() : value(0), length(0) {}
};
int get_length(Cell table[5][5], int row, int col)
{
if(table[row][col].length == 0)
{
table[row][col].length = 1;
if((row > 0) && (table[row][col].value < table[row - 1][col].value))
{
table[row][col].length = std::max(get_length(table, row - 1, col) + 1, table[row][col].length);
}
if((row < 4) && (table[row][col].value < table[row + 1][col].value))
{
table[row][col].length = std::max(get_length(table, row + 1, col) + 1, table[row][col].length);
}
if((col > 0) && (table[row][col].value < table[row][col - 1].value))
{
table[row][col].length = std::max(get_length(table, row, col - 1) + 1, table[row][col].length);
}
if((col < 4) && (table[row][col].value < table[row][col + 1].value))
{
table[row][col].length = std::max(get_length(table, row, col + 1) + 1, table[row][col].length);
}
}
return table[row][col].length;
}
std::string solve(const std::string& input)
{
Cell table[5][5];
for(int row = 0; row < 5; ++row)
{
for(int col = 0; col < 5; ++col)
{
table[row][col].value = input[row * 6 + col] - '0';
}
}
int length = 0;
for(int row = 0; row < 5; ++row)
{
for(int col = 0; col < 5; ++col)
{
length = std::max(get_length(table, row, col), length);
}
}
std::ostringstream oss;
oss << length;
return oss.str();
}
void test(const std::string& input, const std::string& expected)
{
std::string actual = solve(input);
if(expected == actual)
{
std::cout << "." << std::flush;
}
else
{
std::cout << "\ninput: " << input << ", expected: " << expected << ", acutal: " << actual << std::endl;
}
}
int main(int argc, char* argv[])
{
/*0*/ test( "01224/82925/69076/32298/21065", "6" );
/*1*/ test( "03478/12569/03478/12569/03478", "10" );
/*2*/ test( "09900/28127/87036/76545/87650", "10" );
/*3*/ test( "77777/77777/77777/77777/77777", "1" );
/* ... */
/*50*/ test( "02489/77571/84873/03879/84460", "7" );
std::cout << std::endl;
return 0;
}