পাওলি ম্যাট্রিকেসকে গুণ করুন


12

পাউলি ম্যাট্রিক্স 2x2 ম্যাট্রিক্স যা কোয়ান্টাম পদার্থবিদ্যা খুব সাধারণভাবে প্রদর্শিত একটি সেট আছে (কোন, আপনি এই চ্যালেঞ্জ জন্য কোন কোয়ান্টাম পদার্থবিদ্যা জানা প্রয়োজন করবেন না)। আমরা যদি সেটে পরিচয়টি অন্তর্ভুক্ত করি তবে চারটি ম্যাট্রিক হ'ল:

 σ0 =      σ1 =      σ2 =      σ3 = 
[1  0]    [0  1]    [0 -i]    [1  0]
[0  1]    [1  0]    [i  0]    [0 -1]

গুন এই দুই সবসময় আরেকটি পাউলি ম্যাট্রিক্স দেব যদিও এটি জটিল পর্যায়ের এক দ্বারা গুন করা যেতে পারে 1, i, -1, -i। উদাহরণস্বরূপ ,।σ1σ3 = -iσ2

আপনার কাজটি হ'ল কয়েকটি পাওলি ম্যাট্রিক্সকে গুণ করা এবং ফলস্বরূপ ম্যাট্রিক্স এবং ফেজটি ফিরে আসা। ইনপুট সংখ্যা একটি খালি স্ট্রিং হিসেবে দেওয়া হবে 0করার 3ম্যাট্রিক্স প্রতিনিধিত্বমূলক করতে । ফলাফলটি ম্যাট্রিক্সের জন্য একক অঙ্কযুক্ত আউটপুটটি স্ট্রিং হওয়া উচিত, optionচ্ছিকভাবে পূর্বে , বা পর্বটি ( এর জন্য ) নির্দেশ করতে ।σ0σ3i--i--1

আপনি STDIN (বা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

আপনার অবশ্যই পাওলি ম্যাট্রিক্স সম্পর্কিত কোনও অন্তর্নির্মিত (বা তৃতীয় পক্ষের) বৈশিষ্ট্য ব্যবহার করা উচিত নয়।

এটি কোড গল্ফ, সংক্ষিপ্ত উত্তর (বাইটে) জিতেছে।

পরীক্ষার কেস

1 => 1
13 => -i2
000 => 0
123 => i0
03022 => 3
02132230 => -i3
1320130100032 => i2
311220321030322113103 => -2
0223202330203313021301011023230323 => -i0
1323130203022111323321112122313213130330103202032222223 => -1

3
আমি বিমূর্ত-বীজগণিত ট্যাগ যুক্ত করেছি কারণ এটি মূলত সাধারণ চতুষ্কোণ গ্রুপের শব্দের সরলকরণের জন্য জিজ্ঞাসা করছে ।
পিটার টেলর

উত্তর:


3

পাইথ, 47 বাইট

আমার ধারণা এটি এখনও গল্ফযোগ্য। তবে এটি সিজেমকে অনেকটা পরাজিত করে।

p.U&-=T*q3l{[0bZ)^_1%-Zb3xbZmvdz@+c"i - -i")khT

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

ব্যাখ্যা

ফলাফলের ম্যাট্রিক্স প্রকারটি নির্ধারণ করা সমস্ত সংখ্যাগুলিকে সহজভাবে জোর করে।

2 ম্যাট্রিক্স গুন যদিও A*B,, ফেজ পরিবর্তন যদি ম্যাট্রিক্সের অ হয় σ0এবং A != B

                                                 implicit: T=10, z=input string
                            mvdz                 evaluate each char of the input 
 .U                                              reduce: b=first value, for Y in mvdz[1:]
    -=T                                            T -= ...
        q3l{[0bZ)                                     (3 == len(set([0,b,Z])))
       *         ^_1%-Zb3                             * (-1)^((Z-b)%3)
   &                                               and
                         xbY                       update b by (b xor Y)
                                 +c"i - -i")k    the list ["i", "-", "-i", ""]
                                @            hT  take the element at index T+1 (modulo wrapping)
p                                                print phase and matrix

অবশ্যই আমি 44 আছে যদি আমি একই অ্যালগরিদম ব্যবহার করি যা মূলত এসপি 300 এর।
অপ্টিমাইজার

9

পাইথন 2, 108 89 87 86 বাইট

x=y=0
for m in map(int,raw_input()):x+=m*y and(m-y)%3*3/2;y^=m
print"--i"[~x%4::2]+`y`

(সহায়তার জন্য @grc এবং @ xnor কে ধন্যবাদ)

ব্যাখ্যা

এর সহগ এবং বেস ম্যাট্রিক্স বিভক্ত করা যাক। আমরা যদি বেস ম্যাট্রিক্স উপর ফোকাস শুধুমাত্র, আমরা (যেমন এই গুণ টেবিল পেতে 13হয় -i2, তাই আমরা করা 2):

  0123

0 0123
1 1032
2 2301
3 3210

যা কেবল বিটওয়াইজ জোর করার মতো একই জিনিস হতে পারে।

এখন চলুন সহগের উপর ফোকাস করা যাক। যদি আমরা যথাক্রমে 0123চিহ্নিত করতে 1,i,-1,-iপারি, আমরা পাই:

  0123

0 0000
1 0031
2 0103
3 0310

এর জন্য আমরা প্রথমে m*yবাম কলাম এবং উপরের সারিটি যত্ন করে, সংখ্যাটি 0 হয় কিনা তা যাচাই করে দেখি । (m-y)%3তারপরে যোগ করা দেয়:

  0123

0 0000
1 0021
2 0102
3 0210

যা পাসে ছাড়া আমরা আছে 2পরিবর্তে 3। আমরা সম্পাদন করে এই জন্য অ্যাকাউন্ট *3/2

সূচকের জন্য, আমরা লক্ষ্য করেছি যে আমরা স্ট্রিংটি নিলে "--i"এবং সূচকগুলি থেকে শুরু করে প্রতিটি দ্বিতীয় অক্ষর নির্বাচন 0123করি "-i","-","i",""


সুন্দর স্ট্রিং স্লাইসিং, আমি এই সম্পর্কে ভুলে গিয়েছিলাম । আমি আপনি কি করতে পারেন বিশ্বাস 3-n%4যেমন ~n%4। আমি সন্দেহ করি আপনি m*y and(m-y)%3*3/2যাদু স্ট্রিংয়ে সংক্ষিপ্ত প্রকাশ করতে পারেন তবে আমার প্রথম প্রচেষ্টাটি 877449216>>2*m+8*yকেবল বাঁধা tied একটি সুন্দর বীজগণিত সূত্রও আছে, যদি Y=m^yতা প্রকাশ হয় (m-y)*(y-Y)*(Y-m)/2তবে তা দীর্ঘ।
xnor

@ এক্সনর ওহ ~, দুর্দান্ত - অফ-বাই-ওয়ান আমাকে বিরক্ত করছিল: / আমি খুব নিশ্চিত যে m*y and(m-y)%3*3/2খুব ছোট করা যায়, তবে আমি সারা রাত কাটিয়েছি এবং কোথাও পাইনি ... আমি যদি ফিরে আসি তবে সময় আছে. সম্ভবত আমার স্বাধীনতা 4 মডেলটি সাহায্য করতে পারে।
Sp3000

6

রেটিনা , 77 বাইট

আমি ভেবেছিলাম আমি একটি নতুন রেটিনা বৈশিষ্ট্যটি দেখানোর জন্য এই সুযোগটি ব্যবহার করব: মাল্টি-স্টেজ লুপগুলি। এটি বেশিরভাগ কাজ সংক্ষিপ্ত করা উচিত (বিশেষত শর্তসাপেক্ষে প্রতিস্থাপন)।

ii
-
+`(.)\1|0

(.)-|(\d)(\d)
-$1$3$2
12
i3
23
i1
31
i2
)`(\d)i
i$1
^\D*$
$&0

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

-sকমান্ড-লাইন সুইচ সহ আপনি উত্স ফাইল হিসাবে সরাসরি উপরেরটি ব্যবহার করতে পারেন । তবে, আমি স্যুইচটি গণনা করছি না, কারণ আপনি প্রতিটি লাইনকে একটি পৃথক ফাইলে সন্নিবেশ করতে পারেন (তারপরে আপনি নতুন লাইনের জন্য 15 বাইট হারাবেন, তবে অতিরিক্ত ফাইলগুলির জন্য +15 যোগ করুন)।

ব্যাখ্যা

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

পৃথক পর্যায়গুলি এখানে যা করে তা এখানে:

ii
-

পর্যায়ের অক্ষরগুলি হ্রাস করতে সমস্ত জোড়া iএকত্রিত -করে।

+`(.)\1|0
<empty>

এখন যদি পর পর দু'টি অভিন্ন অক্ষর বাকী থাকে তবে তা হয় --দু'টি অভিন্ন ম্যাট্রিক। উভয় ক্ষেত্রেই এগুলি গুণ করে পরিচয় দেয়। তবে আমাদের পরিচয়ের দরকার নেই, তাই আমরা কেবল তাদের সমস্তটি এবং স্পষ্টত পরিচয়ও 0গুলি মুছে ফেলি । +ফল পরিবর্তন বন্ধ হওয়া অবধি এই পর্যায়ে নিজেই পুনরাবৃত্তি হয় । এটি নিশ্চিত করে যে বিষয়গুলি 123321সম্পূর্ণরূপে সমাধান করা যায়, যেমন পরবর্তী পদক্ষেপটি ধরে নিতে পারে যে সমস্ত জোড়া অঙ্ক পৃথক পৃথক।

(.)-|(\d)(\d)
-$1$3$2

এটি আসলে একটিতে (দুটি গল্ফিউডের জন্য) দুটি পৃথক রূপান্তরকেন্দ্র। মনে রাখবেন যে প্রথম বিকল্পের ম্যাচগুলি যদি হয়, $2এবং $3খালি থাকে এবং দ্বিতীয়টি ম্যাচ $1খালি থাকে। সুতরাং এই দুটি পদক্ষেপের মধ্যে এটি পচে যেতে পারে:

(\d)(\d)
-$2$1

এটি কেবল সমস্ত সংখ্যার অদলবদল করে এবং একটি বিয়োগ চিহ্ন যোগ করে। যেহেতু আমরা সব মুছে 0s এবং সব অভিন্ন জোড়া, এই শুধুমাত্র ম্যাচ হবে 12, 23, 31, 21, 32, 13। এই পদক্ষেপটি অদ্ভুত বলে মনে হতে পারে তবে এটি পরে এই ক্ষেত্রেগুলির অর্ধেকের জন্য কেবল আমাকে চেক করার অনুমতি দেয়, কারণ আমি যেগুলি পরে প্রক্রিয়া করতে পারি না তা পরবর্তী পুনরাবৃত্তিতে এখানে অদলবদল করা হবে।

উপরের পর্যায়ের অন্য অংশটি ছিল:

(.)-
-$1

এটি ধীরে ধীরে -সমস্ত দিকে বাম দিকে চিহ্নগুলি সরিয়ে নিয়ে যায় (পুনরাবৃত্তির জন্য একটি অবস্থান)। আমি এটি এমন করি যা শেষ পর্যন্ত তারা একে অপরের পাশে থাকে এবং পূর্বের পদক্ষেপে সমাধান হয় resolved

12
i3
23
i1
31
i2

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

)`(\d)i
i$1

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

^\D*$
$&0

চূড়ান্ত পদক্ষেপ (লুপের বাইরে)। মনে রাখবেন যে আমরা সবসময় সমস্ত পরিচয় মুছে দিয়েছি, সুতরাং ফলাফলটি যদি আসলে পরিচয় হয় (একটি পর্বের বার), তবে আউটপুটে আমাদের আর প্রয়োজনীয় অঙ্ক থাকবে না, তাই আমরা এটিকে আবার যুক্ত করব।

উদাহরণস্বরূপ, এখানে সমস্ত মধ্যবর্তী ফর্ম 0223202330203313021301011023230323(স্কিপিং স্টেজ যা কোনও পরিবর্তন করে না) এখানে রয়েছে:

0223202330203313021301011023230323

321321312        # Remove identities
-23-31-12-132    # Swap all pairs
-23-31-i3-132    # Resolve 12
-i1-31-i3-132    # Resolve 23
-i1-i2-i3-132    # Resolve 31
-i-1i-2i-3-312   # Move - to the left and swap pairs
-i-1i-2i-3-3i3   # Resolve 12
-i-i1-i2-3-i33   # Move i to the left
-i-i1-i2-3-i     # Remove identities
--ii-1i-2-3i     # Move - to the left
--ii-i1-2-i3     # Move i to the left
----i1-2-i3      # Resolve ii
i1-2-i3          # Remove identities
i-1-2i3          # Move - to the left
i-1-i23          # Move i to the left
-i-1i-32         # Move - to the left and swap pairs
-i-i1-32         # Move i to the left
--ii-1-23        # Move - to the left and swap pairs
--ii-1-i1        # Resolve 23
----1-i1         # Resolve ii
1-i1             # Remove identities
-1i1             # Move - to the left
-i11             # Move i to the left
-i               # Remove identities. Now the loop can't change this any longer.
-i0              # Fix the result by adding in the 0.

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