0
0

More than 1 year has passed since last update.

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o7o0] コウの禁止

Last updated at Posted at 2022-10-14

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o7o0] コウの禁止

連載の目次

📖 目指せ!第14回UEC杯コンピューター囲碁大会<本編>

Step [O22o7o0] コウの禁止 - Ko

永遠に同じ局面が繰り返してしまうような1手は置けない

Step [O22o7o1o0] ファイル編集 - record_item.go

👇 以下の既存ファイルを編集してほしい

  	📂 kifuwarabe-uec14
	├── 📂 data
 	│	└── 📄 board1.txt
	├── 📂 kernel
	│	├── 📂 play_rule
	│	├── 📄 board_area.go
  	│	├── 📄 board_coord.go
  	│	├── 📄 o12o__11o1o0_board.go
 	│	├── 📄 check_board.go
 	│	├── 📄 color.go
	│	├── 📄 go.mod
	│	├── 📄 go.sum
 	│	├── 📄 kernel_facade.go
 	│	├── 📄 kernel.go
 	│	├── 📄 liberty.go
 	│	├── 📄 logger.go
 	│	├── 📄 masonry.go
 	│	├── 📄 play.go
 	│	├── 📄 o12o__10o1o0_point.go
👉	│	├── 📄 record_item.go
	│	├── 📄 record.go
 	│	├── 📄 ren.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
	└── 📄 main.go
// ...略...
// type RecordItem struct {
	// ...略...

	// [O22o7o1o0] コウの位置
	ko Point
// }
// ...略...

Step [O22o7o1o0] ファイル編集 - record.go

👇 以下の既存ファイルを編集してほしい

  	📂 kifuwarabe-uec14
	├── 📂 data
 	│	└── 📄 board1.txt
	├── 📂 kernel
	│	├── 📂 play_rule
	│	├── 📄 board_area.go
  	│	├── 📄 board_coord.go
  	│	├── 📄 o12o__11o1o0_board.go
 	│	├── 📄 check_board.go
 	│	├── 📄 color.go
	│	├── 📄 go.mod
	│	├── 📄 go.sum
 	│	├── 📄 kernel_facade.go
 	│	├── 📄 kernel.go
 	│	├── 📄 liberty.go
 	│	├── 📄 logger.go
 	│	├── 📄 masonry.go
 	│	├── 📄 play.go
 	│	├── 📄 o12o__10o1o0_point.go
	│	├── 📄 record_item.go
👉	│	├── 📄 record.go
 	│	├── 📄 ren.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
	└── 📄 main.go
// ...略...
// Push - 末尾に追加
// func (r *Record) Push(placePlay Point,
	// [O22o7o1o0] コウの位置
	ko Point//) {

	// var item = r.items[r.posNum]
	// item.placePlay = placePlay

	// [O22o7o1o0] コウの位置
	item.ko = ko

	// r.posNum++
// }

Step [O22o7o2o0] ファイル編集 - play.go

👇 以下の既存ファイルを編集してほしい

  	📂 kifuwarabe-uec14
	├── 📂 data
 	│	├── 📄 board1.txt
 	│	├── 📄 board2.txt
 	│	└── 📄 board3.txt
	├── 📂 kernel
	│	├── 📂 play_rule
	│	├── 📄 board_area.go
  	│	├── 📄 board_coord.go
  	│	├── 📄 o12o__11o1o0_board.go
 	│	├── 📄 check_board.go
 	│	├── 📄 color.go
	│	├── 📄 go.mod
	│	├── 📄 go.sum
 	│	├── 📄 kernel_facade.go
 	│	├── 📄 kernel.go
 	│	├── 📄 liberty.go
 	│	├── 📄 logger.go
 	│	├── 📄 masonry.go
👉 	│	├── 📄 play.go
 	│	├── 📄 o12o__10o1o0_point.go
 	│	├── 📄 record_item.go
 	│	├── 📄 record.go
 	│	├── 📄 ren.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
	└── 📄 main.go
// func (k *Kernel) DoPlay(command string, logg *Logger) {

	// ...略...
	// [O22o4o1o0] 自分の眼に石を置こうとした
	// var onForbiddenMyEye = func() bool {
		// ...略...
	// }

	// [O22o7o2o0] コウに石を置こうとした
	var onKo = func() bool {
		logg.C.Infof("? ko my_stone:%s point:%s\n", stone, k.Board.coordinate.GetGtpMoveFromPoint(point))
		logg.J.Infow("error ko", "my_stone", stone, "point", k.Board.coordinate.GetGtpMoveFromPoint(point))
		return false
	}

	// var isOk = k.Play(stone, point, logg,
		// // [O22o1o2o0] ,onMasonry
		// onMasonry,
		// // [O22o3o1o0] ,onOpponentEye
		// onOpponentEye,
		// // [O22o4o1o0] ,onForbiddenMyEye
		// onForbiddenMyEye,
		// // [O22o7o2o0] ,onKo
		onKo//)
	// ...略...

// }
// ...略...

// func (k *Kernel) Play(stoneA Stone, pointB Point, logg *Logger,
	// // [O22o1o2o0] onMasonry
	// onMasonry func() bool,
	// // [O22o3o1o0] onOpponentEye
	// onOpponentEye func() bool,
	// // [O22o4o1o0] onForbiddenMyEye
	// onForbiddenMyEye func() bool,
	// [O22o7o2o0] onKo
	onKo func() bool//) bool {

	// [O22o1o2o0]
	// if k.Board.IsMasonry(pointB) {
	// 	return onMasonry()
	// }
	// ...略...

	// [O22o7o2o0] コウの判定
	if k.Record.IsKo(pointB) {
		return onKo()
	}
	// ...略...

	// * 以下を追加
	// [O22o7o2o0] コウの判定
	var capturedCount = 0 // アゲハマ

//	// [O22o6o1o0] 死に石を打ちあげる
//	if isExists4rensToRemove {
//		for dir := 0; dir < 4; dir++ {
//			var ren = o4rensToRemove[dir]
//			if ren != nil {
//				k.RemoveRen(ren)

				// * 以下を追加
				// [O22o7o2o0] コウの判定
				capturedCount += ren.GetArea()

//			}
//		}
//	}

	// [O22o7o2o0] コウの判定
	var ko = Point(0)
	if capturedCount == 1 {
		ko = pointB
	}

	// 棋譜に追加
	//k.Record.Push(pointB,
		// * 以下を追加
		// [O22o7o2o0] コウの判定
		ko//)

Step [O22o7o4o0] コマンド編集 - kernel.go ファイル

👇 以下の既存ファイルを編集してほしい

  	📂 kifuwarabe-uec14
	├── 📂 data
 	│	├── 📄 board1.txt
 	│	├── 📄 board2.txt
 	│	└── 📄 board3.txt
	├── 📂 kernel
	│	├── 📂 play_rule
	│	├── 📄 board_area.go
  	│	├── 📄 board_coord.go
  	│	├── 📄 o12o__11o1o0_board.go
 	│	├── 📄 check_board.go
 	│	├── 📄 color.go
	│	├── 📄 go.mod
	│	├── 📄 go.sum
 	│	├── 📄 kernel_facade.go
👉 	│	├── 📄 kernel.go
 	│	├── 📄 liberty.go
 	│	├── 📄 logger.go
 	│	├── 📄 masonry.go
 	│	├── 📄 play.go
 	│	├── 📄 o12o__10o1o0_point.go
 	│	├── 📄 record_item.go
 	│	├── 📄 record.go
 	│	├── 📄 ren.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
	└── 📄 main.go

👇 がんばって、 Execute メソッドに挿入してほしい

	// ...略...
	// この下にコマンドを挟んでいく
	// -------------------------
	// ...略...

	// * アルファベット順になる位置に、以下のケース文を挿入
	// case "record": // [O12o__11o_5o0]
		// ...略...

		// var setPoint = func(i int, item *RecordItem) {
			// var positionNth = i + geta // 基数を序数に変換
			// var coord = k.Board.GetGtpMoveFromPoint(item.placePlay)

			// * 以下を削除
			// sb.WriteString(fmt.Sprintf("[%d]%s ", positionNth, coord))

			// * 以下を追加
			// [O22o7o4o0] コウを追加
			var koStr string
			if item.ko == Point(0) {
				koStr = ""
			} else {
				koStr = fmt.Sprintf("(%s)", k.Board.coordinate.GetGtpMoveFromPoint(item.ko))
			}
			sb.WriteString(fmt.Sprintf("[%d]%s%s ", positionNth, coord, koStr))
		// }
		// ...略...

	// ...略...
	// この上にコマンドを挟んでいく
	// -------------------------
	// ...略...

Step [O22o7o4o0] 動作確認

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:

go run .

これで、思考エンジン内の入力待機ループに入った

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:

board_set file data/board3.txt
play black D3
play white C3
play black D3

Output > Console:

[2022-09-17 22:39:55]   # board_set file data/board3.txt
[2022-09-17 22:39:55]   =

[2022-09-17 22:39:55]   # play black D3
[2022-09-17 22:39:55]   =

[2022-09-17 22:39:55]   # play white C3
[2022-09-17 22:39:55]   =

[2022-09-17 22:39:55]   # play black D3
[2022-09-17 22:39:55]   ? ko my_stone:x point:D3
0
0
0

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