Hệ số đa thức Mod 2


14

quintopia đã đăng ở đây một thách thức để tính toán các hệ số đa thức (một số văn bản ở đây được sao chép từ đó). Có một thuật toán thú vị để tính hệ số đa thức mod 2.

Cho một danh sách các số, k 1 , k 2 , ..., k m , xuất ra phần dư của hệ số đa thức:

nhập mô tả hình ảnh ở đây

giảm mod 2. Sau đây thuật toán thực hiện điều này một cách hiệu quả: cho mỗi k i , tính mở rộng nhị phân của k i , nghĩa là tìm một ij như vậy mà mỗi một ij là 1 hoặc 0 và

nhập mô tả hình ảnh ở đây

Nếu có bất kỳ j sao cho a rj = a sj = 1 với r ≠ s, thì hệ số đa thức mod 2 liên quan là 0, nếu không thì hệ số đa thức mod 2 là 1.

Bài tập

Viết chương trình hoặc hàm lấy số m , k 1 , k 2 , ..., k m và xuất hoặc trả về hệ số đa thức tương ứng. Chương trình của bạn có thể tùy chọn lấy m làm đối số bổ sung nếu cần.

  • Các số này có thể được nhập theo bất kỳ định dạng nào mà một lượt thích, ví dụ được nhóm thành danh sách hoặc được mã hóa theo dạng đơn, hoặc bất cứ thứ gì khác, miễn là tính toán thực tế của hệ số đa phương thức được thực hiện bởi mã của bạn chứ không phải quá trình mã hóa.

  • Đầu ra có thể là bất kỳ giá trị trung thực nào nếu hệ số đa cực là lẻ và bất kỳ giá trị falsey nào nếu hệ số đa cực là chẵn.

  • Không được phép xây dựng để tính toán hệ số đa cực.

  • Tiêu chuẩn áp dụng.

Chấm điểm

Đây là mã golf: Giải pháp ngắn nhất trong byte thắng.

Ví dụ:

Để tìm hệ số đa cực của 7, 16 và 1000, chúng tôi mở rộng nhị phân từng loại:

nhập mô tả hình ảnh ở đây

Vì không có cột nào có nhiều hơn 1, nên hệ số đa cực là số lẻ và do đó chúng ta sẽ tạo ra một số thứ thật.

Để tìm hệ số đa cực của 7, 16 và 76, chúng tôi mở rộng nhị phân từng loại:

nhập mô tả hình ảnh ở đây

Vì cả 76 và 7 đều có số 4 trong khai triển nhị phân của chúng, nên hệ số đa cực là chẵn và do đó chúng tôi tạo ra giá trị falsey.

Các trường hợp thử nghiệm:

Input: [2, 0, 1]
Output: Truthy

Input: [5,4,3,2,1]
Output: Falsey

Input: [1,2,4,8,16]
Output: Truthy

Input: [7,16,76]
Output: Falsey

Input: [7,16,1000]
Output: Truthy

Input: [545, 1044, 266, 2240]
Output: Truthy

Input: [1282, 2068, 137, 584]
Output: Falsey

Input: [274728976, 546308480, 67272744, 135004166, 16790592, 33636865]
Output: Truthy

Input: [134285315, 33849872, 553780288, 544928, 4202764, 345243648]
Output: Falsey

1
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay!
Rɪᴋᴇʀ

Tôi nghĩ rằng một số ngôn ngữ ==cho sự bình đẳng có thể đã lưu một byte nếu sự thật và chim ưng được phép lật.
Ørjan Johansen

@ RjanJohansen Nghe hay đấy.
Hood

Câu trả lời:






2

Japt, 6 byte

Một cổng khác của giải pháp pizzapants184 & Leaky Nun.

x ¶Ur|

Kiểm tra nó


Về mặt kỹ thuật, pizzapants184 đã trả lời sớm hơn tôi 14 giây ...
Leaky Nun

2

JavaScript (ES6), 37 35 34 byte

Đã lưu 2 byte nhờ @ Mr.Xcoder
Đã lưu 1 byte nhờ @ETHproductions

So sánh tổng với bitwise OR (như pizzapants184Leaky Nun đã làm) ngắn hơn 1 3 4 byte so với cách tiếp cận ban đầu của tôi:

a=>(q=c=>eval(a.join(c)))`|`==q`+`

Các trường hợp thử nghiệm


Alt. phiên bản, 38 byte

a=>!a.some((x,i)=>a.some(y=>i--&&x&y))

Các trường hợp thử nghiệm


Về mặt kỹ thuật, pizzapants184 đã trả lời sớm hơn tôi 14 giây ...
Leaky Nun

-1 byte:a=>(q=c=>eval(a.join(c)))`|`==q`+`;
Sản phẩm ETH

@ETHproductions Đẹp! Điều này hoạt động tốt trong Node.js. Nhưng bạn đã quản lý để nó hoạt động trong một trình duyệt?
Arnauld

Hoạt động tốt với tôi trong Firefox 57. Bạn có đang gặp lỗi hoặc chỉ là nó không hoạt động đúng?
Sản phẩm ETH

@ETHproductions Trên thực tế, có nó hoạt động. Nó chỉ xảy ra thất bại trên repl.it .
Arnauld

2

Haskell , 38 byte

(==).sum<*>foldl1 xorlà một hàm ẩn danh trả về a Bool. Sử dụng như ((==).sum<*>foldl1 xor) [2,0,1].

import Data.Bits
(==).sum<*>foldl1 xor

Hãy thử trực tuyến!

  • Khá nhiều thủ thuật tương tự của pizzapants184 và Leaky Nun mà mọi người sử dụng, ngoại trừ với tên toán tử Haskell, nó tiết kiệm được một byte để sử dụng (bitwise) xor thay vì (.|.)(bitwise hoặc).

  • (==).sum<*>foldl1 xorlà một phiên bản miễn phí của \l->sum l==foldl1 xor l.


2

Java 8, 53 byte

a->{int i=0,j=0;for(int x:a){i+=x;j|=x;}return i==j;}

Cổng của câu trả lời Jelly của @LeakyNun .

Giải trình:

Hãy thử nó ở đây.

a->{             // Method with integer-array parameter and boolean return-type
  int i=0,j=0;   //  Two integers, both starting at 0
  for(int x:a){  //  Loop over the array
    i+=x;        //   Add them to the first integer
    j|=x;}       //   And bitwise-OR it with the second integer
  return i==j;}  //  Return if both integers are the same after the loop



1

Perl 6 , 15 byte

{.sum==[+|] $_}

Kiểm tra nó

Mở rộng:

{  # bare block lambda with implicit parameter 「$_」

    .sum  # the sum of 「$_」 (implicit method call)

  ==

    [+|]  # reduce using &infix:«+|» (numeric binary or)

      $_  # the input
}

1

Màu đỏ , 78 byte

f: func[x][b: :to-binary t: 0 s: b 0 foreach n x[t: t + n s: s or b n]s = b t]

Làm thế nào nó hoạt động:

Ung dung:

Red []
f: func [x][         -  a function taking a block as an argument
    b: :to-binary    -  an alias for the to-binary function
    t: 0             -  set the sum of the numbers to 0
    s: b 0           -  set the "or" total to binary 0
    foreach n x[     -  for each number in the block
        t: t + n     -  add it to the sum
        s: s or b n  -  bitwise or of its binary representation with the total
    ]
    s = b t          - are the sum (binary) and the "or" total equal?
]

Hãy thử trực tuyến!



0

Mẻ, 73 byte

@set/as=o=0
@for %%i in (%*)do @set/as+=%%i,o^|=%%i
@if %s%==%o% echo 1

Đầu ra 1cho sự thật, không có gì cho giả. Một cổng rõ ràng khác của thuật toán pizzapants184 / Leaky Nun.


0

J , 10 byte

+/=+./&.#:

Một cổng khác của giải pháp pizzapants184 & Leaky Nun.

Làm thế nào nó hoạt động?

+/.&.#: - chuyển đổi các số thành nhị phân, áp dụng theo bit hoặc theo lũy thừa của hai và chuyển đổi lại từ nhị phân sang thập phân

+/ - giảm đầu vào bằng cách thêm

= - có bằng nhau không?

Hãy thử trực tuyến!

Thay thế đơn giản

J , 12 byte

2>[:>./+/@#:

Làm thế nào nó hoạt động?

+/@#: - chuyển đổi từng số thành nhị phân và tìm tổng của mỗi lũy thừa 2

>./ - tìm tối đa

2>- có ít hơn 2 không? -> sự thật

Hãy thử trực tuyến!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.