Codez un programme ou une fonction pour construire une toile interactive sur l'écran d'au moins 400 pixels x 400 pixels. La toile peut être de n'importe quelle couleur, bordée ou sans bordures, avec ou sans barre de titre, etc., juste une forme de toile évidente.
L'utilisateur cliquera sur deux zones distinctes du canevas et le programme doit sortir la distance euclidienne (en pixels) entre ces deux clics d'une certaine manière (STDOUT, affichant une alerte, etc.). Les deux clics ne peuvent être que des clics gauche, uniquement des clics droit, un clic gauche pour le premier et un clic droit pour le second, deux clics double-gauche, etc., toute combinaison est acceptable. Remarque spéciale: cliquer et faire glisser (par exemple, en utilisant MOUSEUP comme deuxième point) n'est spécifiquement pas autorisé; il doit s'agir de deux clics distincts.
L'utilisateur doit pouvoir le faire plusieurs fois et doit obtenir une sortie à chaque fois, jusqu'à ce que le programme soit fermé / forcé à quitter / tué / etc. Vous pouvez choisir la méthode de fermeture (en cliquant sur un X, ctrl-C, etc.), quel que soit le golfeur de votre code.
Règles
- Un programme complet ou une fonction sont acceptables. Si une fonction, cependant, vous devez toujours afficher la sortie à l'utilisateur d'une manière ou d'une autre (le simple retour de la valeur n'est pas acceptable).
- La sortie peut être vers la console, affichée sous forme d'alerte, remplie sur la toile, etc.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
la source
n
temps,n-1
au lieu d'floor(n/2)
imprimer des chiffres) Est-ce autorisé?Réponses:
LOGO ( FMSLogo ),
5452 octetsMalheureusement, je ne trouve aucun manipulateur de support en ligne de l'interpréteur de logo comme FMSLogo.
Il s'agit d'un "modèle à emplacement explicite", similaire à lambda dans d'autres langages de programmation. Cliquez sur la souris gauche pour le premier point et la souris droite pour le deuxième point (distance d'impression).
Explication: (le logo est un langage de programmation graphique de tortue)
Le
"
est un mot vide. Normalement, le modèle est censé être une liste (où[]
, une liste vide, ne fait rien), le passage d'un mot est acceptable (il est encapsulé dans une liste), et dans ce cas, il enregistre 2 octets.Courir:
C'est
apply
une façon d'exécuter le modèle dans Logo, la[]
liste des arguments is, pour laquelle le modèle n'en reçoit aucun.la source
Mathematica, 94 octets
La toile est une image en niveaux de gris aléatoire, le premier clic doit être un clic gauche et le second un clic droit. Le comportement exact est en fait que le clic droit imprime la distance jusqu'au dernier clic (gauche ou droit), donc si vous utilisez le clic droit à plusieurs reprises, vous pouvez également obtenir des distances consécutives.
Les résultats sont exacts, ils peuvent donc contenir une racine carrée.
Si la résolution de votre webcam est d'au moins 400x400, vous pouvez utiliser
CurrentImage[]
au lieu de1~RandomImage~400
pour votre toile, en économisant 3 octets.la source
Java 8,
469389388385380357348325 octetsSerait plus court avec AWT, mais je ne l'ai jamais utilisé.la source
true
pourrait l'être0<1
.main(String args[])
ne peut pas êtremain(String[]Z)
?{F f=new F();}
possible{new F();}
.setVisible(0<1);
peut être supprimé, et vous pouvez ajouter.show()
au cadre;println
peut êtreprint
.Java (OpenJDK 8) , 282 octets
Je ne peux pas tester cela en ce moment; si quelqu'un pouvait me dire s'il y avait des erreurs de compilation ce serait génial.
AWT serait probablement plus court mais j'ai besoin d'un IDE réel pour ce lol. Je n'ai jamais utilisé AWT auparavant mais je pourrais le faire fonctionner si j'avais un IDE. Je pourrais utiliser les documents mais c'est vraiment dur lol-10 octets en utilisant AWT grâce à Kevin Cruijssen
-44 octets en utilisant un bloc d'initialisation; développé indépendamment de Roberto Graham même si je vois maintenant qu'ils ont fait la même chose, je pense que
-6 octets combinant quelques déclarations grâce à Kevin
-11 octets utilisant un
interface
merci à Kevin-35 octets éliminant certaines variables inutiles grâce à mellamokb
-9 octets supprimant l'importation inutile et l'utilisation d'un nom qualifié grâce à mellamokb
-44 octets grâce à mellamokb et aditsu
la source
TI-Basic (TI-84 Plus CE), 49 octets (45 jetons) (éventuellement non concurrents)
-7 octets avec des suggestions de kamoroso94
L'utilisateur ne clique pas en soi, mais se déplace autour d'un curseur sur l'écran graphique avec les touches fléchées et frappe
enter
pour sélectionner un point, et le plus petit mouvement est ~ 1,5 pour x et ~ 2,4 pour y.Explication:
la source
8³
qui est supérieur à 400 mais un octet de moins.Disp
ligne de deux octets avec{X-A,Y-B:Disp √(sum(Ans²
(deux points ou une nouvelle ligne fonctionne évidemment).8^2
, le même nombre d'octets?8^2
(8 au carré) est 64 et inférieur à 400. J'ai dit8³
(8 cubes) qui est supérieur à 400 et utilise deux jetons, un octet chacun:8
et³
.JavaScript (ES6) + HTML, 58 octets
La page Web elle-même sert de «toile» en question; Je pense qu'il est assez sûr de supposer que la fenêtre du navigateur sera d'au moins 400x400 pixels.
JavaScript (ES6) + HTML, 51 octets
Nous pouvons économiser 7 octets si nous ignorons la
NaN
sortie au premier clic. ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 octets
Edit : Avec 13 octets supplémentaires de CSS, nous pouvons nous assurer que la zone de défilement sera suffisamment grande pour répondre à l'exigence 400x400.
la source
Traitement / Java, 149 octets
Assez simple, utilise 2 variables globales et 3 fonctions intégrées pour tout faire.
la source
Processing.org 126
la source
Python 2, 144
Imprime la distance entre les derniers clics (le premier imprime la distance à partir de 400 400).
la source
Autohotkey, 146 octets
On pourrait penser qu'un langage spécialement conçu pour capturer et simuler les actions du clavier et de la souris serait plus efficace pour relever ce défi ...
Cela crée une fenêtre avec une zone de texte 400 x 400 pixels avec une bordure pour le rendre évident. Sans la bordure, il y a un espace autour du bord qui est dans la fenêtre mais en dehors de la zone de texte et vous ne pouvez pas le dire. L'ajout d'une bordure était le moyen le plus court de les différencier. L'
gC
option lui fait exécuter le sous-programmeC
chaque fois que vous cliquez sur la zone de texte. La séquence de commandes est donc un clic gauche suivi d'un clic gauche différent.J'ai trouvé une autre solution de 144 octets, mais elle permet des clics sur tout l'écran au lieu de se limiter à la "toile évidente". Il est également ennuyeux de terminer, car les clics gauche et droit sont capturés et cela ne se termine pas lorsque vous fermez l'interface graphique.
la source
Python 2 ( TigerJython ),
125123 octetsTigerJython est livré avec une taille par défaut de toile de taille (800x, 600y).
Cela génère une image de tortue temporaire pour chaque point de début cliqué, qui disparaît après la sélection du point de début suivant. Ce comportement est approuvé par l'OP.
la source
SmileBASIC, 86 octets
Utilise l'écran tactile pour la saisie.
la source
Java 8, 228 octets
Voici une solution Java qui utilise une méthode AWT obsolète
mouseDown
que vous devrez creuser profondément dans l'API pour trouver. Je ne le connais qu'à cause du cours de programmation que j'ai suivi en tant que étudiant en deuxième année du secondaire, et l'un des projets était de créer un petit programme de peinture en utilisant cela et des méthodes similaires. Je n'ai jamais pensé que j'aurais une bonne raison de l'utiliser jusqu'à présent.la source
Tcl / Tk, 94
104la source