introduction
Le crénage signifie ajuster l'espacement entre les lettres d'un texte. Par exemple, considérons le mot Top
écrit avec les trois glyphes suivants:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Nous pourrions simplement combler les lacunes entre les glyphes avec des points et en finir avec cela, mais les lacunes semblent en quelque sorte trop larges. Au lieu de cela, nous glissons les glyphes vers la gauche afin qu'ils touchent presque:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Cela semble beaucoup mieux! Notez comment la barre de se T
trouve en haut de la bordure gauche de o
. Dans ce défi, votre tâche consiste à implémenter un programme de crénage simple pour de tels glyphes rectangulaires.
Le processus de crénage
Considérons deux tableaux de caractères 2D rectangulaires de .
et #
de même forme. Dans notre processus de crénage simple, nous plaçons d'abord les tableaux côte à côte, avec une colonne de .
s entre les deux. Ensuite, nous déplaçons chacun #
dans le tableau de droite d'un pas vers la gauche, jusqu'à ce que certains #
s du tableau de gauche et de droite soient orthogonalement ou diagonalement adjacents. Le résultat du crénage est l'étape avant d' introduire le #
s adjacent . Votre tâche consiste à mettre en œuvre ce processus.
Prenons un exemple:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
Dans le dernier tableau, nous avons de nouvelles paires adjacentes de #
s, donc l'avant-dernier tableau est le résultat du processus de crénage.
Entrée et sortie
Pour plus de simplicité, il vous suffit de gérer le crénage de deux glyphes. Vos entrées sont deux tableaux 2D rectangulaires, dans l'un des formats suivants:
- Tableaux 2D d'entiers, avec 0 pour
.
et 1 pour#
. - Chaînes multilignes terminées
.#
. - Tableaux de cordes
.#
. - Tableaux 2D des personnages
.#
.
Si les entrées sont prises comme une seule chaîne, vous pouvez utiliser n'importe quel délimiteur raisonnable. Cependant, le délimiteur doit aller entre les deux tableaux, ce qui signifie que vous n'êtes pas autorisé à prendre les deux entrées déjà appariées ligne par ligne.
Votre sortie est le résultat du processus de crénage appliqué à ces deux tableaux, qui est un tableau 2D rectangulaire au même format que les entrées. Vous êtes autorisé à ajouter ou supprimer n'importe quel nombre de colonnes de début ou de fin de .
s, mais la sortie doit être rectangulaire et avoir la même hauteur que les entrées. Il est garanti que le processus de crénage se termine avant que le bord gauche de la deuxième entrée ne glisse sur le bord gauche de la première entrée.
Règles et notation
Le nombre d'octets le plus bas dans chaque langage de programmation gagne. Les règles de code-golf standard s'appliquent.
Cas de test
Pour faciliter le copier-coller, ces cas de test sont donnés sous forme de listes de chaînes.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
la source
Réponses:
APL (Dyalog Classic) ,
4039 octets-1 merci à Erik l'Outgolfer
Essayez-le en ligne!
la source
Python 3 , 154 octets
Essayez-le en ligne!
la source
Rétine , 223 octets
Essayez-le en ligne! Le lien inclut des cas de test et un script d'en-tête pour les reformater dans son format d'entrée préféré de deux chaînes délimitées par des sauts de ligne. Cela semble trop long, mais il y a probablement un cas de bord que j'ai négligé, mais il réussit au moins tous les cas de test maintenant. Explication:
Joignez les deux tableaux d'entrée ensemble en utilisant une lettre
i
comme séparateur. (Cela permet l'utilisation de\W
et\b
plus tard.)Remplacez tous les
.
s pari
s lors de la jointure.Remplacez tous les
i
s sous#
s par@
s.Remplacez tous les
i
s au-dessus de#
s par@
s.Remplacez tous les
@
s par.
s, plus tous lesi
s adjacents à@
s ou#
s.S'il n'y a pas
#
après uni
, changez ensuite le.
dos adjacent en ani
.S'il y a une ligne sans
i
s, changez tous lesi
s en.
s, car il n'y a rien à faire ici.Calculez le nombre minimum de
i
s sur n'importe quelle ligne.Propager aux autres lignes.
Supprimez le
i
s, réalisant ainsi le crénage requis.la source