see 地図読み込み時に番兵をつける

from ABC170_F 改行限り文字列を番兵付きの一次元配列にする。 python

C = np.zeros((H + 2, W + 2), np.bool_)
C[1:-1, 1:-1] = np.frombuffer(read(), 'S1').reshape(H, -1)[:, :W] == b'.'
C = C.ravel()
H += 2
W += 2
  • ValueError: could not broadcast input array from shape (3,0) into shape (3,5)
    • already read all data from stdin

各ステップ解説 python

>>> np.frombuffer(b"...\n.@.\n...\n", "S1")
array([b'.', b'.', b'.', b'\n', b'.', b'@', b'.', b'\n', b'.', b'.', b'.',
       b'\n'], dtype='|S1')
>>> _.reshape(3, -1)
array([[b'.', b'.', b'.', b'\n'],
       [b'.', b'@', b'.', b'\n'],
       [b'.', b'.', b'.', b'\n']], dtype='|S1')
>>> _[:,:3]
array([[b'.', b'.', b'.'],
       [b'.', b'@', b'.'],
       [b'.', b'.', b'.']], dtype='|S1')
>>> _ == b"."
array([[ True,  True,  True],
       [ True, False,  True],
       [ True,  True,  True]])
>>> C = np.zeros((3 + 2, 3 + 2), np.bool_)
>>> C[1:-1, 1:-1] = _
>>> C
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True, False,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False]])
>>> C.ravel()
array([False, False, False, False, False, False,  True,  True,  True,
       False, False,  True, False,  True, False, False,  True,  True,
        True, False, False, False, False, False, False])