2a79d42bd6
Update World API and implementation: rename size fields to sizeX_/sizeY_/sizeZ_, add helpers such as mineAllPositive, positiveAverage, topPositiveSum and a sort helper, and fix related surface/mine semantics for dynamic columns.
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
class Robot;
|
|
|
|
/* A 3-D grid world where robots mine positive-value blocks and trigger effects. */
|
|
class World {
|
|
public:
|
|
explicit World ( int x = 5, int y = 5, int z = 10 );
|
|
|
|
int getSizeX () const { return sizeX_; }
|
|
int getSizeY () const { return sizeY_; }
|
|
int getSizeZ () const { return sizeZ_; }
|
|
|
|
int getValue ( int x, int y, int z ) const;
|
|
void setValue ( int x, int y, int z, int value );
|
|
void setColumn ( int x, int y, const std::vector<int>& values );
|
|
std::vector<int> getColumn ( int x, int y ) const;
|
|
void clear ();
|
|
|
|
int getSurfaceLevel ( int x, int y ) const;
|
|
int getSurfaceValue ( int x, int y ) const;
|
|
bool hasPositiveValues () const;
|
|
int remainingPositiveSum () const;
|
|
|
|
|
|
int mine ( int x, int y );
|
|
int checkEffects ( int x, int y );
|
|
int mineAllPositive ( int x, int y );
|
|
|
|
double positiveAverage ( int x, int y ) const;
|
|
int topPositiveSum ( int x, int y, int blocks ) const;
|
|
void sortPositiveValuesInColumnAscending ( int x, int y );
|
|
void rearrange ();
|
|
|
|
void display () const;
|
|
void display ( const std::vector<std::unique_ptr<Robot>>& robots) const;
|
|
|
|
private:
|
|
int sizeX_ = 5;
|
|
int sizeY_ = 5;
|
|
int sizeZ_ = 10;
|
|
std::vector<std::vector<std::vector<int>>> grid_;
|
|
|
|
void init();
|
|
void validateXY ( int x, int y ) const;
|
|
void validateZ ( int z ) const;
|
|
|
|
};
|