Codieren Sie ein Programm oder eine Funktion, um eine interaktive Leinwand mit einer Größe von mindestens 400 x 400 Pixel auf dem Bildschirm zu erstellen. Die Leinwand kann eine beliebige Farbe haben, umrandet oder randlos, mit oder ohne Titelleiste usw., nur irgendeine Form von offensichtlicher Leinwand.
Der Benutzer klickt auf zwei verschiedene Bereiche der Zeichenfläche und das Programm muss den euklidischen Abstand (in Pixel) zwischen diesen beiden Klicks auf irgendeine Weise ausgeben (STDOUT, Anzeigen einer Warnung usw.). Die zwei Klicks können nur Linksklicks, nur Rechtsklicks, ein Linksklick für den ersten und ein Rechtsklick für den zweiten, zwei Doppel-Linksklicks usw. sein, jede Kombination ist akzeptabel. Besonderer Hinweis: Klicken und Ziehen (z. B. mit MOUSEUP als zweitem Punkt) ist ausdrücklich nicht zulässig. Es müssen zwei unterschiedliche Klicks sein.
Der Benutzer muss dies mehrere Male tun können und jedes Mal eine Ausgabe erhalten, bis das Programm geschlossen / beendet / beendet / etc. Wird. Sie können die Schließmethode auswählen (Klicken auf ein X, Strg-C usw.), je nachdem, was für Ihren Code besser geeignet ist.
Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Wenn jedoch eine Funktion vorhanden ist, müssen Sie die Ausgabe dem Benutzer trotzdem irgendwie anzeigen (eine einfache Rückgabe des Werts ist nicht akzeptabel).
- Die Ausgabe kann auf der Konsole erfolgen, als Warnung angezeigt, auf der Zeichenfläche angezeigt werden usw.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
n
mal klickt , werdenn-1
stattfloor(n/2)
zahlen gedruckt) Ist das erlaubt?Antworten:
LOGO ( FMSLogo ),
5452 BytesLeider kann ich keine Online-Unterstützung für Logo-Interpreter-Mäuse wie FMSLogo finden.
Dies ist eine "Explicit-Slot-Vorlage", die Lambda in anderen Programmiersprachen ähnelt. Klicken Sie mit der linken Maustaste für den ersten Punkt und mit der rechten Maustaste für den zweiten Punkt (Druckabstand).
Erklärung: (Logo ist eine Programmiersprache für Schildkrötengrafiken)
Das
"
ist ein leeres Wort. Normalerweise wird erwartet, dass die Vorlage eine Liste ist (wobei[]
eine leere Liste nichts bewirkt). Das Übergeben eines Wortes ist akzeptabel (es wird in eine Liste eingeschlossen) und in diesem Fall werden 2 Bytes gespart.Lauf:
Dies
apply
ist eine Möglichkeit, eine Vorlage in Logo auszuführen. Dies ist die[]
Argumentliste, für die die Vorlage keine empfängt.quelle
Mathematica, 94 Bytes
Die Leinwand ist ein zufälliges Graustufenbild, der erste Klick sollte ein Linksklick und der zweite ein Rechtsklick sein. Das genaue Verhalten ist, dass beim Klicken mit der rechten Maustaste der Abstand zum letzten Klick (nach links oder rechts) gedruckt wird. Wenn Sie also wiederholt mit der rechten Maustaste klicken, können Sie auch aufeinanderfolgende Abstände abrufen.
Die Ergebnisse sind exakt und können eine Quadratwurzel enthalten.
Wenn die Auflösung Ihrer Webcam mindestens 400 x 400 beträgt, können Sie
CurrentImage[]
anstelle der1~RandomImage~400
Leinwand 3 Byte einsparen.quelle
Java 8,
469389388385380357348325 BytesWäre mit AWT kürzer, aber ich habe es nie benutzt.quelle
true
könnte sein0<1
.main(String args[])
nicht seinmain(String[]Z)
?{F f=new F();}
kann sein{new F();}
.setVisible(0<1);
kann entfernt und.show()
dem Rahmen hinzugefügt werden ;println
kann seinprint
.Java (OpenJDK 8) , 282 Byte
Ich kann das jetzt noch nicht testen. Wenn mir jemand sagen könnte, ob es Compilerfehler gibt, wäre das großartig.
AWT wäre wahrscheinlich kürzer, aber ich brauche eine tatsächliche IDE für das lol. Ich habe AWT noch nie benutzt, aber ich könnte es zum Laufen bringen, wenn ich eine IDE hätte. Ich könnte die Dokumente benutzen, aber das ist wirklich schwer, lol-10 Bytes mit AWT dank Kevin Cruijssen
-44 Bytes mit einem Initialisierungsblock; unabhängig von Roberto Graham entwickelt, obwohl ich jetzt sehe, dass sie das gleiche getan haben, denke ich, dass
-6 Bytes ein paar Deklarationen dank Kevin
-11 Bytes kombinieren und
interface
dank Kevin-35 Bytes einige unnötige Variablen eliminieren, dank mellamokb
-9 Bytes entfernen der unnötige import und die verwendung eines qualifizierten namens dank mellamokb
-44 bytes dank mellamokb und aditsu
quelle
TI-Basic (TI-84 Plus CE), 49 Byte (45 Tokens) (möglicherweise nicht konkurrierend)
-7 Bytes mit Vorschlägen von kamoroso94
Der Benutzer "klickt" nicht per se, sondern bewegt sich mit den Pfeiltasten und Hits um einen Cursor auf dem Graphikbildschirm
enter
, um einen Punkt auszuwählen, und die kleinste Bewegung beträgt ~ 1,5 für x und ~ 2,4 für y.Erläuterung:
quelle
8³
das größer als 400 ist, aber ein Byte weniger.Disp
Zeile mit um zwei Bytes verkleinern{X-A,Y-B:Disp √(sum(Ans²
(Doppelpunkt oder Zeilenumbruch funktionieren offensichtlich).8^2
die gleiche Anzahl von Bytes?8^2
(8 Quadrat) ist 64 und kleiner als 400. Ich sagte8³
(8 Würfel), der größer als 400 ist und zwei Token verwendet, jeweils ein Byte:8
und³
.JavaScript (ES6) + HTML, 58 Byte
Die Webseite selbst dient als "Leinwand" in Frage; Ich denke, es ist ziemlich sicher anzunehmen, dass das Browserfenster mindestens 400x400 Pixel groß sein wird.
JavaScript (ES6) + HTML, 51 Byte
Wir können 7 Bytes einsparen, wenn wir die
NaN
Ausgabe beim ersten Klick ignorieren . ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 Byte
Bearbeiten : Mit zusätzlichen 13 Byte CSS können wir sicherstellen, dass der Bildlaufbereich groß genug ist, um die 400 x 400-Anforderung zu erfüllen.
quelle
Verarbeitung / Java, 149 Byte
Ziemlich einfach, verwendet 2 globale Variablen und 3 integrierte Funktionen, um alles zu tun.
quelle
Processing.org 126
quelle
Python 2, 144
Gibt den Abstand zwischen den letzten Klicks aus (der erste gibt den Abstand zwischen 400 und 400 aus).
quelle
Autohotkey, 146 Bytes
Eine Sprache, die speziell für das Erfassen und Simulieren von Tastatur- und Mausaktionen entwickelt wurde, könnte bei dieser Herausforderung effizienter sein ...
Dadurch wird ein Fenster mit einem Textfeld von 400 x 400 Pixel mit einem Rand erstellt, um dies deutlich zu machen. Ohne den Rand befindet sich ein Leerzeichen um den Rand im Fenster, aber außerhalb des Textfelds, und Sie können es nicht erkennen. Das Hinzufügen einer Grenze war der kürzeste Weg, um sie zu unterscheiden. Mit dieser
gC
Option wird die Unterroutine ausgeführt,C
wenn Sie auf das Textfeld klicken. Die Befehlssequenz ist daher Linksklick, gefolgt von einem anderen Linksklick.Ich habe eine andere Lösung gefunden, die 144 Bytes umfasst, aber Klicks über den gesamten Bildschirm zulässt, anstatt nur in der "offensichtlichen Zeichenfläche". Es ist auch ärgerlich zu beenden, da sowohl Links- als auch Rechtsklicks erfasst werden und es nicht endet, wenn Sie die GUI schließen.
quelle
Python 2 ( TigerJython ),
125123 BytesTigerJython wird mit einer Standardgröße von (800x, 600y) Leinwand geliefert.
Dies erzeugt ein temporäres Schildkrötenbild für jeden angeklickten Startpunkt, das verschwindet, nachdem der nächste Startpunkt ausgewählt wurde. Dieses Verhalten wird vom OP genehmigt.
quelle
SmileBASIC, 86 Bytes
Verwendet Touchscreen zur Eingabe.
quelle
Java 8, 228 Bytes
Im Folgenden finden Sie eine Java-Lösung, die eine veraltete AWT-Methode verwendet
mouseDown
, die Sie erst in die API einarbeiten müssen, um sie zu finden. Ich weiß es nur aufgrund des Programmierkurses, den ich als Gymnasiast absolvierte, und eines der Projekte bestand darin, ein kleines Malprogramm mit diesem und ähnlichen Methoden zu erstellen. Ich hätte nie gedacht, dass ich einen guten Grund haben würde, es bis jetzt zu benutzen.quelle
Tcl / Tk,
94-104quelle