Donner seulement une règle et une boussole, inscrire un losange à l’intérieur du rectangle donné, en partageant deux points opposés.
Contribution
L'entrée correspond aux dimensions du rectangle. Dans l'exemple présenté, ce serait 125, 50
. Vous pouvez entrer les données de la manière qui vous convient le mieux (deux entiers, liste, chaînes, etc.).
La plus grande dimension sera de 100 minimum, tandis que la plus petite sera de 25 minimum. Les deux plafonnent à 200.
Sortie
La sortie sera une image (affichée à l’écran ou enregistrée dans un fichier) montrant
- Le rectangle d'entrée
- Toutes les lignes / cercles "de travail"
- Le losange inscrit
dans des couleurs distinctes. Dans l'image ci-dessus, le rectangle est noir, les lignes de travail bleues et l'orange losange. Les lignes doivent être dessinées dans l'ordre indiqué dans la liste (par exemple, losange écrase les lignes de travail et le rectangle).
L'image de sortie doit être suffisamment grande pour tout contenir. Par exemple, les cercles montrés ne peuvent pas sortir des limites.
Méthode
La méthode utilisée dans l'exemple d'image ci-dessus est la suivante:
- Tracez un cercle en utilisant le coin inférieur gauche comme centre et le coin supérieur droit comme point du périmètre, en donnant un rayon égal à la diagonale du rectangle.
- Faites de même, mais permutez les points centraux et périphériques.
- Tracez une ligne entre les intersections des deux cercles, en donnant une médiatrice perpendiculaire à la diagonale du rectangle.
- Utilisez les intersections de la nouvelle ligne et du rectangle pour dessiner le losange.
Cela fonctionne parce que les diagonales intérieures d'un losange se divisent toujours perpendiculairement. Je n'inclus pas une preuve complète de cela ici, cependant.
Ce n'est pas la seule méthode pour obtenir votre losange et vous pouvez en utiliser une autre, étant donné que vous expliquez ce que vous faites. Je crois que c'est probablement le plus facile, cependant.
Règles
Vous pouvez uniquement dessiner des cercles et des lignes (ou plutôt des segments de ligne). Un cercle est défini avec un point central et un point de périmètre. Une ligne est définie par deux points quelconques. Les lignes ne doivent pas nécessairement avoir une longueur spécifiée, mais elles doivent au moins couvrir les points qui les définissent (remarquez l'exemple d'image: la ligne dépasse un peu les intersections des cercles, mais pas jusqu'au bord). Pour les cercles, le rayon du centre au point de périmètre choisi est considéré comme une ligne de travail et doit être indiqué.
Pour pixelliser les lignes, vous pouvez utiliser n'importe quel algorithme reconnu (par exemple, celui de Bresenham) ou vous appuyer sur les éléments intégrés de votre langue. Si votre sortie est à base de vecteurs, assurez-vous qu’elle affiche une résolution au moins égale à celle du rectangle en entrée en pixels. De plus, vous allez dessiner sur un canevas ordinaire. Veuillez donc supprimer les marques de grille et les sorties superflues.
Pas de tricherie! Vous pouvez uniquement déterminer l'emplacement des points / lignes / cercles en utilisant ce que vous avez établi jusqu'à présent. Si vous ne pouvez pas expliquer comment utiliser vos lignes / cercles de travail pour montrer que c'est un losange, vous le faites mal.
Vous pouvez utiliser la paire de points opposés de votre choix et le rectangle n'a pas besoin d'être tracé aligné sur l'axe, tant que la sortie est correcte.
L'entrée sera toujours un rectangle non carré, alors ne vous inquiétez pas de la casse spéciale.
Enfin, il s’agit du golf standard, ce qui fait que la taille la plus basse en octets est gagnante.
la source
Réponses:
HTML + JavaScript (ES6), 34 + 353 = 387 octets
L'entrée devrait être donnée dans le format
[125,50]
.Juste beaucoup de maths et de dessins ... Le rectangle est tracé latéralement si la hauteur est supérieure à la largeur, ce qui est permis, à mon avis.
la source
444
: P400
;-)Mathematica,
157148158 octetsMerci à Martin Ender pour ses commentaires avec sa qualité habituelle! 9 octets enregistrés dans ce cas.
Édité une fois clarifié le fait que les arguments peuvent venir dans l’un ou l’autre des ordres; 10 octets ajoutés pour compenser.
Encore une fois, c’est là que brille Mathematica: une sortie graphique de haut niveau faisant appel à un calcul mathématique. Le même code avec des espaces et des nouvelles lignes pour la lisibilité humaine:
Fonction non nommée d'un seul argument qui est une paire ordonnée de nombres positifs; la dernière
@@ Sort@# &
convertit cette paire en deux arguments numériques où le premier nombre est le plus petit.Line
produit un chemin polygonal de point en point, qui se transformera en un polygone fermé si les premier et dernier points sont identiques;Circle
produit un cercle de centre et de rayon donnés. Les points spéciauxo
etc
(les coins rectangulaires en bas à gauche et en haut à droite),p
(un troisième coin en losange, donné par une formule mathématique), etk
(aidant à dessiner la médiatrice) reçoivent des noms le long du chemin pour sauvegarder des octets lors de leur rappel. , comme la paire spéciale de pointsl = {o,c}
. Mathematica se contente d'ajouter des points directement, de multiplier les deux coordonnées par le même facteur, de prendre leur produit scalaire, etc., ce qui simplifie le code.Exemple de sortie, avec arguments
125
et50
:la source
{0,0}
. Comme il n'est pas nécessaire d'utiliser le bleu et l'orange, vous pouvez enregistrer des octets en utilisant à laRed
place deOrange
. Vous utilisezLine
quatre fois, ce qui est plus que suffisant pour économiser des octetsi=Line;
(en règle générale, si l'expression contient desn
caractères et que vous l'utilisez le nombre dem
fois nécessaire(m-1)*(n-1) > 4
, moins si vous pouvez affecter la variable lors de la première utilisation sans parenthèses).0{,}
tour est fantastique: D@@Sort@#&
et en permutant,#
puis#2
dans tout le code, ou en l'adaptant pour qu'il fonctionne avec des rectangles d'orientation portrait.MetaPost, 473 (avec couleur) 353 (sans couleur)
Couleur (473 octets):
Non coloré (353 octets):
Jamais JAMAIS utilisé cela auparavant, et je suis sûr que je l'ai massacré ...
Mais quand vous utilisez ça sur ce site:
http://www.tlhiv.org/mppreview/
Il utilise l'intersection des cercles pour dessiner le deuxième axe, puis utilise l'intersection de l'axe et du rectangle pour dessiner le losange final. Bien que j'aurais pu tricher et simplement tracer une ligne perpendiculaire au premier axe haha.
Pour changer les dimensions, il suffit de modifier A et B.
Quoi qu'il en soit, vous vous retrouvez avec (pour L = 170, H = 100):
la source
Desmos, 375 (ou 163) octets
w
eth
sont les entrées. Essayez sur Desmos!Version alternative de 163 octets:
Cette version nécessite que chaque ligne soit copiée et collée dans chaque ligne distincte dans Desmos. Meta doit encore décider s’il s’agit d’une méthode de comptage valide, mais l’ancienne est tout à fait acceptable.
la source
ImageMagick version 7.0.3 + bash + sed, 496 octets
Résultat avec "rhombus.sh 180 120"
Plus précis (utilisation de la toile 6400x6400 au lieu de 800x800), 570 octets
Les intersections ne sont pas exactes. la directive "strokewidth" élargit les lignes de manière à ce qu’au moins un pixel entier soit mélangé aux couleurs des deux lignes qui se coupent, mais dans le pire des cas (25x200 et 200x25), les croisements sont à petit angle de sorte que le nuage nombre de pixels mélangés est long de plusieurs pixels, et puisque nous sélectionnons le premier et le dernier pixel mélangé, il y a une légère erreur. Utiliser un canevas 8 fois plus grand avec la même largeur de trait et ensuite réduire le résultat réduit l'erreur à moins d'un pixel, mais à une pénalité de temps d'environ 64 fois.
Résultats de 800x800 normaux par rapport à 6400x6400 précis:
Ungolfed:
la source
R, 290 octets
Fonction anonyme, la sortie est affichée à l'écran. Légèrement non-golfé, avec commentaires:
Exemple de sortie pour (120,100):
la source
LibreLogo , 270 octets
Code:
Résultat:
Explication:
la source
Python 3.5 + Tkinter, 433 ou 515 octets
Non coloré (433 octets):
Couleur (515 octets):
Une fonction nommée qui prend en entrée 2 nombres séparés par des virgules. La sortie est donnée dans une fenêtre séparée que vous devrez peut-être redimensionner pour voir la sortie complète. Voici un exemple de sortie colorée pour
V(180,130)
:la source
SmileBASIC, 280 octets
(La capture d'écran / l'explication sera bientôt disponible) La couleur de fond est noire, le rectangle est rouge, les cercles et les lignes sont blancs et le losange est jaune.
la source