基準値と比較して大きすぎます(エラーフラグは「08」です)

基準値と比較して大きすぎます(エラーフラグは「08」です)

「グリッドで2の最大合計」クイズを解きます。

次のエラーを解決する方法がわかりません。

何か抜けたような気がします。質問が見つかったら、更新してより一般的で他の人にも適用できます。

Line 32: value too great for base (error token is "08")

#!/bin/bash
setup () {
  grid=(01 02 03 04 05 06 07 08 07 06 05
        12 13 14 15 16 15 14 13 12 11 11
        05 06 06 07 07 07 06 06 05 05 04)
  n=${#grid[@]}
  number_of_lines=$((n / 11))
  length_of_line=$1
  largest_sum=0
  largest_pos=0
}
largest_2 () {
  for ((row=0; row < number_of_lines; row++)) {
    for ((column=0; column<length_of_line-1; column++)) {
      larger_horizontal
      if [[ $row -lt $number_of_lines-1 ]]; then
        larger_vertical
      fi
    }
  }
}
larger_vertical () {
  sum=$((grid[column+row*11]*grid[column+(row+1*11)]))
  if [[ $sum -gt $largest_sum ]]; then
    largest_sum=$sum
    largest_pos=$((column+row*11))
    direction=vertical
    result=$largest_pos
  fi
}
larger_horizontal () {
  sum=$((grid[column+(row*11)]*grid[column+1+(row*11)])) # <-- Line 32
  if [[ $sum -gt $largest_sum ]]; then
    largest_sum=$sum
    largest_pos=$((column+(row*11)))
    direction=horizontal
    result=$largest_pos
  fi
}

setup 11
largest_2
printf "\n1. Max: row=$((result / 11 +1)) column= $((result % 11 +1)) direction=$direction\n"

ベストアンサー1

080で始まるので、場合によっては8進数と見なされます(数字は0から7の間であるため、エラーはで始まります08)。解決策:先行ゼロを出力する必要がある場合は、ゼロをフィルタリングしてくださいprintf %02d

おすすめ記事