국경 트렌치를 파십시오


59

배경 : 블란 디아의 불법 이민자들이 국경을 넘어 아 스탄으로 건너가고 있습니다. Astan의 황제는 트렌치를 파내어 파견하지 못하게했으며 Blandia는 비용을 지불해야합니다. 트렌치가 배열 될 때까지 모든 타이피스트가 마무리되었으므로 코드는 가능한 짧아야합니다. *

작업 : Astan과 Blandia 사이의 경계에 대한 2D 맵이 제공되면 Blands가 국경 트렌치에 대해 (토지와 함께) 지불하도록하십시오.

예를 들어 Astanian 셀 마크와 A, 마크 Blandic 셀 B및 트렌치 세포 표시 +(지도 프레임은 명확성을위한)

┌──────────┐ ┌──────────┐
│AAAAAAAAAA│ │AAAAAAAAAA│
│ABAAAAAABA│ │A+AAAAAA+A│
│ABBBAABABA│ │A+++AA+A+A│
│ABBBAABABA│ │A+B+AA+A+A│
│ABBBBABABA│→│A+B++A+A+A│
│ABBBBABBBB│ │A+BB+A++++│
│ABBBBABBBB│ │A+BB+A+BBB│
│ABBBBBBBBB│ │A+BB+++BBB│
│BBBBBBBBBB│ │++BBBBBBBB│
└──────────┘ └──────────┘

세부 사항 : 지도에는 최소 3 개의 행과 3 개의 열이 있습니다. 맨 위 줄은 완전히 Astanian이되고 맨 아래 줄은 완전히 Blandic입니다.
 입력과 출력이 일관된 한 세 가지 값을 사용하여 Astanian 지역, Blandic 지역 및 경계 트렌치를 나타낼 수 있습니다.

오토 마톤 제제 : 무어 인근 에 하나 이상의 Astanian 세포가있는 Blandic 세포 는 국경 트렌치 세포가됩니다.

테스트 사례

[
  "AAAAAAAAAA",
  "ABAAAAAABA",
  "ABBBAABABA",
  "ABBBAABABA",
  "ABBBBABABA",
  "ABBBBABBBB",
  "ABBBBABBBB",
  "ABBBBBBBBB",
  "BBBBBBBBBB"
]

된다 :

[
  "AAAAAAAAAA",
  "A+AAAAAA+A",
  "A+++AA+A+A",
  "A+B+AA+A+A",
  "A+B++A+A+A",
  "A+BB+A++++",
  "A+BB+A+BBB",
  "A+BB+++BBB",
  "++BBBBBBBB"
]

[
  "AAA",
  "AAA",
  "BBB"
]

된다 :

[
  "AAA",
  "AAA",
  "+++"
]

[
  "AAAAAAAAAA",
  "AAAABBBAAA",
  "AAAABBBAAA",
  "AAAABBBAAA",
  "AAAAAAAAAA",
  "BBBBBBABBB",
  "BBBBBBAABB",
  "BBBAAAAABB",
  "BBBBBBBBBB"
]

된다 :

[
  "AAAAAAAAAA",
  "AAAA+++AAA",
  "AAAA+B+AAA",
  "AAAA+++AAA",
  "AAAAAAAAAA",
  "++++++A+++",
  "BB++++AA+B",
  "BB+AAAAA+B",
  "BB+++++++B"
]

* 면책 조항 : 실제 지질학에 대한 어떠한 모순도 순전히 코인시 덴탈입니다!


23
코드 골프 형태의 정치 풍자, 나는 그것을 좋아한다 : o)
Sok

4
-1 그것에 대해 <sup><sub><sup><sub><sup><sub><sup><sub>- P
루이스 Mendo

25
python, 4 bytes : pass국경 트렌치 건설 계획은 정부 폐쇄로 이어지고 아무 일도 일어나지 않습니다.
TheEspinosa

3
@TheEspinosa 아니요 아니요, 트렌치는 정렬 될 때까지 종료 됩니다.
Adám

1
나는 단지 배경 이야기 때문에 upvoted. 계속 읽지 않았습니다.
파이프

답변:



9

MATL , 11 8 바이트

@flawr의 Octave 답변@lirtosiast의 Mathematica answer 에서 영감을 얻었습니다 .

EG9&3ZI-

입력은로 표시 Astan 가진 행렬 0에 의해 Blandia 1. 트렌치는 출력에서로 표시됩니다 2.

온라인으로 사용해보십시오!

작동 원리

E       % Implicit input. Multiply by 2, element-wise
G       % Push input again
9       % Push 9
&3ZI    % Erode with neighbourhood of 9 elements (that is, 3×3) 
-       % Subtract, element-wise. Implicit display

8

자바 스크립트 (ES7),  84  82 바이트

@Shaggy 덕분에 2 바이트 절약

301

a=>(g=x=>a.map(t=(r,Y)=>r.map((v,X)=>1/x?t|=(x-X)**2+(y-Y)**2<v:v||g(X,y=Y)|t)))()

온라인으로 사용해보십시오!

댓글

a => (                      // a[] = input matrix
  g = x =>                  // g = function taking x (initially undefined)
    a.map(t =               //   initialize t to a non-numeric value
      (r, Y) =>             //   for each row r[] at position Y in a[]:
      r.map((v, X) =>       //     for each value v at position X in r[]:
        1 / x ?             //       if x is defined (this is a recursive call):
          t |=              //         set the flag t if:
            (x - X) ** 2 +  //           the squared Euclidean distance
            (y - Y) ** 2    //           between (x, y) and (X, Y)
            < v             //           is less than v (3 = Astan, 0 = Blandia)
        :                   //       else (this is the initial call to g):
          v ||              //         yield v unchanged if it's equal to 3 (Astan)
          g(X, y = Y)       //         otherwise, do a recursive call with (X, Y) = (x, y)
          | t               //         and yield the flag t (0 = no change, 1 = trench)
      )                     //     end of inner map()
    )                       //   end of outer map()
)()                         // initial call to g


4
@Shaggy 요즘 질문이 충분하지 않습니다. 나는 더 이상 골프를하는 방법을 모른다. : D 감사합니다!
Arnauld

나는 단지 같은 것을 더 일찍 생각하고 있었다!
얽히고 설킨

7

K (ngn / k) , 23 바이트

{x+x&2{++/'3'0,x,0}/~x}

온라인으로 사용해보십시오!

사용 0 1 2을 위해"AB+"

{ } 인수 기능 x

~ 논리적이지 않은

2{ }/ 두 번

  • 0,x,0 0-s로 둘러싸 기 (매트릭스의 맨 위와 맨 아래)

  • 3' 연속 행의 3 배

  • +/' 각각을 합하다

  • + 바꾸어 놓다

x&논리적이고의 x

x+추가 x


5

APL (Dyalog Unicode) , 11 바이트 SBCS

⊢⌈{2∊⍵}⌺3 3

이것은 채팅에서 @dzaima의 12 바이트 솔루션 기반으로 합니다. dfn에서 사용하려고 생각하는 것에 대해서는 @ Adám 자신에게 , 그리고 입력과 출력에 동일한 인코딩을 사용하도록 상기시켜주는 @ H.PWiz에게 감사드립니다.

온라인으로 사용해보십시오!

대표 'AB+'로서 2 0 1각각

{ }⌺3 3 매트릭스 외부에서 1 단위 연장되고 0으로 채워진 영역을 포함하여 입력의 각각의 겹치는 3 × 3 영역에 함수를 적용합니다.

2∊⍵인수에 2가 있습니까? 0/1 부울을 반환

⊢⌈ 요소 별 최대 및 원래 행렬


물론 스텐실로 전환하면 바이트의 절반 이상이 절약됩니다.
Adám

@ Adám은 다른 언어로 된 답변이므로이 답변과 비교하거나 경쟁하지 않습니다. 그리고 나는 특별히 흥미롭고 특별한 언어로 골프를 타지 못합니다. 죄송합니다
ngn

@ display제거하는 것을 잊어 버린 별명을 @ Adám . 제거됨
ngn

5

PowerShell , 220 바이트

다른 제출물만큼 작지는 않지만 참조를 위해 추가 할 것이라고 생각했습니다. [전부!]

function m($i,$m){($i-1)..($i+1)|?{$_-in0..$m}}
$h=$a.count-1;$w=$a[0].length-1
foreach($i in 0..$h){-join$(foreach($j in 0..$w){if ($a[$i][$j]-eq'B'-and($a[(m $i $h)]|?{$_[(m $j $w)]-match'A'})){'+'}else{$a[$i][$j]}})} 

온라인으로 사용해보십시오!


1
PPCG에 오신 것을 환영합니다. TIO 링크로도 좋은 첫 번째 대답! 코드 길이에 대해 걱정하지 마십시오. 각 언어는 서로 경쟁합니다. Btw, 부작용없이 첫 번째 줄 바꿈을 제거하여 1 바이트를 절약 할 수 있습니다.
Adám

마지막 줄이 0..$h|%{-join$(foreach($j in 0..$w){if ($a[$_][$j]-eq'B'-and($a[(m $_ $h)]|?{$_[(m $j $w)]-match'A'})){'+'}else{$a[$_][$j]}})}207 바이트 가 될 수 있습니까 ?
가브리엘 밀스

4

옥타브 , 37 31 26 바이트

이 함수 는를 사용하여 "이미지" 의 Astan ( ) 부분 에 형태 학적 침식 을 수행 한 다음 산술을 사용하여 세 영역을 서로 다른 기호로 만듭니다. -5 바이트를위한 @LuisMendo에게 감사합니다!1-bconv2 imerode

@(b)2*b-imerode(b,ones(3))

온라인으로 사용해보십시오!


2
회선이없는 경우 -1 : -P
Luis Mendo

@LuisMendo 이전 버전에는 회선이 포함되었습니다 :)
flawr

감사합니다!
flawr

3

J , 28 바이트

>.3 3(2 e.,);._3(0|:@,|.)^:4

온라인으로 사용해보십시오!

'AB+' -> 2 0 1

ngn의 APL 솔루션에서 영감을 얻었습니다. 행렬을 0으로 채우는 12 바이트 ...


제로 패딩을하지 않고 APL 솔루션을 사용할 수있는 이유는 무엇입니까?
요나

@Jonah : APL (스텐실)은 비정상적으로 다음과 같이 수행합니다. "사각형은 Y의 연속 요소를 중심으로하고 사각형 크기가 1이 아닌 경우 채우기 요소로 채워집니다."
Galen Ivanov

J 버전보다 훨씬 더 유용한 것 같습니다 ...
Jonah

@Jonah 그렇습니다!
Galen Ivanov

2

, 20 바이트

≔⪫θ⸿θPθFθ⎇∧№KMA⁼Bι+ι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

≔⪫θ⸿θ

일반적인 개행 문자가 아닌 캐리지 리턴으로 입력 배열을 결합하십시오. 문자를 개별적으로 인쇄 할 수 있어야합니다.

Pθ

커서를 움직이지 않고 입력 문자열을 인쇄하십시오.

Fθ

입력 문자열의 각 문자를 반복합니다.

⎇∧№KMA⁼Bι

무어 이웃에가 포함되어 있고 A현재 문자가 B...

+

... 다음을 덮어 B+...

ι

... 그렇지 않으면 현재 문자를 인쇄합니다 (또는 현재 문자가 캐리지 리턴 인 경우 다음 줄로 이동).


2

자바 스크립트, 85 바이트

지난 밤 늦게 이것을 re 아 먹었다. 아마도 여전히 어딘가에서 개선의 여지가 있습니다.

입력 및 출력은 3Astan, 0Blandia 및 1트렌치에 사용되는 숫자 배열의 배열입니다 .

a=>a.map((x,i)=>x.map((y,j)=>o.map(v=>o.map(h=>y|=1&(a[i+v]||x)[j+h]))|y),o=[-1,0,1])

온라인으로 시도해보십시오 (편의를 위해 챌린지에 사용 된 I / O 형식의 맵과 다시 매핑)


2

자바 스크립트, 126118 바이트

_=>_.map(x=>x.replace(/(?<=A)B|B(?=A)/g,0)).map((x,i,a)=>[...x].map((v,j)=>v>'A'&&(a[i-1][j]<v|(a[i+1]||x)[j]<v)?0:v))

질문에서 문자열 배열 중 하나 를 전달하면 트렌치에 0을 사용하여 문자열 문자 배열 (@Shaggy! 덕분에)을 얻습니다. 수 아마 (숫자 배열까지 전환하지 않고) 더 golfed 수 있지만 나는 순간에 아무것도 생각할 수 없다.


내 생각 120 바이트 작동합니다.
얽히고 설킨

또는 문자 배열 배열을 반환하는 116 바이트 .
얽히고 설킨

1
@Shaggy 골프는 슬프게도 작동하지 않습니다. A와 B가 서로 대각선 인 곳은 잡을 수 없습니다. 다른 한편으로, 내가 놓친 정말 간단한 골프를 지적합니다 ...
M Dirr

1

레티 나 0.8.2 , 92 80 바이트

(?<=¶(.)*)B(?=.*¶(?<-1>.)*(?(1)_)A|(?<=¶(?(1)_)(?<-1>.)*A.*¶.*))
a
iT`Ba`+`.?a.?

온라인으로 사용해보십시오! 제 답변을 느슨하게 기초로 제 시간에 작성합니까? 설명 : Bs 바로 위 또는 아래 A의 s가 as 로 바뀝니다. 그러면 s 또는 s B의 왼쪽 또는 오른쪽 을 검사 할 때 발생하는 문제가 줄어 듭니다 . 는 자신도로 전환하는 데 필요한이야 물론의,하지만 다행히 플래그 할 경우에만 정규식 일치가 아닌 실제 음역에 영향을 미치는, 그래서 S는 영향을받지 않습니다.Aaa+iTA


1

05AB1E , 29 바이트

_2FIн¸.øVgN+FYN._3£})εøO}ø}*Ā+

매트릭스는 실제로는 05AB1E의 강력한 슈트가 아닙니다.
에 의해 고무 @ngn 의 K (NGN / K) 답 그래서 또한 I을 갖는 2 차원 매트릭스의 정수 / O 사용 012을위한 AB+각각있다.

온라인으로 사용해보십시오 . TIO의 바닥 글은 출력을 예쁘게 인쇄하는 것입니다. 매트릭스 출력을 보려면 자유롭게 제거하십시오.

설명:

_                # Inverse the values of the (implicit) input-matrix (0→1 and 1→0)
                 #  i.e. [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,1,1]]
                 #   → [[1,1,1,1],[1,0,1,1],[1,0,0,0],[0,0,0,0]]
 2F              # Loop `n` 2 times in the range [0, 2):
   Iн            #  Take the input-matrix, and only leave the first inner list of 0s
                 #   i.e. [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,1,1]] → [0,0,0,0]
     ¸           #  Wrap it into a list
                 #   i.e. [0,0,0,0] → [[0,0,0,0]]
               #  Surround the inverted input with the list of 0s
                 #   i.e. [[1,1,1,1],[1,0,1,1],[1,0,0,0],[0,0,0,0]] and [0,0,0,0]
                 #    → [[0,0,0,0],[1,1,1,1],[1,0,1,1],[1,0,0,0],[0,0,0,0],[0,0,0,0]]
        V        #  Pop and store it in variable `Y`
   g             #  Take the length of the (implicit) input-matrix
                 #   i.e. [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,1,1]] → 4
    N+           #  Add `n` to it
                 #   i.e. 4 and n=0 → 4
                 #   i.e. 4 and n=1 → 5
      F          #  Inner loop `N` in the range [0, length+`n`):
       Y         #   Push matrix `Y`
        N._      #   Rotate it `N` times towards the left
                 #    i.e. [[0,0,0,0],[1,1,1,1],[1,0,1,1],[1,0,0,0],[0,0,0,0],[0,0,0,0]] and N=2
                 #     → [[1,0,1,1],[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,1,1,1]]
            3£   #   And only leave the first three inner lists
                 #    i.e. [[1,0,1,1],[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,1,1,1]]
                 #     → [[1,0,1,1],[1,0,0,0],[0,0,0,0]]
              }  #  After the inner loop:
    )            #  Wrap everything on the stack into a list
                 #   → [[[0,0,0,0],[1,1,1,1],[1,0,1,1]],[[1,1,1,1],[1,0,1,1],[1,0,0,0]],[[1,0,1,1],[1,0,0,0],[0,0,0,0]],[[1,0,0,0],[0,0,0,0],[0,0,0,0]]]
     €ø          #  Zip/transpose (swapping rows/columns) each matrix in the list
                 #   → [[[0,1,1],[0,1,0],[0,1,1],[0,1,1]],[[1,1,1],[1,0,0],[1,1,0],[1,1,0]],[[1,1,0],[0,0,0],[1,0,0],[1,0,0]],[[1,0,0],[0,0,0],[0,0,0],[0,0,0]]]
       O         #  And take the sum of each inner list
                 #   → [[2,1,2,2],[3,1,2,2],[2,0,1,1],[1,0,0,0]]
        ø        #  Zip/transpose; swapping rows/columns the entire matrix again
                 #   i.e. [[2,1,2,2],[3,1,2,2],[2,0,1,1],[1,0,0,0]]
                 #    → [[2,3,2,1],[1,1,0,0],[2,2,1,0],[2,2,1,0]]
               } # After the outer loop:
                 #   i.e. [[3,5,5,4,2],[4,6,5,4,2],[2,3,2,2,1],[1,1,0,0,0]]
  *              # Multiple each value with the input-matrix at the same positions,
                 # which implicitly removes the trailing values
                 #  i.e. [[3,5,5,4,2],[4,6,5,4,2],[2,3,2,2,1],[1,1,0,0,0]]
                 #   and [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,1,1]]
                 #    → [[0,0,0,0],[0,1,0,0],[0,2,1,0],[2,2,1,0]]
   Ā             # Truthify each value (0 remains 0; everything else becomes 1)
                 #  i.e. [[0,0,0,0],[0,1,0,0],[0,2,1,0],[2,2,1,0]]
                 #   → [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,0,0]]
    +            # Then add each value with the input-matrix at the same positions
                 #  i.e. [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,0,0]]
                 #   and [[0,0,0,0],[0,1,0,0],[0,1,1,1],[1,1,1,1]]
                 #    → [[0,0,0,0],[0,2,0,0],[0,2,2,2],[2,2,1,1]]
                 # (and output the result implicitly)


1

펄 5, 58 46 바이트

$m=($n=/$/m+"@+")-2;s/A(|.{$m,$n})\KB|B(?=(?1)A)/+/s&&redo

TIO

@Grimy 덕분에 -12 바이트

/.
/;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo

TIO

  • -p좋아 -n하지만 인쇄도
  • -00 단락 모드
  • 너비 1을 얻으려면 /.\n/첫 번째 줄의 마지막 문자와 일치
  • @{-} 특수 배열 이전에 일치 한 그룹의 일치 시작 위치를 문자열 (첫 번째 요소)로 강제 변환
  • s/../+/s&&redo일치하는 +동안 일치를 교체
    • /s.개행 문자와도 일치 하도록 플래그
  • A(|.{@{-}}.?.?)\KB 성냥
    • AB또는 A뒤에 오는 (width-1) ~ (width + 1) 문자B
    • \K왼쪽을 B변경하지 않고 유지
  • B(?=(?1)A),
    • (?1) 이전 식을 참조하기 위해 재귀 재귀 (|.{$m,$o})
    • (?=..) 미리보기, 입력을 소비하지 않고 일치

-9 바이트 /. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s(첫 번째 정규식의 리터럴 줄 바꿈). TIO
Grimmy

1
46까지 : /. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo. TIO
Grimmy

고마워,
나도

1

자바 8, 169145 바이트

m->{for(int i=m.length,j,k;i-->0;)for(j=m[i].length;j-->0;)for(k=9;m[i][j]==1&k-->0;)try{m[i][j]=m[i+k/3-1][j+k%3-1]<1?2:1;}catch(Exception e){}}

@ OlivierGrégoire 덕분에 -24 바이트 .

입력이 2D 정수-행렬 인 대신 과 대신에 사용 0합니다 . 바이트를 절약하기 위해 새로운 것을 반환하는 대신 입력 행렬을 수정합니다.A1B

셀은 모든 단일 여덟 도전에 대한 내 대답 과 동일하게 확인 됩니다.

온라인으로 사용해보십시오.

설명:

m->{                            // Method with integer-matrix parameter and no return-type
  for(int i=m.length,j,k;i-->0;)//  Loop over the rows
    for(j=m[i].length;j-->0;)   //   Inner loop over the columns
      for(k=9;m[i][j]==1&       //    If the current cell contains a 1:
          k-->0;)               //     Inner loop `k` in the range (9, 0]:
        try{m[i][j]=            //      Set the current cell to:
             m[i+k/3-1]         //       If `k` is 0, 1, or 2: Look at the previous row
                                //       Else-if `k` is 6, 7, or 8: Look at the next row
                                //       Else (`k` is 3, 4, or 5): Look at the current row
              [j+k%3-1]         //       If `k` is 0, 3, or 6: Look at the previous column
                                //       Else-if `k` is 2, 5, or 8: Look at the next column
                                //       Else (`k` is 1, 4, or 7): Look at the current column
               <1?              //       And if this cell contains a 0:
                  2             //        Change the current cell from a 1 to a 2
                 :              //       Else:
                  1;            //        Leave it a 1
        }catch(Exception e){}}  //      Catch and ignore ArrayIndexOutOfBoundsExceptions
                                //      (try-catch saves bytes in comparison to if-checks)

1
많이 확인하지 않았지만 문제가 m[i+k/3-1][j+k%3-1]있습니까? 145 바이트
Olivier Grégoire

@ OlivierGrégoire Dang, 훨씬 쉬워요 .. 감사합니다!
Kevin Cruijssen


@ OlivierGrégoire 그래, 난 당신의 제안뿐만 아니라 그 사람들을 골프하려고하지만, 또 다른 의견 (및 직장에서 질문)이왔다. 잠시 후에 그렇게 할 것입니다.
Kevin Cruijssen

1

PowerShell , 86 80 바이트

$p="(.?.?.{$(($args|% i*f '
')-1)})?"
$args-replace"(?s)(?<=A$p)B|B(?=$p`A)",'+'

온라인으로 사용해보십시오!

지도는 줄 바꿈이있는 문자열입니다. 이 스크립트는 regexp로 대체 B됩니다 .+(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)

덜 골프 테스트 스크립트 :

$f = {
$l=($args|% indexOf "`n")-1
$p="(.?.?.{$l})?"
$args-replace"(?s)(?<=A$p)B|B(?=$p`A)",'+'
}

@(
,(@"
AAAAAAAAAA
ABAAAAAABA
ABBBAABABA
ABBBAABABA
ABBBBABABA
ABBBBABBBB
ABBBBABBBB
ABBBBBBBBB
BBBBBBBBBB
"@,@"
AAAAAAAAAA
A+AAAAAA+A
A+++AA+A+A
A+B+AA+A+A
A+B++A+A+A
A+BB+A++++
A+BB+A+BBB
A+BB+++BBB
++BBBBBBBB
"@)
,(@"
AAA
AAA
BBB
"@,@"
AAA
AAA
+++
"@)
,(@"
AAAAAAAAAA
AAAABBBAAA
AAAABBBAAA
AAAABBBAAA
AAAAAAAAAA
BBBBBBABBB
BBBBBBAABB
BBBAAAAABB
BBBBBBBBBB
"@,@"
AAAAAAAAAA
AAAA+++AAA
AAAA+B+AAA
AAAA+++AAA
AAAAAAAAAA
++++++A+++
BB++++AA+B
BB+AAAAA+B
BB+++++++B
"@)
) | % {
    $map,$expected = $_
    $result = &$f $map
    $result-eq$expected
    #$result # uncomment this line to display results
}

산출:

True
True
True



0

TSQL, 252 바이트

문자열이 분할되어 이미 테이블에있는 경우 문자열을 분할하면 비용이 매우 많이 들며 바이트 수는 127 자입니다. 스크립트는 바닥에 포함되어 있으며 완전히 다릅니다. 이 공간을 많이 차지해서 죄송합니다.

골프 :

WITH C as(SELECT x,x/z r,x%z c,substring(@,x+1,1)v
FROM spt_values CROSS APPLY(SELECT number x,charindex(char(10),@)z)z
WHERE'P'=type)SELECT @=stuff(@,x+1,1,'+')FROM c WHERE
exists(SELECT*FROM c d WHERE abs(r-c.r)<2and
abs(c-c.c)<2and'AB'=v+c.v)PRINT @

언 골프 드 :

DECLARE @ varchar(max)=
'AAAAAAAAAA
ABAAAAAABA
ABBBAABABA
ABBBAABABA
ABBBBABABA
ABBBBABBBB
ABBBBABBBB
ABBBBBBBBB
BBBBBBBBBB';

WITH C as
(
  SELECT x,x/z r,x%z c,substring(@,x+1,1)v
  FROM spt_values
  CROSS APPLY(SELECT number x,charindex(char(10),@)z)z
  WHERE'P'=type
)
SELECT
  @=stuff(@,x+1,1,'+')
FROM c
WHERE exists(SELECT*FROM c d 
         WHERE abs(r-c.r)<2 
           and abs(c-c.c)<2 and'AB'=v+c.v)
PRINT @

사용해보십시오

TSQL, 127 바이트 (테이블 변수를 입력으로 사용)

Management Studio에서이 스크립트를 실행하십시오. "query"- "result to text"를 사용하여 읽을 수있게하십시오.

--populate table variable
USE master
DECLARE @v varchar(max)=
'AAAAAAAAAA
ABAAAAAABA
ABBBAABABA
ABBBAABABA
ABBBBABABA
ABBBBABBBB
ABBBBABBBB
ABBBBBBBBB
BBBBBBBBBB'

DECLARE @ table(x int, r int, c int, v char)

INSERT @
SELECT x+1,x/z,x%z,substring(@v,x+1,1)
FROM spt_values
CROSS APPLY(SELECT number x,charindex(char(10),@v)z)z
WHERE'P'=type and len(@v)>number

-- query(127 characters)

SELECT string_agg(v,'')FROM(SELECT
iif(exists(SELECT*FROM @
WHERE abs(r-c.r)<2and abs(c-c.c)<2and'AB'=v+c.v),'+',v)v
FROM @ c)z

사용해보십시오 -경고 출력이 선택되어 있고 읽을 수 없습니다. 인쇄로 읽을 수 있지만이 방법으로는 불가능합니다


테이블을 인수로 사용할 수 없다고 생각하는 이유는 무엇입니까?
Adám

@ 아담은 나쁜 생각도 인수로 테이블을 사용하여 코드를 작성하지 - 내가 바로 그것을 얻을 것이다
t-clausen.dk

@ Adám 120 문자에 대해 스크립트를 작동시키기 위해서는 테이블과 varchar를 모두 입력해야하며 다시 작성해야합니다. 151 자 소요
t-clausen.dk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.