Parfois, lorsque je gribouille, je dessine un rectangle, je commence par une diagonale dans l'un des coins, puis je trace une ligne en la "réfléchissant" chaque fois que je frappe un côté du rectangle. Je continue avec cela jusqu'à ce que j'atteigne un autre coin du rectangle (et j'espère que le rapport d'aspect de mon rectangle n'était pas irrationnel;)). C'est comme tracer le chemin d'un laser brillé dans une boîte. Vous devez produire le résultat de cela avec l'art ASCII.
À titre d'exemple, considérons une boîte de largeur 5
et de hauteur 3
. Nous commencerons toujours dans le coin supérieur gauche. Le #
marque la limite de la boîte. Notez que la largeur et la hauteur se réfèrent aux dimensions intérieures.
####### ####### ####### ####### ####### ####### #######
#\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\#
# \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/#
# \ # # \/ # # \/ # # /\/ # #\/\/ # #\/\/ # #\/\/\#
####### ####### ####### ####### ####### ####### #######
Le défi
Étant donné la largeur et la hauteur (positives) de la boîte, vous devriez produire le résultat final du traçage du laser. Vous pouvez écrire un programme ou une fonction, en prenant des entrées via STDIN (ou l'alternative la plus proche), l'argument de ligne de commande, l'argument de la fonction et la sortie du résultat via STDOUT (ou l'alternative la plus proche), ou via des valeurs ou des arguments de retour de fonction.
Vous pouvez utiliser n'importe quel format de liste, chaîne ou nombre commode pour la saisie. La sortie doit être une seule chaîne (sauf si vous l'imprimez sur STDOUT, ce que vous pouvez bien sûr faire progressivement). Cela signifie également que vous pouvez prendre la hauteur en premier et la largeur en second - spécifiez simplement le format d'entrée exact dans votre réponse.
Il ne doit y avoir ni espace de début ni de fin sur aucune ligne de la sortie. Vous pouvez éventuellement générer une seule nouvelle ligne de fin.
Vous devez utiliser l' espace, /
, \
et #
et reproduire les cas de test exactement comme indiqué.
Cas de test
2 2
####
#\ #
# \#
####
3 2
#####
#\/\#
#/\/#
#####
6 3
########
#\ /#
# \ / #
# \/ #
########
7 1
#########
#\/\/\/\#
#########
1 3
###
#\#
#/#
#\#
###
7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########
22 6
########################
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
# /\ /\ /\ /\ /\ /#
#/ \/ \/ \/ \/ \/ #
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
########################
X
cela serait nécessaire pour les traversées. Peut-être la prochaine fois. ;)Réponses:
Pyth,
434139 octetsEssayez-le en ligne: Pyth Compiler / Executor . Saisissez les nombres dans l'ordre suivant: hauteur première ligne, largeur deuxième ligne.
Merci à isaacg, qui a aidé à économiser deux octets.
Explication:
Ma solution ne trace pas le laser, elle utilise un motif simple qui inclut le gcd. Si
m, n
sont les dimensions de la boîte, laissezd = gcd(m, n)
. La taille du motif est exactement2*d x 2*d
.Par exemple, le motif répétitif pour
7 5
est
(
gcd(7, 5) = 1
, la taille du motif est2 x 2
)Et le motif répétitif pour
22 6
est
(
gcd(22, 6) = 2
, la taille du motif est4 x 4
)Ma solution fait la chose suivante pour chacune des lignes: elle génère simplement une ligne du motif, la répète plusieurs fois et la coupe à la fin pour qu'elle rentre dans la boîte.
la source
X
supports « affectation » à des chaînes, vous pouvez changerm\
pour*d
et enlevers
.*\
au lieu dem\
peu de temps, mais jetez-le car il a la même taille. Je n'ai pas pensé à la variabled
et à l'inutiles
.C, 256 octets
Je peux probablement obtenir moins de 200, et j'ajouterai une explication plus tard, mais je pourrais avoir un document dû dans quelques heures que je devrais faire à la place.
la source
J, 85 octets
Soit
g = gcd(w,h)
. La fonction remplit les éléments d'unew/g by h/g
matrice avec desg by g
tuiles, ayant des/
«et\
» dans leurs diagonales et anti-diagonales. Le tableau 4D résultant est défilé en 2D (l'intérieur de la boîte) puis entouré de#
. (Les nombres0 1 2 3
sont utilisés à la place de[space] / \ #
et les nombres sont modifiés en caractères à la fin.)Un calcul direct basé sur la position des coordonnées internes pourrait peut-être donner une solution un peu plus courte.
Usage:
Essayez-le en ligne ici.
la source
Desmos Calculator - Non en concurrence pour aider à approfondir les connaissances
Essayez-le en ligne!
Contributions:
Intermédiaires:
Formule, abrégée:
Les sorties:
Comment ça marche:
Le programme ne répond pas au critère final - générer de l'art ASCII de la boîte et des lignes, donc je soumets comme non concurrentiel des informations pour aider les autres à relever le défi. Notez que pour que Desmos fonctionne lorsque c = 0 ou c = b, un petit facteur de décalage de 0,01 a été introduit, car Desmos semble avoir des limites de Mod (A, B) de (0, B) au lieu de [0, B )
la source