fork download
  1. """
  2. 472 名前:デフォルトの名無しさん[sage] 投稿日:2014/07/10(木) 17:55:09.45 ID:G1rqgd7K
  3. 縦H * 横W ( 10≦(H, W)≦100 )のサイズの床に地雷を設置した
  4. ---**
  5. --*--
  6. -*---
  7. --*--
  8. *--*-
  9. 以下のように地雷に隣接する床の上に、隣合う地雷の数を調べて出力できるプログラムを作成せよ
  10. 地雷をランダムに配置せよ
  11. 002**
  12. 02*21
  13. 1*300
  14. 12*20
  15. *12*1
  16. """
  17.  
  18. import random
  19. def f(H,W,N=None):
  20. if not N:
  21. N = int(reduce(lambda a,b: a*(H*W)+b, (0.000235,0.0938,0.8937)))
  22. board = [[0 for x in range(W)] for y in range(H)]
  23. bombs = set()
  24. while len(bombs) < N:
  25. bombs.add((random.randrange(W), random.randrange(H)))
  26. for x,y in bombs:
  27. board[y][x] = "*"
  28. for dx,dy in [(1,0),(-1,0),(0,1),(0,-1)]:
  29. x2,y2 = x+dx,y+dy
  30. if 0 <= x2 < W and 0 <= y2 < H and board[y2][x2] != "*":
  31. board[y2][x2] += 1
  32. for row in board:
  33. print "".join(map(str, row)).replace("0", "-")
  34.  
  35. #f(5,5)
  36. #f(9,9)
  37. #f(16,16)
  38. f(16,30)
  39.  
Success #stdin #stdout 0.02s 10616KB
stdin
Standard input is empty
stdout
-1-----12**1------1--1*2--1-1*
1*1---1****1-----1*21-2*22*111
-1--1--2211---1---2**213**21*2
--11*11**2---2*111-12***21-12*
-1*11--22*211*22**1-1*31--1*22
1-1---1*22**111*221-13*2--1***
*1--1--3*112---11**2**3*1--2*2
1--2*11*3-1*1----2*111-2---1*1
--1*2--2*111--1---111-1*1-1-1-
-1-1--1-12*2-2*1--1**22*11*1--
1*1--1*11***2*2-1--2****1-1-1-
-1-1--1--12*11-1*1--11111-12*1
--2*1----11*1-1-1-1-11-1*3**2-
-1*3----1*3*11*111*2**1-3**2-1
-1**111--2*3--11*11-11-1*31-1*
--111**1--2*1---1------1**1--1