История вопроса: слишком много нелегальных иммигрантов из Бландии пересекают границу с Астаном. Император Астана поручил вам вырыть траншею, чтобы не пускать их, и Бландия должна оплатить расходы. Так как все машинистки были обделены, пока траншея не устроена, ваш код должен быть как можно короче. *
Задача: Учитывая двухмерную карту границы между Астаном и Бландией, заставить Бландс заплатить (вместе с землей) за пограничный желоб.
Например: с помеченными ячейками 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│
└──────────┘ └──────────┘
Детали: Карта будет иметь как минимум три строки и три столбца. Верхний ряд будет полностью астанским, а нижний - полностью бландским.
Вы можете использовать любые три значения для представления территории Астаны, Бландии и окопа, если входные и выходные данные согласованы.
Автоматическая формулировка: ячейка Бланда, имеющая по крайней мере одну ячейку Астаниана в своем районе Мура, становится пограничной траншейной ячейкой.
Контрольные примеры
[
"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"
]
* ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ЛЮБАЯ РЕЗУЛЬТАТА К ФАКТИЧЕСКОЙ ГЕОПОЛИТИКЕ ЧИСТО СОВПАДАЕТ!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
планы по строительству пограничного желоба приводят к закрытию правительства, и ничего не происходит.Ответы:
Wolfram Language (Mathematica) , 15 байтов
Попробуйте онлайн!
Или (39 байт):
Попробуйте онлайн!
Что еще мы можем ожидать от Mathematica? Символы используются
{Astan -> 0, Blandia -> 1, Trench -> 2}
.источник
MATL ,
118 байтВдохновленный @ flawr это октава ответ и @ lirtosiast - х Mathematica ответ .
Входные данные представляют собой матрицу, в которой Астан представлен,
0
а Бландия -1
. Траншея представлена в выводе2
.Попробуйте онлайн!
Как это устроено
источник
JavaScript (ES7),
8482 байтаСохранено 2 байта благодаря @Shaggy
Принимает входные данные в виде матрицы целых чисел, с для Astan и для Blandia. Возвращает матрицу с дополнительным значением для траншеи.3 0 1
Попробуйте онлайн!
комментарии
источник
К (нгн / к) , 23 байта
Попробуйте онлайн!
использует
0 1 2
для"AB+"
{
}
функция с аргументомx
~
не логично2{
}/
дважды сделать0,x,0
окружить 0-с (верх и низ матрицы)3'
тройки последовательных рядов+/'
суммировать каждый+
транспонированияx&
логично иx
сx+
добавитьx
кисточник
APL (Dyalog Unicode) , 11 байтов SBCS
это основано на 12-байтовом решении @ dzaima в чате . спасибо самому @ Adám за размышления об использовании
∊
в dfn и @ H.PWiz за напоминание о необходимости использовать ту же кодировку для ввода и выводаПопробуйте онлайн!
представляет собой ,
'AB+'
как ,2 0 1
соответственно ,{
}⌺3 3
применить функцию к каждой перекрывающейся области 3 × 3 входа, включая области, выходящие на 1 единицу за пределы матрицы, дополненные нулями2∊⍵
2 присутствует в аргументе? вернуть логическое значение 0/1⊢⌈
на элемент максимум этого и исходной матрицыисточник
display
который я забыл удалить. удалено сейчасPowerShell , 220 байт
Он не такой маленький, как другие материалы, но я подумал, что добавлю его для справки. [FORE]
Попробуйте онлайн!
источник
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 байтов?Октава ,
37 3126 байтЭта функция выполняет морфологическую эрозию в
1-b
части «изображения» с помощью Astan ( ) , а затем использует некоторую арифметику, чтобы сделать все три области разными символами. Спасибо @LuisMendo за -5 байт!conv2
imerode
Попробуйте онлайн!
источник
J , 28 байт
Попробуйте онлайн!
'AB+'
->2 0 1
Вдохновленный решением APL ngn. 12 байтов, чтобы заполнить матрицу нулями ...
источник
⌺
(Stencil) делает это автоматически: «Прямоугольники центрированы на последовательных элементах Y и (если размер прямоугольника не равен 1), дополнены элементами заливки».Древесный уголь , 20 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Соедините входной массив с возвратами каретки, а не с обычными символами новой строки. Это необходимо для того, чтобы символы можно было распечатать по отдельности.
Вывести строку ввода без перемещения курсора.
Цикл по каждому символу входной строки.
Если соседство Мура содержит
A
, а текущий символB
...... затем переписать
B
с+
...... в противном случае выведите текущий символ (или перейдите к следующей строке, если текущий символ - возврат каретки).
источник
JavaScript, 85 байт
Бросил это вместе поздно прошлой ночью и забыл об этом. Возможно, где-то еще есть место для улучшения
Ввод и вывод - это массив массивов цифр, использующий
3
для Astan,0
для Blandia и1
для траншеи.Попробуйте онлайн (для удобства карты из и обратно в формат ввода / вывода, используемый в конкурсе)
источник
Javascript,
126118 байтПередайте один из строковых массивов из вопроса, и вы получите массив
строковыхсимвольных массивов (спасибо @Shaggy!), Используя 0 для траншеи. Можно , вероятно , будет более golfed (без перехода на числовые массивы), но я не могу думать ни о чем в данный момент.источник
Сетчатка 0.8.2 ,
9280 байтПопробуйте онлайн! На основании моего ответа на вопрос, успею ли я разобраться вовремя? Пояснение: Любые
B
s непосредственно выше или нижеA
s превращаются вa
s. Это тогда сводит проблему к проверкеB
s слева или справа отA
s илиa
s. Самиa
s также должны быть превращены в+
s, конечно, но, к счастью,i
флагT
влияет только на совпадение с регулярным выражением, а не на фактическую транслитерацию, поэтомуA
s остается неизменным.источник
05AB1E , 29 байт
Матрицы на самом деле не являются сильной стороной 05AB1E (и при этом они не являются моей сильной стороной) .. Хотя, безусловно, можно играть в гольф еще.
Вдохновлен ответом @ngn 's K (ngn / k) , поэтому также использует ввод / вывод двумерной целочисленной матрицы с
012
for дляAB+
соответственно.Попробуйте онлайн . (Нижний колонтитул в TIO должен красиво печатать вывод. Не стесняйтесь удалить его, чтобы увидеть матричный вывод.)
Объяснение:
источник
C # (интерактивный компилятор Visual C #) , 187 байт
Вместо создания цепочек
Take()
s,Skip()
s иSelect()
s вместо этого используются двойные циклы for для поиска соседей. ОГРОМНОЕ уменьшение байтов с 392 до 187. Linq не всегда самый короткий!Попробуйте онлайн!
источник
Perl 5,
5846 байтTIO
-12 байт благодаря @Grimy
TIO
-p
нравится,-n
но печать также-00
режим абзаца/.\n/
соответствует последнему символу первой строки@{-}
специальный массив - позиция начала совпадения предыдущих сопоставленных групп, приведенная как строка (первый элемент)s/../+/s&&redo
заменить совпадение на+
время совпадения/s
флаг, так что.
соответствует также символу новой строкиA(|.{@{-}}.?.?)\KB
СпичкиAB
илиA
после (width-1) до (width + 1) символов, следующих заB
\K
оставитьB
без измененийB(?=(?1)A)
,(?1)
рекурсивный dirverting, для ссылки на предыдущее выражение(|.{$m,$o})
(?=..)
вперед, чтобы соответствовать, не потребляя вводисточник
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(буквальный перевод строки в первом регулярном выражении). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145 байт-24 байта благодаря @ OlivierGrégoire .
Использует
0
вместоA
и1
вместо тогоB
, чтобы вход был двумерной целочисленной матрицей. Изменяет матрицу ввода вместо возврата новой, чтобы сохранить байты.Клетки проверяются так же , как в моем ответ за все одиночные восьмерки вызова .
Попробуйте онлайн.
Объяснение:
источник
m[i+k/3-1][j+k%3-1]
? 145 байтовPowerShell ,
8680 байтПопробуйте онлайн!
Карта представляет собой строку с символами новой строки. Этот скрипт заменяет
B
на+
регулярное выражение(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Менее гольф-тестовый сценарий:
Выход:
источник
Рубин , 102 байта
Попробуйте онлайн!
ввод / вывод в виде строки, разделенной новой строкой
источник
Python 2 ,
123119 байтПопробуйте онлайн!
I / O - это список списков
источник
TSQL, 252 байта
Разделение строки очень дорого, если строка была разделена и уже в таблице счетчик байтов был бы 127 символов. Сценарий включен снизу и совершенно другой. Извините, что занял столько места.
Golfed:
Ungolfed:
Попробуйте это
TSQL, 127 байт (используя переменную таблицы в качестве входных данных)
Выполните этот скрипт в Management Studio - используйте «query» - «result to text», чтобы сделать его читаемым
Попробуйте - вывод предупреждения выбран и не читается. Будет читаться с печатью, но это невозможно при использовании этого метода
источник