বেস -1 + i এ যোগ করা


64

গসিয়ান পূর্ণসংখ্যার ফর্ম জটিল সংখ্যা a+biযেখানে aএবং bউভয় পূর্ণসংখ্যা। বেস -1 + i তে, সমস্ত গসিয়ান পূর্ণসংখ্যাগুলি অঙ্কগুলি ব্যবহার করে 0এবং 1চিহ্ন চিহ্ন বোঝাতে কোনও চিহ্নের প্রয়োজন ছাড়াই স্বতন্ত্রভাবে উপস্থাপিত হতে পারে ।

উদাহরণস্বরূপ, 1100বেস -1 + এ আমি দশমিক সংখ্যা 2 উপস্থাপন করে, যেহেতু

1*(-1+i)^3 + 1*(-1+i)^2 + 0*(-1+i)^1 + 0*(-1+i)^0
= (2+2i) + (-2i) + 0 + 0
= 2

অঙ্কগুলি ব্যবহার করে উপস্থাপনের বেস -1 + i এ দুটি গাউসিয়ান পূর্ণসংখ্যা হবে 01। এটি নিম্নলিখিত ফর্মগুলির মধ্যে একটি নিতে পারে:

  • দুটি পৃথক অঙ্কের স্ট্রিং,
  • 01বেস -1 + i সংখ্যা উপস্থাপন করে দুটি দশমিক পূর্ণসংখ্যার (উদাহরণস্বরূপ 1100বেস -1 + i তে 2 এর জন্য),
  • বেস -1 + i সংখ্যাগুলি উপস্থাপন করে দুটি বাইনারি পূর্ণসংখ্যা (উদাহরণস্বরূপ দশমিক 12বা 0b1100বেস -1 + i এ 2 এর জন্য)
  • একটি একক স্ট্রিং দুটি অংকের স্ট্রিং / বাইনারি পূর্ণসংখ্যাকে একক অ অ্যালফানামুরিক বিভাজক দ্বারা পৃথক করে (যেমন 1100 1100বা 12,122 + 2 এর জন্য)

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

আপনার ফাংশন বা প্রোগ্রামটি প্রতিটি সর্বাধিক 30 টি সংখ্যার ইনপুটগুলির জন্য 2 সেকেন্ডের মধ্যে শেষ করতে হবে।

অতিরিক্ত স্পষ্টতা

  • আপনি ধরে নিতে পারেন ইনপুটটিতে কোনও বহিরাগত নেতৃস্থানীয় শূন্য নেই। 0 এর বিশেষ ক্ষেত্রে, আপনি 0উপস্থাপনা হিসাবে বা হয় ফাঁকা স্ট্রিং বেছে নিতে পারেন ।

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

0, 0 => 0                                      # 0 + 0 = 0
0, 1 => 1                                      # 0 + 1 = 1
1, 1 => 1100                                   # 1 + 1 = 2
1100, 1100 => 111010000                        # 2 + 2 = 4
1101, 1101 => 111011100                        # 3 + 3 = 6
110111001100, 1110011011100 => 0               # 42 + (-42) = 0
11, 111 => 0                                   # i + (-i) = 0
11, 110 => 11101                               # i + (-1-i) = -1
10101, 11011 => 10010                          # (-3-2i) + (-2+3i) = (-5+i)
1010100101, 111101 => 1110100000100            # (-19+2i) + (3-4i) = (-16-2i)

দীর্ঘ পরীক্ষার কেস:

11011011010110101110010001001, 111100010100101001001010010101 => 0
111111111111111111111111111111, 111111111111111111111111111111 => 100100100100100100100100100100
101101110111011101110111011101, 101101110111011101110111011101 => 11101001010001000100010001000100011100
100100010101001101010110101010, 100010011101001011111110101000 => 110000110010101100001100111100010

কোনও অঙ্কের তালিকা নেই?
ক্যালকুলেটরফলাইন

@ কেটস আরেফ্লুফি কোন অঙ্কের তালিকা নেই, দুঃখিত।
Sp3000

96
আপনি পরিবর্তন করে এক বাইট সংরক্ষণ করতে পারবেন -1+iকরার i-1শিরোনামে।
mbomb007

1
এখন আমাদের চারপাশে অন্য রূপান্তর দরকার। : পি
আর

3
বিশ্বে 1100 ধরণের লোক রয়েছে। যারা বাইনারি বোঝে, যারা তা বোঝেন না, যারা এটিকে তিনটি দিয়ে বিভ্রান্ত করেন, যারা এটিকে বেস 4 দিয়ে বিভ্রান্ত করেন, যারা এটি বেস 5 এর সাথে বিভ্রান্ত করেন, যারা এটি বেস -1 + i এর সাথে বিভ্রান্ত করেন তাদের সাথে 6 বেস, যারা এটি বেস 7 এর সাথে বিভ্রান্ত করেছে, যারা এটি 8 টি বেস দিয়ে বিভ্রান্ত করেছে, যারা এটি 9 বেসকে বিভ্রান্ত করছে ...
wizzwizz4

উত্তর:


42

পাইথন 2, 98 97 91 84 বাইট

s=input();L=1
for _ in`s`*8:s+=1098*int(str(s).translate('0011'*64));L*=10
print s%L

এটি দশমিক ক্ষেত্রে I / O করে। পূর্ণসংখ্যার অ-অক্ষরীয় অক্ষর দ্বারা পৃথক করতে হবে +

2x বাইট বন্ধ করে গল্ফ করার জন্য @ এক্সনরকে ধন্যবাদ!

আইডিয়নে চেষ্টা করে দেখুন ।

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

ইন কমপ্লেক্স ঘাঁটি মধ্যে পাটিগণিত , লেখক ফর্মের ঘাঁটি যোগ এবং সংখ্যাবৃদ্ধি কিভাবে জটিল সংখ্যার দেখায় -n + I

বেস -1 + i এর জন্য দুটি পার্থক্য সহ ক্যারি সহ নিয়মিত, বাইনারি সংযোজনের সাথে একইভাবে সংযোজন করা হয়:

  • 1 পরবর্তী উচ্চ অবস্থানে 1 বহন করার পরিবর্তে , আমরা পরবর্তী তিনটিতে ১১০ বহন করি ।

  • বহনকারী অঙ্কগুলি অনির্দিষ্টকালের জন্য প্রচার করতে পারে। তবে, শীর্ষস্থানীয় শূন্যগুলি ছাড়াই, a + b এর যোগফল সর্বাধিক a এবং b এর চেয়ে 8 টি বেশি হয় ।

আমরা নিম্নলিখিত হিসাবে এগিয়ে যান।

  1. প্রথমত, আমরা a এবং b যুক্ত করি যেন তাদের সংখ্যাগুলি দশমিক সংখ্যা।

    জন্য একটি = 10101 এবং খ = 11011 , এই দেয় 21112

  2. এর পরে, আমরা সংখ্যার চেয়ে বড় প্রতিস্থাপন করে একটি নতুন সংখ্যা গঠন 1 একটি সঙ্গে 1 একটি সঙ্গে অন্যান্যের 01

    21112 যোগফলের জন্য , এটি 10001 দেয় ।

  3. 1 এর চেয়ে বড় প্রতিটি অঙ্কের জন্য আমাদের সেই অঙ্ক থেকে 2 বিয়োগ করতে হবে এবং 110 টি পরবর্তী তিনটি উচ্চ অবস্থানে নিয়ে যেতে হবে। 1098 = 10 * 110 - 2 যেহেতু , আমরা পদক্ষেপ 2 থেকে 1098 দ্বারা ফলাফলকে গুণ করে তারপরে সেই পণ্যটিকে যোগে যোগ করতে পারি। 2

    21112 যোগফলের জন্য , এটি 21112 + 1098 * 10001 = 21112 + 10981098 = 11002210 দেয়

  4. আমরা পদক্ষেপগুলি 2 এবং 3 টি মোট মোট * 8 বার পুনরাবৃত্তি করি যেখানে d + a + বি এর সংখ্যার সংখ্যা । 3

    21112 প্রাথমিক যোগফলের জন্য , ফলাফলগুলি

                          11002210
                          12210010
                        1220010010
                      122000010010
                    12200000010010
                  1220000000010010
                122000000000010010
              12200000000000010010
            1220000000000000010010
          122000000000000000010010
        12200000000000000000010010
      1220000000000000000000010010
    122000000000000000000000010010
                                 .
                                 .
                                 .
    
  5. আমরা চূড়ান্ত যোগফলটি 10 ডি + 8 নিয়ে থাকি , সর্বশেষ ডি + 8 সংখ্যাগুলি বাদ দিয়ে ।

    21112 প্রাথমিক অঙ্কের জন্য , চূড়ান্ত ফলাফল 10010


1 অনুবাদ সহ এটি অর্জন করা হয় । স্ট্রিং 0011 Rep৪ বার পুনরাবৃত্তি করা ASCII অক্ষর 0123 এর অনুক্রমের সাথে একটি পুনরাবৃত্তি লাইন তৈরি করে কাঙ্ক্ষিত প্রতিস্থাপন অর্জন করে।

2 মনে রাখবেন যে এই অঙ্কের অঙ্কগুলি 3 টিরও বেশি হতে পারে না (প্রাথমিক মান 1 প্লাস দুটি 1 বহন করে)।

3 এটি ডি = 1 এর জন্য এবং ড * 8> ডি + 8 এর জন্য কাজ করে । কোড পদক্ষেপ পুনরাবৃত্তি হতে পারে 8 (ঘ + 1 টি) * বার, যেহেতু গুলি একটি trailing হয়েছে এল যদি গুলি একটি হল দীর্ঘ পূর্ণসংখ্যা।


7
এটি গভীর যাদু । কোন ফর্ম্যাট input()আশা করে? (আমি 21112যখন ইনপুট করি তখনই পাই 10101, 11011))
টিম পেডেরিক

1
কিছু মনে করো না; এটি পাইথন 3-এ অনুবাদ করা একটি সংস্করণ (অসফল বলে মনে হচ্ছে) চালাচ্ছিল এটি পাইথন 2 এর অধীনে কাজ করে
টিম পেডারিক

9
... কিভাবে। অনুগ্রহ. ব্যাখ্যা করা.
নিক হার্টলি

@ কিপেসট্যাক্স আমি আমার উত্তর সম্পাদনা করেছি ited
ডেনিস

@ ডেনিস এখন আপনি কীভাবে কাজ করে তা ব্যাখ্যা করতে পারেন? উদাহরণস্বরূপ, কেন d+8এবং না, বলুন d+9? কিভাবে ????
নিক হার্টলি

16

পাইথ, 34 বাইট

_shM.u,%J/eMeN\12-+PMeNm.B6/J2k,kQ

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

ব্যাখ্যা:

আমার অ্যালগরিদম মূলত বহন করার সাথে সংযোজনের একটি বাস্তবায়ন। তবে বহন করার পরিবর্তে 1, আমাকে বহন করতে হবে 110( 1100বেসে বেস -1+iহিসাবে একই )। এটি বেশিরভাগ ক্ষেত্রে দুর্দান্ত কাজ করে তবে আপনি অসীম লুপ মুদ্রণ শূন্যগুলিতে আটকে যেতে পারেন। উদাহরণস্বরূপ আপনি যদি যোগ করে থাকেন এবং বর্তমানে বহন করে থাকেন । সুতরাং আমি মূলত যোগ করি যতক্ষণ না আমি লুপে আটকে যাই এবং তারপরে থামি না। আমি মনে করি যে একটি লুপ একটি লুপ সর্বদা জিরো প্রিন্ট করে এবং তাই এটি ঠিক করা উচিত।2-1+i111110

_shM.u,%J/eMeN\12-+PMeNm.B6/J2k,kQ   implicit: Q = input list of strings
                               ,kQ   create the pair ["", Q]
    .u                               modify the pair N (^) until loop:
      ,                                replace N with a new pair containing:
            eN                           N[1] (the remaining summand)
          eM                             take the last digits of each summand
         /    \1                         count the ones
        J                                store the count in J
       %J       2                        J % 2 (this is the first element of the new pair)
                   PMeN                  remove the last digit of each summand
                  +    m   /J2           and add J / 2 new summand:
                        .B6                 with the value "110" (binary of 6)
                 -            k          remove empty summand
    .u                               returns all intermediate results
  hM                                 extract the digits
 s                                   sum them up to a long string
_                                    reverse

13

পাইথন 2, 69 67 বাইট

f=lambda a,b:a*a+b*b^58and 2*f(a*b%2*6,f(a/2,b/2))|a+b&1if a else b

আই / ও বেস 2 পূর্ণসংখ্যার সাথে সম্পন্ন হয়।

-2 ধন্যবাদ @ ডেনিস।


আমি a*a+b*b^58==0কখন নেব aএবং কখন bবিপরীতমুখী হবে? ওটা কিভাবে কাজ করে?
xnor

@xnor না, a*a+b*b==58যখন তাদের একজনের বয়স 3 এবং অন্যটি 7 হয়
শুক্রবার

1
এটি আমার কাছে স্পষ্ট নয় যে আমি (3,7)একমাত্র জুটি যা একটি চক্র দেয় এবং বিশেষ ক্যাসিং প্রয়োজন। যদি এটি সত্য হয়, তবে আপনাকে অবশ্যই কেবল (a,b)==(3,7)সেই (7,3)ক্রমটি পরীক্ষা করতে হবে , যেহেতু পুনরাবৃত্তি হয় (3,7)এবং সম্ভবত এটির জন্য একটি সংক্ষিপ্ত প্রকাশও রয়েছে।
xnor

1
এখন এই যে কেউ জানে না (বা ভুলে যায়) বিভ্রান্তির নিশ্চয়তা রয়েছে যে (ক) ^এক্সওআর, এক্সফোনেনটিশন নয়, বা (খ) এক্সওর এর চেয়ে কম নজির রয়েছে +
টিম পেডারিক

12

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

r+`(.*)(\d|(?!\4))( .*)(.?)
$2$4:$1$3
T` 0
+`1:11(1*:1*)11
:$1
^:*
:::
}`:(1*:1*:)11
1:1$1
(1)*:
$#1

এটি একটি কমা দিয়ে পৃথক ইনপুট নেয়। আউটপুট সর্বদা তিনটি শীর্ষ জিরো দিয়ে শুরু হয়।

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

আমি সত্যিই ভাবছি যদি প্রথম পর্যায়ে একটি সংক্ষিপ্ত সমাধান থাকে ...


2
না, না, স্কোর যেমন হয় ঠিক তেমনি;)
কনর ও'ব্রায়ান

2
-2i এর দুর্দান্ত স্কোর!
নিক হার্টলি

কি দারুন. আমার পোস্ট করার সময় আমি এই সমাধানটি দেখিনি ... আমার সমাধানের চেয়ে অনেক বেশি উন্নত superior
লিকি নুন

@ কেনিলাউ আমি কেবল এটির দিকে তাকিয়ে ভাবছিলাম "এইচএম, আমি মনে করি আমার কোনও মুহূর্তে একটি ব্যাখ্যা যোগ করা উচিত ছিল ..."
মার্টিন এন্ডার

...- 2 আমি? এটি দশমিক তবে প্রোগ্রামটি এমন বেস ব্যবহার করে যা তা নয়।
ব্যবহারকারী 75200

12

জেলি, 29 28 26 24 21 20 বাইট

DBḅ1100ḌµDL+8µ¡Dṣ2ṪḌ

এটি দশমিক ক্ষেত্রে I / O করে। পূর্ণসংখ্যার অ-অক্ষরীয় অক্ষর দ্বারা পৃথক করতে হবে +

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

পটভূমি

ইন কমপ্লেক্স ঘাঁটি মধ্যে পাটিগণিত , লেখক ফর্মের ঘাঁটি যোগ এবং সংখ্যাবৃদ্ধি কিভাবে জটিল সংখ্যার দেখায় -n + I

বেস -1 + i এর জন্য দুটি পার্থক্য সহ ক্যারি সহ নিয়মিত, বাইনারি সংযোজনের সাথে একইভাবে সংযোজন করা হয়:

  • 1 পরবর্তী উচ্চ অবস্থানে 1 বহন করার পরিবর্তে , আমরা পরবর্তী তিনটিতে ১১০ বহন করি ।

  • বহনকারী অঙ্কগুলি অনির্দিষ্টকালের জন্য প্রচার করতে পারে। তবে, শীর্ষস্থানীয় শূন্যগুলি ছাড়াই, a + b এর যোগফল সর্বাধিক a এবং b এর চেয়ে 8 টি বেশি হয় ।

আমরা নিম্নলিখিত হিসাবে এগিয়ে যান।

  1. প্রথমত, আমরা a এবং b যুক্ত করি যেন তাদের সংখ্যাগুলি দশমিক সংখ্যা।

    জন্য একটি = 10101 এবং খ = 11011 , এই দেয় 21112

  2. 1 এর চেয়ে বড় প্রতিটি অঙ্কের জন্য আমাদের সেই অঙ্ক থেকে 2 বিয়োগ করতে হবে এবং 110 টি পরবর্তী তিনটি উচ্চ অবস্থানে নিয়ে যেতে হবে। আমরা প্রতিটি দশমিক অঙ্ককে বাইনারি রূপান্তরিত করে, ফলাফলকে বাইনারি অ্যারেগুলি 1100 বেস থেকে পূর্ণসংখ্যায় রূপান্তর করে এবং 0 's, 1 ' s, 1100 's এবং 1101 এর ফলাফলের তালিকাটি অ-ক্যানোনিকাল বেস 10 হিসাবে ব্যাখ্যা করতে পারি সংখ্যা। 1

    21112 যোগফলের জন্য , এটি 21112 + 1098 * 10001 = 21112 + 10981098 = 11002210 দেয়

  3. আমরা পদক্ষেপ পুনরাবৃত্তি 2 মোট D + 8 বার, যেখানে টি সংখ্যা সংখ্যা একটি + খ

    21112 প্রাথমিক যোগফলের জন্য , ফলাফলগুলি

                          11002210
                          12210010
                        1220010010
                      122000010010
                    12200000010010
                  1220000000010010
                122000000000010010
              12200000000000010010
            1220000000000000010010
          122000000000000000010010
        12200000000000000000010010
      1220000000000000000000010010
    122000000000000000000000010010
    
  4. আমরা চূড়ান্ত ফলাফল থেকে শেষ ডি + 8 ডিজিট বাদে সবগুলি ফেলে দিই । শেষ 2 এর পরে সবকিছু ত্যাগ করে এটি অর্জন করা হয় । 2

    21112 প্রাথমিক অঙ্কের জন্য , চূড়ান্ত ফলাফল 10010

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

DBḅ1100ḌµDL+8µ¡Dṣ2ṪḌ  Main link. Argument: a + b (implicit sum)

        µ    µ¡       Execute the chain before the first µ n times, where n is
                      the result of executing the chain before the second µ.
         D            Convert a + b to base 10.
          L           Length; count the decimal digits.
           +8         Add 8 to the number of digits.
D                     Convert the initial/previous sum to base 10.
 B                    Convert each digit (0 - 3) to binary.
  ḅ1100               Convert each binary array from base 1100 to integer.
       Ḍ              Interpret the resulting list as a base 10 number.
               D      Convert the final sum to base 10.
                ṣ2    Split at occurrences of 2.
                  Ṫ   Select the last chunk.
                   Ḍ  Convert from base 10 to integer.

1 দ্রষ্টব্য যে এই অঙ্কের অঙ্কগুলি 3 টি ছাড়িয়ে যাবে না (প্রাথমিক মান 1 প্লাস দুটি 1 বহন করে)।

2 এটি কাজ করে কারণ শেষ অঙ্কটি বাতিল হয়ে যাবে 3 টি হতে পারে না ।


6

পাইথন 3, 289 বাইট

এটি কমপক্ষে সবচেয়ে গুরুত্বপূর্ণ অঙ্ক পর্যন্ত ডিজিটাল সংযোজন সম্পাদন করে (অন্য কথায়, আপনাকে প্রাথমিক বিদ্যালয়ে যে একই অ্যালগরিদম শেখানো হয়েছিল)। পার্থক্যগুলি হ'ল (ক) এটি বাইনারি হয়, দশমিক নয়, তাই আপনি যখনই কোনও সংখ্যা 2 বা ততোধিক হয় এবং (খ) 1 + 1 = 1100না হন তবে আপনি বহন করেন 10

প্রকৃতপক্ষে, এটিও লক্ষ করা দরকার 11 + 111 = 0, অন্যথায় যে পরিমাণগুলি শূন্য হওয়া উচিত তা কখনই শেষ হবে না।

from collections import*
def a(*s,p=0):
 r=defaultdict(int,{0:0})
 for S in s:
  n=0
  for d in S[::-1]:r[n]+=d=='1';n+=1
 while p<=max(r):
  while r[p]>1:
   r[p]-=2
   if r[p+1]>1<=r[p+2]:r[p+1]-=2;r[p+2]-=1
   else:r[p+2]+=1;r[p+3]+=1
  p+=1
 return str([*map(r.get,sorted(r))])[-2::-3]

আরও গল্ফিং অবশ্যই সম্ভব।


আপনি কতটা নিশ্চিত যে আপনার "শূন্য ডিটেক্টর" যথেষ্ট?
ইয়াক

4
@ ইয়াক্ক: পর্যালোচনা-জার্নালটিকে পিয়ার করার স্কেলটিতে সম্ভবত এটিকে কোনও উত্তর দেওয়া হয়নি-এখনও দেওয়া হয়েছে?
টিম পেডারিক

2

রেটিনা, 157 151 134 133 124 123 বাইট

1 বাইট অফ মার্টিন বাটনারকে ধন্যবাদ জানাই।

(.+),(.+)
$.1$*0$2,$.2$*0$1,
1
0x
+`(0x*)(,.*)0(x*),
$2,$1$3
{`,

(^|0x0xx0xx)
000
(0x*)(0x*)(0x*0)xx
$1x$2x$3
)`^0+
0
0x
1

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

অ্যানারিতে রূপান্তর করে এবং তারপরে নিম্নলিখিত প্রতিস্থাপনগুলি পুনরাবৃত্তি করুন (দশমিকায় এখানে দেখানো হয়েছে):

122 -> 000
0002 -> 1100 (this can also be 0012 -> 1110 and 1112 -> 2210 or even 2222 -> 3320 or even 3333 -> 4431)

মূলত, যখন দুটির চেয়ে বড় হয়: দুটি কেড়ে নিয়ে যাও, আগের অঙ্কে কিছু না যুক্ত করুন, একটি আগের অঙ্কে যুক্ত করুন, তারপরে একটিটিকে পূর্বের অঙ্কে যুক্ত করুন।

সিউডোকোডে:

if(a[n]>2):
    a[n] -= 2;
    a[n-2] += 1;
    a[n-3] += 1;

একতামূলক বাস্তবায়ন:

প্রতিটি অঙ্ক (উদাহরণস্বরূপ 3) xগুলি (উদাহরণস্বরূপ xxx) সংখ্যা হিসাবে প্রদর্শিত হয় এবং তারপরে উপসর্গ করা হয় 0

উদাহরণস্বরূপ, 1234হিসাবে প্রকাশ করা হবে 0x0xx0xxx0xxxx

এটি 0অপরিবর্তিত রেখে দেয় , যেমনটি 101প্রকাশ করা হবে 0x00x

প্রাথমিকভাবে এবং শেষ অবধি, কেবলমাত্র 0এবং 1, রূপান্তরটি সহজেই 1->0xএবং এর দ্বারা করা যেতে পারে 0x->1

প্রতিটি পদক্ষেপ দেখতে এখানে ক্লিক করুন


1

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

r=n=>n&&n%2-r(n>>=1)-i(n)
i=n=>n&&r(n>>=1)-i(n)
g=(x,y,b=(x^y)&1)=>x|y&&b+2*g(b-x+y>>1,b-x-y>>1)
(x,y)=>g(r(x)+r(y),i(x)+i(y))

gকোনও গাউসিয়ান পূর্ণসংখ্যা (বাস্তব এবং কল্পিত অংশ) কে বেসে রূপান্তরিত করে i-1, rএবং iএকটি বেস i-1পূর্ণসংখ্যাকে গাউসিয়ান পূর্ণসংখ্যায় রূপান্তর করে (যথাক্রমে বাস্তব এবং কাল্পনিক অংশ)। রূপান্তরগুলি একবার হয়ে গেলে, আমি কেবল পাটিগণিত করতে হবে।

সম্পাদনা করুন: পৃথকভাবে বাস্তব এবং কল্পিত অংশ গণনা করে 20 বাইট সংরক্ষণ করা হয়েছে।


1

সি ++ 416 বাইট, আরও #include <vector>\n#include <algorithm>\n(40 টি)

using I=int;using v=std::vector<I>;void r(v&x){v r{rbegin(x),rend(x)};x=r;}v a(v L,v R){r(L);r(R);L.resize(std::max(L.size(),R.size()));for(int&r:R)L[&r-R.data()]+=r;while(1){L.resize(L.size()+3);auto it=find(rbegin(L),rend(L),2);if(it==rend(L))break;I i=-1+it.base()-begin(L);i&&L[i+1]&&L[i-1]/2?L[i+1]=L[i]=L[i-1]=0:(++L[i+2],++L[i+3],L[i]=0);}L.erase( std::find(rbegin(L),rend(L),1).base(),end(L));r(L);return L;}

বা, আরও সাদা জায়গা সহ:

using I=int;
using v=std::vector<I>;

void r(v&x){v r{rbegin(x),rend(x)};x=r;}
v a(v L,v R) {
  r(L);r(R);
  L.resize(std::max(L.size(),R.size()));
  for(int&r:R)
    L[&r-R.data()]+=r;
  while(1) {
    L.resize(L.size()+3);
    auto it=find(rbegin(L), rend(L), 2);
    if(it==rend(L)) break;
    I i=-1+it.base()-begin(L);
    i&&L[i+1]&&L[i-1]/2?
      L[i+1]=L[i]=L[i-1]=0
    :
      (++L[i+2],++L[i+3],L[i]=0);
  }
  L.erase( std::find(rbegin(L),rend(L),1).base(), end(L));
  r(L);
  return L;
}

সবে গল্ফড এটি ইনটসের ভেক্টর হিসাবে ইনপুট নেয় এবং ইনটসের ভেক্টরকে ফেরত দেয়।

সরাসরি উদাহরণ

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