Antecedentes: Muitos imigrantes ilegais de Blandia estão cruzando a fronteira para Astan. O imperador de Astan encarregou você de cavar uma trincheira para mantê-los afastados, e Blandia deve pagar pelas despesas. Como todos os datilógrafos foram distribuídos até a trincheira ser organizada, seu código deve ser o mais curto possível. *
Tarefa: Dado um mapa 2D da fronteira entre Astan e Blandia, faça os Blands pagarem (com terra) por uma vala na fronteira.
Por exemplo: Com as células astanianas marcadas A
, as células Blandic marcadas B
e as trincheiras marcadas +
(os quadros do mapa são apenas para maior clareza):
┌──────────┐ ┌──────────┐
│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│
└──────────┘ └──────────┘
Detalhes: o mapa terá pelo menos três linhas e três colunas. A linha superior será totalmente astana e a linha inferior será totalmente blandic.
Você pode usar quaisquer três valores para representar o território astano, território blandico e trincheira de fronteira, desde que a entrada e a saída sejam consistentes.
Formulação de autômatos: Uma célula Blandic com pelo menos uma célula astânica em sua vizinhança de Moore se torna uma célula de trincheira de fronteira.
Casos de teste
[
"AAAAAAAAAA",
"ABAAAAAABA",
"ABBBAABABA",
"ABBBAABABA",
"ABBBBABABA",
"ABBBBABBBB",
"ABBBBABBBB",
"ABBBBBBBBB",
"BBBBBBBBBB"
]
torna-se:
[
"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"
]
torna-se:
[
"AAA",
"AAA",
"+++"
]
[
"AAAAAAAAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAAAAAAAA",
"BBBBBBABBB",
"BBBBBBAABB",
"BBBAAAAABB",
"BBBBBBBBBB"
]
torna-se:
[
"AAAAAAAAAA",
"AAAA+++AAA",
"AAAA+B+AAA",
"AAAA+++AAA",
"AAAAAAAAAA",
"++++++A+++",
"BB++++AA+B",
"BB+AAAAA+B",
"BB+++++++B"
]
* ISENÇÃO DE RESPONSABILIDADE: QUALQUER REEMBOLSO AOS GEOPOLÍTICOS REAIS É PURAMENTE COINCIDENTAL!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
Os planos para construir uma trincheira na fronteira levam ao desligamento do governo e nada acontece.Respostas:
Wolfram Language (Mathematica) , 15 bytes
Experimente online!
Ou (39 bytes):
Experimente online!
O que mais esperaríamos do Mathematica? Os caracteres usados são
{Astan -> 0, Blandia -> 1, Trench -> 2}
.fonte
MATL ,
118 bytesInspirado por do Octave resposta @ flawr e resposta Mathematica de @ lirtosiast .
A entrada é uma matriz com Astan representado por
0
e Blandia por1
. A trincheira é representada na saída por2
.Experimente online!
Como funciona
fonte
JavaScript (ES7),
8482 bytesGuardado 2 bytes graças a @Shaggy
Experimente online!
Comentado
fonte
K (ngn / k) , 23 bytes
Experimente online!
usa
0 1 2
para"AB+"
{
}
função com argumentox
~
lógico não2{
}/
duas vezes0,x,0
surround com 0-s (superior e inferior da matriz)3'
triplos de linhas consecutivas+/'
somar cada+
transporx&
lógico e dex
comx+
adicionarx
afonte
APL (Dyalog Unicode) , 11 bytes SBCS
isso é baseado na solução de 12 bytes do @ dzaima no chat . agradecemos ao próprio @ Adám por pensar em usar
∊
no dfn e ao @ H.PWiz por nos lembrar de usar a mesma codificação para entrada e saídaExperimente online!
representa
'AB+'
como2 0 1
respectivamente{
}⌺3 3
aplique uma função a cada região 3 × 3 sobreposta da entrada, incluindo regiões que estendem 1 unidade fora da matriz, preenchidas com 0s2∊⍵
existe um 2 presente no argumento? retornar um booleano 0/1⊢⌈
por elemento máximo disso e da matriz originalfonte
display
qual eu esqueci de remover. removido agoraPowerShell , 220 bytes
Não é tão pequeno quanto os outros envios, mas pensei em adicioná-lo para referência. [FORE!]
Experimente online!
fonte
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 bytes?Oitava ,
37 3126 bytesEssa função executa uma erosão morfológica na parte Astan (
1-b
) da "imagem" usando e, em seguida, usa alguma aritmética para tornar as três áreas símbolos diferentes. Obrigado @LuisMendo por -5 bytes!conv2
imerode
Experimente online!
fonte
J , 28 bytes
Experimente online!
'AB+'
->2 0 1
Inspirado pela solução APL da ngn. 12 bytes apenas para preencher a matriz com zeros ...
fonte
⌺
(Stencil) faz isso automaticamente: "Os retângulos estão centrados em elementos sucessivos de Y e (a menos que o tamanho do retângulo seja 1), preenchidos com elementos de preenchimento".Carvão , 20 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Associe-se à matriz de entrada com retornos de carro, em vez das novas linhas usuais. Isso é necessário para que os caracteres possam ser impressos individualmente.
Imprima a sequência de entrada sem mover o cursor.
Faça um loop sobre cada caractere da sequência de entrada.
Se o bairro de Moore contém um
A
, e o personagem atual é umB
...... em seguida, substitua o
B
por um+
...... caso contrário, imprima o caractere atual (ou vá para a próxima linha se o caractere atual for um retorno de carro).
fonte
JavaScript, 85 bytes
Reunimos isso tarde da noite passada e esquecemos. Provavelmente ainda há espaço para algumas melhorias em algum lugar.
Entrada e saída é como uma matriz de matrizes de dígitos, usando
3
para Astan,0
Blandia e1
trincheira.Experimente on-line (por conveniência, mapas de e para o formato de E / S usado no desafio)
fonte
Javascript,
126118 bytesPasse uma das matrizes de strings da pergunta e você obterá uma série de matrizes de
caracteresdestrings(obrigado @Shaggy!) Usando 0 para a trincheira. Provavelmente pode jogar mais golfe (sem mudar para matrizes numéricas), mas não consigo pensar em nada no momento.fonte
Retina 0.8.2 ,
9280 bytesExperimente online! Vagamente baseado na minha resposta a Será que chegarei a tempo? Explicação: Quaisquer
B
s imediatamente acima ou abaixo deA
s são transformados ema
s. Isso reduz o problema à verificação deB
s à esquerda ou direita deA
s oua
s. Elesa
também precisam ser transformados em+
s, é claro, mas, felizmente, ai
bandeiraT
afeta apenas a correspondência de regex, não a transliteração real, para que elesA
não sejam afetados.fonte
05AB1E , 29 bytes
As matrizes não são realmente o ponto forte de 05AB1E (nem são o meu ponto forte) .. No entanto, pode definitivamente ser mais um jogo de golfe.
Inspirado na resposta K (ngn / k) de @ngn , também usa E / S de uma matriz inteira 2D com
012
forAB+
respectivamente.Experimente online . (O rodapé no TIO é para imprimir bastante a saída. Sinta-se à vontade para removê-lo e ver a saída da matriz.)
Explicação:
fonte
C # (compilador interativo do Visual C #) , 187 bytes
Em vez de encadeamento
Take()
s,Skip()
s, eSelect()
vez disso, usa double para loops para encontrar vizinhos. ENORME diminuição de bytes, de 392 bytes para 187. Linq nem sempre é o mais curto!Experimente online!
fonte
Perl 5,
5846 bytesTIO
-12 bytes graças a @Grimy
TIO
-p
gostar-n
mas imprima também-00
modo de parágrafo/.\n/
corresponde ao último caractere da primeira linha@{-}
array especial a posição do início da partida dos grupos correspondentes anteriores, coagidos como string (primeiro elemento)s/../+/s&&redo
substituir partida por+
enquanto partidas/s
sinalizador, para que.
também corresponda ao caractere de nova linhaA(|.{@{-}}.?.?)\KB
fósforosAB
ouA
seguido por (largura-1) a (largura + 1) caracteres seguidos porB
\K
para manter a esquerda daB
inalteradaB(?=(?1)A)
,(?1)
dirverting recursive, para referenciar a expressão anterior(|.{$m,$o})
(?=..)
lookahead, para corresponder sem consumir entradafonte
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(nova linha literal no primeiro regex). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145 bytes-24 bytes graças a @ OlivierGrégoire .
Usos
0
vez deA
e em1
vez deB
, com a entrada sendo uma matriz inteira 2D. Modifica a matriz de entrada em vez de retornar uma nova para salvar bytes.As células são verificadas da mesma forma que em minha resposta para o desafio Todos os oitavos .
Experimente online.
Explicação:
fonte
m[i+k/3-1][j+k%3-1]
? 145 bytesPowerShell ,
8680 bytesExperimente online!
O mapa é uma sequência com novas linhas. Este script substitui
B
a+
com regexp(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Script de teste com menos golfe:
Resultado:
fonte
Ruby , 102 bytes
Experimente online!
entrada / saída como uma sequência separada por nova linha
fonte
Python 2 ,
123119 bytesExperimente online!
E / S é uma lista de listas
fonte
TSQL, 252 bytes
Dividir a string é muito caro, se a string já estiver dividida e já estiver em uma tabela, a contagem de bytes terá 127 caracteres. Script incluído na parte inferior e completamente diferente. Desculpe por ocupar tanto espaço.
Golfe:
Ungolfed:
Experimente
TSQL, 127 bytes (Usando a variável de tabela como entrada)
Execute esse script no estúdio de gerenciamento - use "query" - "result to text" para torná-lo legível
Experimente - a saída de aviso está selecionada e não pode ser lida. Seria legível com impressão, mas isso não é possível usando este método
fonte