দুটি পয়েন্টের মধ্যে সংক্ষিপ্ততম দূরত্ব একটি লাইন


27

কমপক্ষে 400 পিক্সেল x 400 পিক্সেলের আকারের স্ক্রিনে একটি ইন্টারেক্টিভ ক্যানভাস তৈরি করতে একটি প্রোগ্রাম বা ফাংশন কোড করুন। ক্যানভাসটি আপনার ইচ্ছামতো রঙ, সীমানা বা সীমান্তহীন, কোনও শিরোনাম বার সহ বা ছাড়াই হতে পারে, ইত্যাদি স্পষ্ট ক্যানভাসের কিছু রূপ।

ব্যবহারকারী ক্যানভাসের দুটি স্বতন্ত্র অঞ্চলে ক্লিক করবেন এবং প্রোগ্রামটি অবশ্যই কিছু ফ্যাশনে (দুটি STDOUT, সতর্কতা প্রদর্শন ইত্যাদি) এই দুটি ক্লিকের মধ্যে ইউক্লিডিয়ান দূরত্ব (পিক্সেলগুলিতে) আউটপুট দিতে হবে। দুটি ক্লিক কেবল বাম ক্লিক, কেবল ডান ক্লিক, দ্বিতীয় এবং প্রথমটির জন্য বাম ক্লিক, দুটি ডাবল-বাম-ক্লিক ইত্যাদি হতে পারে, যে কোনও সংশ্লেষ গ্রহণযোগ্য। বিশেষ দ্রষ্টব্য: ক্লিক করা এবং টেনে আনার (উদাহরণস্বরূপ, দ্বিতীয় পয়েন্ট হিসাবে মাউসইপ ব্যবহার করা) বিশেষভাবে অনুমোদিত নয়; এগুলি দুটি স্বতন্ত্র ক্লিক হতে হবে।

ব্যবহারকারীর অবশ্যই এটি একাধিকবার করতে সক্ষম হবে এবং প্রোগ্রামটি বন্ধ / জোর করে ছেড়ে দেওয়া / নিহত / ইত্যাদি হওয়া অবধি প্রতিবার আউটপুট পেতে হবে। আপনার কোডের জন্য গল্ফিয়ার যাই হোক না কেন আপনি ক্লোজারের পদ্ধতিটি বেছে নিতে পারেন (একটি এক্স, সিটিআরএল-সি ইত্যাদি ক্লিক করুন)।

বিধি

  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন, তবে আপনাকে অবশ্যই এখনও কোনওভাবে ব্যবহারকারীর কাছে আউটপুট প্রদর্শন করতে হবে (কেবল মানটি ফিরিয়ে দেওয়া গ্রহণযোগ্য নয়)।
  • আউটপুট কনসোলে থাকতে পারে, একটি সতর্কতা হিসাবে প্রদর্শিত, ক্যানভাসে স্থাপন করা ইত্যাদি can
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

আমরা কি সঠিক ফলাফল আউটপুট করতে পারি (যার মধ্যে বর্গমূল হতে পারে) বা এটি দশমিক হতে পারে?
মার্টিন ইন্ডার

@ মার্টিনএন্ডার হয় / অথবা। আউটপুট বিন্যাস এই চ্যালেঞ্জের আকর্ষণীয় অংশ নয়।
অ্যাডমবর্কবার্ক

1
এইচটিএমএল / জেএস সমাধান, দ্বিতীয় ক্লিক থেকে, সেই ক্লিক থেকে পূর্ববর্তী ক্লিকের দূরত্বকে আউটপুট করে। (সুতরাং যদি ব্যবহারকারীরা ক্লিক করুন nবার, সংখ্যার n-1পরিবর্তে floor(n/2)মুদ্রণ করা হয়) এটি অনুমোদিত?
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 এটি আমি যা কল্পনা করছিলাম তার থেকে একটু বাইরে, তবে আমি দেখতে পাচ্ছি যে এটি আমার উপরে লেখা বিধিগুলি কীভাবে মেনে চলে, তাই আমি এটির অনুমতি দেব।
অ্যাডমবর্কবার্ক

1
আমাদের ভাষা যদি 400 x 400 ক্যানভাসকে সমর্থন না করতে পারে তবে আমরা কি একটি ছোট ক্যানভাস আকার ব্যবহার করতে পারি?
স্কট মিলনার 16

উত্তর:


8

লোগো ( এফএমএসলোগো ), 54 52 বাইট

[mouseon[setpos mousepos]"[pr distance mousepos]"[]]

দুর্ভাগ্যক্রমে, আমি এফএমএসলোগোর মতো কোনও লোগো ইন্টারপ্রেটার অনলাইন সমর্থন মাউস হ্যান্ডলিং খুঁজে পাই না।

এটি একটি "সুস্পষ্ট-স্লট টেম্পলেট", যা অন্যান্য প্রোগ্রামিং ভাষায় ল্যাম্বদার মতো similar প্রথম পয়েন্টের জন্য বাম মাউস এবং দ্বিতীয় পয়েন্টের জন্য ডান মাউস ক্লিক করুন (মুদ্রণের দূরত্ব)।

ব্যাখ্যা: (লোগো একটি কচ্ছপ গ্রাফিক্স প্রোগ্রামিং ভাষা)

mouseon                  Turn on mouse handling, with the following action:
[setpos mousepos]        Set the turtle to `mousepos` (the position of the mouse) on left mouse down
"                        Do nothing on left mouse up
[pr distance mousepos]   Print the distance from turtle position (`distance` is Logo builtin for that purpose) to `mousepos` on right mouse down
"                        Do nothing on right mouse up
[]                       Do nothing on mouse movement

"একটি খালি শব্দ। সাধারণত টেমপ্লেটটি একটি তালিকা হিসাবে প্রত্যাশিত হয় (যেখানে []একটি খালি তালিকা, কিছুই করে না), কোনও শব্দ পাস করা গ্রহণযোগ্য (এটি একটি তালিকায় আবৃত) এবং এই ক্ষেত্রে এটি 2 বাইট সংরক্ষণ করে।

চালান:

apply [... <put the code here> ...] []

applyওয়ান ওয়ে লোগো টেমপ্লেটের চালানো হয়, []আর্গুমেন্ট তালিকার, যার জন্য টেমপ্লেট কেউ গ্রহণ হয়।


এটি কীভাবে ন্যূনতম 400x400 ক্যানভাসের গ্যারান্টি দেয়?
ডেভিড মুলদার

1
ডিভিডমুল্ডার এফএমএসলোগো ডিফল্টরূপে (অতিরিক্ত কমান্ড লাইন ছাড়াই) ক্যানভাস 1000 × 1000 দিয়ে শুরু করুন।
ব্যবহারকারী 202729

7

গণিত, 94 বাইট

e="MouseDown";m:=x=MousePosition[];1~RandomImage~400~EventHandler~{e:>m,{e,2}:>Echo@Norm[x-m]}

ক্যানভাসটি এলোমেলো ধূসর-স্কেল চিত্র, প্রথম ক্লিকটি বাম-ক্লিক এবং দ্বিতীয়টিতে ডান-ক্লিক হওয়া উচিত। সঠিক আচরণটি হ'ল ডান-ক্লিকটি সর্বশেষ ক্লিকের (বাম বা ডান) দূরত্ব মুদ্রণ করে , তাই আপনি যদি বারবার ডান-ক্লিক ব্যবহার করেন তবে আপনি পরপর দূরত্বও পেতে পারেন।

ফলাফলগুলি হুবহু, তাই তাদের একটি বর্গমূল থাকতে পারে।

যদি আপনার ওয়েবক্যামের রেজোলিউশনটি কমপক্ষে 400x400 হয় তবে আপনি আপনার ক্যানভাসের CurrentImage[]পরিবর্তে 1~RandomImage~4003 বাইট সংরক্ষণ করতে পারবেন।


@ জেনি_ম্যাথি ম্যাথমেটিকা ​​সংস্করণ হতে পারে? আমি ১১.১.১ এ পরীক্ষা করেছি।
মার্টিন ইন্ডার

6

জাভা 8, 469 389 388 385 380 357 348 325 বাইট

import java.awt.event.*;interface F{static void main(String[]a){new java.awt.Frame(){{setSize(400,400);double[]a={-1,0};addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){if(a[0]<0){a[0]=e.getX();a[1]=e.getY();}else{System.out.println(Math.hypot(e.getX()-a[0],e.getY()-a[1]));a[0]=-1;}}});}}.show();}}

import javafx.application.*;import javafx.scene.*;import javafx.scene.layout.*;import javafx.stage.*;public class E extends Application{double[]a={-1,0};public void start(Stage s)throws Exception{Pane p=new Pane();s.setScene(new Scene(p,400,400));s.show();p.setOnMouseClicked(e->{if(a[0]<0){a[0]=e.getX();a[1]=e.getY();}else {System.out.println(Math.sqrt(Math.pow(e.getX()-a[0],2)+Math.pow(e.getY()-a[1],2)));a[0]=-1;}});}public static void main(String[]a){launch(a);}}

এডাব্লুটিটির সাথে সংক্ষিপ্ত হবে, তবে আমি এটি কখনও ব্যবহার করি না।


আমার মনে হয় trueহতে পারে 0<1
জোনাথন ফ্রেচ

এছাড়াও, হতে main(String args[])পারে না main(String[]Z)?
জোনাথন ফ্রেচ

আমার মনে হয় {F f=new F();}হতে পারে {new F();}
জোনাথন ফ্রেচ

setVisible(0<1);সরানো যেতে পারে, এবং আপনি .show()ফ্রেমে যোগ করতে পারেন ; printlnহতে পারে print
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন আমি জানি না যে ওপি কীভাবে একাধিক ফলাফলের জন্য আউটপুট চায়
রবার্তো গ্রাহাম

5

জাভা (ওপেনজেডিকে 8) , 282 বাইট

import java.awt.event.*;interface M{static void main(String[]a){new java.awt.Frame(){int k,x,y;{addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){x=e.getX()-k*x;y=e.getY()-k*y;k^=1;if(k<1)System.out.prin‌​tln(Math.hypot(x,y))‌​;}});setSize(800,600‌​);show();}};}}

আমি এখনই এটি পরীক্ষা করতে পারি না; যদি কেউ আমাকে বলতে পারে যে কোনও সংকলক ত্রুটি আছে তবে তা দুর্দান্ত।

এডাব্লুটি সম্ভবত সংক্ষিপ্ত হবে তবে সেই লোলটির জন্য আমার একটি আসল আইডিই দরকার। আমি আগে কখনও ডাব্লুটিটি ব্যবহার করি নি তবে আইডিই থাকলে আমি এটি কাজ করতে পারতাম। আমি দস্তাবেজগুলি ব্যবহার করতে পারি তবে এটি সত্যিই শক্ত l

কেভিন ক্রুইজসেন
-৪৪ বাইট একটি ইনিশিয়ালার ব্লক ব্যবহার করে AWT ব্যবহার করে -10 বাইটস ; রবার্তো গ্রাহামের স্বাধীনভাবে বিকাশ হয়েছে যদিও আমি এখন দেখছি যে তারাও একই কাজ করেছে, আমি মনে করি
-6 বাইটস কেভিন
-11 বাইটকে interfaceকেভিন
-35 বাইটকে ধন্যবাদ দিয়ে কিছু অপ্রয়োজনীয় ভেরিয়েবল
অপসারণের জন্য মেল্লামব্যাক -9 বাইট অপসারণকে ধন্যবাদ অপ্রয়োজনীয় আমদানি এবং একটি যোগ্য নাম ব্যবহার করে মেল্লামব্যাক
-৪৪ বাইটকে মেলামোকব এবং অ্যাডিটসুকে ধন্যবাদ


4

টিআই-বেসিক (টিআই -৪৪ প্লাস সিই), 49 বাইট (45 টোকেন) (সম্ভবত প্রতিদ্বন্দ্বিতামূলক)

0→Xmin
0→Ymin
8³→Xmax
Ans→Ymax
While 1
Input 
{X,Y
Input 
Ans-{X,Y
Disp √(sum(Ans²
Pause
End

কামোরোসো ৯৪ এর পরামর্শ সহ -7 বাইট

ব্যবহারকারী প্রতি সেটে 'ক্লিক' করেন না, তবে তীর কীগুলির সাহায্যে গ্রাফ স্ক্রিনে একটি কার্সারের চারদিকে ঘোরা হয় এবং enterএকটি বিন্দু নির্বাচন করতে হিট করে এবং ক্ষুদ্রতম গতিপথটি এক্স এর জন্য 1.5 ডলার এবং y এর জন্য ~ 2.4 হয়।

ব্যাখ্যা:

0→Xmin                # 5 bytes
0→Ymin                # 5 bytes
8³→Xmax               # 6 bytes, 
Ans→Ymax              # 5 bytes, Set up graph screen size (512x512)
While 1               # 3 bytes, Until interrupted with `on` button
Input                 # 2 bytes, Get user input as a point on the graph screen in X and Y
{X,Y                  # 5 bytes, store the list {X,Y} in Ans
Input                 # 2 bytes, Get second user input as a point on the graph screen in X and Y
Ans-{X,Y              # 7 bytes, store {X1-X2,Y1-Y2} in Ans
Disp √(sum(Ans²       # 6 bytes, Display the distance between the two points
Pause                 # 2 bytes, Let the user see it (press `enter` to continue)
End                   # 1 bytes, End while loop

1
যেহেতু আকারটি কেবল কমপক্ষে 400 হতে হবে, তাই আপনি 400 বা তার চেয়ে বেশি বয়সের চেয়ে কম এমন কিছুতে ধ্রুবকটি গল্ফ করতে পারেন ।
কামোরসো94

1
এছাড়াও আপনি Dispদুটি কোট দিয়ে লাইন হ্রাস করতে পারবেন {X-A,Y-B:Disp √(sum(Ans²(কোলন বা নিউলাইন স্পষ্টভাবে কাজ করে)।
কামোরসো94

@ কামোরসো94 আমার টিআই-বেসিক মরিচা তবে 8^2এটি কি একই সংখ্যক বাইট হবে না?
টড সয়েল 21

@ টোডসওয়েল নং, 8^2(8 স্কোয়ার) 64 এবং 400 এর চেয়ে কম। আমি বলেছি (8 কিউবড) যা 400 এর চেয়ে বেশি এবং দুটি টোকেন ব্যবহার করে, একটি করে বাইট: 8এবং ³
kamoroso94

1
@ টাডসওয়েল: নিশ্চিত (ম্যাথ → 3) আছে।
নিক মাত্তিও

4

জাভাস্ক্রিপ্ট (ES6) + এইচটিএমএল, 58 বাইট

ওয়েবপৃষ্ঠা নিজেই প্রশ্নের "ক্যানভাস" হিসাবে কাজ করে; আমি মনে করি ব্রাউজার উইন্ডোটি কমপক্ষে 400x400 পিক্সেল হবে ধরে নেওয়া বেশ নিরাপদ।

E=0,onclick=e=>(E&&alert(Math.hypot(E.x-e.x,E.y-e.y)),E=e)


জাভাস্ক্রিপ্ট (ES6) + এইচটিএমএল, 51 বাইট

আমরা যদি NaNপ্রথম ক্লিকে আউটপুটটিকে উপেক্ষা করি তবে আমরা 7 বাইট সংরক্ষণ করতে পারি । ( @ নেট )

E=onclick=e=>alert(Math.hypot(E.x-e.x,E.y-e.y),E=e)


জাভাস্ক্রিপ্ট (ES6) + এইচটিএমএল + সিএসএস, 58 + 0 + 13 = 71 বাইট

সম্পাদনা করুন : সিএসএসের অতিরিক্ত 13 বাইটের সাহায্যে, আমরা নিশ্চিত করতে পারি যে 400x400 প্রয়োজনীয়তার সাথে ফিট করার জন্য স্ক্রোলের ক্ষেত্রটি যথেষ্ট পরিমাণে যথেষ্ট বড় হবে।

E=0,onclick=e=>(E&&alert(Math.hypot(E.x-e.x,E.y-e.y)),E=e)
*{padding:9in


2

প্রসেসিং / জাভা, 149 বাইট

void setup(){size(400,400);}void draw(){}int a,b;void mousePressed(){if(mouseButton==LEFT){a=mouseX;b=mouseY;}else println(dist(a,b,mouseX,mouseY));}

বেশ সোজা, সবকিছু করার জন্য 2 গ্লোবাল ভেরিয়েবল এবং 3 বিল্ট-ইন ফাংশন ব্যবহার করে।

  • সেটআপ: সবেমাত্র উইন্ডোটি 400x400 এ সূচনা করে
  • অঙ্কন: খালি, তবে প্রক্রিয়াটি> 1 ফ্রেমের জন্য ইন্টারেক্টিভ হওয়ার জন্য অবশ্যই উপস্থিত থাকতে হবে
  • মাউসপ্রেসড: বাম ক্লিক হলে, মাউস স্থানাঙ্কগুলিকে পূর্ণসংখ্যার ক এবং বিতে সংরক্ষণ করুন। ডান ক্লিক করলে, পয়েন্ট (ক, খ) থেকে বর্তমান অবস্থানের দূরত্ব পরিমাপ করুন এবং কনসোলে মুদ্রণ করুন।

2

প্রসেসিং.আর 126

float i,d,x,y;void setup(){fullScreen();}void draw(){}void mousePressed(){d=dist(x,y,x=mouseX,y=mouseY);print(i++%2<1?" ":d);}

1

পাইথন 2, 144

শেষ ক্লিকগুলির মধ্যে দূরত্ব মুদ্রণ করে (প্রথমটি 400,400 থেকে দূরত্ব মুদ্রণ করে)।

import Tkinter as t,math
r=t.Tk()
p=[400]*2
r.minsize(*p)
def f(e):print math.hypot(p[0]-e.x,p[1]-e.y);p[:]=e.x,e.y
r.bind('<1>',f)
r.mainloop()

0

অটোহোটকি, 146 বাইট

A=0
Gui,Add,Text,W400 H400 gC Border
Gui,Show
Return
C:
If A=0
MouseGetPos,A,B
Else{
MouseGetPos,C,D
Msgbox % Sqrt((A-C)**2+(B-D)**2)
A=0
}
Return

আপনি কি মনে করেন যে কীবোর্ড এবং মাউস ক্রিয়াকলাপগুলি ক্যাপচার এবং সিমুলেট করার জন্য বিশেষত নির্মিত একটি ভাষা এই চ্যালেঞ্জটিতে আরও দক্ষ হবে ...

এটি স্পষ্ট করে তুলতে সীমান্ত সহ 400 x 400 পিক্সেল সহ একটি পাঠ্য বাক্স সহ একটি উইন্ডো তৈরি করে। সীমানা ছাড়াই, উইন্ডোতে প্রান্তের চারপাশে একটি জায়গা রয়েছে তবে পাঠ্য বাক্সের বাইরে রয়েছে এবং আপনি বলতে পারবেন না। তাদের পার্থক্য করার জন্য একটি সীমানা যুক্ত করা সংক্ষিপ্ততম উপায় ছিল। gCবিকল্প এটা সাবরুটিন রান করতে Cযখনই আপনি টেক্সট বক্সে ক্লিক করুন। কমান্ডের অনুক্রমটি তাই বাম ক্লিকের পরে একটি ভিন্ন বাম ক্লিক ক্লিক করুন ft

আমি আরও একটি সমাধান পেয়েছি যা ১৪৪ বাইট রয়েছে তবে এটি "স্পষ্ট ক্যানভাস" এর পরিবর্তে সমস্ত স্ক্রিনে ক্লিকের অনুমতি দেয়। এটি শেষ করতেও বিরক্তিকর কারণ উভয় বাম এবং ডান ক্লিকগুলি ক্যাপচার করা হয়েছে এবং আপনি জিইউআই বন্ধ করলে এটি শেষ হয় না।

Gui,Add,Text,W400 H400 Border
Gui,Show
Return
LButton::
MouseGetPos,A,B
Return
RButton::
MouseGetPos,C,D
Msgbox % Sqrt((A-C)**2+(B-D)**2)
Return

0

পাইথন 2 ( টাইগারজাইথন ), 125 123 বাইট

from gturtle import*
n=0
def c(x,y):
 global n
 if n:print distance(x,y)
 else:setPos(x,y)
 n^=1
makeTurtle(mousePressed=c)

টাইগারজাইথন ​​একটি ডিফল্ট আকারের (800x, 600y) আকারের ক্যানভাসের সাথে আসে।

এটি ক্লিক করা প্রতিটি 'শুরু' পয়েন্টের জন্য একটি অস্থায়ী কচ্ছপের চিত্র তৈরি করে, যা পরবর্তী 'সূচনা' পয়েন্টটি নির্বাচিত হওয়ার পরে অদৃশ্য হয়ে যায়। এই আচরণটি ওপি দ্বারা অনুমোদিত হয়।


0

স্মাইলব্যাসিক, 86 বাইট

@L
TOUCH OUT F,X,Y
S=S-X
T=T-Y
IF!O*F*M THEN?SQR(S*S+T*T)
S=X
T=Y
M=M!=!O*F
O=F
GOTO@L

ইনপুট জন্য টাচ স্ক্রিন ব্যবহার করে।


0

জাভা 8, 228 বাইট

interface A{static void main(String[]a){new java.awt.Frame(){{setSize(400,400);}int i,j,t;public boolean mouseDown(java.awt.Event e,int x,int y){if(t++%2==1)System.out.println(Math.hypot(x-i,y-j));i=x;j=y;return 1>0;}}.show();}}

এখানে একটি জাভা সমাধান রয়েছে যা অবহিত AWT পদ্ধতিটি ব্যবহার করে mouseDownযা আপনাকে API এ গভীরভাবে খনন করতে হবে। আমি কেবলমাত্র এটির জন্যই জানি যে আমি একটি হাই স্কুল সোফমোর হিসাবে প্রোগ্রামিং কোর্সটি গ্রহণ করেছি এবং এর মধ্যে একটি প্রকল্প ছিল সেই এবং অনুরূপ পদ্ধতিগুলি ব্যবহার করে একটি ছোট পেইন্ট প্রোগ্রাম করা। আমি কখনই ভাবিনি যে এখন পর্যন্ত এটি ব্যবহারের আমার কাছে ভাল কারণ থাকবে।


0

টিসিএল / টাকা, 94 104

wm ge . 400x400
bind . <1> {if [info ex x] {puts [expr hypot(%x-$x,%y-$y)]}
set x %x
set y %y}

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.