結果
| 問題 | No.228 ゆきこちゃんの 15 パズル | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2015-10-04 22:41:27 | 
| 言語 | Scala(Beta) (3.6.2) | 
| 結果 | 
                                CE
                                 
                            (最新) 
                                AC
                                 
                            (最初) | 
| 実行時間 | - | 
| コード長 | 1,652 bytes | 
| コンパイル時間 | 6,166 ms | 
| コンパイル使用メモリ | 237,980 KB | 
| 最終ジャッジ日時 | 2024-11-14 19:18:14 | 
| 合計ジャッジ時間 | 6,569 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge4 | 
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
            
            
            
            
            ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
[31m[31m-- [E040] Syntax Error: Main.scala:62:32 ---------------------------------------[0m[0m
[31m62 |[0m  [33mdef[0m [36mmain[0m([36margs[0m: [35mArray[0m[[35mString[0m]) {
[31m[31m   |[0m                                ^[0m
[31m   |[0m                                '=' expected, but '{' found
1 error found
            
            ソースコード
import java.util.Scanner
import scala.collection.mutable.ArrayBuffer
object Problem228 {
  def proc(board: ArrayBuffer[ArrayBuffer[Int]]): String = {
    val answer = ArrayBuffer(
      ArrayBuffer(1, 2, 3, 4),
      ArrayBuffer(5, 6, 7, 8),
      ArrayBuffer(9, 10, 11, 12),
      ArrayBuffer(13, 14, 15, 0)
    )
    val directions = List((-1, 0), (1, 0), (0, -1), (0, 1))
    var fromRow = board.indexWhere(_.contains(0))
    var fromCol = board(fromRow).indexOf(0)
    var toRow = -1
    var toCol = -1
    while (board != answer) {
      var canMoveToSomePlace = false
      for (direction <- directions) {
        toRow = fromRow + direction._1
        toCol = fromCol + direction._2
        if (moveIfCanMove(board, fromRow, fromCol, toRow, toCol)) {
          fromRow = toRow
          fromCol = toCol
          canMoveToSomePlace = true
        }
      }
      if (!canMoveToSomePlace) {
        return "No"
      }
    }
    "Yes"
  }
  def moveIfCanMove(board: ArrayBuffer[ArrayBuffer[Int]], fromRow: Int, fromCol: Int, toRow: Int, toCol: Int): Boolean = {
    def inBoard(row: Int, col: Int): Boolean = {
      row >= 0 && row < 4 && col >= 0 && col < 4
    }
    val canMove = inBoard(fromRow, fromCol) && inBoard(toRow, toCol) && board(toRow)(toCol) == fromRow * 4 + fromCol + 1
    if(canMove){
      val swap = board(fromRow)(fromCol)
      board(fromRow)(fromCol) = board(toRow)(toCol)
      board(toRow)(toCol) = swap
    }
    canMove
  }
  def main(args: Array[String]) {
    val sc = new Scanner(System.in)
    val board = ArrayBuffer.fill(4, 4)(sc.nextInt)
    val result = proc(board)
    println(result)
  }
}
            
            
            
        