Antecedentes: Demasiados inmigrantes ilegales de Blandia están cruzando la frontera a Astan. El emperador de Astan te ha encargado que caves una trinchera para mantenerlos alejados, y Blandia debe pagar los gastos. Dado que todos los mecanógrafos han sido suspendidos hasta que se arregle la zanja, su código debe ser lo más breve posible. * *
Tarea: Dado un mapa 2D de la frontera entre Astan y Blandia, haga que los Blands paguen (con tierra) por una zanja fronteriza.
Por ejemplo: con las celdas de Astania marcadas A
, las celdas de Blandic marcadas B
y las celdas de trinchera marcadas +
(los marcos del mapa son solo para mayor claridad):
┌──────────┐ ┌──────────┐
│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│
└──────────┘ └──────────┘
Detalles: el mapa tendrá al menos tres filas y tres columnas. La fila superior será completamente de Astania y la fila inferior será completamente de Blandic.
Puede usar cualquiera de los tres valores para representar el territorio de Astania, el territorio de Blandic y la trinchera fronteriza, siempre que la entrada y la salida sean consistentes.
Formulación de autómatas: una célula blandica con al menos una célula de Astania en su vecindario de Moore se convierte en una célula de trinchera fronteriza.
Casos de prueba
[
"AAAAAAAAAA",
"ABAAAAAABA",
"ABBBAABABA",
"ABBBAABABA",
"ABBBBABABA",
"ABBBBABBBB",
"ABBBBABBBB",
"ABBBBBBBBB",
"BBBBBBBBBB"
]
se convierte en:
[
"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"
]
se convierte en:
[
"AAA",
"AAA",
"+++"
]
[
"AAAAAAAAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAAAAAAAA",
"BBBBBBABBB",
"BBBBBBAABB",
"BBBAAAAABB",
"BBBBBBBBBB"
]
se convierte en:
[
"AAAAAAAAAA",
"AAAA+++AAA",
"AAAA+B+AAA",
"AAAA+++AAA",
"AAAAAAAAAA",
"++++++A+++",
"BB++++AA+B",
"BB+AAAAA+B",
"BB+++++++B"
]
* DESCARGO DE RESPONSABILIDAD: ¡CUALQUIER RESULTADO A LA GEOPOLÍTICA REAL ES PURAMENTE COINCIDENTAL!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
los planes para construir una zanja fronteriza conducen a un cierre del gobierno y no sucede nada.Respuestas:
Wolfram Language (Mathematica) , 15 bytes
Pruébalo en línea!
O (39 bytes):
Pruébalo en línea!
¿Qué más esperaríamos de Mathematica? Los caracteres utilizados son
{Astan -> 0, Blandia -> 1, Trench -> 2}
.fuente
MATL ,
118 bytesInspirado por @ flawr de Octave respuesta y @ de lirtosiast respuesta Mathematica .
La entrada es una matriz con Astan representado por
0
y Blandia por1
. La trinchera está representada en la salida por2
.Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES7),
8482 bytesGuardado 2 bytes gracias a @Shaggy
Pruébalo en línea!
Comentado
fuente
K (ngn / k) , 23 bytes
Pruébalo en línea!
usos
0 1 2
para"AB+"
{
}
funcionar con argumentox
~
lógico no2{
}/
hacer dos veces0,x,0
rodear con 0-s (arriba y abajo de la matriz)3'
triples de filas consecutivas+/'
suma cada+
transponerx&
lógico y dex
conx+
agregarx
afuente
APL (Dyalog Unicode) , SBCS de 11 bytes
Esto se basa en la solución de 12 bytes de @ dzaima en el chat . crédito a @ Adám mismo por pensar en usar
∊
en el dfn, y a @ H.PWiz por recordarnos que usemos la misma codificación para entrada y salidaPruébalo en línea!
representa
'AB+'
como2 0 1
respectivamente{
}⌺3 3
aplique una función a cada región 3 × 3 superpuesta de la entrada, incluidas las regiones que se extienden 1 unidad fuera de la matriz, rellenadas con 0s2∊⍵
¿Hay un 2 presente en el argumento? devolver un booleano 0/1⊢⌈
máximo por elemento de eso y la matriz originalfuente
display
que olvidé eliminarlo. eliminado ahoraPowerShell , 220 bytes
No es tan pequeño como las otras presentaciones, pero pensé en agregarlo como referencia. [¡DELANTERO!]
Pruébalo en línea!
fuente
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]}})}
a 207 bytes?Octava ,
37 3126 bytesEsta función realiza una erosión morfológica en la parte Astan (
1-b
) de la "imagen" usando , y luego usa algo de aritmética para hacer que las tres áreas sean símbolos diferentes. ¡Gracias @LuisMendo por -5 bytes!conv2
imerode
Pruébalo en línea!
fuente
J , 28 bytes
Pruébalo en línea!
'AB+'
->2 0 1
Inspirado en la solución APL de ngn. 12 bytes solo para rellenar la matriz con ceros ...
fuente
⌺
(Stencil) lo hace atómicamente: "Los rectángulos se centran en elementos sucesivos de Y y (a menos que el tamaño del rectángulo sea 1), se rellenan con elementos de relleno".Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Unir la matriz de entrada con retornos de carro en lugar de las líneas nuevas habituales. Esto es necesario para que los caracteres se puedan imprimir individualmente.
Imprima la cadena de entrada sin mover el cursor.
Pase sobre cada carácter de la cadena de entrada.
Si el vecindario de Moore contiene un
A
, y el personaje actual es unB
...... luego sobrescribe el
B
con un+
...... de lo contrario, imprima el carácter actual (o pase a la siguiente línea si el carácter actual es un retorno de carro).
fuente
JavaScript, 85 bytes
Lancé esto juntos anoche y lo olvidé. Probablemente todavía hay espacio para alguna mejora en alguna parte.
La entrada y salida es como una matriz de matrices de dígitos, usando
3
para Astan,0
para Blandia y1
para la trinchera.Pruébelo en línea (para mayor comodidad, mapas desde y hacia el formato de E / S utilizado en el desafío)
fuente
Javascript,
126118 bytesPase una de las matrices de cadenas de la pregunta y obtendrá una matriz de matrices de
caracteresdecadenas(¡gracias @Shaggy!) Usando 0 para la trinchera. Puede probablemente ser más Jugamos al golf (sin cambiar a matrices numéricas), pero no puedo pensar en nada por el momento.fuente
Retina 0.8.2 ,
9280 bytesPruébalo en línea! Basada en mi respuesta a ¿Lo lograré a tiempo? Explicación: Cualquier
B
s inmediatamente superior o inferior aA
s se convierte ena
s. Esto reduce el problema a verificarB
s a la izquierda o derecha deA
soa
s. Losa
s también deben convertirse en+
s, por supuesto, pero afortunadamente lai
banderaT
solo afecta la coincidencia de expresiones regulares, no la transliteración real, por lo que losA
s no se ven afectados.fuente
05AB1E , 29 bytes
Las matrices no son realmente el fuerte de 05AB1E (ni tampoco mi fuerte). Sin embargo, definitivamente se puede jugar un poco más.
Inspirado por la respuesta K (ngn / k) de @ngn , también usa E / S de una matriz entera 2D con
012
forAB+
respectivamente.Pruébalo en línea . (El pie de página en el TIO es imprimir una bonita impresión de la salida. Siéntase libre de eliminarla para ver la salida de la matriz).
Explicación:
fuente
C # (compilador interactivo de Visual C #) , 187 bytes
En lugar de encadenar
Take()
s,Skip()
sySelect()
s, en su lugar, esto usa el doble de bucles para encontrar vecinos. ENORME disminución de bytes, de 392 bytes a 187. ¡Linq no siempre es el más corto!Pruébalo en línea!
fuente
Perl 5,
5846 bytesTIO
-12 bytes gracias a @Grimy
TIO
-p
como-n
pero imprimir también-00
modo párrafo/.\n/
coincide con el último carácter de la primera línea@{-}
matriz especial la posición de inicio de la coincidencia de grupos coincidentes anteriores, coaccionados como cadena (primer elemento)s/../+/s&&redo
reemplazar partido por+
partidos mientras/s
bandera, para que.
coincida también con el carácter de nueva líneaA(|.{@{-}}.?.?)\KB
partidosAB
oA
seguido de (ancho-1) a (ancho + 1) caracteres seguidos deB
\K
para mantener la izquierda deB
sin cambiosB(?=(?1)A)
,(?1)
dirverting recursivo, para hacer referencia a expresiones anteriores(|.{$m,$o})
(?=..)
anticipado, para que coincida sin consumir insumosfuente
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(nueva línea literal en la primera expresión regular). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145bytes-24 bytes gracias a @ OlivierGrégoire .
Utiliza en
0
lugar deA
y en1
lugar deB
, siendo la entrada una matriz de enteros 2D. Modifica la matriz de entrada en lugar de devolver una nueva para guardar bytes.Las celdas están marcadas de la misma manera que en mi respuesta para el desafío Todos los ochos individuales .
Pruébalo en línea.
Explicación:
fuente
m[i+k/3-1][j+k%3-1]
? 145 bytesPowerShell ,
8680 bytesPruébalo en línea!
El mapa es una cadena con líneas nuevas. Este script reemplaza
B
a+
con regexp(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Guión de prueba menos golfizado:
Salida:
fuente
Ruby , 102 bytes
Pruébalo en línea!
entrada / salida como una cadena separada de nueva línea
fuente
Python 2 ,
123119 bytesPruébalo en línea!
I / O es una lista de listas
fuente
TSQL, 252 bytes
Dividir la cadena es muy costoso, si la cadena se dividió y ya está en una tabla, el recuento de bytes sería de 127 caracteres. Guión incluido en la parte inferior y completamente diferente. Perdón por ocupar tanto espacio.
Golfizado:
Sin golf:
Pruébalo
TSQL, 127 bytes (usando la variable de tabla como entrada)
Ejecute este script en el estudio de administración - use "query" - "result to text" para que sea legible
Pruébelo : la salida de advertencia está seleccionada y no es legible. Sería legible con print, pero eso no es posible usando este método
fuente