1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptの個人的メモ

Last updated at Posted at 2024-03-16

やりたいこと

使用言語はJavaScript
Paiza.ioのオンライン環境で実行
test.jpg
塗りつぶしのマス同士の間隔を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
test2.jpg
こういったデータ定義例でも動作OK

備忘録

BallXYが画像内で割り振っている番号で、XYは実際の座標とする
関数はIDからX,Yを取得するものとBallX,YからIDを取得するものを用いている

Paiza.ioでコーディングしたが、慣れると便利

二重配列多用が野暮ったい

1
1
5

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?