এক্সওআর গুণ


33

আপনার লক্ষ্যটি হ'ল XOR ( বাহকবিহীন ) গুনটির অপারেশনটি যতটা সম্ভব কয়েকটি বাইটে নীচে সংজ্ঞায়িত করা কার্যকর করা to

যদি আমরা বিটওয়াইজ এক্সওআর ( ^) কে বহন না করে বাইনারি সংযোজন হিসাবে মনে করি

   101   5
^ 1001   9
  ----  
  1100  12

  5^9=12

আমরা @বাইনারি দীর্ঘ- গুণক দ্বারা বিটওয়াইজ এক্সওআর হিসাবে বহন না করে যোগ পদক্ষেপটি করে এক্সওআর গুণন করতে পারি ^

     1110  14
   @ 1101  13
    -----
     1110
       0
   1110
^ 1110 
  ------
  1000110  70

  14@13=70

(গণিতবিদদের ক্ষেত্রে এটি বহুবর্ষীয় রিংয়ের গুণ F_2[x], x=2জেড এর ওপরে বহুবর্ষ হিসাবে মূল্যায়ন করে প্রাকৃতিক সংখ্যার সাথে বহুপদী চিহ্নিতকরণ )

এক্সওএর গুণকটি বিটওয়াইজ এক্সওর-এর মাধ্যমে কমিট করে a@b=b@a, সহযোগী হয় (a@b)@c=a@(b@c)এবং বিতরণ করে a@(b^c)=(a@b)^(a@c)। প্রকৃতপক্ষে, এটি এমন অনন্য অপারেশন যা গুনের সাথে মেলে এবং a@b=a*bযখনই এর মতো শক্তি থাকে ।ab21,2,4,8...

আবশ্যকতা

ইনপুট এবং আউটপুট হিসাবে দুটি অ-নেতিবাচক পূর্ণসংখ্যা গ্রহণ করুন বা তাদের এক্সওআর-পণ্য মুদ্রণ করুন। এটি সংখ্যা বা তাদের দশমিক স্ট্রিং উপস্থাপনা হিসাবে হওয়া উচিত, তাদের বাইনারি সম্প্রসারণ নয়। সবচেয়ে কম বাইট জেতা

পূর্ণসংখ্যা ওভারফ্লো সম্পর্কে চিন্তা করবেন না।

এখানে কিছু টেস্ট কেস হিসাবে ফর্ম্যাট করা আছে a b a@b

0 1 0
1 2 2
9 0 0
6 1 6
3 3 5
2 5 10
7 9 63
13 11 127
5 17 85
14 13 70
19 1 19
63 63 1365

13
এটি "ক্যারি-কম গুন" হিসাবে আরও পরিচিত, যা আপনি প্রশ্নের শিরোনামটি যুক্ত করতে চাইতে পারেন এবং উচ্চ সম্ভাবনার সাথে সবচেয়ে ছোট প্রবেশিকাটি PCLMULQDQসিএমএমএল এক্সটেনশান থেকে 6-বাইট x86 নির্দেশনা রয়েছে । দুর্ভাগ্যক্রমে আমি x86 নির্দেশাবলী সম্পর্কে আমার জ্ঞানের জন্য নিম্নচেতন হয়ে পড়েছি (সম্পর্কিত PEXT/PDEP), সুতরাং আমি কেবল এখানে একটি মন্তব্য হিসাবে রেখে যাচ্ছি।
Iwillnotexist আইডোনোটেক্সবাদ

@ আইভিলনোটেক্সিস্ট আইডোনোটেক্সিস্ট নোটটির জন্য ধন্যবাদ, গুগলে নাম রাখা ভাল লাগল।
xnor

যদি উপরেরটি "xor" না হয় তবে আপনাকে আলাদাভাবে xorc বা xornc হিসাবে কল করতে হবে ... এটি xor নয়
RosLuP

1
@ রোসলুপ এটি জোর নয়, এটি xor গুণ।
xnor

@ বাবোকাক্যাক আসলে, আমি বিশ্বাস করি নিম্বরের গুণটি আলাদা। উদাহরণস্বরূপ, এটিতে 2 * 2 == 3 রয়েছে। এই উভয়ই নিম সংযোজনকে বিতরণ করে, তবে এই চ্যালেঞ্জের একটিটি 2 টির ক্ষমতার সাথে মিলে যায়, যেখানে নিমবার কেবল 2 2 (2 ^ n) এর সাথে ম্যাচগুলিতে থাকে।
xnor

উত্তর:


36

x86 মেশিন কোড: 7 বাইট

66 0F 3A 44 C1 00 C3  pclmulqdq xmm0, xmm1, 0 \ ret

মাত্র দুটি নির্দেশ। pclmulqdqভারী উত্তোলন করে, এটি আক্ষরিকভাবে এই ধরণের জোর-গুণকে কার্যকর করে। retএটিকে কলযোগ্য ফাংশন হিসাবে তৈরি করার জন্য, ফলাফলটির "আউটপুট" করার প্রয়োজনীয়তাটি (সন্তুষ্ট মান হিসাবে xmm0) সন্তুষ্ট। যুক্তিতে পূর্ণসংখ্যার যুক্তি স্থাপন xmmকরা কিছুটা অস্বাভাবিক, তবে আমি আশা করি আপনি আমাকে ক্ষমা করবেন।


1
একটি অন্তর্নির্মিত অপারেশন শব্দটি প্রতারণার মতো শোনাচ্ছে ...
সিজে ডেনিস

4
@ সিজেডেনিস স্ট্যান্ডার্ড লুফোলস মেটা পোস্টে এটি নিষিদ্ধ করা উচিত কিনা তা নিয়ে কোনও usক্যমত্য নেই। নিষিদ্ধকরণের জন্য 44 টি ভোট রয়েছে, বিপরীতে 31 টি ভোট।
isaacg

1
@ আইস্যাচজি আমি সত্যিই নিট-পিক হওয়ার চেষ্টা করছি না তবে প্রশ্নের বাক্যটি হ'ল: আপনার লক্ষ্য হল এক্সওআর (বহনবিহীন) গুণনের ক্রিয়াকলাপ বাস্তবায়ন করা । এই উত্তরটি নিজেই "বাস্তবায়ন করে" অপারেশন বা অন্য কারও কার্যকারিতা কল করে? অন্যান্য সমস্ত উত্তরগুলি নিজেরাই কঠোর পরিশ্রম করে, প্রায়শই এই উত্তরটির কয়েকটি বাইটের মধ্যে। আমি মনে করি তারা সবাই অনেক চালাক এবং এর চেয়ে আরও বেশি কিছুকে পাওয়ার যোগ্য।
সিজে ডেনিস

8
প্রশ্নটি যদি এতটা তুচ্ছ হয় তবে এটি একটি সাধারণ সিপিইউ দ্বারা সরাসরি প্রয়োগ করা হয় তবে এর চেয়ে কম স্তরের স্তর খুব কমই পাওয়া যায়। এটি বিশেষ আকর্ষণীয় বা স্মরণীয় নয় তবে এটি একটি বৈধ উত্তর বলে মনে হচ্ছে, সুতরাং +1।
মান

9
এটি সমাধানের জন্য বিল্ট-ইন ব্যবহার করাতে আমার কোনও সমস্যা নেই - অন্যথায়, আমি অন্তর্নির্মিত এমন কোনও অস্তিত্ব জানি না।
xnor

14

জেড 80, 11 বাইট

B7 CB 32 30 01 B3 C8 CB 23 18 F6   

কোডটিকে একটি ফাংশন হিসাবে ডাকা হয়। aএবং bহয় DএবংE (অর্ডারটি কোনও বিষয় নয়) এবং Aকোডটি যখন ফিরে আসে তখন উত্তরটি সংরক্ষণ করা হয় (কোনও আই / ও ফাংশন নেই)।

B7      XOR A     //  A^=A (A=0)
CB 32   SRL D     //    CARRY = lsb(D), D>>=1, ZERO = D==0
30 01   JR NC, 1  //    jump 1 byte if not CARRY
B3      XOR E     //      A^=E, ZERO = A==0
C8      RET Z     //    return if ZERO
CB 23   SLA E     //    E<<=1
18 F6   JR -10    //    jump -10 bytes

এটি সমস্ত পরীক্ষার ইনপুটগুলির জন্য সঠিক ফলাফল উত্পন্ন করে 63@63যা ব্যতীত অন্য যা 85সমস্ত রেজিস্টারগুলি 8-বিট এবং 1365 মড 256 = 85 (পূর্ণসংখ্যার ওভারফ্লো) হয় except


10

সি, 44 38 বাইট

নিমিকে ধন্যবাদ, আমরা এখন 6 কম বাইটের জন্য পুনরাবৃত্তি ব্যবহার করি!

f(a,b){return b?(b&1)*a^f(a*2,b/2):0;}

আমরা একটি ফাংশন নির্ধারণ fযা লাগে a, b

এটিকে বলা যেতে পারে:

printf("%d @ %d = %d\n", 13, 14, f(13, 14));

কোন ফলাফল:

13 @ 14 = 70

অনলাইনে পরীক্ষার মামলাগুলি ব্যবহার করে দেখুন !


1
কেন একটি পুনরাবৃত্তি সংস্করণ f(a,b)={return(b)?(b&1)*a^f(2*a,b/2):0;}?
নিমি

@ নিমিমি আহ, চালাক! আমি জানতাম যে এই বোবা প্যারামিটারটি থেকে মুক্তি পাওয়ার উপায় আছে। আমি এখন 38 বাইট পেয়েছি ধন্যবাদ!
BrainSteel

1
স্ট্রোক আউট 44 এখনও নিয়মিত 44. :(
অ্যালেক্স এ।

ইনপুটগুলি অ-নেতিবাচক তাই আপনি আরও দুটি বাইট সংরক্ষণ করার (b&1)সাথে প্রতিস্থাপন করতে পারেন b%2যেহেতু %বাম-থেকে-ডান অগ্রাধিকারের একই স্তর *
সিএল-

9

পাইথ, 13 12 বাইট

uxyG*HQjvz2Z

প্রদর্শন.

uxyG*HQjvz2Z
                  Implicit:
                  z = input()
                  Q = eval(input())
                  Z = 0

       jvz2       The first input, written in base 2, like so: [1, 0, 1, ...
u      jvz2Z      Reduce over the binary representation, starting with 0.
 x                XOR of
  yG              Twice the previous number
    *HQ           and the second input times the current bit.

পুরানো সংস্করণ, 13 বাইট:

xFm*vz.&Q^2dQ

প্রদর্শন.


আমি অনুমান করি তখন vzদুটি পূর্ণসংখ্যা ইনপুট গ্রহণ এড়াতে ভাল উপায় নেই ।
xnor

@ xnor না, দুর্ভাগ্যক্রমে।
isaacg

8

সিজেম, 14 13 বাইট

q~2bf*{\2*^}*

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

আমরা প্রথমে দীর্ঘ গুণটির ফলাফল পেয়েছি এবং তারপরে নীচের দুটি জোড়া থেকে শুরু করে আমাদের পথে কাজ করব।

q~                e# Eval the input. This puts the two numbers on stack
  2b              e# Convert the second number to binary
    f*            e# Multiply each bit of second number with the first number
                  e# This leaves an array with the candidates to be added in the long
                  e# multiplication step
      {    }*     e# Reduce on these candidates. Starting from the bottom
       \2*        e# Bit shift the lower candidate
          ^       e# XOR each other and continue

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


7

জে, 14 বাইট

*/(~://.@)&.#:

ব্যবহার:

   5 (*/(~://.@)&.#:) 17     NB. enclosing brackets are optional
85

ব্যাখ্যা (বেশিরভাগ ডান থেকে বামে পড়া; uএবং vস্বেচ্ছাসেবী কার্যক্রমে দাঁড়ানো):

  • u&.#:uইনপুট সংখ্যার বাইনারি উপস্থাপনার ভেক্টরের ক্ষেত্রে প্রযোজ্য তারপরে ফলাফলটিকে পূর্ণসংখ্যায় ফিরিয়ে দিন ( u&.v == v_inverse(u(v(input_1), v(input_2))))
  • */দুটি বাইনারি ভেক্টরের *ডেসকার্টেস পণ্য ( ) এর ইনপুটগুলির পণ্য ( /))
  • v(u@)আবেদন uকরার জন্য v(ডেস্ক্রেটের পণ্যে)
  • u/.uডেসকার্টেস প্রোডাক্টের প্রতিটি অ্যান্টি-ডায়াগোনালের জন্য প্রয়োগ করুন (অ্যান্টি-ডায়াগোনালগুলি বাইনারি উপস্থাপনায় 1 ম, 2 য়, ... সংখ্যাগুলি উপস্থাপন করে)
  • ~://XOR অপারেশন সহ ( ) একটি অ্যান্টি-ডায়াগোনাল হ্রাস করুন ( ~:)
  • শেষ পদক্ষেপটি বাইনারি ভেক্টর থেকে একটি পূর্ণসংখ্যা উত্পন্ন করে যা প্রথম পয়েন্টটি যত্ন করে।

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


5

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

f=lambda m,n:n and n%2*m^f(2*m,n/2)

কল করুন f(13, 14)। আমি মনে করি অনুরূপ নির্মাণযুক্ত বেশিরভাগ ভাষা এই জাতীয় কিছুতে রূপান্তর করবে।


4

জাভা, 62

(x,y)->{int r=0,i=0;for(;i<32;)r^=x*((y>>i)%2)<<i++;return r;}

সম্প্রসারিত

class XORMultiplication {
    public static void main(String[] args) {
        IntBinaryOperator f = (x, y) -> {
                    int r = 0, i = 0;
                    for (; i < 32;) {
                        r ^= x * ((y >> i) % 2) << i++;
                    }
                    return r;
                };
        System.out.println(f.applyAsInt(14, 13));
    }
}

1
আপনি পছন্দ করেন এমন কোনও কারণ for(;i<32;)আছে while(i<32)? এগুলি একই দৈর্ঘ্য, তবে দ্বিতীয়টি এটি রচনার জন্য আরও প্রাকৃতিক উপায় বলে মনে হচ্ছে।
18

1
@ জোহনে আমি অনুমান করব যে i++এটি মূলত forলুপে ছিল এবং তার বর্তমান অবস্থানে গল্ফ পেয়েছে। যেহেতু whileকোনও ছোট নয় এটি পরিবর্তন করার কোনও কারণ নেই।
সিজে ডেনিস

3

হাস্কেল, 50 বাইট

import Data.Bits
_#0=0
a#b=b.&.1*a`xor`2*a#div b 2

@ ব্রেনস্টিলের সি উত্তরের একটি অনুবাদ। ব্যবহারের উদাহরণ:

map (uncurry (#)) [(0,1),(1,2),(9,0),(6,1),(3,3),(2,5),(7,9),(13,11),(5,17),(14,13),(19,1),(63,63)]
[0,2,0,6,5,10,63,127,85,70,19,1365]

3

পার্ল - 35 বাইট

#!perl -p
$\^=$`>>$_&1&&$'<<$_ for-/ /..31}{

কমান্ড লাইন বিকল্পটি এক হিসাবে গণনা করা হচ্ছে। ইনপুট নেওয়া হয়েছে STDIN, স্থান পৃথক করা।

নমুনা ব্যবহার:

$ echo 13 11 | perl xormul.pl
127
$ echo 5 17 | perl xormul.pl
85
$ echo 14 13 | perl xormul.pl
70
$ echo 19 1 | perl xormul.pl
19
$ echo 63 63 | perl xormul.pl
1365

3

জুলিয়া, 35 33 30 বাইট

f(a,b)=b%2*a$(b>0&&f(2a,b÷2))

এটি একটি পুনরাবৃত্ত ফাংশন তৈরি করে fযা দুটি পূর্ণসংখ্যা নেয় এবং ইনপুটগুলির এক্সওআর পণ্যটি প্রদান করে।

Ungolfed:

function f(a, b)
    # Bitwise XOR : $
    # Short-circuit AND : &&

    b % 2 * a $ (b > 0 && f(2a, b ÷ 2))
end

Sp3000 এর উত্সাহ দিয়ে একটি দম্পতি বাইট সংরক্ষণ করা!


2

পাইথন 2, 104 91 78 66 বাইট

def y(a,b,c=0):
 for _ in bin(b)[:1:-1]:c^=int(_)*a;a<<=1
 print c

bবিপরীত ক্রমের বিটগুলি নিন , '0b'স্ট্রিংয়ের শুরুতে আপনি আঘাত করার আগে শেষ হয়। মোট aএবং xorতারপরে বাম-শিফট দিয়ে প্রতিটিকে গুণ করুন a। তারপরে মোট মুদ্রণ করুন।



2

GAP , 368 বাইট

গণিতবিদদের ক্ষেত্রে এটি বহুবর্ষীয় রিং এফ 3 [এক্স] এর গুণ, x = 2 এ জেডের ওপরে বহুবর্ষ হিসাবে মূল্যায়ন করে প্রাকৃতিক সংখ্যার সাথে বহুপদী চিহ্নিতকরণ is

অবশ্যই, এটি করা যাক! (এটি কেবলমাত্র স্বল্প গল্ফযুক্ত, পয়েন্টটি এফ 2 [এক্স] এ সরানো এবং বিজয়ী এন্ট্রি হওয়ার চেয়ে কোনও প্রচেষ্টা চেয়ে গণনাগুলি আরও বেশি করে করা হয়েছিল)

এখানে কোড

f:=function(i,j)R:=PolynomialRing(GF(2));x:=IndeterminatesOfPolynomialRing(R);x:=x[1];a:=function(i)local n,r;r:=0*x;while not i=0 do n:=0;while 2^n<=i do n:=n+1;od;n:=n-1;r:=r+x^n;i:=i-2^n;od;return r;end;b:=function(r)local c,i,n;i:=0;n:=0;for c in CoefficientsOfUnivariatePolynomial(r) do if c=Z(2)^0 then n:=n+2^i;fi;i:=i+1;od;return n;end;return b(a(i)*a(j));end;

বর্ণনার সাথে বর্ণহীন কোডটি এখানে:

xor_multiplication:=function(i,j)           
    R:=PolynomialRing(GF(2));
    x:=IndeterminatesOfPolynomialRing(R);
    x:=x[1];
    to_ring:=function(i)
        local n,r; 
        r:=0*x;
        while not i=0 do
            n:=0;
            while 2^n<=i do
                n:=n+1;
            od;
            n:=n-1;
            r:=r+x^n;
            i:=i-2^n;
        od;
        return r;
    end;
    to_ints:=function(r)
        local c,i,n;
        i:=0;n:=0;
        for c in CoefficientsOfUnivariatePolynomial(r) do
            if c=Z(2)^0 then
                n:=n+2^i;
            fi;
            i:=i+1;
        od;
        return n;
    end;
    return to_ints( to_ring(i)*to_ring(j));
end;

ঠিক আছে, তাই প্রথম প্রথম, আমরা F 2 ক্ষেত্রের উপর অবিচ্ছিন্ন বহুপদী আংটি তৈরি করি এবং এটি কল করি R। নোট যে GF(2)এফ 2 জিএপি হয়।

R:=PolynomialRing(GF(2));

এর পরে, আমরা জিপি ভেরিয়েবলটি xরিংয়ের অনির্দিষ্টকালের জন্য নির্ধারণ করতে যাচ্ছি R। এখন, আমি যখনই xজিএপি-তে বলব , সিস্টেমটি জানতে পারবে আমি রিংয়ের অনির্দিষ্টকালের কথা বলছি R

x:=IndeterminatesOfPolynomialRing(R);
x:=x[1];

এর পরে, আমাদের দুটি ফাংশন রয়েছে যা একে অপরের বিপরীত মানচিত্র। এই মানচিত্রগুলি উভয়দিকেই রয়েছে, তবে সেগুলি সংরক্ষণের কাঠামো নয়, তাই এগুলিকে জিএপি প্রয়োগ করার আরও ভাল উপায় আমি খুঁজে বের করতে পারি না। প্রায় অবশ্যই একটি ভাল উপায় আছে, আপনি যদি এটি জানেন, মন্তব্য করুন!

প্রথম মানচিত্রটি to_ringএকটি পূর্ণসংখ্যা নেয় এবং এটির সাথে সম্পর্কিত রিং উপাদানটিতে মানচিত্র করে। এটি বাইনারি অ্যালগরিদমে রূপান্তর ব্যবহার করে 1এটি করে, যেখানে বাইনারিটিতে উপস্থিত প্রতিটি প্রতিস্থাপন করে x^nযেখানে nযথাযথ শক্তি যেখানে 2টি গ্রহণ করবে যদি সংখ্যাটি সত্যই বাইনারি ছিল।

    to_ring:=function(i)
        local n,r; 
        r:=0*x;                 # initiate r to the zero element of R
        while not i=0 do        # this is a modified binary algorithm
            n:=0;
            while 2^n<=i do
                n:=n+1;
            od;
            n:=n-1;
            r:=r+x^n;
            i:=i-2^n;
        od;
        return r;
    end;

পরবর্তী ফাংশন এটি বিপরীত। to_intsএকটি রিং উপাদান নেয় এবং এটি সম্পর্কিত সংখ্যায় মানচিত্র করে maps আমি বহুবর্ষের সহগের একটি তালিকা পেয়ে এবং প্রতিটি ননজারো সহগের জন্য ফলাফলটি 2 ^ n দ্বারা বৃদ্ধি করে একইভাবে বাইনারি দশমিককে রূপান্তর করব।

    to_ints:=function(r)
        local c,i,n;
        i:=0;n:=0;
        for c in CoefficientsOfUnivariatePolynomial(r) do
            if c=Z(2)^0 then          

                 # ^-- Right here you'll notice that the Z(2) is basically '1' in GF(2). So Z(2)^0 ~ 1 and Z(2)*0 ~ 0  
                 # effectively, this line checks for nonzero coefficients

                n:=n+2^i;
            fi;
            i:=i+1;
        od;
        return n;
    end;

চূড়ান্ত পদক্ষেপের জন্য, আমরা এই ফাংশনগুলিকে কল করি। আমরা দুটি পূর্ণসংখ্যার ইনপুট গ্রহণ করি, তাদেরকে রিংয়ের উপাদানগুলিতে রূপান্তর করি R, তারপরে এই উপাদানগুলিকে একসাথে গুণিত করি এবং পণ্যটি পূর্বে পূর্ণসংখ্যায় প্রেরণ করি।

return to_ints( to_ring(i)*to_ring(j));

1

রুবি, 76 75 73 বাইট

a,b=$*.map{|x|x.to_i}
o=0
while(b>0)
o^=a&-(b&1)
a<<=1
b>>=1
end
puts(o)

রুবি, 60 বাইট (কেবলমাত্র ফাংশন, কোনও আই / ও নেই)

def t(a,b)
o=0
while(b>0)
o^=a&-(b&1)
a<<=1
b>>=1
end
t
end


1

ডার্ট, 34 32 বাইট

m(a,b)=>a<1?0:a%2*b^m(a~/2,b*2);

সোজা-ফরোয়ার্ড পুনরাবৃত্তিমূলক বাস্তবায়ন।



1

জিএনইউ অ্যাসেমব্লার (x86_64 ম্যাক ওএস এক্স), 97 বাইট

এটি একটি উপযুক্ত ফাংশন যা সি থেকে কল করা যেতে পারে:

.text
.globl _f
_f:
movq %rdi,%xmm0;movq %rsi,%xmm1;pclmulqdq $0,%xmm1,%xmm0;movq %xmm0,%rax;ret

& এই সি প্রোগ্রাম দিয়ে পরীক্ষা করা যেতে পারে:

#include <stdio.h>
int f(int a, int b);
#define p(a,b) printf("%d %d %d\n", a, b, f(a, b))
int main(void)
{
    p(0,1);
    p(1,2);
    p(9,0);
    p(6,1);
    p(3,3);
    p(2,5);
    p(7,9);
    p(13,11);
    p(5,17);
    p(14,13);
    p(19,1);
    p(63,63);
}

মনে রাখবেন যে ম্যাক ওএস এক্স-এ, আপনাকে clang -x cএটি সি & নয় সি ++ হিসাবে সংকলন করতে ব্যবহার করতে হবে।

লিনাক্সের জন্য (যদি আমি ঠিক মনে করি) কোডটি 95 বাইট হবে:

.text
.globl f
f:
movq %rdi,%xmm0;movq %rsi,%xmm1;pclmulqdq $0,%xmm1,%xmm0;movq %xmm0,%rax;ret

আশ্চর্যজনকভাবে যথেষ্ট, এই সংস্করণটি ইনলাইন অ্যাসেমব্লিতে ফাংশনটি সংজ্ঞায়নের চেয়ে আসলে বেশি দীর্ঘ, তবে এটি ইতিমধ্যে আমাদের খাঁটি সি সমাধানের চেয়ে দীর্ঘ ছিল, তাই আমি সমাবেশটি চেষ্টা করার সিদ্ধান্ত নিয়েছিলাম।

সম্পাদন করা

যদি এটি একত্রিত আকার অনুসারে গণনা করা হয় (কোনও লেবেল এবং সি বাদ দিয়ে), তবে এটি

x86_64 এসেমব্লার, 22 বাইট:

0:  66 48 0f 6e c7          movq         %rdi,  %xmm0
5:  66 48 0f 6e ce          movq         %rsi,  %xmm1
a:  66 0f 3a 44 c1 00       pclmullqlqdq $0,    %xmm1,%xmm0
10: 66 48 0f 7e c0          movq         %xmm0, %rax
15: c3                      ret

আমি ভেবেছিলাম আপনি সমাবেশের ভাষাগুলি তাদের সংকলিত আকারে পরিমাপ করবেন।
নিসা

0

গল্ফ্লুয়া 68

x,y=I.r("*n","*n")r=0~@i=0,31r=B.x(r,x*B.ls(B.rs(y,i)%2,i+1))$w(r/2)

মূলত Ypnypn এর জাভা উত্তরের মতো একই বিটশিফিংয়ের মতো , তবে সঠিকভাবে কাজ করতে শেষ পর্যন্ত 2 দ্বারা বিভাজনের প্রয়োজন বলে মনে হচ্ছে। নীচে উদাহরণ হিসাবে স্টিডিন হিসাবে মান গ্রহণ করে

> 14 13 
70
> 19 1 
19
> 5 17 
85

0

সিলোন, 90 বাইট

alias I=>Integer;I x(I a,I b)=>[for(i in 0:64)if(b.get(i))a*2^i].fold(0)((y,z)=>y.xor(z));

বৃদ্ধি এই মাত্র আলগোরিদিম বর্ণনা হিসাবে aদ্বারা 2^iযেখানেই থাকুন না কেন iতম বিট সেট করা হয় b, এবং তাদের সব একসাথে যোগ XOR ব্যবহার করে। ইভারেজগুলি শেষ হয়েছে 0:64কারণ জেভিএম চলাকালীন ইন্টিজারগুলি সিলোননে 64৪ -বিট থাকে (জাভাস্ক্রিপ্ট হিসাবে চলার সময় কম হয় তবে b.get(i)কেবল মিথ্যা প্রত্যাবর্তন করে)।

বিন্যাসকৃত:

alias I => Integer;

I x(I a, I b) =>
      [
        for (i in 0:64)
            if (b.get(i))
                a * 2^i
      ].fold(0)((y, z) => y.xor(z));

ওরফে নিরাপদ এখানে একটি মাত্র বাইট।


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