Tło: Zbyt wielu nielegalnych imigrantów z Blandii przekracza granicę do Astanu. Cesarz Astanu zlecił ci wykopanie rowu, aby ich nie wpuścić, a Blandia musi zapłacić za wydatki. Ponieważ wszystkie maszyny do pisania były rozwłóknione do momentu ułożenia rowu, kod musi być możliwie jak najkrótszy. *
Zadanie: mając mapę 2D granicy między Astanem a Blandią, spraw, aby Blands płacili (wraz z gruntami) za wykop graniczny.
Na przykład: z zaznaczonymi komórkami Astanian, zaznaczonymi komórkami A
gruczołów B
i zaznaczonymi komórkami wykopów +
(ramki mapy są tylko dla przejrzystości):
┌──────────┐ ┌──────────┐
│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│
└──────────┘ └──────────┘
Szczegóły: mapa będzie mieć co najmniej trzy rzędy i trzy kolumny. Górny rząd będzie całkowicie astanski, a dolny rząd będzie całkowicie blandycki.
Możesz użyć dowolnych trzech wartości do reprezentowania terytorium Astanian, terytorium Blandic i wykopu granicznego, o ile dane wejściowe i wyjściowe są spójne.
Formułowanie automatyczne: Komórka gruczołowa z co najmniej jedną komórką astańską w sąsiedztwie Moore staje się komórką okopu granicznego.
Przypadki testowe
[
"AAAAAAAAAA",
"ABAAAAAABA",
"ABBBAABABA",
"ABBBAABABA",
"ABBBBABABA",
"ABBBBABBBB",
"ABBBBABBBB",
"ABBBBBBBBB",
"BBBBBBBBBB"
]
staje się:
[
"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"
]
staje się:
[
"AAA",
"AAA",
"+++"
]
[
"AAAAAAAAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAAAAAAAA",
"BBBBBBABBB",
"BBBBBBAABB",
"BBBAAAAABB",
"BBBBBBBBBB"
]
staje się:
[
"AAAAAAAAAA",
"AAAA+++AAA",
"AAAA+B+AAA",
"AAAA+++AAA",
"AAAAAAAAAA",
"++++++A+++",
"BB++++AA+B",
"BB+AAAAA+B",
"BB+++++++B"
]
* WYŁĄCZENIE ODPOWIEDZIALNOŚCI: JAKIEKOLWIEK PONIESIONE RZECZYWISTE GEOPOLITYKI JEST PRAWDOPODOBIEŃSTWO PRZYPADKOWE!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
Plany budowy wykopu granicznego prowadzą do zamknięcia rządu i nic się nie dzieje.Odpowiedzi:
Wolfram Language (Mathematica) , 15 bajtów
Wypróbuj online!
Lub (39 bajtów):
Wypróbuj online!
Czego jeszcze moglibyśmy oczekiwać od Mathematica? Używane są znaki
{Astan -> 0, Blandia -> 1, Trench -> 2}
.źródło
MATL ,
118 bajtówZainspirowani na Octave odpowiedź @ flawr i @ lirtosiast za Mathematica odpowiedź .
Dane wejściowe to macierz z
0
Astanem reprezentowanym przez i Blandia przez1
. Wykop jest reprezentowany w danych wyjściowych przez2
.Wypróbuj online!
Jak to działa
źródło
JavaScript (ES7),
8482 bajtówZaoszczędzono 2 bajty dzięki @Shaggy
Pobiera dane wejściowe jako macierz liczb całkowitych, z dla Astanu i dla Blandii. Zwraca macierz z dodatkową wartością dla rowu.3) 0 1
Wypróbuj online!
Skomentował
źródło
K (ngn / k) , 23 bajty
Wypróbuj online!
używa
0 1 2
dla"AB+"
{
}
funkcja z argumentemx
~
logiczne nie2{
}/
dwa razy0,x,0
surround 0-s (góra i dół matrycy)3'
trzy kolejne rzędy+/'
zsumuj każdy+
transponowaćx&
logiczne ix
zx+
dodajx
doźródło
APL (Dyalog Unicode) , 11 bajtów SBCS
jest to oparte na 12-bajtowym rozwiązaniu @ dzaima na czacie .
∊
podziękowania dla samego @ Adáma za myślenie o użyciu w dfn i @ H.PWiz za przypomnienie nam, abyśmy używali tego samego kodowania dla wejścia i wyjściaWypróbuj online!
oznacza
'AB+'
jak2 0 1
odpowiednio{
}⌺3 3
zastosować funkcję do każdego nakładającego się regionu 3 × 3 wejścia, w tym regionów rozciągających się o 1 jednostkę poza matrycę, wypełnionych zerami2∊⍵
jest 2 w argumencie? zwraca wartość logiczną 0/1⊢⌈
na element maksymalnie tej i oryginalnej macierzyźródło
display
którego zapomniałem usunąć. usunięte terazPowerShell , 220 bajtów
Nie jest tak mały jak inne zgłoszenia, ale pomyślałem, że dodam go w celach informacyjnych. [DZIOBOWY!]
Wypróbuj online!
źródło
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 bajtów?Oktawa ,
37 3126 bajtówTa funkcja wykonuje erozję morfologiczną w
1-b
części „obrazu” Astan ( ) za pomocą , a następnie używa pewnej arytmetyki, aby wszystkie trzy obszary były różnymi symbolami. Dzięki @LuisMendo za -5 bajtów!conv2
imerode
Wypróbuj online!
źródło
J , 28 bajtów
Wypróbuj online!
'AB+'
->2 0 1
Zainspirowany rozwiązaniem APL firmy ngn. 12 bajtów tylko do wypełnienia macierzy zerami ...
źródło
⌺
(szablon) robi to w sposób automatyczny: „Prostokąty są wyśrodkowane na kolejnych elementach Y i (chyba że rozmiar prostokąta wynosi 1), wypełnione elementami wypełniającymi”.Węgiel drzewny , 20 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Połącz tablicę wejściową ze znakami powrotu karetki zamiast zwykłych znaków nowej linii. Jest to konieczne, aby znaki mogły być drukowane indywidualnie.
Wydrukuj ciąg wejściowy bez przesuwania kursora.
Pętla nad każdym znakiem ciągu wejściowego.
Jeśli sąsiedztwo Moore zawiera
A
, a obecna postać toB
...... następnie nadpisać
B
z+
...... w przeciwnym razie wydrukuj bieżący znak (lub przejdź do następnego wiersza, jeśli bieżącym znakiem jest powrót karetki).
źródło
JavaScript, 85 bajtów
Zrzuciłem to zeszłej nocy i zapomniałem o tym. Prawdopodobnie wciąż gdzieś jest miejsce na jakąś poprawę.
Dane wejściowe i wyjściowe są tablicami tablic cyfrowych
3
,0
używanymi dla Astanu , dla Blandii i1
dla rowu.Wypróbuj online (dla wygody, mapy zi do formatu I / O użytego w wyzwaniu)
źródło
JavaScript,
126118 bajtówPrzekaż jedną z tablic łańcuchowych z pytania, a otrzymasz tablicę
znakówłańcuchowych (dzięki @Shaggy!), Używając 0 dla rowu. Mogą prawdopodobnie być golfed więcej (bez przełączania do tablic numerycznych), ale nie mogę myśleć o niczym w tej chwili.źródło
Retina 0.8.2 ,
9280 bajtówWypróbuj online! Luźno oparty na mojej odpowiedzi na Czy zdążę na czas? Objaśnienie: Wszelkie
B
s bezpośrednio powyżej lub poniżejA
s są zamieniane naa
s. To redukuje problem do sprawdzaniaB
s po lewej lub prawej stronieA
s luba
s.a
S sami również muszą się zamienił+
s oczywiście, ale na szczęściei
flagęT
tylko wpływa na mecz regex, a nie rzeczywistymi transliteracji, więcA
s pozostają niezmienione.źródło
05AB1E , 29 bajtów
Macierze nie są tak naprawdę mocnym kolorem 05AB1E (ani nie są moim mocnym kolorem) .. Zdecydowanie można jednak grać w golfa.
Zainspirowany odpowiedzią K (ngn / k) @ngn , więc używa również we / wy macierzy 2D z liczbami całkowitymi odpowiednio
012
dlaAB+
.Wypróbuj online . (Stopka w TIO polega na ładnym wydrukowaniu wydruku. Możesz go usunąć, aby zobaczyć wynik matrycy.)
Wyjaśnienie:
źródło
C # (interaktywny kompilator Visual C #) , 187 bajtów
Zamiast łączenia łańcuchów
Take()
s,Skip()
si iSelect()
s, zamiast tego używa podwójnej pętli for do znajdowania sąsiadów. OGROMNY spadek bajtów, z 392 bajtów do 187. Linq nie zawsze jest najkrótszy!Wypróbuj online!
źródło
Perl 5,
5846 bajtówTIO
-12 bajtów dzięki @Grimy
TIO
-p
jak,-n
ale także drukuj-00
tryb akapitowy/.\n/
dopasowuje ostatni znak pierwszego wiersza@{-}
specjalna tablica pozycja początku dopasowania poprzednich dopasowanych grup, wymuszona jako ciąg znaków (pierwszy element)s/../+/s&&redo
zamień dopasowanie na+
chwilę/s
flaga, dzięki czemu.
pasuje również do znaku nowej liniiA(|.{@{-}}.?.?)\KB
meczeAB
lubA
po których następuje (szerokość-1) do (szerokość + 1) znaków, po których następujeB
\K
pozostawić lewąB
niezmienionąB(?=(?1)A)
,(?1)
dirverting rekurencyjny, odwołujący się do poprzedniego wyrażenia(|.{$m,$o})
(?=..)
patrz przed siebie, aby dopasować bez zużywania danych wejściowychźródło
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(dosłowny znak nowej linii w pierwszym wyrażeniu regularnym). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145 bajtów-24 bajty dzięki @ OlivierGrégoire .
Używa
0
zamiastA
i1
zamiastB
, z wejściem będącym macierzą całkowitą 2D. Zmienia macierz wejściową zamiast zwracać nową, aby zapisać bajty.Komórki są sprawdzane tak samo jak w mojej odpowiedzi na wyzwanie Wszystkie pojedyncze ósemki .
Wypróbuj online.
Wyjaśnienie:
źródło
m[i+k/3-1][j+k%3-1]
? 145 bajtówPowerShell ,
8680 bajtówWypróbuj online!
Mapa to ciąg znaków z nowymi liniami. Ten skrypt zastępuje
B
na+
regexp(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Skrypt testowy mniej golfowy:
Wynik:
źródło
Rubin , 102 bajty
Wypróbuj online!
wejście / wyjście jako ciąg rozdzielany znakiem nowej linii
źródło
Python 2 ,
123119 bajtówWypróbuj online!
I / O to lista list
źródło
TSQL, 252 bajty
Podział łańcucha jest bardzo kosztowny, jeśli łańcuch zostałby podzielony i już w tabeli liczba bajtów wynosiłaby 127 znaków. Skrypt zawarty w dolnej części i zupełnie inny. Przepraszam, że zajmowałem tyle miejsca.
Gra w golfa:
Nie golfowany:
Wypróbuj to
TSQL, 127 bajtów (przy użyciu zmiennej tabeli jako danych wejściowych)
Uruchom ten skrypt w studiu zarządzania - użyj „zapytanie” - „wynik do tekstu”, aby był czytelny
Wypróbuj - wyjście ostrzegawcze zostało wybrane i nie można go odczytać. Byłby czytelny z drukowaniem, ale nie jest to możliwe przy użyciu tej metody
źródło