Код программы или функции для создания интерактивного холста на экране размером не менее 400 пикселей х 400 пикселей. Холст может быть любого цвета, по вашему желанию, с рамкой или без рамки, с заголовком или без него и т. Д., Только в некоторой форме очевидного холста.
Пользователь щелкает две отдельные области холста, и программа должна каким-то образом выводить евклидово расстояние (в пикселях) между этими двумя щелчками (STDOUT, отображение предупреждения и т. Д.). Два щелчка могут быть только левыми щелчками, только правыми щелчками, левым щелчком для первого и правым щелчком для второго, двумя двойными левыми щелчками и т. Д., Любая комбинация является приемлемой. Специальное примечание: клики и перетаскивания (например, с использованием MOUSEUP в качестве второй точки) специально не допускаются; они должны быть двух разных кликов.
Пользователь должен иметь возможность делать это несколько раз и каждый раз получать выходные данные, пока программа не будет закрыта / принудительно завершена / уничтожена / и т. Д. Вы можете выбрать метод закрытия (нажав X, Ctrl-C и т. Д.), Независимо от того, что лучше для вашего кода.
правила
- Допустимы либо полная программа, либо функция. Если функция, тем не менее, вы все равно должны каким-то образом отображать вывод для пользователя (просто возвращать значение недопустимо).
- Вывод может быть на консоль, отображаться как предупреждение, заполняться на холсте и т. Д.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
источник
n
времяn-1
вместоfloor(n/2)
цифр) Это разрешено?Ответы:
LOGO ( FMSLogo ),
5452 байтаК сожалению, я не могу найти ни одного онлайн-переводчика, поддерживающего обработку мыши, как FMSLogo.
Это «шаблон явного слота», который похож на лямбду в других языках программирования. Щелкните левой кнопкой мыши для первой точки и правой кнопкой мыши для второй точки (расстояние печати).
Пояснение: (Логотип является языком программирования графики черепахи)
Это
"
пустое слово. Обычно шаблон должен быть списком (где[]
пустой список ничего не делает), допустимо передавать слово (оно заключено в список), и в этом случае он сохраняет 2 байта.Бег:
Это
apply
единственный способ запустить шаблон в Logo,[]
это список аргументов, для которого шаблон не получает ни одного.источник
Mathematica, 94 байта
Холст представляет собой случайное серое изображение, первый щелчок должен быть левой кнопкой, а второй - правой кнопкой мыши. Точное поведение в действительности состоит в том, что щелчок правой кнопкой мыши печатает расстояние до последнего щелчка (влево или вправо), поэтому, если вы используете многократный щелчок правой кнопкой мыши, вы также можете получить последовательные расстояния.
Результаты точные, поэтому они могут содержать квадратный корень.
Если разрешение вашей веб-камеры составляет не менее 400x400, вы можете использовать
CurrentImage[]
вместо1~RandomImage~400
холста, сэкономив 3 байта.источник
Ява 8,
469389388385380357348325 байтКороче с AWT, но я никогда не использовал его.источник
true
может быть0<1
.main(String args[])
не может бытьmain(String[]Z)
?{F f=new F();}
может быть{new F();}
.setVisible(0<1);
могут быть удалены, и вы можете добавить.show()
в рамку;println
может бытьprint
.Java (OpenJDK 8) , 282 байта
Я не могу проверить это прямо сейчас; если бы кто-то мог сказать мне, есть ли какие-либо ошибки компилятора, это было бы здорово.
AWT, вероятно, будет короче, но мне нужна настоящая IDE для этого. Я никогда не использовал AWT раньше, но я мог бы заставить его работать, если бы у меня была IDE. Я мог бы использовать документы, но это действительно сложно, лол-10 байтов с использованием AWT благодаря Кевину Круйссену
-44 байта с использованием блока инициализации; разработан независимо от Роберто Грэма, хотя теперь я вижу, что они делали одно и то же, я думаю, что
-6 байтов объединяют несколько объявлений благодаря
байту Kevin -11, используя байты
interface
Kevin-35, устраняя некоторые ненужные переменные благодаря удалению
байтов mellamokb -9 ненужный импорт и использование квалифицированного имени благодаря mellamokb
-44 байта благодаря mellamokb и aditsu
источник
TI-Basic (TI-84 Plus CE), 49 байт (45 токенов) (возможно, не конкурирующий)
-7 байт с предложениями от kamoroso94
Пользователь сам по себе не «щелкает», а перемещает курсор на экране графика клавишами со стрелками и ударами,
enter
чтобы выбрать точку, и наименьшее движение составляет ~ 1,5 для x и ~ 2.4 для y.Объяснение:
источник
8³
больше 400, но на один байт меньше.Disp
строку на два байта с помощью{X-A,Y-B:Disp √(sum(Ans²
(очевидно, двоеточие или символ новой строки работает).8^2
же байтов?8^2
(8 в квадрате) равно 64 и меньше 400. Я сказал8³
(8 в кубе), что больше 400 и использует два токена, по одному байту каждый:8
и³
.JavaScript (ES6) + HTML, 58 байт
Сама веб-страница выступает в качестве «холста»; Я думаю, вполне безопасно предположить, что окно браузера будет иметь размер не менее 400x400 пикселей.
JavaScript (ES6) + HTML, 51 байт
Мы можем сохранить 7 байтов, если проигнорируем
NaN
вывод при первом клике. ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 байт
Изменить : с дополнительными 13 байтами CSS, мы можем гарантировать, что область прокрутки будет достаточно большой, чтобы соответствовать требованию 400x400.
источник
Обработка / Java, 149 байт
Довольно просто, использует 2 глобальные переменные и 3 встроенные функции, чтобы сделать все.
источник
Processing.org 126
источник
Python 2, 144
Печатает расстояние между последними нажатиями (первый печатает расстояние от 400 400).
источник
Автострелка, 146 байт
Можно подумать, что язык, созданный специально для захвата и симуляции действий клавиатуры и мыши, будет более эффективным в этой задаче ...
Это создает окно с текстовым полем 400 х 400 пикселей с рамкой, чтобы сделать его очевидным. Без рамки есть пространство вокруг края, которое находится в окне, но за пределами текстового поля, и вы не можете сказать. Добавление границы было самым коротким способом их дифференциации.
gC
Вариант сделать его запустить подпрограммуC
всякий раз , когда вы щелкаете на текстовом поле. Последовательность команд, следовательно, левый щелчок, за которым следует другой левый щелчок.Я нашел другое решение размером 144 байта, но оно позволяет щелкать по всему экрану, а не на «очевидном холсте». Конец также раздражает, потому что фиксируются как левые, так и правые щелчки, и он не заканчивается, когда вы закрываете графический интерфейс.
источник
Python 2 ( TigerJython ),
125123 байтаTigerJython поставляется с размером по умолчанию (800x, 600y).
Это порождает временное изображение черепахи для каждой точки начала нажатия, которое исчезает после выбора следующей точки начала. Такое поведение одобрено ФП.
источник
SmileBASIC, 86 байт
Использует сенсорный экран для ввода.
источник
Java 8, 228 байт
Вот Java-решение, в котором используется устаревший метод AWT,
mouseDown
который вам придется глубоко изучить API. Я знаю об этом только из-за курса по программированию, который я выбрал на втором курсе средней школы, и одним из проектов было создание небольшой программы рисования с использованием этого и подобных методов. Я никогда не думал, что у меня будет веская причина использовать его до сих пор.источник
Tcl / Tk, 94
104источник