256 উপাদান সহ একটি ক্ষেত্র সংজ্ঞায়িত করুন


15

গণিতে একটি ক্ষেত্র হ'ল সংখ্যার একটি সেট, সংযোজন এবং গুণগত ক্রিয়াকলাপগুলি এর সাথে সংজ্ঞায়িত করা হয়, যেমন তারা নির্দিষ্ট অক্ষগুলি সন্তুষ্ট করে (উইকিপিডিয়ায় বর্ণিত; নীচেও দেখুন)।

একটি সীমাবদ্ধ ক্ষেত্রের পি এন উপাদান থাকতে পারে, যেখানে pএকটি মৌলিক সংখ্যা এবং nএটি একটি প্রাকৃতিক সংখ্যা। এই চ্যালেঞ্জে, আসুন নেওয়া যাক p = 2এবং n = 8তাই 256 উপাদান সহ একটি ক্ষেত্র তৈরি করি।

ক্ষেত্রের উপাদানগুলি একটি ব্যাপ্তিতে ধারাবাহিক পূর্ণসংখ্যার হওয়া উচিত 0এবং এতে 1:

  • -128 ... 127
  • 0 ... 255
  • বা অন্য যে কোনও ব্যাপ্তি

নির্ধারণ দুই ফাংশন (অথবা প্রোগ্রাম, যে যদি সহজ হয়), a(x,y)বিমূর্ত "উপরন্তু" জন্য, এবং m(x,y)বিমূর্ত "গুণ" এর জন্য, এই ধরনের যে তারা ক্ষেত্র উপপাদ্য ব্যবহার সন্তুষ্ট:

  • ধারাবাহিকতা: a(x,y)এবং m(x,y)একই যুক্তি যুক্ত হলে একই ফলাফল উত্পন্ন করে result
  • নিবিড়তা: ফলাফল aএবং mপ্রাসঙ্গিক পরিসীমা একটি পূর্ণসংখ্যা
  • সমিতি: যে কোনওর জন্য x, yএবং zপরিসীমাটির a(a(x,y),z)সমান a(x,a(y,z)); একই জন্যm
  • যাতায়াত: যে কোনও xএবং yব্যাপ্তির জন্য, a(x,y)সমান a(y,x); একই জন্যm
  • ডিস্ট্রিবিউবিটিভিটি: যে কোনওর জন্য x, yএবং zব্যাপ্তির m(x,a(y,z))সমানa(m(x,y),m(x,z))
  • নিরপেক্ষ উপাদান: xপরিসরের a(0,x)যে কোনওটির জন্য x, m(1,x)সমান এবং সমানx
  • অস্বীকৃতি: কোনো জন্য xসীমার মধ্যে, এমন বিদ্যমান yযে a(x,y)হয়0
  • ইনভার্স: কোনো জন্য x≠0সীমার মধ্যে, এমন বিদ্যমান yযে m(x,y)হয়1

নাম aএবং mকেবল উদাহরণ; আপনি অন্য নাম, বা নামবিহীন ফাংশন ব্যবহার করতে পারেন। আপনার উত্তরের বিষয়ে স্কোর জন্য বাইট-লেন্থ এর সমষ্টি aএবং m

যদি আপনি একটি অন্তর্নির্মিত ফাংশন ব্যবহার করেন তবে দয়া করে এমন শব্দগুলিতেও বর্ণনা করুন যা ফলাফল দেয় (উদাহরণস্বরূপ একটি গুণ টেবিল সরবরাহ করুন)।


3
@ লেকিউন "সংযোজন" কেবল এখানে একটি বিমূর্ত অপারেশন যা উপরের বৈশিষ্ট্যগুলিকে সন্তুষ্ট করে। প্রয়োজন নেই a(2,1) = 3, a(2,1) = 5উপরের অক্ষগুলি সন্তুষ্ট হওয়া পর্যন্ত আপনার পক্ষে থাকতে পারে । aবুদ্ধিমান সংখ্যার ক্ষেত্র থেকে আপনি যেমন ব্যবহার করেছেন এমন সাধারণ সংযোজনের সাথে কিছু করার দরকার নেই।
মার্টিন ইন্ডার

2
একটি পরিবর্তনীয় রিং তুচ্ছ। একটি ক্ষেত্র ... এত সহজ নয়।
নিল

এতে কিছু ভুল আছে a=+ m=×?
অ্যাডম

4
@ অ্যাডম হ্যাঁ - 2 এর বিপরীতমুখীতা যদি না থাকেm=×
Sp3000

উত্তর:


4

ইন্টেল x86-64 + AVX-512 + GFNI, 11 বাইট

add:
    C5 F0 57 C0     # vxorps     xmm0, xmm1, xmm0
    C3              # ret
mul:
    C4 E2 79 CF C1  # vgf2p8mulb xmm0, xmm0, xmm1
    C3              # ret

GF2P8MULBআইস লেকের সিপিইউগুলিতে নতুন নির্দেশনা ব্যবহার করে ।

নির্দেশটি সীমাবদ্ধ ক্ষেত্রের জিএফ (2 8 ) এর উপাদানগুলিকে গুণিত করে , প্রথম উত্স অপারেন্ডে বাইট (ক্ষেত্র উপাদান) এবং দ্বিতীয় উত্স অপারেণ্ডের সাথে সম্পর্কিত বাইটে কাজ করে। ক্ষেত্রের জিএফ (2 8 ) হ্রাস বহুপদী x 8 + x 4 + x 3 + x + 1 এর সাথে বহুপদী প্রতিনিধিত্ব করে ।


13

পাইথন 2, 11 + 45 = 56 বাইট

সংযোজন (11 বাইট):

int.__xor__

গুণ (45 বাইট):

m=lambda x,y:y and m(x*2^x/128*283,y/2)^y%2*x

সীমার মধ্যে ইনপুট নম্বর নেয় [0 ... 255]। সংযোজনটি হ'ল বিটওয়াইজ এক্সওআর, গুণটি হ'ল রাশিয়ান কৃষকের সাথে জিএফ 2 এর গুণফলগুলির সাথে বহুবচনগুলির গুণক ।

এবং যাচাইয়ের জন্য:

a=int.__xor__
m=lambda x,y:y and m(x*2^x/128*283,y/2)^y%2*x

for x in range(256):
    assert a(0,x) == a(x,0) == x
    assert m(1,x) == m(x,1) == x

    assert any(a(x,y) == 0 for y in range(256))

    if x != 0:
        assert any(m(x,y) == 1 for y in range(256))

    for y in range(256):
        assert 0 <= a(x,y) < 256
        assert 0 <= m(x,y) < 256
        assert a(x,y) == a(y,x)
        assert m(x,y) == m(y,x)

        for z in range(256):
            assert a(a(x,y),z) == a(x,a(y,z))
            assert m(m(x,y),z) == m(x,m(y,z))
            assert m(x,a(y,z)) == a(m(x,y), m(x,z))

আমাদের একজনের পরিবর্তন হতে চলেছে: পি
মেগো

@ মেগো হাহ, ভাল ... আমি চেষ্টা করে দেখব আমি অন্য কোনও পন্থা পাই কিনা। যদিও বীট করা কঠিন হতে পারে।
Sp3000

1
এটি কোন বহুভিত্তিক উপর ভিত্তি করে?
ফেয়ারস

1
@ এলস্পাইস এখন আমি বুঝতে পেরেছি যে আমি চালিয়ে খুব সহজেই বহুপদী খুঁজে পেতে পারি m(2,128)যার ফলস্বরূপ ২ = = ২৮৩ - ২৫6 হয়, সুতরাং আপনি সঠিক এবং বহুপদীটি সঠিক x^8 + x^4 + x^3 + x + 1
ফেয়ারস

1
@ এলএসপাইস নীলের উত্তরে তিনি একটি অ্যালগরিদমের উত্স হিসাবে একটি উইকিপিডিয়া পৃষ্ঠা দেন, তাই সম্ভবত সবাই এটি পড়েন। তবে এটি যাইহোক কোড গল্ফের জন্য এটি সবচেয়ে সুস্পষ্ট পছন্দ কারণ এটি এই প্রতিনিধিত্বের 8 ম ডিগ্রির মধ্যে সর্বনিম্ন অপরিবর্তনীয় বহুপদী।
ফেয়ারস

6

জাভাস্ক্রিপ্ট (ES6), 10 + 49 = 59 বাইট

a=(x,y)=>x^y
m=(x,y,p=0)=>x?m(x>>1,2*y^283*(y>>7),p^y*(x&1)):p

ডোমেন 0 ... 255. উত্স


2
আপনার সম্ভবত ব্যবহার করা ব্যাপ্তি নির্দিষ্ট করা উচিত।
মার্টিন ইন্ডার

4

হুন , 22 বাইট

[dif pro]:(ga 8 283 3)

হানের ইতিমধ্যে একটি ফাংশন রয়েছে ++gaযা এইএস বাস্তবায়নে ব্যবহারের জন্য গ্যালোইস ফিল্ডগুলি তৈরি করে। এটি দুটি প্রোগ্রাম ব্যবহার না করে দুটি ফাংশনের একটি দ্বিগুণ ফিরিয়ে দেয়।

ডোমেনে কাজ করে [0...255]

পরীক্ষা স্যুট:

=+  f=(ga 8 283 3)
=+  n=(gulf 0 255)

=+  a=dif:f
=+  m=pro:f

=+  %+  turn  n
    |=  x/@
    ?>  =((a 0 x) x)
    ?>  =((m 1 x) x)
    ~&  outer+x

    %+  turn  n
      |=  y/@
      ?>  =((a x y) (a y x))
      ?>  &((lte 0 (a x y)) (lte (a x y) 255))
      ?>  &((lte 0 (m x y)) (lte (m x y) 255))

      %+  turn  n
        |=  z/@
        ?>  =((a (a x y) z) (a x (a y z)))
        ?>  =((m x (a y z)) (a (m x y) (m x z)))
        ~
"ok"

একটি গুণ টেবিল পোস্ট করা বিশাল হবে, সুতরাং এখানে কিছু এলোমেলো টেস্টকেস রয়েছে:

20x148=229
61x189=143
111x239=181
163x36=29
193x40=1

1

আইএ -32 মেশিন কোড, 22 বাইট

"গুণ", 18 বাইট:

33 c0 92 d1 e9 73 02 33 d0 d0 e0 73 02 34 1b 41
e2 f1

"সংযোজন", 4 বাইট:

92 33 c1 c3

এটি কিছুটা প্রসারিত করে: "গুণ" কোডটিতে ফাংশন প্রস্থান কোডের অভাব রয়েছে; এটি ঠিক পরে মেমরিতে থাকা "সংযোজন" কোডের উপর নির্ভর করে, যাতে এটি "পড়ার মাধ্যমে" করতে পারে। কোড সাইজ 1 বাইট কমাতে আমি এটি করেছি।

উত্স কোড ( mlএমএস ভিজ্যুয়াল স্টুডিও দ্বারা একত্রিত করা যেতে পারে ):

    TITLE   x

PUBLIC @m@8
PUBLIC @a@8

_TEXT   SEGMENT USE32
@m@8    PROC
    xor eax, eax;
    xchg eax, edx;
myloop:
    shr ecx, 1
    jnc sk1
    xor edx, eax
sk1:
    shl al, 1
    jnc sk2
    xor al, 1bh
sk2:
    inc ecx
    loop myloop
@m@8 endp

@a@8 proc
    xchg eax, edx;
    xor eax, ecx
    ret
@a@8    ENDP
_text ENDS
END

অ্যালগরিদম হ'ল x^8 + x^4 + x^3 + x + 1হেক্সাডেসিমাল সংখ্যা দ্বারা প্রতিনিধিত্ব করা সাধারণ বহুভুজের সাথে জড়িত একটি স্ট্যান্ডার্ড 1b। "গুণ" কোড ফলাফল সংগ্রহ করে edx। সম্পন্ন হয়ে গেলে, এটি সংযোজন কোডের মধ্যে পড়ে, যা এটিকে সরিয়ে দেয় eax(রিটার্নের মান ধরে রাখতে প্রচলিত রেজিস্টার); xorসঙ্গে ecxএকটি নো অপ কারণ যে সময়ে হয়, ecxসাফ করা হয়।

একটি অদ্ভুত বৈশিষ্ট্য লুপ হয়। শূন্যের পরিবর্তে পরীক্ষা করা

cmp ecx, 0
jne myloop

এটি নিবেদিত loopনির্দেশ ব্যবহার করে । কিন্তু এই নির্দেশ 0. সাথে তুলনা এই ক্ষতিপূরণের জন্য সামনে লুপ "কাউন্টার" কমে যায়, কোড ব্যবহার করার আগে এটা বৃদ্ধি loopনির্দেশ।


0

গণিত 155 বাইট

f[y_]:=Total[x^Reverse@Range[0,Log[2,y]]*RealDigits[y,2][[1]]];o[q_,c_,d_]:=FromDigits[Reverse@Mod[CoefficientList[PolynomialMod[q[f@c,f@d],f@283],x],2],2]

বাস্তবায়ন

(*
  in: o[Times, 202, 83]    out: 1
  in: o[Plus, 202, 83]     out: 153
*)

সংযোজন চেক:

(*
  in: BitXor[202, 83]      out: 153
*)

আরও:

(*
  in: o[Times, #, #2] & @@@ {{20, 148}, {61, 189}, {111, 239}, {163, 36}, {193, 40}}
  out: {229, 143, 181, 29, 1}
*)

এনবি {283, 285, 299, 301, 313, 319, 333, 351, 355, 357, 361, 369, 375, 379, 391, 395, 397, 415, 419, 425, 433, 445, 451, 463, 471, 477, 487, 499, 501, 505}এর জায়গায় যে কোনওটি ব্যবহার করতে সক্ষম হওয়া উচিত 283


ভাল, এখানে 13 বাইট কম আছে: ±y_:=Total[#&@@y~RealDigits~2x^Reverse@Range[0,2~Log~y]];p[q_,c_,d_]:=Fold[#+##&,Reverse@CoefficientList[q[±c,±d]~PolynomialMod~±283,x]~Mod~2](ধরে নেয় যে উৎস আইএসও 8859-1 সালে এনকোড করা হয়)
মার্টিন Ender

@ মার্টিন ইন্ডার আপনার পরামর্শটি কীভাবে প্রয়োগ করবেন তা সম্পর্কে নিশ্চিত নয়
মার্টিন

@ মার্টিন আপনি ঠিক আগের মতো এটি ব্যবহার করতে পারেন, আমি কেবল ±পরিবর্তে fএবং pপরিবর্তে ব্যবহার করেছি o(অবশ্যই আপনি এটি হিসাবে রাখতে পারেন o, আমি কেবল ব্যবহার করেছি pযাতে আমি উভয়টি পরীক্ষা করতে পারি), এবং তারপরে স্ট্যান্ডার্ড সহ আরও কয়েকটি বাইট সংরক্ষণ করেছি সিনট্যাকটিক চিনির কৌশল
মার্টিন ইন্ডার

@ মার্টিন ইন্দ্রাও ±একইরকম কাজ করতে পারে fতবে pনিশ্চিত নয় যে আমি কোথায় ভুল করছি
মার্টিন

আপনি যদি এটিকে মন্তব্য থেকে সরাসরি অনুলিপি করেন তবে আপনার ব্রাউজার যেখানেই মন্তব্যে লাইন ব্রেকটি প্রদর্শন করবে সেখানে কিছু অনুচ্চারিত অক্ষর থাকতে পারে। অনুলিপি করার পরে সেই অবস্থানের চারপাশে থাকা অক্ষরগুলি মুছুন এবং সেগুলি পুনরায় টাইপ করুন। যদি এটি না করে তবে সমস্যাটি কোথায় তা আমি নিশ্চিত নই ..
মার্টিন এন্ডার

-1

ব্রেনফাক, ২৮ টি অক্ষর

ভাগ্যক্রমে, স্ট্যান্ডার্ড ব্রেইনফাক 256 মডিউলগুলি করে।

সংযোজন [->+<]:, ধরে নেওয়া হয় যে ইনপুটগুলি টেপের প্রথম দুটি অবস্থানে থাকে, আউটপুটটিকে 0 অবস্থানে রাখে

গুণ:, [->[->+>+<<]>[-<+>]<<]ধরে নেওয়া হয় যে ইনপুটগুলি টেপের প্রথম দুটি অবস্থানে থাকে, আউটপুটটি 3 অবস্থানে রাখে

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