Implémenter le crénage simplifié


24

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 Ttrouve 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 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.

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

Visualiseur . Le cas de test 5 semble erroné.
user202729

@ user202729 Merci, c'est résolu maintenant. Je suis passé par plusieurs tours de réparation des cas de test dans le bac à sable, et apparemment manqué celui-ci.
Zgarb

De plus, si les deux personnages se "croisent", que doit faire le programme?
user202729

@ user202729 Vous pouvez supposer que cela ne se produira pas. Voir la dernière phrase de la section "Entrée et sortie".
Zgarb

Réponses:




2

Rétine , 223 octets

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4
T`.`i`\.*i\.*
+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@
+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3
T`i@`.`i*[#@]+i
mT`.`i`\.+i+$
msT`i`.`.*^\W+$.*
+`(\b(i+)\W+\2i*)i
$1.
+s`\bi((i+).+\b\2\b)
.$1
i

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:

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4

Joignez les deux tableaux d'entrée ensemble en utilisant une lettre icomme séparateur. (Cela permet l'utilisation de \Wet \bplus tard.)

T`.`i`\.*i\.*

Remplacez tous les .s par is lors de la jointure.

+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@

Remplacez tous les is sous #s par @s.

+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3

Remplacez tous les is au-dessus de #s par @s.

T`i@`.`i*[#@]+i

Remplacez tous les @s par .s, plus tous les is adjacents à @s ou #s.

mT`.`i`\.+i+$

S'il n'y a pas #après un i, changez ensuite le .dos adjacent en an i.

msT`i`.`.*^\W+$.*

S'il y a une ligne sans is, changez tous les is en .s, car il n'y a rien à faire ici.

+`(\b(i+)\W+\2i*)i
$1.

Calculez le nombre minimum de is sur n'importe quelle ligne.

+s`\bi((i+).+\b\2\b)
.$1

Propager aux autres lignes.

i

Supprimez le is, réalisant ainsi le crénage requis.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.