ボーダートレンチを掘る


59

背景:ブランディアからの不法移民があまりにも多く、国境を越えてアスタンに来ています。Astanの皇帝は、それらを締め出すためにtrenchを掘ることをあなたに任せました、そして、Blandiaは費用の支払いをしなければなりません。すべてのタイピストはトレンチが配置されるまで抜け落ちているため、コードはできるだけ短くする必要があります。*

仕事: AstanとBlandiaの境界線の2Dマップを指定して、Blandsに境界トレンチの(土地を)支払うようにします。

例:マークされたAstanianセル、マークされたABlandicセル、マークさ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列が含まれます。一番上の行は完全にアスタニアンであり、一番下の行は完全に無意味です。
 入力と出力が一貫している限り、任意の3つの値を使用して、Astanian領域、Blandic領域、およびボーダートレンチを表すことができます。

オートマトン定式化:ムーア近傍に少なくとも1つのアスタニアンセルを持つ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)
ソク

4
そのために-1 <sup><sub><sup><sub><sup><sub><sup><sub>:-P
ルイスメンドー

25
python、4バイトpass国境のトレンチを建設する計画は政府のシャットダウンにつながり、何も起こりません。
TheEspinosa

3
@TheEspinosaいいえ、シャットダウンはトレンチが配置されるまでです。
アダム

1
バックグラウンドストーリーのためだけに賛成しました。読み続けませんでした。
パイプ

回答:



9

MATL11 8バイト

@flawrのOctaveの回答@lirtosiastのMathematicaの回答に触発されました。

EG9&3ZI-

入力はで表される0Astanとで表される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

JavaScript(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ありがとう!
アーナウド

私は以前と同じことだけを考えていました!
シャギー

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' 連続する行のトリプル

  • +/' それぞれを合計する

  • + 転置

x&論理とのx付き

x+追加xします


5

APL(Dyalog Unicode)、11バイトSBCS

⊢⌈{2∊⍵}⌺3 3

これはchatの@dzaimaの12バイトのソリューション基づいています。使用することを考えた@Adám自身の功績dfnする、および入力と出力に同じエンコードを使用することを思い出させる@ H.PWizの功績

オンラインでお試しください!

表し'AB+'として2 0 1それぞれ

{ }⌺3 3 入力の重複する各3×3領域に関数を適用します。これには、0でパディングされた、マトリックスの外側の1ユニット拡張する領域が含まれます

2∊⍵引数に2がありますか?0/1ブール値を返します

⊢⌈ その要素ごとの最大値と元の行列


もちろん、ステンシルに切り替えると、バイトの半分以上を節約できます。
アダム

@Adámは異なる言語での回答となるため、この回答と比較したり競合したりすることはありません。そして、私は特別な目的の言語でのゴルフは特に面白くありません、ごめんなさい
ngn

@Adám display削除するのを忘れたエイリアス。今削除
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リンクも!コードの長さを心配しないでください。各言語はそれ自体と競合します。ところで、悪影響なしで最初の改行を削除することで1バイトを節約できます。
アダム

最終行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()部分に対して形態学的侵食を実行し、その後、何らかの算術を使用して3つの領域すべてを異なるシンボルにします。-5バイトをありがとう@LuisMendo!1-bconv2 imerode

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

オンラインでお試しください!


2
-1畳み込みなし:-P
ルイスメンドー

@LuisMendo以前のバージョンには畳み込みが含まれていました:)
flawr

更新、ありがとう!
flawr

3

J、28バイト

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

オンラインでお試しください!

'AB+' -> 2 0 1

ngnのAPLソリューションに触発されました。行列にゼロを埋め込むだけの12バイト...


なぜAPLソリューションはゼロパディングを行わなくても逃げることができますか?
ヨナ

@Jonah:APL (ステンシル)は原子的にそれを行います:「長方形はYの連続する要素の中心にあり(長方形のサイズが1でない限り)、フィル要素で埋められます。」
ガレンイワノフ

それは...そんなにより有用Jのバージョンよりも思える
ヨナ

@ジョナはい、そうです!
ガレンイワノフ

2

、20バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

≔⪫θ⸿θ

通常の改行ではなく、キャリッジリターンで入力配列を結合します。これは、文字を個別に印刷できるようにするために必要です。

Pθ

カーソルを移動せずに入力文字列を印刷します。

Fθ

入力文字列の各文字をループします。

⎇∧№KMA⁼Bι

ムーア近傍にが含まれA、現在のキャラクターがB...

+

...その後、上書きしB+...

ι

...それ以外の場合、現在の文字を印刷します(または、現在の文字がキャリッジリターンの場合は次の行に移動します)。


2

JavaScript、85バイト

昨夜遅くこれを一緒に投げて、それを忘れました。おそらくまだどこかに改善の余地があります。

入力と出力は、Astan、Blandia、およびトレンチに使用さ3れる数字配列の配列です。01

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

Javascript、126 118バイト

_=>_.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))

質問から文字列配列の1つを渡すと、トレンチに0を使用して文字列の文字配列(@Shaggy!に感謝)の配列を取得します。おそらくもっとゴルフをすることができます(数値配列に切り替えることなく)が、現時点では何も考えられません。


これは120バイトで機能すると思います。
シャギー

または、116バイトが文字配列の配列を返します。
シャギー

1
@Shaggy残念ながら、ゴルフは機能しません。AとBが互いに斜めになっている場所をキャッチしません。一方、それは私が見逃したいくつかの本当にシンプルなゴルフを指摘しています...
Mディル

1

網膜0.8.292の 80バイト

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

オンラインでお試しください!大まかに言って、私は時間内に解決するだろうか?説明:Bsのすぐ上またはすぐ下Aのsはsに変わりaます。これにより、sまたはs のB左または右にあるAs をチェックする問題が軽減されaます。a自体もになって取得する必要がありますよ+、もちろんSが、幸いiフラグがするTだけで正規表現の一致ではなく、実際の音訳に影響を与えますので、Asが影響を受けません。


1

05AB1E、29 バイト

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

マトリックスは実際には05AB1Eの強力なスーツではありません(また、私の強力なスーツでもありません)。@ngnのK(ngn / k)answer
触発されたため、forをそれぞれ持つ2D整数行列のI / Oも使用します。012AB+

オンラインでお試しください。(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

C#(Visual C#Interactive Compiler)、187バイト

a=>a.Select((b,i)=>b.Select((c,j)=>{int k=0;for(int x=Math.Max(0,i-1);x<Math.Min(i+2,a.Count);x++)for(int y=Math.Max(0,j-1);y<Math.Min(j+2,a[0].Count);)k+=a[x][y++];return k>1&c<1?9:c;}))

Take()s、Skip()s、およびの連鎖の代わりにSelect() s、代わりにループにdoubleを使用して近隣を見つけます。バイトが392バイトから187バイトに大幅に減少しました。Linqは常に最短ではありません。

オンラインでお試しください!


1

Perlの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 マッチを置き換える +whileマッチでマッチを
    • /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
グリムミー

1
46へダウン:/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redoTIO
グリムミー

おかげで、私も考えていたが、しかし、コードゴルフのパフォーマンスのために壊滅的なバックトラックに考えていた捨ては重要ではありません
ナウエルFouilleul

1

Java 8、 8、169 145バイト

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バイト。

用途 0代わりにAとの1代わりにBし、入力は2D整数行列です。新しい行列を返してバイトを節約する代わりに、入力行列を変更します。

セルは、私の答えと同じようにチェックされますすべてのシングル8のチャレンジの

オンラインでお試しください。

説明:

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バイト
オリビエグレゴワール

@OlivierGrégoireDang、とても簡単です。ありがとう。
ケビンクルーッセン

同じ構造を持っているように思える以前の課題の回答にも有効だと思います
オリビエグレゴワール

@OlivierGrégoireええ、私もあなたの提案でそれらをゴルフしようとしていましたが、その間に別のコメント(および職場での質問)が入りました。すぐにそうします。
ケビンクルーイッセン

1

PowerShell86 80バイト

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

オンラインでお試しください!

マップは、改行を含む文字列です。このスクリプトは、置き換えB+ regexpに(?<=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.