【数独を作ろう 4.】GASで9桁のチェックを行う

応用

数独を作ろう一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【数独を作ろう 3.】GASで値の取得、フォントサイズの設定をする方法
数独を作ろう一覧 ご訪問ありがとうございます。 Googleシートマスターのひろしです。 前回 今回は、とっても価値の高い方法をお伝えします。 これを知ることであなたは、 GASで値を取得...

今回は、とっても価値の高い方法をお伝えします。


これを知ることであなたは、

  • 1から9まで揃っているかどうかを検証する方法がわかります。
  • 残り1個は何?とかエラーのチェックができます。
  • GASでテストの仕方がわかります。
  • さらにプログラミングの考え方がわかります。

なので、サクッとマスターして

と答えてあげてください。

 

今回は、ちょっと難しいかもしれませんが、
GASがどうのというよりプログラミングの話です。

今回の話を落とし込むことができれば、
今後、GASに限らず別の言語でのプログラミングや
マクロの作成もちょっと仕様を理解すれば、対応できるようになります。

なので、楽しみながら御覧ください。

 

 

動画はこちら

【GAS】Googleシートで数独を作ろう9桁のチェック

 

 

スクリプトはこちら

const CK_ERROR = -1 // エラー
const CK_OK = 1 // 揃った
const CK_LAST = 2 // あと一つ
const CK_NORMAL = 3// 通常


//9桁のチェック
function checkNum(buf) {

  let ckbuf = [, , , , , , , , ,] //チェックする数字を入れるバッファ

  console.log(buf)
  console.log(ckbuf)

  for (i = 0; i < 9; i++) {
    console.log(buf[i])
    if (ckbuf[buf[i] - 1]) {
      console.log("エラー")
      return CK_ERROR

    }
    ckbuf[buf[i] - 1] = true

  }

  console.log(ckbuf)

  let ckcnt = 0 //いくつ入っているか
  let lastcnt = 0 //残っている数字

  for (i = 0; i < 9; i++) {
    if (ckbuf[i] == true) {

      ckcnt++
    }
    else {
      lastcnt = i + 1
      console.log("入っていない ", lastcnt)
      buf[9] = lastcnt
    }
  }
  console.log("ckcnt = ", ckcnt)
  if (ckcnt == 9) {
    console.log("揃った")
    return CK_OK

  }

  if (ckcnt == 8) {
    console.log("あと一つ")
    return CK_LAST

  }

  return CK_NORMAL





}


//テスト用
function testchekbuff() {
  const sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  let buff = sh.getRange("A1:I1").getValues()

  let tempbuff = [,,,,,,,,,]

   tempbuff = buff[0]

  console.log(tempbuff)


  let ret = checkNum(tempbuff)

  console.log(tempbuff)


  switch (ret) {
    case CK_OK:
      console.log(" 揃った")
      break

    case CK_LAST:
      console.log("あと一つ", tempbuff[9])
      break

    case CK_NORMAL:
      console.log(" 通常")
      break

    case CK_ERROR:
      console.log("エラー")
      break

  }

}

 

今回は、内部ロジックだけなので外見は、
変更なしです。

testchekbuff関数のbuf の値を変更して

CK_OK,CK_LAST,CK_NORMAL,CK_ERRORが
返却されることを確認してください。

 

次回は、数独のパネルから9桁づつ切り出して
行きましょう。

 

 

最後までご覧いただきありがとうございます。

 

つぎはこちら

準備中

数独を作ろう一覧

コメント

タイトルとURLをコピーしました