একটি ভেক্টরকে স্বাভাবিক করুন


28

কোনও ভেক্টরকে স্বাভাবিক করার জন্য এটি দিকটি ধারাবাহিকভাবে বজায় রেখে 1 ( একটি ইউনিট ভেক্টর ) এর দৈর্ঘ্যে স্কেল করা হয় ।

উদাহরণস্বরূপ, যদি আমরা, 3 উপাদান সঙ্গে একটি ভেক্টর স্বাভাবিক চেয়েছিলেন তোমার দর্শন লগ করা , তাই আমরা প্রথমেই তার দৈর্ঘ্য এটি হবে:

| তোমার দর্শন লগ করা | = স্কয়ার্ট (ইউ এক্স 2 + ইউ 2 + ইউ জেড 2 )

... এবং তারপরে দৈর্ঘ্য 1 ভেক্টর পেতে প্রতিটি মানকে এই মান দিয়ে স্কেল করুন।

û = ইউ ÷ | ইউ |


চ্যালেঞ্জ

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

[20]           -> [1]
[-5]           -> [-1]
[-3, 0]        -> [-1, 0]
[5.5, 6, -3.5] -> [0.62, 0.68, -0.40]
[3, 4, -5, -6] -> [0.32, 0.43, -0.54, -0.65]
[0, 0, 5, 0]   -> [0, 0, 1, 0]

নিয়মাবলী:

  • আপনি ইনপুট তালিকাটি ধরে নিতে পারেন:
    • কমপক্ষে একটি অ-শূন্য উপাদান রাখুন
    • কেবলমাত্র আপনার ভাষার স্ট্যান্ডিং ভাসমান পয়েন্টের পরিসরের মধ্যে সংখ্যাগুলি থাকে
  • আপনার আউটপুট কমপক্ষে দুটি দশমিক জায়গায় সঠিক হওয়া উচিত । "অসীম নির্ভুলতা" ভগ্নাংশ / প্রতীকী মানগুলিও প্রত্যাবর্তনের অনুমতি দেওয়া হয়, যদি আপনার ভাষাটি এভাবে অভ্যন্তরীণভাবে ডেটা সঞ্চয় করে।
  • জমাগুলি হয় পুরো প্রোগ্রাম হতে হবে যা I / O সম্পাদন করে বা কোনও ফাংশন function ফাংশন সাবমিশনগুলি হয় একটি নতুন তালিকা ফিরিয়ে দিতে পারে, বা প্রদত্ত তালিকাকে স্থান পরিবর্তন করতে পারে।
  • বিল্টিন ভেক্টর ফাংশন / ক্লাস অনুমোদিত। তদ্ব্যতীত, যদি আপনার ভাষাতে একটি ভেক্টর প্রকার থাকে যা নির্বিচারে সংখ্যক মাত্রাকে সমর্থন করে, আপনি এর মধ্যে একটিকে ইনপুট হিসাবে নিতে পারেন।

এটি একটি প্রতিযোগিতা, সুতরাং আপনার পক্ষে সবচেয়ে সংক্ষিপ্ত সমাধানটি অর্জন করা (বাইটে) লক্ষ্য করা উচিত।


প্রতিটি সম্ভাব্য ইনপুট (যা কোনও আদর্শ ধরণের ভাসমান পয়েন্টের মানগুলির পক্ষে সম্ভব নয়) বা কেবলমাত্র আপনি সরবরাহ করেন তার উদাহরণগুলির জন্য কি কমপক্ষে দুটি দশমিক স্থান থাকতে হবে? উদাহরণস্বরূপ স্টিডিবক্সের উত্তরটি আপনার সমস্ত পরীক্ষার জন্য 2 দশমিক যথাযথ স্থান সরবরাহ করে তবে তিনি স্কোয়ারের যোগফলের জন্য ইনট ব্যবহার করেন যা অবশ্যই প্রায় সমস্ত ইনপুটগুলির জন্য ব্যর্থ হয় (যেমন [0.1, 0.1])।
ক্রিস্টোফ

... এখন আমরা কেবলমাত্র একটি
চরে

ক্রিসটফের প্রতিটি সম্ভাব্য ইনপুটটির জন্য কমপক্ষে 2 ডিপি করা উচিত
ফ্লিপট্যাক

@ ফ্লিপট্যাক তবে এটি মূলত সমস্ত ভাষাগুলিকেই বাতিল করে দেয় কারণ ভাসমান পয়েন্টগুলিতে ম্যান্টিসার চেয়ে আরও বেশি এক্সপোশন থাকে যার অর্থ তাদের কাছে কোনও দশমিক স্থান থাকার মতো যথাযথ নির্ভুলতা সবসময় থাকে না।
ক্রিস্টোফ

কেন চতুর্থ উদাহরণে 6 এবং 5-এ যথাক্রমে 1 এবং -1 এ স্বাভাবিক হয় না?
মাস্তে

উত্তর:



10

জাভাস্ক্রিপ্ট (ES6), 31 বাইট

a=>a.map(n=>n/Math.hypot(...a))

পরীক্ষার মামলা



9

দৈর্ঘ্য পাওয়ার উপায় পছন্দ করুন।
কোল

1
@ কোল 1 লম্বা বাইট:%1%:@#.*:
ফ্রাউনফ্রগ

6
আপনি দয়া করে জে অবিচ্ছিন্ন জন্য একটি ব্যাখ্যা যোগ করতে পারেন?
MechMK1

% (দ্বারা বিভাজন) + / (যোগফল) & .: (আওতাধীন) *: (বর্গ)। + দুটি জিনিস যোগফল। + / একটি জিনিসের তালিকা যোগ করে। & .: নিম্নলিখিত ক্রিয়াকলাপটি প্রথমে প্রয়োগ করার পরে এবং তার বিপরীতটি পরে সংশোধন করে operation % সাধারণত দুটি আর্গুমেন্ট নেয় তবে (% f) x থেকে x% (fx) পর্যন্ত একটি ফাংশন। বেশিরভাগ অপারেটর স্বয়ংক্রিয়ভাবে তালিকায় কাজ করে।
রোমান ওডাইস্কি

এবং একই নীতি অনুসারে, ফাংশন যা ভেক্টরকে "সাধারণীকরণ" করে প্রতিটি উপাদানগুলিতে শূন্যের সমান এমন একটি সংখ্যার যোগ করে এটি "- + /% #" হয়।
রোমান ওডাইস্কি

8

জেলি , 5 3 বাইট

÷ÆḊ

এটি অনলাইন চেষ্টা করুন! , বা পরীক্ষার স্যুটটি দেখুন

মাইল 2 বাইট সংরক্ষিত!


3 বাইট÷ÆḊ
মাইল

@ মাইলস হু, এই বিল্টিন সম্পর্কে কখনও জানতেন না। ধন্যবাদ
কেয়ারড coinheringaahing

দুর্ভাগ্যক্রমে যে বিল্ট-ইন টিআইও প্রতি স্কেলারদের জন্য + Ve মোড দেয় যেমন উদাহরণস্বরূপ পরম মানের .. সমস্যাটি সাইন রাখার জন্য অনুরোধ করা হয়েছিল
জয়প্রিচ


6

সি,  73  70 বাইট

একটি বাইট সংরক্ষণ করার জন্য @ ক্রিসটফকে ধন্যবাদ!

s,i;f(v,n)float*v;{for(s=0;i++<n;)s+=*v**v++;for(;--i;)*--v/=sqrt(s);}

এটি অনলাইন চেষ্টা করুন!


+1 টি। s=0,i=0এর পরিবর্তে একটি s=i=0সংরক্ষণ করুন
xnoetux

আমি এর ব্যবহার পছন্দ করি s[-i]তবে দুঃখের *--v/=sqrt(s);সাথে 1 বাইট কম হয়।
ক্রিস্টোফ

1
@ এক্সানোয়েটক্স ধন্যবাদ, তবে ফাংশনের অভ্যন্তরে আমার ভেরিয়েবলগুলি সূচনা করতে হবে , কারণ ফাংশনগুলি পুনরায় ব্যবহারযোগ্য হওয়া দরকার । এছাড়াও গ্লোবাল ভেরিয়েবল হিসাবে sএবং iস্বয়ংক্রিয়ভাবে i0 এ
আর্কিটাইজ

1
ক্রিস্টফ ধন্যবাদ! আমি প্রথমে ফাংশন থেকে মানগুলি মুদ্রণ করছিলাম, সুতরাং আমার v[-i]সঠিক ক্রমে মানগুলি পাওয়া দরকার ।
স্টেডিবক্স




3

টিআই-বেসিক, 6 বাইট

Ans/√(sum(Ans2

সাথে চালান {1,2,3}:prgmNAME, যেখানে {1,2,3}ভেক্টরটি স্বাভাবিক করা হবে।

ভেক্টরের প্রতিটি উপাদানকে তার উপাদানগুলির বর্গের যোগফলের বর্গমূল দিয়ে ভাগ করে।


আমরা একই উত্তর পেয়েছি!
kamoroso94

@ কামোরসো94 উফফফফ! আমি এই পোস্ট করার সময় আপনার দেখা হয়নি। আপনি যদি নিজের উত্তরে এর থেকে ব্যাখ্যাটি যুক্ত করতে চান তবে আমি এটি মুছে ফেলব।
পিজ্জাপ্যান্টস 184

না আমি শুধু আমার সরিয়ে ফেলব। আপনি আপনার উত্তরের জন্য আরও চেষ্টা করেছেন: পি
কামোরোসো94



2

এমএটিএল , 5 বাইট

t2&|/

এটি অনলাইন চেষ্টা করুন!

আমি এটির পক্ষে সবচেয়ে সংক্ষিপ্ততম উপায় এটি সম্পূর্ণরূপে নিশ্চিত নই way প্রথমত, আমরা ইনপুট নকল, তারপর দ্বিতীয় আউটপুট প্রকার নির্বাচন |(যা পারেন হয় abs, normবা determinant)। অবশেষে, আমরা ইনপুটটি আদর্শ অনুসারে ভাগ করব।

7 বাইটের বিকল্প:

t2^sX^/




2

সি ++ (জিসিসি), 70 বাইট

দ্বারা ইনপুট std::valarray<float>। মূল ভেক্টরকে ওভাররাইট করে।

#import<valarray>
int f(std::valarray<float>&a){a/=sqrt((a*a).sum());}

এটি অনলাইন চেষ্টা করুন!


আমি এখনই কোডগল্ফকে লুকিয়ে রাখছি, তবে এটি কি "অবৈতনিক" মাইক্রোসফ্ট নির্দিষ্ট এক্সটেনশন, দেওয়া এই অবৈধ সি ++ নয়?
ফ্রেসেল

@ ফ্রেসনেল #importকমপক্ষে জিসিসি, কলং এবং মিনজিডাব্লুয়ের সাথেও কাজ করে। তবে, হ্যাঁ, এটি স্ট্যান্ডার্ড সি ++ নয়।
স্টেডিবক্স

@ ফ্রেসনেল আমি জিসিসি নির্দিষ্ট করতে ভুলে গেছি। সংশোধন করা হয়েছে।
কোলেরা সু


2

এপিএল (ডায়ালগ) , 13 12 10 বাইট

@ অ্যাডমকে ধন্যবাদ 1 বাইট সংরক্ষিত

2 বাইট সংরক্ষণ করেছেন @ ধন্যবাদ

⊢÷.5*⍨+.×⍨

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

  ÷  .5*⍨  +.  ×⍨
u  ÷       Σ   u²

কম ট্রেন:⊢÷.5*⍨(+/×⍨)
22

@ আদম অনেক ধন্যবাদ! আমি কয়েক ঘন্টা চেষ্টা করেছি, কোনও ট্রেনই কাজ করতে পেলাম না
উরিল

আমাদের এটি সম্পর্কে কিছু করা উচিত, কারণ এটি আসলে এতটা কঠিন নয়। যখন আপনার একটি monadic ফাংশন আছে (ডানদিকের এক ব্যতীত অন্য), তার বামে একটি বন্ধনী শুরু করুন (বা এটি উত্পন্ন না হলে একটি ব্যবহার করুন )। , অন্য যে শুধু swap 'র এবং জন্য এবং : {⍵÷.5*⍨+/×⍨⍵}{⍵÷.5*⍨(+/(×⍨⍵))}⊢÷.5*⍨(+/(×⍨⊢))⊢÷.5*⍨(+/(×⍨))⊢÷.5*⍨(+/×⍨)
আদম

(+/×⍨)->+.×⍨
এনজিএন


1

সি # (.নেট কোর) , 51 + 64 = 115 বাইট

v=>v.Select(d=>d/Math.Sqrt(v.Select(x=>x*x).Sum()))

এটি অনলাইন চেষ্টা করুন!

জন্য +64 বাইট using System;using System.Collections.Generic;using System.Linq;

সি # (.নেট কোর) , 94 + 13 = 107 বাইট

v=>{var m=0d;foreach(var x in v)m+=x*x;for(int i=0;i<v.Length;)v[i++]/=Math.Sqrt(m);return v;}

এটি অনলাইন চেষ্টা করুন!

জন্য +13 বাইট using System;

নন-লিংক পদ্ধতির

DeGolfed

v=>{
    var m=0d;
    foreach (var x in v)
        m+=x*x;

    for (int i=0; i < v.Length;)
        v[i++] /= Math.Sqrt(m);

    return v;
}


1

পিপ , 10 বাইট

কোডের 9 টি বাইট, -pপতাকার জন্য +1 ।

g/RT$+g*g

ভেক্টরকে পৃথক কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে। এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

      g*g  Arglist, multiplied by itself itemwise
    $+     Sum
  RT       Square root
g/         Divide arglist itemwise by that scalar
           Result is autoprinted (-p flag to format as list)

1

পাইথ, 5 বাইট

cR.aQ

এটি অনলাইনে ব্যবহার করে দেখুন: টেস্ট স্যুট

ব্যাখ্যা:

cR.aQQ   implicit Q at the end
c        divide
 R   Q   each element of the input
  .aQ    by the L2 norm of the input vector


1

রুবি, 39 35 বাইট

->v{v.map{|x|x/v.sum{|x|x*x}**0.5}}

-4 বাইটস ধন্যবাদ জি বি।


1
ব্যবহার করে কিছু বাইট সংরক্ষণ sum{...}পরিবর্তেmap{...}.sum
গিগাবাইট

0

এপিএল NARS 12 অক্ষর

f←{⍵÷√+/⍵*2}

আপনাকে f← আপনার বাইট গণনাতে গুনতে হবে না, যেহেতু আপনি এটি ছাড়া ডিফএন ব্যবহার করতে পারেন। যাইহোক, NARS এ একটি একক বাইট হয়? আমি এর সাথে পরিচিত নই, তাই কেবল জিজ্ঞাসা করছি
উরিল

ইউরিল নারস এপিকে আমি জানি যে কয়েকটা আমি ইউনিকোড দিয়ে লিখতে পারি তাই বাইটের সংখ্যা 12x2 হওয়া উচিত
রোজলুপি

0

গুগল শিটস, 65 বাইট

=ArrayFormula(TextJoin(",",1,If(A:A="","",A:A/Sqrt(Sumsq(A:A)))))

ইনপুট তালিকাটি Aপ্রতি কক্ষে একটি করে প্রবেশ সহ কলামে রয়েছে। এইভাবে স্প্রেডশীটগুলি সাধারণত তালিকা ব্যবহার করবে। দুর্ভাগ্যক্রমে, এটি সাধারণত ,0,0,0,0,0,....শেষে একটি দীর্ঘ তালিকাতে ফলাফল দেয় তাই আমাদের If Blank then Blank else Mathযুক্তিযুক্তদের এড়িয়ে চলতে হবে ।

যদি এটি সমস্ত কক্ষে থাকে তবে পরিবর্তে, সমাধানটি 95 বাইট হত:

=ArrayFormula(TextJoin(",",1,If(Split(A1,",")="","",Split(A1,",")/Sqrt(Sumsq(Split(A1,","))))))

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