数独混淆Python转Perl

1 投票
2 回答
609 浏览
提问于 2025-04-15 12:02

有没有人愿意把这个翻译成看起来复杂的perl代码?这个代码是用Python写的,来源于:这里

def r(a):i=a.find('0');~i or exit(a);[m
in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for
j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])

我知道这只是为了好玩 :)

2 个回答

2

已经有一些用晦涩的Perl语言写的数独解题器了,你真的还想要一个(可能效率更低的)吗?

如果不想的话……

  1. 先把代码弄清楚。
  2. 用Perl重新写一遍。
  3. 再把它弄得晦涩一些。
3
sub r{($a=shift)=~/0/g?my$i=pos:die$a;T:for$m(1..9){($i-$_)%9*(int($i/9)^int($_/9))*(int($i/27)^int($_/27)|int($i%9/3)^int($_%9/3))||$a=~/^.{$_}$m/&&next T,for 0..80;substr($a,$i,1)=$m;r($a)}}r@ARGV

这段话的意思是,翻译得很简单粗暴。之所以比较长,是因为在Python 2中,/这个符号表示的是整数除法,而在Perl中,它表示的是浮点数除法。

撰写回答