Bir sınır siper kazmak


59

Arka plan: Blandia'dan çok fazla yasadışı göçmen sınırdan Astan'a geçiyor. Astan imparatoru, onları dışarıda tutmak için bir siper kazma görevini üstlendi ve Blandia masrafları ödemek zorunda. Tüm daktilolar açmanın düzenine kadar fırlatıldığından, kodunuz mümkün olduğu kadar kısa olmalıdır. *

Görev: Astan ve Blandia arasındaki sınırın 2B haritası göz önüne alındığında, Blands'e sınır hendeklerini öder (arazi ile birlikte).

Örneğin: Astanian hücreleri işaretliyken A, Blandik hücreleri işaretlenir Bve hendek hücreleri işaretlenir +(harita çerçeveleri sadece açıklık içindir):

┌──────────┐ ┌──────────┐
│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│
└──────────┘ └──────────┘

Ayrıntılar: Harita en az üç satır ve üç sütun içerecektir. Üst sıra tamamen Astan dili olacak ve alt sıra tamamen Blandiç olacaktır.
 Girdi ve çıktı tutarlı olduğu sürece, Astan topraklarını, Blandik topraklarını ve sınır siperini temsil etmek için üç değeri kullanabilirsiniz.

Otomat formülasyonu: Moore mahallesinde en az bir Astan hücresi bulunan bir Blandik hücresi, bir sınır açma hendek hücresi haline gelir.

Test durumları

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

dönüşür:

[
  "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"
]

dönüşür:

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

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

dönüşür:

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

* YASAL UYARI: GERÇEK JEOPOLİTİĞE HİÇBİR BİR KONUK KAZANIMDIR!


23
Kod golf şeklinde politik hiciv, bayılıyorum: o)
Sok

4
-1 bunun için <sup><sub><sup><sub><sup><sub><sup><sub>:-P
Luis Mendo

25
python, 4 byte : passBir sınır açması inşa etme planları hükümetin kapanmasına yol açıyor ve hiçbir şey olmuyor.
Espinosa

3
@ The Espinosa Hayır hayır, siper düzenleninceye kadar kapatma işlemi yapılır .
Ad

1
Sadece arka plan hikayesi yüzünden yükselmiştim. Okumaya bile devam etmedi.
boru

Yanıtlar:




8

JavaScript (ES7),  84  82 bayt

@Shaggy sayesinde 2 bayt kaydedildi

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)))()

Çevrimiçi deneyin!

Yorumlananlar

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 Son zamanlarda yeterli soru yok. Artık golf oynamayı bilmiyorum. : D Teşekkürler!
Arnauld

Daha önce de aynı şeyi düşünüyordum!
Shaggy,

7

K (ngn / k) , 23 bayt

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

Çevrimiçi deneyin!

kullandığı 0 1 2için"AB+"

{ } argümanlı fonksiyon x

~ mantıksal değil

2{ }/ iki kere yap

  • 0,x,0 0-s ile çevreleyin (matrisin üstü ve altı)

  • 3' ardışık satırların üçleri

  • +/' her birini topla

  • + aktarmak

x&mantıklı ve xile

x+eklemek xiçin


5

APL (Dyalog Unicode) , 11 bayt SBCS

⊢⌈{2∊⍵}⌺3 3

Bu @ dzaima en 12 bayt çözüm dayalı sohbet . dfn'de kullanmayı düşündüğü için @ Adám'a, giriş ve çıkış için aynı şifrelemeyi kullanmamızı hatırlattığımız için @ H.PWiz'e teşekkür ederiz.

Çevrimiçi deneyin!

temsil eder 'AB+'şekilde 2 0 1sırasıyla

{ }⌺3 3 0s ile dolgulu, matrisin dışına 1 birim uzanan bölgeler dahil, girişin üst üste gelen her 3 × 3 bölgesine bir işlev uygulayın

2∊⍵argümanda bir 2 var mı? 0/1 boole döndürmek

⊢⌈ öğenin başına maksimum değeri ve orijinal matris


Elbette, Stencil'e geçmek sizi baytlarınızın yarısından fazlasını kurtaracaktır.
Ad

@ Adám, farklı bir dilde cevap olacaktır, bu nedenle bu cevapla karşılaştırılamaz ya da rekabet edemez. ve özel amaçlı dillerde golf
oynamayı

@ Adám displaykaldırmayı unuttuğum bir diğer adı girin . şimdi kaldırıldı
ngn

5

PowerShell , 220 bayt

Diğer başvurular kadar küçük değil ama referans olarak ekleyeceğimi düşündüm. [FORE!]

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]}})} 

Çevrimiçi deneyin!


1
PPCG'ye Hoşgeldiniz. Hatta ilk cevap, hatta TIO bağlantısıyla! Kod uzunluğu hakkında endişelenmeyin; Her dil kendine karşı yarışır. Btw, herhangi bir kötü etki olmadan ilk satır sonunu kaldırarak bir bayt tasarruf edebilirsiniz.
Ocak’ta

Son satır 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 bayt olabilir mi?
Gabriel Mills,

4

Octave , 37 31 26 bayt

Bu işlev , kullanarak "görüntünün" Astan ( ) kısmı üzerinde morfolojik bir erozyon gerçekleştirir ve ardından üç alanı da farklı semboller yapmak için bazı aritmetik kullanır. -5 bayt için @LuisMendo teşekkürler!1-bconv2 imerode

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

Çevrimiçi deneyin!


2
Evrişim için -1:
Luis Mendo

@LuisMendo Daha eski bir sürümde bir evrişim vardı :)
kusur

Teşekkürler, güncellendi!
kusur,

3

J , 28 bayt

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

Çevrimiçi deneyin!

'AB+' -> 2 0 1

Ngn'in APL çözümünden ilham aldı. Sadece matrisi sıfırlamak için 12 bayt ...


APL çözümü neden sıfır doldurma işlemi yapmadan kurtulabiliyor?
Jonah

@Jonah: APL'ler (Stencil) bunu otomatik olarak yapar: "Dikdörtgenler, arka arkaya Y ve (dikdörtgen boyutu 1 değilse) dolgulu öğelerle doludur."
Galen Ivanov

Bu J'nin versiyonundan çok daha kullanışlı görünüyor ...
Jonah

@Jonah Evet, öyle!
Galen Ivanov

2

Kömür , 20 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

≔⪫θ⸿θ

Giriş dizisine normal satırsonları yerine satır başı satırlarıyla katılın. Bu, karakterlerin ayrı ayrı yazdırılabilmesi için gereklidir.

Pθ

İmleci hareket ettirmeden giriş dizesini yazdırın.

Fθ

Giriş dizesinin her karakteri üzerinde döngü yapın.

⎇∧№KMA⁼Bι

Moore mahallesinde bir varsa Ave geçerli karakter bir B...

+

... sonra üzerine Bbir ile +...

ι

... aksi takdirde geçerli karakteri yazdırın (veya geçerli karakter satır başı ise bir sonraki satıra geçin).


2

JavaScript, 85 bayt

Bunu dün gece geç saatte attık ve unuttum. Muhtemelen hala bir yerlerde bazı gelişmelere yer var.

Girdi ve çıktı, Blandia ve hendek 3için Astan 0için kullanılan, bir dizi basamak dizisi gibidir 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])

Çevrimiçi olarak deneyin (Rahatlık için, meydan okumada kullanılan G / Ç formatına eşleştirilir)


2

Javascript, 126 118 bayt

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

Söz dize diziler birini aktarın ve bir dizi alırsınız dizeleri karakter dizileri (teşekkürler @Shaggy!) Dışarı siper için 0 kullanarak. Can muhtemelen (sayısal diziler üzerinden geçiş olmadan) daha golfed edilmesi, ancak şu anda bir şey düşünemiyorum.


Bence bu 120 bayt için çalışır.
Shaggy

Veya bir dizi karakter dizisi döndüren 116 bayt .
Shaggy

1
@Shaggy Golfün ne yazık ki çalışmıyor - A ve B'nin birbirlerine çapraz olduğu yerleri yakalamaz. Öte yandan, bazı işaret yapar gerçekten Kaçırdığım basit golfları ...
E Dirr

1

Retina 0.8.2 , 92 80 bayt

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

Çevrimiçi deneyin! Gevşek olarak verdiğim cevaba dayanarak Zamanında Yapacak mıyım? Açıklama: BHemen altındaki veya altındaki herhangi bir s As'ye dönüştürülür a. Bu daha sonra Bs'yi As veya as'nin soluna veya sağına kontrol etme problemini azaltır . aKendilerini de dönüştü gerekiyor s +neyse tabii s, ancak ibayrak içinT sadece regex maç değil, gerçek çevirisini etkiler, dolayısıyla Aler bundan etkilenmez.


1

05AB1E , 29 bayt

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

Matrisler gerçekten 05AB1E'nin güçlü kıyafeti değil (güçlü kıyafetim de değil) .. Kesinlikle biraz daha golf oynayabilir. @Ngn'in K (ngn / k) yanıtından
esinlenerek , 2 boyutlu bir tam sayı matrisinin G / Ç'ını da kullanır.012 için AB+sırasıyla.

Çevrimiçi deneyin . (TIO'daki altbilgi, çıktıyı güzel bir şekilde yazdırmak içindir. Matris çıktısını görmek için çıkarmaktan çekinmeyin.)

Açıklama:

_                # 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 # Etkileşimli Derleyici) , 187 bayt

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;}))

Zincirleme yerine Take()s, Skip()s, veSelect() s yerine bu, komşular bulmak için döngüler için çift kullanır. BÜYÜK bayt, 392 bayttan 187'ye düşüyor. Linq her zaman en kısa değil!

Çevrimiçi deneyin!


1

Perl 5, 58 46 bayt

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

TIO

@Grimy sayesinde -12 bayt

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

TIO

  • -pgibi -nayrıca fakat baskı
  • -00 paragraf modu
  • width-1'i /.\n/ilk satırın son karakteriyle eşleştirmek için
  • @{-} özel dizi önceki eşleşmiş grupların eşleşmesinin başlama pozisyonu, string (ilk eleman)
  • s/../+/s&&redo eşleşmeyi değiştir +maçlar sırasında
    • /sbayrak, böylece .yeni satır karakteriyle eşleşir
  • A(|.{@{-}}.?.?)\KB maçlar
    • ABveya Aardından gelen (genişlik-1) - (genişlik + 1) karakterB
    • \KBdeğişmemiş solunu tutmak
  • B(?=(?1)A),
    • (?1) Önceki ifadeye atıfta bulunmak için özyinelemeli (|.{$m,$o})
    • (?=..) bakış açısı, girdi tüketmeden eşleşmek için

-9 bayt /. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s(ilk regex'in tam anlamıyla yeni satır). TIO
Grimmy

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

teşekkürler, benim de fikrim vardı, ama atıldı çünkü felaket geri
dönüşünü

1

Java 8, 169 145 bayt

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 sayesinde -24 bayt .

Kullanım 0yerine Ave 1yerine Bgiriş 2B tamsayıdır matris olmak üzere. Girdiyi kaydetmek için yenisini döndürmek yerine girdi matrisini değiştirir.

Hücreler , tüm Sekizler yarışmasına verdiğim yanıttakiyle aynı olarak kontrol edildi .

Çevrimiçi deneyin.

Açıklama:

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
Fazla kontrol etmedim ama yanlış bir şey m[i+k/3-1][j+k%3-1]mi var ? 145 bayt
Olivier Grégoire

@ OlivierGrégoire Dang, bu çok daha kolay .. Teşekkürler!
Kevin Cruijssen

Aynı yapıya sahip oldukları göz önüne alındığında, önceki zorlukların cevaplarınız için de geçerli olduğunu düşünüyorum
Olivier Grégoire

@ OlivierGrégoire Evet, önerinizle birlikte onları golf yapmak üzereydim, ama sonra başka bir yorum (ve bir iş sorusu) arasına girdi. Birazdan bunu yapacak.
Kevin Cruijssen

1

Güç kalkanı , 86 80 bayt

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

Çevrimiçi deneyin!

Harita, yeni satırlı bir dizedir. Bu komut dosyası değiştirir Biçin +Normal ifadeyle (?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A).

Daha az golf oynadı Test senaryosu:

$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
}

Çıktı:

True
True
True


0

Python 2 , 123 119 bayt

lambda m:[[[c,'+'][c=='B'and'A'in`[x[j-(j>0):j+2]for x in m[i-(i>0):i+2]]`]for j,c in e(l)]for i,l in e(m)];e=enumerate

Çevrimiçi deneyin!

G / Ç, listelerin listesidir


0

TSQL, 252 bayt

Dizeyi bölmek çok maliyetlidir, dizge bölünmüşse ve zaten bir tabloda ise bayt sayısı 127 karakter olur. Script dipte ve tamamen farklı. Bu kadar yer kapladığım için üzgünüm.

golfed:

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 @

Ungolfed:

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 @

Denemek

TSQL, 127 bayt (Tablo değişkenini giriş olarak kullanma)

Bu betiği yönetim stüdyosunda yürütün - okunabilir kılmak için "query" - "sonucu" yazın

--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

Deneyin - uyarı çıkışı seçildi ve okunamıyor. Yazdırmayla okunabilir ancak bu yöntemle mümkün değil


Bir masa argümanı olarak alamayacağınızı düşündüren nedir?
Adem

@ Adam kötü bir fikir de argüman olarak bir tablo kullanılarak kodu oluşturmak için değil - Ben hemen gidiyorum olacak
t-clausen.dk

@ Adám Sanırım yanılmışım, betiğin 120 karakter çalışabilmesi için hem tabloya hem de değişkene giriş olarak ihtiyacım olacaktı, yeniden yazdım. 151 karakter aldı
t-clausen.dk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.