C'est le golf de code. Le gagnant est le code valide avec le plus petit nombre d'octets.
Défi
Étant donné les entrées M et N , la largeur et la hauteur d'une grille rectangulaire de carrés, sortez un polygone qui satisfait les éléments suivants:
- Les arêtes du polygone sont constituées uniquement d'arêtes carrées: il n'y a pas d'arêtes diagonales - toutes sont verticales ou horizontales.
- Le polygone n'a pas de trous: chaque carré à l'extérieur du polygone peut être atteint par des pas orthogonaux sur des carrés à l'extérieur du polygone, à partir d'un carré à l'extérieur du polygone sur la limite extérieure du rectangle.
- Le polygone n'a pas d'auto-intersection: des arêtes carrées se rencontrant au sommet, pas plus de 2 peuvent faire partie du périmètre du polygone.
- Le polygone est connecté: tout carré du polygone doit être accessible à partir de tout autre carré du polygone via des étapes orthogonales qui restent à l'intérieur du polygone.
- Le polygone a le périmètre maximum possible: selon la formule ci-dessous.
Votre code doit fonctionner pour M et N de 1 à 255.
Formule pour le périmètre maximum
Le défi ici est de trouver le plus golfable de ces polygones avec le périmètre maximum. Le périmètre maximal lui-même est toujours défini par la formule:
Cela est vrai car pour un périmètre maximum, chaque sommet carré doit être sur le périmètre. Pour un nombre impair de sommets, cela n'est pas possible et le meilleur qui peut être atteint est un sommet de moins (puisque le périmètre est toujours pair).
Production
Sortez la forme sous la forme d'une chaîne de caractères séparés par un saut de ligne ( N lignes d'exactement M caractères). Ici, j'utilise l'espace pour les carrés à l'extérieur du polygone et '#' pour les carrés à l'intérieur du polygone, mais vous pouvez utiliser deux caractères visuellement distincts, à condition que leur signification soit cohérente pour toutes les entrées.
Vous pouvez inclure jusqu'à une nouvelle ligne de début et jusqu'à une nouvelle ligne de fin.
Si vous le souhaitez, vous pouvez produire à la place M lignes d'exactement N caractères, et vous pouvez choisir la sortie M par N pour certaines entrées et N par la sortie M pour d'autres.
Exemples
Invalide en raison d'un trou:
###
# #
###
Invalide en raison de l'intersection (toucher en diagonale - un sommet avec 4 bords carrés sur le périmètre) et, accessoirement, d'un trou:
##
# #
###
Non valide en raison de la déconnexion:
#
# #
#
Polygone valide de périmètre maximal:
# #
# #
###
Crédits
Au début, j'ai sous-estimé la vitesse à laquelle la valeur du périmètre maximum pouvait être calculée, et j'allais simplement demander cette valeur comme sortie. Merci aux personnes merveilleusement utiles dans le chat pour avoir expliqué comment déterminer le périmètre maximal pour N et M arbitraires et contribué à en faire un défi qui durera plus d'une réponse ...
Plus précisément grâce à:
Sparr , Zgarb , feersum , jimmy23013 .