바둑..!/2008

☆ 미완의 알고리즘.

온울에 2008. 6. 6. 17:07

AN(p/q)mn
SOM(p/q)mn
pANT(p/q) pSOMT(p/q) ANT(p/q)

{
START:
  change (q, p)
  rif < Non {s-ANT(p)i & z-ANT(p)i} > {
      move  r(m, n)  to  A(mn) p(m, n)ofANT(p)i }

REST:
  delete  A(m) pANT(p/q)m pSOMT(p/q)m ANT(p/q)m
  get r(a, b)

BINOOL:
  if < A(c) c-r(a, b) = p(x, y) > {
    if < A(m) reACT(p)m ≠ 1 > {
      move  0  to  NO
      rif < r(i, j) = c-{A(m) reACT(p)m} > {
          add  1  to  NO }
      if < NO = 1 > {
          goto  HANOOL }}
    goto  STOP }

HQNOOL:
  if < Non reACT(q)n > {
      goto  OPEN }
  move  0  to  NO
  rif < A(z) z-reACT(q)i ⊆ r(a, b) > {
      add  reACT(q)i  to  ANT(q)+ }
  if < A(s) s-preACT(p) ⊆ r(a, b) > {
    if < NO ≠ 0 > {
      if < A(m) reACT(q)m ≠ 1 > {
        if < ANT(q)n > {
            goto  DUOOL }}
      goto  STOP }}

DUOOL:
  if < M ≠ 2 > {
    if < r(a,b) ⊆ s-AN(p)mn > {
      if < Non ANT(q)n > {
          goto  OPEN }}}
  if < r(a, b) ⊆ s-AN(p)mn > {
    if < A(s) s-AN(p)uv = r(a, b) > {
        add  AN(p/q)uv  to  ANT(p)+
        add  A(n) AN(p/q)un  to  pANT(p/q)+
        add  A(n) SOM(p/q)un  to  pSOMT(p/q)+
        goto  COMP
    else goto  OPEN }}
  if < E(s) s-preACT(p) ⊆ s-preACT(q(x, y)) > {
      goto  OPEN }
  add  preACT(p)  to  ANT(p)+
  call MAST(ANT(p)m, ANT(q)n)
  if < Non ANT(p)n > {
      goto OPEN
  else if < A(c) c-r(a, b) ⊆ ANT(q)n > {
          goto  OPEN }}
  rif < ANT(q)i > {
    rif < A(s) s-PRE(ANT(q)i)j ⊆ s-preACT(q(x, y)) > {
      if < PRE(ANT(q)i)j ⊆ pANT(p)n > {
          add  PRE(ANT(q)i)j  to  pANT(p)+ }}}
  call MAST(ANT(p)m, ANT(q)n)
  rif < pANT(p/q)i > {
    rif < RE(pANT(p/q)i)j ⊆ pSOMT(q/p)n > {
        add  RE(pANT(p/q)i)j  to  pSOMT(q/p)+ }}
  rif < pSOMT(p/q)i ⊆ ANT(p/q)n > {
      delete  pSOMT(p/q)i }
  rif < pSOMT(p/q)i ⊆ AN(p/q)mn > {
      add  pSOMT(p/q)i  to  SOM(p/q)++ }

COMP:
  if < {preACT(p) ⊆ r(a, b)} Or {r(a, b) ⊆ s-AN(p)mn} > {
    if < {A≠(s) s-ANT(p) = r(a, b)} > {
      if < n-ANT(p) ≠ n-ANT(q)n > {
          goto  OPEN }
      rif < pSOMT(q/p)i ⊆ SOM(q/p)mn > {
          goto  OPEN }
      goto  STOP }}

OPEN:
  if < pANT(p)n > {
    if < A(s) s-ANT(p) ⊆ r(a, b) > {
        move  2  to  M }
    rif < pANT(p/q)i ⊆ AN(p/q)mn > {
        add  pANT(p/q)i  to  AN(p/q)++ }
    rif < pSOMT(p/q)i ⊆ SOM(p/q)mn > {
        add  pSOMT(p/q)i  to  SOM(p/q)++ }
  else if < r(a, b) ⊆ s-AN(p)uv > {
          delete  A(mn) AN(p/q)mn
          delete  A(mn) SOM(p/q)mn
          move  0  to  M }}

EXIT:
  move  p(a, b)  to  r(a, b)
  display  p(a, b)
  goto  START

STOP:
  end

MAST(Q(p)m, Q(q)n)
  rif < Q(p)k > {
    move  0  to  NO
    rif < A(z) z-RE(Q(p)k)i ⊆ s-Q(p)k > {
      if < A(c) c-RE(Q(p)k)i ⊆ Q(p)k > {
         add  1  to  NO
      else rif < A(c) c-q(m, n)ofRE(Q(p)k)i ⊆ Q(p)n > {
              goto  MS }
          add  1  to  NO }
      MS: }
    if < NO <= 1 > {
      rif < A(z) z-RE(Q(p)k)i ⊆ s-Q(p)k > {
          add  RE(Q(p)k)i  to  Q(q)+ }
    else delete  Q(p)k }}}



용어의 정의
  p(m, n) : p의 좌표.
  r(a, b) : 빈자리의 좌표.
  p- possible --- 소문자(자리포함)는 빈자리r(a, b)에 대해서.
  P- possible-tree --- 대문자(이음돌둑)는 돌둑tree에 대해서.
  re- relation --- 빈자리r(a, b)에 이음관계인.
  RE- relation-tree --- 이음관계에 있는 돌둑.
  ACT(p) : active-tree ACT(p(x, y)) --- 돌p(x, y)을 포함한 돌둑(p).
  reACT(p) : reACT(p:r(a, b)) --- 빈자리r(a, b)에 이음인 돌둑(p).
  preACT(p) : preACT(p:r(a, b)) --- 빈자리r(a, b)를 포함한 가능돌둑(p).
  preACT(q(x, y)) : preACT(q:r(x, y)) --- 돌q(x, y)을 포함한 가능돌둑(q).
  RE(ACT(q)) : relation-tree --- 돌q(x,y)를 포함한 돌둑(q)에 이음인 돌둑(p).
  PRE(ACT(q)) :   --- 돌q(x,y)를 포함한 돌둑(q)에 이음인 가능돌둑(p).
  n-{ } : {자리, 돌둑, 가능돌둑}이 포함하는 자리 수.
  s-{ } : {자리, 돌둑, 가능돌둑}에 포함된 빈자리.
  z-{ } : {자리, 돌둑, 가능돌둑}에 이음인 이음자리.
  c-{ } : {자리, 돌둑, 가능돌둑}과 이음관계에 있는 자리, 돌둑, 가능돌둑.
  c-RE(ANT(p)) : {안섬가능돌둑(p)에 이음관계인 돌둑(q)}과 이음관계에 있는.
  c-q(m, n)ofRE(ANT(p)) : {RE(ANT(p))의돌q(m, n)}과 이음관계에 있는.

AN(p)mn : 안섬인 돌둑(p)
SOM(p)mn : 둘러섬인 돌둑(p)
A(n) : 모든 n에 대해서
E(n) : 어떤 n에 대해서
ANT(p)+ : ANT(p)m일 때, m을 m+1로 바꾼다.
AN(p)++ : AN(p)mn일 때, m을 m+1로 그리고 n을 n+(1~last)까지.


∿ 이것을 어떻게 프로그래밍한다...
누구 프로그램으로 구현 좀 해줘요...  단, 미완성입니다.