やりたいこと
使用言語はJavaScript
Paiza.ioのオンライン環境で実行
塗りつぶしのマス同士の間隔をX軸ごと、Y軸ごとに取得したい
X軸だと座標(3,2)と座標(4,2),座標(2,5)と座標(9.5),座標(4,7)と座標(7,7)の間隔を配列に取得
重複する間隔は不要
コード例
test.js
process.stdin.resume();
process.stdin.setEncoding('utf8');
var beforeX;
var afterX;
var beforeY;
var afterY;
var beforeID;
var afterID;
//ボール構造体
function ballStruct(){
this.ID="";
this.X="";
this.Y="";
this.BallX="";
this.BallY="";
}
//ボール構造体の配列
var bsArr=[];
//データ定義
for(var i=1;i<=9;i++){
var tmp=new ballStruct();
tmp.ID=i;
if(i<4){
tmp.Y=4.5;
tmp.BallY=3;
}else if(i<7){
tmp.Y=3;
tmp.BallY=2;
}else{
tmp.Y=1.5;
tmp.BallY=1;
}
if(i%3==1){
tmp.X=1.9;
tmp.BallX=1;
}else if(i%3==2){
tmp.X=4;
tmp.BallX=2;
}else{
tmp.X=5.7;
tmp.BallX=3;
}
bsArr.push(tmp);
}
//マス定義
var distinct=[1,2,3];
var distinct2=[1,2,3];
var bflag=false;
var aflag=false;
var pitchX=[];
var pitchY=[];
//X
for(var i=0;i<=distinct2.length-1;i++){
for(var j=0;j<=distinct.length-1;j++){
beforeID=BallXYToBallID(distinct[j],distinct2[i]);
//最初に検索出来たものを最初の比較対象とする
if(beforeID!=-1){
//最初に見つけたボールのIDからXY座標を取得
beforeX=BallIDToX(beforeID);
bflag=true;
}
//最初の比較対象が見つかっていれば、隣を探し、処理をする
if(bflag){
afterID=BallXYToBallID(distinct[j+1],distinct2[i]);
if(afterID!=-1){
afterX=BallIDToX(afterID);
aflag=true;
}
}
if(aflag){
var compare=Math.abs(beforeX-afterX);
if(pitchX.indexOf(compare)==-1){
pitchX.push(compare);
aflag=false;
beforeX=afterX;
}else{
aflag=false;
}
}
}
bflag=false;
}
//Y
for(var i=0;i<=distinct.length-1;i++){
for(var j=0;j<=distinct2.length-1;j++){
beforeID=BallXYToBallID(distinct[i],distinct2[j]);
//最初に検索出来たものを最初の比較対象とする
if(beforeID!=-1){
//最初に見つけたボールのIDからXY座標を取得
beforeY=BallIDToY(beforeID);
bflag=true;
}
//最初の比較対象が見つかっていれば、隣を探し、処理をする
if(bflag){
afterID=BallXYToBallID(distinct[i],distinct2[j+1]);
if(afterID!=-1){
afterY=BallIDToY(afterID);
aflag=true;
}
}
if(aflag){
var compare=Math.abs(beforeY-afterY);
if(pitchY.indexOf(compare)==-1){
pitchY.push(compare);
aflag=false;
beforeY=afterY;
}else{
aflag=false;
}
}
}
bflag=false;
}
function BallXYToBallID(x,y){
for(var i=0;i<bsArr.length;i++){
if((bsArr[i].BallX==x)&&(bsArr[i].BallY==y)){
return bsArr[i].ID;
}
}
return -1;
}
function BallIDToX(ID){
for(var i=0;i<bsArr.length;i++){
if(bsArr[i].ID==ID){
return bsArr[i].X;
}
}
return -1;
}
function BallIDToY(ID){
for(var i=0;i<bsArr.length;i++){
if(bsArr[i].ID==ID){
return bsArr[i].Y;
}
}
return -1;
}
for(var i=0;i<pitchX.length;i++){
console.log("X:"+pitchX[i]);
}
for(var i=0;i<pitchY.length;i++){
console.log("Y:"+pitchY[i]);
}
## 結果
X:2.1
X:1.7
Y:1.5
コード例ではデータ定義がしやすいように3*3の9マスでやったが、結果はOK
こういったデータ定義例でも動作OK
備忘録
BallXYが画像内で割り振っている番号で、XYは実際の座標とする
関数はIDからX,Yを取得するものとBallX,YからIDを取得するものを用いている
Paiza.ioでコーディングしたが、慣れると便利
二重配列多用が野暮ったい