mirror of
https://github.com/mx42/codingame.git
synced 2026-01-14 05:39:51 +01:00
Adding medium/hard puzzles & challenges...
This commit is contained in:
109
puzzles/medium/last-crusade-episode-1.cpp
Normal file
109
puzzles/medium/last-crusade-episode-1.cpp
Normal file
@@ -0,0 +1,109 @@
|
||||
// https://www.codingame.com/ide/puzzle/the-last-crusade-episode-1
|
||||
// Xavier Morel - 2016-03-16
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define FROM_LEFT 0
|
||||
#define FROM_TOP 1
|
||||
#define FROM_RIGHT 2
|
||||
|
||||
#define NOPE 0
|
||||
#define LEFT 1
|
||||
#define RIGHT 2
|
||||
#define BOTT 3
|
||||
|
||||
int types[14][3] = {
|
||||
// LEFT TOP RIGHT
|
||||
{NOPE, NOPE, NOPE}, // type 0
|
||||
{BOTT, BOTT, BOTT}, // type 1
|
||||
{RIGHT, NOPE, LEFT}, // type 2
|
||||
{NOPE, BOTT, NOPE}, // type 3
|
||||
{NOPE, LEFT, BOTT}, // type 4
|
||||
{BOTT, RIGHT, NOPE}, // type 5
|
||||
{RIGHT, NOPE, LEFT}, // type 6
|
||||
{NOPE, BOTT, BOTT}, // type 7
|
||||
{BOTT, NOPE, BOTT}, // type 8
|
||||
{BOTT, BOTT, NOPE}, // type 9
|
||||
{NOPE, LEFT, NOPE}, // type 10
|
||||
{NOPE, RIGHT, NOPE}, // type 11
|
||||
{NOPE, NOPE, BOTT}, // type 12
|
||||
{BOTT, NOPE, NOPE}
|
||||
};
|
||||
|
||||
int getDir(int type, int pos)
|
||||
{
|
||||
cerr << "Cell is of type " << type << " and entered from " << pos << endl;
|
||||
return types[type][pos];
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int W; // number of columns.
|
||||
int H; // number of rows.
|
||||
cin >> W >> H; cin.ignore();
|
||||
int grid[H+1][W+1];
|
||||
for (int i = 0; i < H; i++) {
|
||||
for (int j = 0; j < W; j++) {
|
||||
int x;
|
||||
cin >> x;
|
||||
cerr << x << endl;
|
||||
grid[i][j] = x;
|
||||
}
|
||||
cin.ignore();
|
||||
}
|
||||
int EX;
|
||||
cin >> EX; cin.ignore();
|
||||
|
||||
cerr << "Large: " << W << " Haut: " << H << endl;
|
||||
for (int i = 0; i < H; i++) {
|
||||
cerr << "|";
|
||||
for (int j = 0; j < W; j++) {
|
||||
cerr << grid[i][j] << " ";
|
||||
}
|
||||
cerr << endl;
|
||||
}
|
||||
cerr << "----------" << endl;
|
||||
|
||||
|
||||
// game loop
|
||||
while (1) {
|
||||
int XI;
|
||||
int YI;
|
||||
string pos_str;
|
||||
int pos;
|
||||
cin >> XI >> YI >> pos_str; cin.ignore();
|
||||
|
||||
if (pos_str == "TOP") {
|
||||
pos = FROM_TOP;
|
||||
} else if (pos_str == "LEFT") {
|
||||
pos = FROM_LEFT;
|
||||
} else if (pos_str == "RIGHT") {
|
||||
pos = FROM_RIGHT;
|
||||
} else {
|
||||
cerr << "Unrecognized entrance..." << endl;
|
||||
}
|
||||
|
||||
cerr << "Cell at " << XI << "x" << YI << endl;
|
||||
int dir = getDir(grid[YI][XI], pos);
|
||||
cerr << "Dir: " << dir << endl;
|
||||
switch (dir) {
|
||||
case LEFT:
|
||||
XI--;
|
||||
break;
|
||||
case RIGHT:
|
||||
XI++;
|
||||
break;
|
||||
case BOTT:
|
||||
YI++;
|
||||
break;
|
||||
default:
|
||||
cerr << "WUT?" << endl;
|
||||
}
|
||||
cout << XI << " " << YI << endl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user