Hoán đổi một nửa chương trình để kiểm tra ước số


19

Bốn chuỗi số nguyên

Trong thử thách này, bạn sẽ kiểm tra bốn thuộc tính khác nhau của một số nguyên dương, được đưa ra bởi các chuỗi sau. Một số nguyên dương N

  1. hoàn hảo ( OEIS A000396 ), nếu tổng các ước thích hợp của N bằng N . Trình tự bắt đầu với 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 ...
  2. refactorable ( OEIS A033950 ), nếu số lượng các ước của N là một ước của N . Trình tự bắt đầu với 1, 2, 8, 9, 12, 18, 24, 36, 40, 56, 60, 72, 80, 84, 88, 96, 104, 108, 128 ...
  3. thực tế ( OEIS A005153 ), nếu mỗi số nguyên 1 ≤ K ≤ N là một tổng của một số ước riêng biệt của N . Trình tự bắt đầu với 1, 2, 4, 6, 8, 12, 16, 18, 20, 24, 28, 30, 32, 36, 40, 42, 48, 54, 56 ...
  4. cao composit ( OEIS A002128 ), nếu mỗi số 1 ≤ K <N có ước nghiêm ngặt ít hơn N . Trình tự bắt đầu với 1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040 ...

Bốn chương trình

Nhiệm vụ của bạn là viết bốn chương trình (nghĩa là chương trình đầy đủ, định nghĩa hàm hoặc hàm ẩn danh thực hiện I / O theo bất kỳ phương thức chuẩn nào ). Mỗi chương trình sẽ giải quyết vấn đề thành viên của một trong các chuỗi này. Nói cách khác, mỗi chương trình sẽ lấy số nguyên dương N 1 làm đầu vào và xuất giá trị trung thực nếu N nằm trong chuỗi và giá trị giả nếu không. Bạn có thể giả sử rằng N nằm trong giới hạn của kiểu số nguyên chuẩn của ngôn ngữ lập trình của bạn.

Các chương trình phải liên quan theo cách sau. Có bốn chuỗi ABCDnhư vậy

  1. AC là chương trình công nhận số hoàn hảo.
  2. AD là chương trình công nhận số tái cấu trúc.
  3. BC là chương trình công nhận những con số thực tế.
  4. BD là chương trình công nhận số tổng hợp cao.

Chấm điểm

Điểm của bạn là tổng chiều dài (tính bằng byte) của chuỗi ABCD, hay nói cách khác, tổng số byte của bốn chương trình chia cho hai. Điểm thấp nhất trong mỗi ngôn ngữ lập trình là người chiến thắng. Luật tiêu chuẩn được áp dụng.

Ví dụ, nếu bốn dây là a{, b{n, +n}=n}?, sau đó bốn chương trình này a{+n}, a{=n}?, b{n+n}b{n=n}?, và tỷ số là 2 + 3 + 3 + 4 = 12 .


Câu trả lời:


6

JavaScript (ES6), 46 + 55 + 6 + 36 = 282 274 ... 158 143 byte

A:

n=>(r=0,D=x=>x&&D(x-1,n%x||(r++?q-=x:q=n)))(n)

B:

n=>(q=(g=D=x=>x&&!(n%x||(g|=m>2*(m=x),0))+D(x-1))(m=n))

C:

?!g:!q

Đ:

?(P=k=>--k?D(n=k)<q&P(k):1)(n):n%r<1

Kết quả là 4 chức năng ẩn danh trong đó cung cấp truthy / giá trị falsy cho các đầu vào tương ứng của họ ( AC, ADBCCung cấp cho true/ false, BDmang đến cho 1/ 0).

Kiểm tra đoạn


1
Tôi thích cách bạn trải đều mã thực tế trên cả 4 phần và trộn nó với "điều kiện" không giống tôi (tôi có mã ở phần A và B và "điều kiện" trên phần C và D.)
Erik the Outgolfer

2

Thạch , 8 + 17 + 2 1 + 2 = 29 28 byte

A:

Æṣ⁼$Ædḍ$

B:

ÆDŒPS€QṢwRµṖÆdṀ<Ʋ

C:

ƭ

Đ:

0?

Đối với các số thực tế (BC), 0là giả và bất kỳ kết quả nào khác là đúng.

AC và BC là các chương trình đầy đủ, vì chúng không thể tái sử dụng như các chức năng.


BC và BD dường như không hoạt động đúng.
Jonathan Allan

ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµhoạt động như B với chi phí là hai byte (và làm cho BC trả về 0 và 1 giống như các byte khác).
Jonathan Allan

@JonathanAllan Ồ không, có vẻ như tôi nhầm lẫn ŒPvới ŒṖ. Xấu hổ làm sao! Nó có hoạt động nếu bạn sửa nó không? (tức là thử bản chỉnh sửa mới của tôi) Dù sao nó cũng không dễ kiểm tra, đó là lý do tại sao tôi chưa bao gồm liên kết TIO.
Erik the Outgolfer 18/03/18

0

Haskell , 69 + 133 + 3 + 3 = điểm 208

A:

d n=filter((<1).mod n)[1..n]
f n=[sum(d n)-n==n,length(d n)`elem`d n]

B:

import Data.List
d n=filter((<1).mod n)[1..n]
f n=[all(\n->any(==n)$sum$subsequences$d n)[1..n],all((<length(d n)).length.d)[1..n-1]]

C:

!!0

Đ:

!!1

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

Vâng, nó khá rẻ nhưng tôi không đủ thông minh cho một giải pháp mát mẻ. : P


1
Tôi không biết nhiều về Haskell nhưng điều này có thể giúp bạn vớisubsequences
Asone Tuhid 18/03/18

[x|x<-[1..n],mod n x<1]ngắn hơn filter((<1).mod n)[1..n].
Laikoni
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.