from sys import argv,exit def Fill(s,b,x,y,c): b[y][x]=c if c==s**2: a=len(str(c)) print(s*('+'+a*'-')+'+') for l in b: print(''.join(['|%*d'%(a,n)for n in l])+'|\n+'+s*(a*'-'+'+')) exit(0) for u,v in ((-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)): x2,y2=x+u,y+v
from sys import argv,exit;s=8 if len(argv)!=2 else int(argv[1]) def F(s,p,q,r,b,x,y,c): b[y*s+x]=c;o=(p,p+q+r) if c==s*s: print(r+''.join([o[n%s//(s-1)]%b[n] for n in range(c)]));exit(0) for u,v in ((-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)): 0<=x+u<s and 0<=y+v<s and b[(y+v)*s+x+u]<1 and F(s,p,q,r,b,x+u,y+v,c+1) b[y*s+x]=0 F(s,'|%5d','|\n',s*('+'+5*'-')+'+\n',[0]*s*s,0,0,1)
python なのに one-liner (スコア:0)
すぐに「いやもっと短く」「俺は4行だぜ」とかのコメントが付いて、、、
元ネタの60行の人のはちゃんとした python コードっぽい雰囲気なんですが
この辺の4行とかの世界は 4行とはいっても "素直な4行" とは程遠いです。
それはそれで技を駆使しているわけですが…
(いい加減に "バイト数" とか何かもっと別の指標が欲しいところ)
Re: (スコア:1)
Usageが表示されない以外はほぼオリジナルと同じです。
Re:python なのに one-liner (スコア:2)
誰か,「Python3.0リリース」でタレコミお願いします。参考サイト:
Re:python なのに one-liner (スコア:1)
ついでに、先のコードを「ずるっこ」込みで最適化した9行バージョンをば。
(発見できなかったときにメッセージを表示しない、数字桁数が5桁固定という違いあり)
各行は某七行プログラミングスレの流儀に従い、1行は79桁以内に収めてあります。
あと2行が減らせない(^^;)