結果
| 問題 | No.585 工夫のないパズル | 
| コンテスト | |
| ユーザー |  maspy | 
| 提出日時 | 2020-05-03 18:49:51 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 29 ms / 2,000 ms | 
| コード長 | 2,282 bytes | 
| コンパイル時間 | 76 ms | 
| コンパイル使用メモリ | 13,056 KB | 
| 実行使用メモリ | 10,880 KB | 
| 最終ジャッジ日時 | 2024-06-22 04:35:36 | 
| 合計ジャッジ時間 | 1,374 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 12 | 
ソースコード
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
class Grid:
    def __init__(self, S):
        self.S = list(S)
        self.cnt = 0
        self.log = []
    def __repr__(self):
        return '\n'.join(''.join(self.S[4 * i:4 * i + 4]) for i in range(4))
    def __getitem__(self, a):
        n = self.S.index(a)
        return divmod(n, 4)
    def shift_row(self, i, k):
        k %= 4
        if k:
            self.log.append(f'R {i} {k}')
        A = self.S[4 * i:4 * i + 4]
        self.S[4 * i:4 * i + 4] = A[-k:] + A[:-k]
    def shift_col(self, i, k):
        k %= 4
        if k:
            self.log.append(f'C {i} {k}')
        A = self.S[i::4]
        self.S[i::4] = A[-k:] + A[:-k]
def move(G, a, n):
    """ n-1 以下のセルを固定したまま a を n に運ぶ """
    r, c = divmod(n, 4)
    r1, c1 = G[a]
    if r == r1:
        # 一度同じ行から出す
        G.shift_col(c1, 1)
        k = 1 if (c1 + 1 - c) % 4 != 0 else 2
        G.shift_row(r1 + 1, k)
        G.shift_col(c1, -1)
    r1, c1 = G[a]
    # 同じ列にあればよける
    if c == c1:
        G.shift_row(r1, 1)
    # 収納
    r1, c1 = G[a]
    G.shift_col(c, r1 - r)
    G.shift_row(r1, (c - c1) % 4)
    G.shift_col(c, r - r1)
def final_row(G):
    r, c = G['M']
    G.shift_row(3, -c)
    A = ''.join(G.S[13:])
    def fundamental_pattern(G, i, k):
        # 7 手で、最終行に偶置換
        G.shift_col(i, 1)
        G.shift_row(3, k)
        G.shift_col(i, -1)
        G.shift_row(3, k + k)
        G.shift_col(i, 1)
        G.shift_row(3, k)
        G.shift_col(i, -1)
    if A == 'NOP':
        pass
    elif A == 'NPO':
        G.shift_row(3, 1)
        fundamental_pattern(G, 1, 1)
    elif A == 'ONP':
        G.shift_row(3, 1)
        fundamental_pattern(G, 0, 1)
    elif A == 'OPN':
        fundamental_pattern(G, 2, 3)
    elif A == 'PNO':
        fundamental_pattern(G, 2, 1)
    else:
        fundamental_pattern(G, 0, 1)
        G.shift_row(3, 1)
        fundamental_pattern(G, 2, 1)
        return
S = ''.join(read().decode().split())
G = Grid(S)
for n in range(12):
    a = chr(ord('A') + n)
    move(G, a, n)
final_row(G)
log = G.log
print(len(log))
print('\n'.join(log))
            
            
            
        