ওয়ালশ ম্যাট্রিক্স তৈরি করুন


22

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

ওয়ালশ ম্যাট্রিকের বৈশিষ্ট্য

মাত্রাগুলি ২. এর একই শক্তি Therefore সুতরাং, আমরা এখানে ম্যাট্রিকগুলিকে এখানে দু'জনের ঘোষক দ্বারা উল্লেখ করতে পারি W(0), তাদের কল করে W(1),, W(2)...

W(0)হিসাবে সংজ্ঞায়িত করা হয় [[1]]

জন্য n>0, W(n)দেখে মনে হচ্ছে:

[[W(n-1)  W(n-1)]
 [W(n-1) -W(n-1)]]

তাই W(1):

[[1  1]
 [1 -1]]

এবং W(2)হ'ল:

[[1  1  1  1]
 [1 -1  1 -1]
 [1  1 -1 -1]
 [1 -1 -1  1]]

প্যাটার্নটি অব্যাহত রয়েছে ...

তোমার কাজ

কোনও প্রোগ্রাম বা ফাংশন লিখুন যা কোনও পূর্ণসংখ্যার হিসাবে ইনপুট হিসাবে গ্রহণ করে এবং কোনও সুবিধাজনক বিন্যাসে nমুদ্রণ / ফেরত দেয় W(n)। এটি অ্যারেগুলির একটি অ্যারে, বুলেটিয়ানগুলির একটি সমতল অ্যারে, একটি .svgচিত্র হতে পারে, আপনি এটির নাম দিন, যতক্ষণ না এটি সঠিক।

স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

কয়েকটি জিনিস:

জন্য W(0), 1প্রয়োজন একবারে আবৃত করা হবে না। এটি নিছক পূর্ণসংখ্যা হতে পারে।

আপনাকে 1-সূচকের ফলাফলের অনুমতি দেওয়া W(1)হবে then তবে তা হবে [[1]]

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

0 -> [[1]]
1 -> [[1  1]
      [1 -1]]
2 -> [[1  1  1  1]
      [1 -1  1 -1]
      [1  1 -1 -1]
      [1 -1 -1  1]]
3 -> [[1  1  1  1  1  1  1  1]
      [1 -1  1 -1  1 -1  1 -1]
      [1  1 -1 -1  1  1 -1 -1]
      [1 -1 -1  1  1 -1 -1  1]
      [1  1  1  1 -1 -1 -1 -1]
      [1 -1  1 -1 -1  1 -1  1]
      [1  1 -1 -1 -1 -1  1  1]
      [1 -1 -1  1 -1  1  1 -1]]

8 -> Pastebin

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ত সমাধানটি জিতে যায়! শুভ গল্ফিং!



ফলাফলগুলি কি 1-সূচকযুক্ত হতে পারে? (যেমন W(1)রিটার্ন [[1]], W(2)রিটার্ন [[1,1],[1,-1]...)
লিও

@ লিও হ্যাঁ, তারা পারেন। সম্পাদনা করা হয়েছে
খুলদ্রেশেথ না'বাড়িয়া

উত্তর:


7

পার্ল 6 , 63 44 40 বাইট

{map {:3(.base(2))%2},[X+&] ^2**$_ xx 2}

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

নন-রিকার্সিভ অ্যাপ্রোচ, এক্স-ওয়্যার স্থানাঙ্কের মানটি এই সত্যটি ব্যবহার করে (-1)**popcount(x&y)। বুলিয়ান্সের সমতুল্য অ্যারে প্রদান করে।

-4 বাইটস xnor এর বিট প্যারিটি ট্রিককে ধন্যবাদ ।


10

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

W4YL

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

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

W       % Push 2 raised to (implicit) input
4YL     % (Walsh-)Hadamard matrix of that size. Display (implicit)

বিল্ট ইন ছাড়া: 11 বাইট

1i:"th1M_hv

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

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

প্রতিটি ওয়ালশ ম্যাট্রিক্স ডাব্লুয়ের জন্য , পরবর্তী ম্যাট্রিক্সকে [ W W ; হিসাবে গণনা করা হয় ; ডাব্লু - ডাব্লু ] চ্যালেঞ্জ হিসাবে বর্ণিত হয়েছে। কোডটি সেই nসময়গুলি করে, 1 × 1 ম্যাট্রিক্স [1] থেকে শুরু করে।

1       % Push 1. This is equivalent to the 1×1 matrix [1]
i:"     % Input n. Do the following n times
  t     %   Duplicate
  h     %   Concatenate horizontally
  1M    %   Push the inputs of the latest function call
  _     %   Negate
  h     %   Concatenate horizontally
  v     %   Concatenate vertically
        % End (implicit). Display (implicit)

2
উঘ ... এবং এখানে আমি ব্যবহার করার চেষ্টা করছি kron। ;)
বেকার 18

6

হাস্কেল , 57 56 বাইট

(iterate(\m->zipWith(++)(m++m)$m++(map(0-)<$>m))[[1]]!!)

এটি অনলাইন চেষ্টা করুন! এটি প্রদত্ত পুনরাবৃত্তি নির্মাণ কার্যকর করে imple

-1 বাইট ধন্যবাদ অর্জান জোহানসেনকে !


2
আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন (iterate(\m->zipWith(++)(m++m)$m++(map(0-)<$>m))[[1]]!!)
janর্জন জোহানসেন

5

বিল্টিন সহ অক্টাভ , 18 17 বাইট

@(x)hadamard(2^x)

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

বিল্টিন ছাড়াই অক্টাভ , 56 51 47 বাইট

function r=f(x)r=1;if x,r=[x=f(x-1) x;x -x];end

এটি অনলাইন চেষ্টা করুন! -4 এর জন্য লুইস মেন্ডোকে ধন্যবাদ ।

পুনরাবৃত্ত ল্যাম্বদা সহ অক্টেভ , 54 53 52 48 বাইট

f(f=@(f)@(x){@()[x=f(f)(x-1) x;x -x],1}{1+~x}())

এটি অনলাইন চেষ্টা করুন! ধন্যবাদ এই উত্তর এবং এই প্রশ্নের অনুপ্রেরণা জন্য।


যদি ফাংশনটি কোনও ফাইলে সংজ্ঞায়িত করা হয় তবে দ্বিতীয়টি endপ্রয়োজন হয় না। সুতরাং আপনি এটিকে টিআইওর শিরোনামে নিয়ে যেতে পারেন এবং এটি বাইট গণনা থেকে সরিয়ে ফেলতে পারেন
লুইস মেন্ডো


4

পাইথন 2 , 75 71 বাইট

r=range(2**input())
print[[int(bin(x&y),13)%2or-1for x in r]for y in r]

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

ওয়ালশ ম্যাট্রিক্স খারাপ সংখ্যার সাথে সম্পর্কিত বলে মনে হচ্ছে। যদি x&y(, bitwise এবং, 0-ভিত্তিক স্থানাঙ্ক) একজন মন্দ সংখ্যা, ম্যাট্রিক্স মধ্যে মান 1, -1ঘৃণ্য সংখ্যার জন্য। এই উত্তরের নুডল 9 এর মন্তব্য int(bin(n),13)%2থেকে বিট প্যারিটির গণনা নেওয়া হয়েছে ।


2
স্বজ্ঞাতভাবে, (x, y) এ চিহ্নটি যতবার পুনরাবৃত্তির স্তর রয়েছে ততবার উল্টানো হয়েছে যার উপর (x, y) (2 x k 2 2 ^ k) ম্যাট্রিক্সের নীচের ডান কোয়াড্রেন্টে রয়েছে, যা ঘটে যখন x এবং y উভয়েরই কে-থ্রি বিটে 1 থাকে। এই সত্যটি ব্যবহার করে, x&yসাইনটি কতবার উল্টাতে হবে তা নির্ধারণ করতে আমরা কেবল 1-বিটগুলি গণনা করতে পারি ।
লিন

4

আর , 61 56 53 50 বাইট

w=function(n)"if"(n,w(n-1)%x%matrix(1-2*!3:0,2),1)

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

ক্রোনেক্কার পণ্য দ্বারা পুনরাবৃত্তভাবে ম্যাট্রিক্স গণনা করে এবং এর জন্য 1 প্রদান করে n=0 করে (এটি উল্লেখ করার জন্য জিউস্প্পকে ধন্যবাদ, এবং প্রাথমিক সংস্করণটি গল্ফ করতে সহায়তা করার জন্য জেএডিকেও ধন্যবাদ)।

অতিরিক্ত -3 বাইট আবার জিউসেপিকে ধন্যবাদ জানায়।


ডান্নো যদি ফিরে আসার 1চেয়ে matrix(1)বৈধ হয় তবে এটি যদি আপনি এইটি গলফ করতে পারেন, এবং এখানে একটি 61 বাইট Reduceপদ্ধতিরও রয়েছে: চেষ্টা করে দেখুন!
জিউসেপে

আমি n=0মামলার ফর্ম্যাটটি সম্পর্কেও অনিশ্চিত , বেশিরভাগ অন্যান্য উত্তর এটিকে [[1]]
কিরিল এল।

1
আপনি প্রতিস্থাপন করতে পারেন matrix(1)সঙ্গে t(1)
জেএডি

1
প্রশ্ন সম্পাদনা করা হয়েছে। আপনি ম্যাট্রিক্সের পরিবর্তে পূর্ণসংখ্যা ফেরত দিতে পারেন।
খুলনায়সথ না'বাড়িয়া

1
1-2*!3:0c(1,1,1,-1)তিন বাইটের চেয়ে কম
জিউস্পে


2

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

n=>[...Array(1<<n)].map((_,i,a)=>a.map((_,j)=>1|-f(i&j)),f=n=>n&&n%2^f(n>>1))

সাদাসিধা হিসাব গ্রহণ করে আরম্ভ করা হয় 0 <= X, Y <= 2**Nমধ্যে W[N]। সাধারণ ক্ষেত্রে হয় যখন হয় হয় Xবা এর Yচেয়ে কম হয় 2**(N-1), এই ক্ষেত্রে আমরা পুনরাবৃত্তি করি X%2**(N-1)এবং Y%2**(N-1)। উভয়ের ক্ষেত্রে Xএবং Yকমপক্ষে 2**(N-1)পুনরাবৃত্ত কলটি উপেক্ষা করা দরকার।

তুলনা Xবা বিটমাস্কের Yচেয়ে কম যদি নেওয়া হয় তবে পুনরাবৃত্ত কলটি যখন প্রত্যাখ্যান করা উচিত এবং শূন্য হয় না তখন এটি শূন্য নয়। এটি মডুলো হ্রাস করতেও এড়ানো যায় ।2**(N-1)X&Y&2**(N-1)2**(N-1)

বিটগুলি অবশ্যই একই ফলাফলের জন্য বিপরীত ক্রমে পরীক্ষা করা যেতে পারে। তারপরে যতবার আমরা সমন্বয় করি ততবার বিটমাস্ক দ্বিগুণ না করে পরিবর্তে অর্ধেক করা যায়, ফলাফলগুলিকে XORed করা যায়, যার ফলে একটি চূড়ান্ত ফলাফলের 0অর্থ কোনও প্রত্যাখ্যান এবং 1মানে অবহেলা।



2

উম, দোভাষী কেন গিটহাবে নেই?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার আমি এই মুহুর্তে কোডটি খুব বেশি প্রকাশিত করতে পছন্দ করি না।
এনজিএন

এইচএম, আপনি কীভাবে এটি টিআইওতে যুক্ত করলেন?
এরিক আউটগল্ফার

@ এরিকথিউটগল্ফার আমি বিনীতভাবে জিজ্ঞাসা করেছি: টিআইও-তে ম্যাথমেটেমিকা, ডায়ালগ - এর অন্যান্য স্বত্বাধিকারী ভাষা রয়েছে।
এনজিএন

1

05 এ বি 1 ই , 16 বাইট

oFoL<N&b0м€g®smˆ

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

ব্যাখ্যা

oF                 # for N in 2**input do:
  oL<              # push range [1..2**input]-1
     N&            # bitwise AND with N
       b           # convert to binary
        0м         # remove zeroes
          €g       # length of each
            ®sm    # raise -1 to the power of each
               ˆ   # add to global array

আমি আশা করি আমি হামিং ওজন গণনার জন্য একটি ছোট উপায় জানতাম।
1δ¢˜হিসাবে একই দৈর্ঘ্য 0м€g


1

হুশ , 13 বাইট

!¡§z+DS+†_;;1

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

1-ইন্ডেক্স।

ব্যাখ্যা

!¡§z+DS+†_;;1
 ¡        ;;1    Iterate the following function starting from the matrix [[1]]
  §z+              Concatenate horizontally
     D               The matrix with its lines doubled
      S+†_           and the matrix concatenated vertically with its negation
!                Finally, return the result after as many iterations as specified
                 by the input (where the original matrix [[1]] is at index 1)



0

পাইথন 2 , 49 বাইট

অতিরিক্ত গ্রন্থাগার ব্যবহার করে কয়েকটি পদ্ধতির প্রদর্শন করা। এই স্কিপি একটি বিল্ট-ইন উপর নির্ভর করে:

lambda n:hadamard(2**n)
from scipy.linalg import*

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

পাইথন 2 , 65 বাইট

এবং এইটি কেবল নম্পি ব্যবহার করে এবং ক্রোনেকার পণ্য সমাধান করে, আমার আর উত্তর অনুসারে :

from numpy import*
w=lambda n:0**n or kron(w(n-1),[[1,1],[1,-1]])

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


0

স্ট্যাক্স , 20 বাইট

àΩ2┤â#╣_ê|ª⌐╦è│╞►═∞H

এটি চালান এবং এটি স্ট্যাক্সএল.এক্সজে ডিবাগ করুন!

ভেবেছিলাম আমি নিজের চ্যালেঞ্জটি কিছুক্ষণ পরে চেষ্টা করব। অ-পুনরাবৃত্তির পদ্ধতি অন্যান্য গল্ফিং ভাষার বিরুদ্ধে খুব বেশি প্রতিযোগিতামূলক নয় ...

প্যাকযুক্ত (24 বাইট) এবং ব্যাখ্যা

|2c{ci{ci|&:B|+|1p}a*d}*
|2                          Power of 2
  c                         Copy on the stack.
   {                  }     Block:
    c                         Copy on stack.
     i                        Push iteration index (starts at 0).
      {           }           Block:
       ci                       Copy top of stack. Push iteration index.
         |&                     Bitwise and
           :B                   To binary digits
             |+                 Sum
               |1               Power of -1
                 p              Pop and print
                   a          Move third element (2^n) to top...
                    *         And execute block that many times.
                     d        Pop and discard
                       *    Execute block (2^n) times
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.