Linux数独代码,linux – Bash简化数独

因此,我必须编写一个bash脚本来检查9×9“sudoku”解决方案是否有效,但简化的是我不必将其划分为3×3,而只是检查行和列是否包含任何重复的数字,以及有效数字仅为1-9 ..

这是我的想法,但无法让它工作:

#!/bin/bash

error="false"

count=0

#this would be for columns

#for i in 1 2 3 4 5 6 7 8 9

#do

#cat sudoku.txt | awk -F "" '{ print $'$i'}' | uniq -c | awk '$1 > 1 { count++ } END { print count }'

#done

#and this would be for rows

for i in 1 2 3 4 5 6 7 8 9

do

cat sudoku.txt | awk '{ print FNR=$'$i'}' | uniq -c |

awk '$1 > 1 { count++ } END { print count }' |

awk ' count > 0 { $error="true" } END { print $i }' |

awk '{ if ($error = "true") print "Wrong data!"; else print "Correct data!"; } '

done

最佳答案

$awk '

function check(num) {

return num != 45 ? 1 : 0;

}

{

row = 0;

for (i = 1; i <= 9; i++) {

row += $i;

col[i] += $i;

}

if (check(row) > 0) {

errors[++error_len] = sprintf("error in line %s: %s", FNR, $0);

}

}

END {

for (i = 1; i <= 9; i++) {

if (check(row) > 0) {

errors[++error_len] = sprintf("error in column %s: %s", i, col[i]);

}

}

if (error_len) {

for (i = 0; i <= error_len; i++) {

print(errors[i]);

}

}

else {

print("all good");

}

}

' sudoku

error in line 4: 6 7 1 4 8 2 6 9 3

$cat sudoku

8 1 2 9 7 4 3 6 5

9 3 4 6 5 1 7 8 2

7 6 5 8 2 3 9 4 1

6 7 1 4 8 2 6 9 3

2 8 9 3 6 5 4 1 7

6 4 3 7 1 9 2 5 8

1 9 6 5 3 7 8 2 4

3 2 8 1 4 6 5 7 9

4 5 7 2 9 8 1 3 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值