Contexte: Trop d’immigrants clandestins en provenance de Blandia traversent la frontière pour se rendre à Astan. L'empereur d'Astan vous a demandé de creuser une tranchée pour les empêcher d'entrer, et Blandia doit payer les frais. Toutes les dactylographes étant en attente jusqu'à l'aménagement de la tranchée, votre code doit être aussi court que possible. *
Tâche: À partir d’une carte 2D de la frontière entre Astan et Blandia, faites payer aux Blands (avec la terre) pour une tranchée frontalière.
Par exemple: avec les cellules A
Astanian marquées , les cellules Blandic marquées B
et les cellules de tranchée marquées +
(les cadres de la carte servent uniquement à la clarté):
┌──────────┐ ┌──────────┐
│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│
└──────────┘ └──────────┘
Détails: La carte comportera au moins trois lignes et trois colonnes. La rangée supérieure sera entièrement composée d'Astanian et la rangée inférieure de Blandic.
Vous pouvez utiliser trois valeurs quelconques pour représenter le territoire Astanian, le territoire Blandic et la fosse frontalière, à condition que les entrées et les sorties soient cohérentes.
Formulation d'automate: une cellule blandique avec au moins une cellule astanienne dans son voisinage de Moore devient une cellule de tranchée frontière.
Cas de test
[
"AAAAAAAAAA",
"ABAAAAAABA",
"ABBBAABABA",
"ABBBAABABA",
"ABBBBABABA",
"ABBBBABBBB",
"ABBBBABBBB",
"ABBBBBBBBB",
"BBBBBBBBBB"
]
devient:
[
"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"
]
devient:
[
"AAA",
"AAA",
"+++"
]
[
"AAAAAAAAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAAAAAAAA",
"BBBBBBABBB",
"BBBBBBAABB",
"BBBAAAAABB",
"BBBBBBBBBB"
]
devient:
[
"AAAAAAAAAA",
"AAAA+++AAA",
"AAAA+B+AAA",
"AAAA+++AAA",
"AAAAAAAAAA",
"++++++A+++",
"BB++++AA+B",
"BB+AAAAA+B",
"BB+++++++B"
]
* LIMITATION DE RESPONSABILITÉ: TOUTE RÉSEMBLATION À LA GÉOPOLITIQUE RÉELLE EST PURELLEMENT COINCIDENTALE!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
les plans de construction d'une tranchée frontalière mènent à un arrêt du gouvernement et rien ne se passe.Réponses:
Wolfram Language (Mathematica) , 15 octets
Essayez-le en ligne!
Ou (39 octets):
Essayez-le en ligne!
Qu'attendions-nous d'autre de Mathematica? Les caractères utilisés sont
{Astan -> 0, Blandia -> 1, Trench -> 2}
.la source
MATL ,
118 octetsInspiré par @ flawr réponse est Octave et réponse Mathematica de @ lirtosiast .
L'entrée est une matrice avec Astan représentée par
0
et Blandia par1
. La tranchée est représentée dans la sortie par2
.Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES7),
8482 octets2 octets sauvés grâce à @Shaggy
Essayez-le en ligne!
Commenté
la source
K (ngn / k) , 23 octets
Essayez-le en ligne!
utilise
0 1 2
pour"AB+"
{
}
fonction avec argumentx
~
pas logique2{
}/
deux fois faire0,x,0
entourer avec 0-s (haut et bas de la matrice)3'
triples de lignes consécutives+/'
somme chaque+
transposerx&
logique et dex
avecx+
ajouterx
àla source
APL (Dyalog Unicode) , SBCS de 11 octets
ceci est basé sur la solution de chat de 12 octets de @ dzaima . crédit à @ Adám lui-même d’avoir envisagé de l’utiliser
∊
dans le dfn, et à @ H.PWiz de nous avoir rappelé d’utiliser le même encodage pour les entrées et les sortiesEssayez-le en ligne!
représente
'AB+'
comme2 0 1
respectivement{
}⌺3 3
applique une fonction à chaque région 3 × 3 superposée de l'entrée, y compris les régions s'étendant sur 1 unité en dehors de la matrice, complétées par des 02∊⍵
est un 2 présent dans l'argument? retourne un booléen 0/1⊢⌈
par élément maximum de cela et de la matrice d'originela source
display
lequel j'ai oublié de supprimer. enlevé maintenantPowerShell , 220 octets
Ce n'est pas aussi petit que les autres soumissions, mais je pensais l'ajouter pour référence. [FORE!]
Essayez-le en ligne!
la source
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 octets?Octave ,
37 3126 octetsCette fonction effectue une érosion morphologique sur la partie Astan (
1-b
) de "l'image" à l'aide de , puis utilise une arithmétique pour rendre différents symboles des trois zones. Merci @LuisMendo pour -5 octets!conv2
imerode
Essayez-le en ligne!
la source
J , 28 octets
Essayez-le en ligne!
'AB+'
->2 0 1
Inspiré par la solution APL de ngn. 12 octets juste pour remplir la matrice de zéros ...
la source
⌺
(Stencil) le fait de manière atomatique: "Les rectangles sont centrés sur des éléments successifs de Y et (à moins que la taille du rectangle soit égale à 1), remplis avec des éléments de remplissage."Charbon de bois , 20 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Joignez le tableau d'entrée avec les retours chariot plutôt que les sauts de ligne habituels. Cela est nécessaire pour que les caractères puissent être imprimés individuellement.
Imprimer la chaîne de saisie sans déplacer le curseur.
Boucle sur chaque caractère de la chaîne d'entrée.
Si le quartier de Moore contient un
A
, et le personnage actuel est unB
...... puis écrasez le
B
avec un+
...... sinon, imprimer le caractère actuel (ou passer à la ligne suivante si le caractère actuel est un retour à la ligne).
la source
JavaScript, 85 octets
Jeté cela ensemble tard hier soir et oublié à ce sujet. Probablement encore place à quelque amélioration quelque part.
L'entrée et la sortie se présentent sous la forme d'un tableau de chiffres, utilisant
3
pour Astan,0
pour Blandia et1
pour la tranchée.Essayez-le en ligne (pour plus de commodité, les cartes de et en arrière au format I / O utilisé dans le défi)
la source
Javascript,
126118 octetsPassez dans l' un des tableaux de chaînes de la question, et vous obtiendrez un tableau de
chaînesdes tableaux de caractères (merci @Shaggy!) À l' aide de 0 pour la tranchée. Peut probablement être plus joué au golf (sans passer aux tableaux numériques), mais je ne peux penser à rien pour le moment.la source
Retina 0.8.2 ,
92 à80 octetsEssayez-le en ligne! Lâchement basé sur ma réponse à Est-ce que je vais le faire à temps? Explication: Tous les
B
s immédiatement supérieurs ou inférieurs àA
s sont transformés ena
s. Cela réduit ensuite le problème à vérifierB
s à gauche ou à droite deA
s oua
s. Lesa
s eux-mêmes doivent également être transformés en+
s bien sûr, mais heureusement, lei
drapeauT
n’affecte que la correspondance des expressions rationnelles, pas la translittération, de sorte que lesA
s restent inchangés.la source
05AB1E , 29 octets
Les matrices ne sont pas vraiment le point fort de 05AB1E (elles ne sont pas non plus le mien). On peut certainement en jouer un peu plus, cependant.
Inspiré par la réponse K (ngn / k) de @ngn , utilise également les E / S d’une matrice entière 2D avec
012
pourAB+
.Essayez-le en ligne . (Le pied de page de la TIO est d’imprimer joliment la sortie. N'hésitez pas à la supprimer pour voir la sortie matricielle.)
Explication:
la source
C # (compilateur interactif Visual C #) , 187 octets
Au lieu de chaîner
Take()
s,Skip()
s etSelect()
s, cette méthode utilise le double des boucles de recherche pour trouver des voisins. Énorme diminution d'octets, de 392 octets à 187. Linq n'est pas toujours le plus court!Essayez-le en ligne!
la source
Perl 5,
5846 octetsTIO
-12 octets grâce à @Grimy
TIO
-p
comme-n
mais imprimer aussi-00
mode paragraphe/.\n/
correspond au dernier caractère de la première ligne@{-}
tableau spécial la position du début de la correspondance des groupes correspondants précédents, forcée sous forme de chaîne (premier élément)s/../+/s&&redo
remplacer match par+
match/s
drapeau, de sorte que.
correspond également au caractère de nouvelle ligneA(|.{@{-}}.?.?)\KB
allumettesAB
ouA
suivi de (largeur-1) à (largeur + 1) caractères suivis deB
\K
garder la gaucheB
inchangéeB(?=(?1)A)
,(?1)
dirverting récursif, pour faire référence à l'expression précédente(|.{$m,$o})
(?=..)
lookahead, pour correspondre sans consommer d'entréela source
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(nouvelle ligne littérale dans la première expression régulière). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145 octets-24 octets grâce à @ OlivierGrégoire .
Utilise à la
0
place deA
et à la1
place deB
, l'entrée étant une matrice entière 2D. Modifie la matrice d'entrée au lieu d'en retourner une nouvelle pour économiser des octets.Les cellules sont vérifiées de la même manière que dans ma réponse au défi Tous les célibataires .
Essayez-le en ligne.
Explication:
la source
m[i+k/3-1][j+k%3-1]
? 145 octetsPowerShell ,
86 à80 octetsEssayez-le en ligne!
La carte est une chaîne avec des nouvelles lignes. Ce script remplace
B
à+
des expressions rationnelles(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Script de test moins joué:
Sortie:
la source
Ruby , 102 octets
Essayez-le en ligne!
entrée / sortie sous forme de chaîne séparée par une nouvelle ligne
la source
Python 2 ,
123119 octetsEssayez-le en ligne!
I / O est une liste de listes
la source
TSQL, 252 octets
Fractionner la chaîne est très coûteux, si la chaîne était fractionnée et déjà dans une table, le nombre d'octets serait de 127 caractères. Script inclus dans le bas et complètement différent. Désolé de prendre autant de place.
Golfé:
Ungolfed:
Essaye le
TSQL, 127 octets (utilisation d'une variable de table en entrée)
Exécutez ce script dans Management Studio - utilisez "query" - "result to text" pour le rendre lisible
Essayez-le - la sortie d'avertissement est sélectionnée et illisible. Serait lisible avec print, mais ce n'est pas possible avec cette méthode
la source