Kod programu lub funkcji, aby zbudować interaktywne płótno na ekranie o wielkości co najmniej 400 pikseli x 400 pikseli. Płótno może być dowolnego koloru, graniczy lub bez obramowania, z paskiem tytułowym lub bez, itp., Po prostu jakąś formę oczywistego płótna.
Użytkownik kliknie dwa odrębne obszary płótna, a program musi w pewien sposób wyprowadzić odległość euklidesową (w pikselach) między tymi dwoma kliknięciami (STDOUT, wyświetlanie alertu itp.). Dwa kliknięcia mogą być tylko kliknięciami lewym, tylko prawym kliknięciem, lewym kliknięciem dla pierwszego i prawym kliknięciem dla drugiego, dwoma podwójnymi kliknięciami lewym itd., Dowolna kombinacja jest dopuszczalna. Uwaga specjalna: Klikanie i przeciąganie (np. Używanie MOUSEUP jako drugiego punktu) jest szczególnie zabronione; muszą to być dwa różne kliknięcia.
Użytkownik musi być w stanie to zrobić wiele razy i za każdym razem musi uzyskać wynik, dopóki program nie zostanie zamknięty / force-quit / kill / etc. Możesz wybrać metodę zamknięcia (kliknięcie X, Ctrl-C itp.), Cokolwiek jest bardziej golfowe dla twojego kodu.
Zasady
- Dopuszczalny jest pełny program lub funkcja. Jeśli jednak funkcja musi nadal wyświetlać dane wyjściowe użytkownikowi (zwykłe zwrócenie wartości jest niedopuszczalne).
- Dane wyjściowe mogą być wysyłane do konsoli, wyświetlane jako alert, umieszczane na kanwie itp.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
źródło
n
razy,n-1
zamiastfloor(n/2)
liczb są drukowane) Czy to dozwolone?Odpowiedzi:
LOGO ( FMSLogo ),
5452 bajtówNiestety nie mogę znaleźć żadnej obsługi myszy online obsługującej interpreter logo, takiej jak FMSLogo.
Jest to „szablon z jawnym gniazdem”, który jest podobny do lambda w innych językach programowania. Kliknij lewy przycisk myszy, aby uzyskać pierwszy punkt, i prawy przycisk myszy, aby uzyskać drugi punkt (odległość drukowania).
Objaśnienie: (Logo to język programowania grafiki żółwia)
To
"
puste słowo. Zwykle oczekuje się, że szablon będzie listą (gdzie[]
pusta lista nic nie robi), przekazanie słowa jest dopuszczalne (jest zawinięte w listę), w tym przypadku oszczędza 2 bajty.Biegać:
Jest
apply
to jeden ze sposobów uruchamiania szablonu w Logo,[]
lista argumentów is, dla której szablon nie otrzymuje żadnego.źródło
Mathematica, 94 bajty
Kanwa jest losowym obrazem w skali szarości, pierwsze kliknięcie powinno być kliknięciem lewym przyciskiem myszy, a drugie kliknięciem prawym przyciskiem myszy. Dokładne zachowanie polega na tym, że kliknięcie prawym przyciskiem myszy drukuje odległość do ostatniego kliknięcia (lewy lub prawy), więc jeśli kilkakrotnie klikniesz prawym przyciskiem myszy, możesz także uzyskać kolejne odległości.
Wyniki są dokładne, więc mogą zawierać pierwiastek kwadratowy.
Jeśli rozdzielczość kamery internetowej wynosi co najmniej 400 x 400, możesz użyć
CurrentImage[]
zamiast1~RandomImage~400
płótna, oszczędzając 3 bajty.źródło
Java 8,
469389388385380357348325 bajtówByłoby krótsze z AWT, ale nigdy go nie użyłem.źródło
true
może być0<1
.main(String args[])
nie może byćmain(String[]Z)
?{F f=new F();}
może być{new F();}
.setVisible(0<1);
można usunąć i dodać.show()
do ramki;println
może byćprint
.Java (OpenJDK 8) , 282 bajty
Nie mogę teraz tego przetestować; jeśli ktoś mógłby mi powiedzieć, czy są jakieś błędy kompilatora, które byłyby świetne.
AWT prawdopodobnie będzie krótszy, ale potrzebuję rzeczywistego IDE dla tego lol. Nigdy wcześniej nie korzystałem z AWT, ale mógłbym sprawić, żeby działał, gdybym miał IDE. Mógłbym użyć dokumentów, ale to naprawdę trudne lol-10 bajtów za pomocą AWT dzięki Kevin Cruijssen
-44 bajtów za pomocą bloku inicjator; opracowane niezależnie od Roberta Grahama, chociaż teraz widzę, że zrobili to samo, myślę, że
-6 bajtów łączy kilka deklaracji dzięki Kevinowi
-11 bajtów, korzystając z
interface
podziękowań dla Kevina-35 bajtów eliminując niektóre niepotrzebne zmienne dzięki
usunięciu mellamokb -9 bajtów niepotrzebny import i użycie kwalifikowanej nazwy dzięki mellamokb
-44 bajtów dzięki mellamokb i aditsu
źródło
TI-Basic (TI-84 Plus CE), 49 bajtów (45 tokenów) (możliwe, że nie konkuruje)
-7 bajtów z sugestiami od kamoroso94
Użytkownik nie „klika” per se, ale porusza się kursorem na ekranie wykresu za pomocą klawiszy strzałek i trafień,
enter
aby wybrać punkt, a najmniejszy ruch to ~ 1,5 dla xi ~ 2,4 dla y.Wyjaśnienie:
źródło
8³
co jest większe niż 400, ale jeden bajt mniej.Disp
linię o dwa bajty za pomocą{X-A,Y-B:Disp √(sum(Ans²
(oczywiście dwukropek lub znak nowej linii).8^2
taka sama liczba bajtów?8^2
(8 do kwadratu) ma 64 i mniej niż 400. Powiedziałem8³
(8 kostek), który jest większy niż 400 i używa dwóch tokenów, po jednym bajcie:8
i³
.JavaScript (ES6) + HTML, 58 bajtów
Sama strona internetowa służy jako „płótno”; Myślę, że całkiem bezpiecznie jest założyć, że okno przeglądarki będzie mieć co najmniej 400 x 400 pikseli.
JavaScript (ES6) + HTML, 51 bajtów
Możemy zapisać 7 bajtów, jeśli zignorujemy dane
NaN
wyjściowe przy pierwszym kliknięciu. ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 bajtów
Edycja : Dzięki dodatkowym 13 bajtom CSS możemy zapewnić, że obszar przewijania będzie wystarczająco duży, aby pasował do wymagań 400 x 400.
źródło
Przetwarzanie / Java, 149 bajtów
Całkiem proste, używa 2 zmiennych globalnych i 3 wbudowanych funkcji, aby zrobić wszystko.
źródło
Processing.org 126
źródło
Python 2, 144
Drukuje odległość między ostatnimi kliknięciami (pierwsza drukuje odległość od 400,400).
źródło
Autohotkey, 146 bajtów
Można by pomyśleć, że język zbudowany specjalnie do przechwytywania i symulacji działań klawiatury i myszy byłby bardziej skuteczny w tym wyzwaniu ...
To tworzy okno z polem tekstowym 400 x 400 pikseli z ramką, aby było to oczywiste. Bez ramki wokół krawędzi znajduje się spacja, ale poza polem tekstowym i nie można tego stwierdzić. Dodanie granicy było najkrótszym sposobem ich rozróżnienia.
gC
Opcja, aby go uruchomić podprogramC
w dowolnym momencie kliknąć w polu tekstowym. Dlatego sekwencją poleceń jest lewy przycisk myszy, a następnie inny lewy przycisk myszy.Znalazłem inne rozwiązanie, które ma 144 bajty, ale pozwala na kliknięcia na całym ekranie zamiast tylko w „oczywistym kanwie”. Zakończenie jest również denerwujące, ponieważ rejestrowane są zarówno lewe, jak i prawe kliknięcia i nie kończy się po zamknięciu GUI.
źródło
Python 2 ( TigerJython ),
125123 bajtówTigerJython ma domyślny rozmiar płótna (800x, 600y).
Spowoduje to utworzenie tymczasowego obrazu żółwia dla każdego klikniętego punktu „początek”, który znika po wybraniu następnego punktu „początek”. Takie zachowanie zostało zatwierdzone przez PO.
źródło
SmileBASIC, 86 bajtów
Wykorzystuje ekran dotykowy do wprowadzania danych.
źródło
Java 8, 228 bajtów
Oto rozwiązanie Java, które używa przestarzałej metody AWT
mouseDown
, którą trzeba by głęboko zagłębić w API, aby znaleźć. Wiem o tym tylko dzięki kursowi programowania, który ukończyłem w szkole średniej, a jednym z projektów było stworzenie małego programu do malowania przy użyciu tej i podobnych metod. Do tej pory nie sądziłem, że będę miał dobry powód, aby go używać.źródło
Tcl / Tk, 94
104źródło