জে , 40 বাইট
2%~[:+/^:_]<:[:+/&.:*:"1[:-"1/~#~#:i.@^~
এটি অনলাইন চেষ্টা করুন!
আপনি বর্ধিত নির্ভুলতা ( 5xপরিবর্তে 5) ব্যবহার করে টিআইও-তে 5 এর জন্য সময় নির্বাহ করবে । আমি আমার কম্পিউটারে 6 দিয়ে চেষ্টা করে বিরক্ত করব না যেহেতু এতে কোনও সন্দেহ নেই যে অনুবাদক ক্রাশ হবে।
গল্ফিংয়ের বিষয়ে পরামর্শের জন্য, বিশেষত স্থানাঙ্কগুলির প্রজন্মের অতীত অংশ। আমার মনে হচ্ছে কিছু টুপি অপসারণ করার উপায় থাকা উচিত।
]<:[:+/&.:*:"1সমানভাবে দ্বারা প্রতিস্থাপিত হতে পারে *:<:[:+/"1[:*:।
ব্যাখ্যা
এই ব্যাখ্যাটি REPL এ করা হয় (তিনটি স্পেস একটি কমান্ড নির্দেশ করে, কোনও ফাঁকা স্থান আউটপুট নির্দেশ করে না)। আমি উত্তর পর্যন্ত নির্মাণ করা হবে।
স্থানাঙ্ক তৈরি করা হচ্ছে
#~ #: i.@^~ আমরা জালিতে যত্ন করি এমন সমস্ত স্থানাঙ্ক দেয়।
^~এটি নিজেই উত্থাপিত একটি সংখ্যা, এবং i.পরিসর [0, n) দেয় যেখানে n এর ইনপুট। @এই ফাংশন রচনা।
i.@^~ 2
0 1 2 3
#~ নিজেই একটি সংখ্যা অনুলিপি করে, যেমন
#~ 3
3 3 3
#:এর ডান যুক্তিকে তার বাম আর্গুমেন্ট হিসাবে প্রদত্ত অ্যারে দ্বারা নির্দিষ্ট বেসে রূপান্তর করে । অ্যারেতে অঙ্কের সংখ্যাটি সেই বেস আউটপুটে অঙ্কের সংখ্যার সাথে মিলে যায় (এবং আপনার একটি মিশ্র বেস থাকতে পারে) উদাহরণস্বরূপ,
3 3 3 #: 0
0 0 0
5 5 #: 120
4 0
NB. If you want 120 base 5 use #.inv
#.inv 120
4 4 0
সুতরাং, একসাথে, এটি বলেছে যে সমস্ত মান বেস n (যেখানে এনটি ইনপুট হয়) পর্যন্ত n ^ n পর্যন্ত কার্যকরভাবে আমাদের স্থানাঙ্কগুলি প্রদান করে।
(#~ #: i.@^~) 2
0 0
0 1
1 0
1 1
প্রতিটি জুটির মধ্যে দূরত্ব অর্জন করা
প্রথমে আমরা ডায়াড- /টেবিল এবং ~-ফ্লেক্সিভ ব্যবহার করে অন্য সবার সাথে প্রতিটি সমন্বয়ের পার্থক্য গ্রহণ করি। নোট করুন যে অর্ডারটি জোড়গুলির পক্ষে কোনও গুরুত্ব দেয় না: এটি নকল দূরত্ব তৈরি করে।
NB. 2 {. takes the first two elements (I'm omitting the rest).
2 {. -"1/~ (#~ #: i.@^~) 2
0 0
0 _1
_1 0
_1 _1
0 1
0 0
_1 1
_1 0
তারপরে আমরা +/&.:*:প্রতিটি ক্রাইন্ডেটে এই ক্রিয়াটি ব্যবহার করি (at "1, র্যাঙ্ক এক)। এই ক্রিয়াটি +/( &.:) বর্গ ( *:) এর অধীনে যোগফল ( )। অধীনে ডান ক্রিয়া প্রয়োগ করা হয় (বর্গ) তার ফলাফল সংগ্রহ করে এবং এটি বাম ক্রিয়া (যোগ) এর যুক্তি হিসাবে দেয়। এরপরে এটি ডান ক্রিয়াটির বিপরীত প্রয়োগ করে (যা স্কোয়ার রুট হবে)।
+/&.:*: 3 4
5
+/&.:*:"1 ([: -"1/~ #~ #: i.@^~) 2
0 1 1 1.41421
1 0 1.41421 1
1 1.41421 0 1
1.41421 1 1 0
আশ্চর্যজনকভাবে, অনেক দূরত্ব একই।
ইনপুট থেকে বড় বা সমান দূরত্ব গণনা করা
শেষ অংশটি দেখছে যে ইনপুটটি ব্যবহার করে দূরত্বটি তার চেয়ে বেশি বা সমান ]<:। তারপরে ফলাফলের +/^:_সমস্তগুলি সংখ্যার (সংখ্যার সমষ্টি পর্যন্ত) ব্যবহার করে সত্যবাদী মানের সংখ্যা গণনা করা হয়। তারপরে এই মানটি 2 দ্বারা বিভক্ত হয় ( 2%~, এখানে ~অর্থ প্রদত্ত যুক্তিগুলির ক্রমটি অদলবদল করা হয় %)। কারণ আমরা 2 দ্বারা বিভক্ত করতে পারেন কারণ প্রতিটি truthy পেয়ারিং জন্য, ফ্লিপ আদেশের জন্য অন্য একটি হতে হবে ব্যতীত পেয়ারিং যা নিজেই সঙ্গে সমন্বয় আছি। ' এটি ঠিক আছে, তবে যেহেতু এগুলি 0 এর দূরত্বের ফলস্বরূপ।