Program swap membagi dua untuk menguji pembagi


19

Empat urutan bilangan bulat

Dalam tantangan ini, Anda akan menguji empat properti berbeda dari bilangan bulat positif, yang diberikan oleh urutan berikut. Bilangan bulat positif N adalah

  1. sempurna ( Oei A000396 ), jika jumlah pembagi yang tepat dari N sama dengan N . Urutan dimulai dengan 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 ...
  2. refactorable ( Oei A033950 ), jika jumlah pembagi dari N adalah pembagi dari N . Urutan dimulai dengan 1, 2, 8, 9, 12, 18, 24, 36, 40, 56, 60, 72, 80, 84, 88, 96, 104, 108, 128 ...
  3. praktis ( OEIS A005153 ), jika setiap bilangan bulat 1 ≤ K ≤ N adalah jumlah dari beberapa pembagi N yang berbeda . Urutan dimulai dengan 1, 2, 4, 6, 8, 12, 16, 18, 20, 24, 28, 30, 32, 36, 40, 42, 48, 54, 56 ...
  4. sangat komposit ( Oei A002128 ), jika setiap nomor 1 ≤ K <N memiliki pembagi ketat kurang dari N . Urutan dimulai dengan 1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040 ...

Empat program

Tugas Anda adalah menulis empat program (artinya program lengkap, definisi fungsi, atau fungsi anonim yang menjalankan I / O dengan salah satu metode standar ). Setiap program harus menyelesaikan masalah keanggotaan salah satu dari urutan ini. Dengan kata lain, setiap program akan mengambil bilangan bulat positif N ≥ 1 sebagai input, dan menghasilkan nilai kebenaran jika N ada dalam urutan, dan nilai palsu jika tidak. Anda dapat mengasumsikan bahwa N berada dalam batas tipe integer standar bahasa pemrograman Anda.

Program harus terkait dengan cara berikut. Ada empat string ABCDsehingga

  1. AC adalah program yang mengenali angka sempurna.
  2. AD adalah program yang mengenali angka yang dapat dihidupkan kembali.
  3. BC adalah program yang mengenali angka praktis.
  4. BD adalah program yang mengenali angka yang sangat komposit.

Mencetak gol

Skor Anda adalah total panjang (dalam byte) dari string ABCD, atau dengan kata lain, jumlah byte total dari empat program dibagi dua. Skor terendah dalam setiap bahasa pemrograman adalah pemenangnya. Aturan standar berlaku.

Misalnya, jika empat senar yang a{, b{n, +n}dan =n}?, kemudian empat program yang a{+n}, a{=n}?, b{n+n}dan b{n=n}?, dan skor adalah 2 + 3 + 3 + 4 = 12.


Jawaban:


6

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

SEBUAH:

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

D:

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

Hasilnya adalah 4 fungsi anonim yang memberi truthy / nilai falsy untuk input masing-masing ( AC, AD, dan BCmemberi true/ false, BDmemberikan 1/ 0).

Cuplikan tes


1
Saya suka bagaimana Anda telah menyebarkan kode aktual ke semua 4 bagian dan mencampurnya dengan "conditional" tidak seperti saya (saya memiliki kode pada bagian A dan B dan "conditional" pada bagian C dan D.)
Erik the Outgolfer

2

Jelly , 8 + 17 + 2 1 + 2 = 29 28 byte

SEBUAH:

Æṣ⁼$Ædḍ$

B:

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

C:

ƭ

D:

0?

Untuk angka praktis (BC), 0itu palsu dan hasil lainnya adalah benar.

AC dan BC adalah program penuh, karena tidak dapat digunakan kembali sebagai fungsi.


SM dan BD sepertinya tidak berfungsi dengan baik.
Jonathan Allan

ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµberfungsi sebagai B untuk biaya dua byte (dan membuat BC mengembalikan 0 dan 1 hanya seperti yang lain).
Jonathan Allan

@JonathanAllan Oh tidak, tampaknya aku bingung ŒPdengan ŒṖ. Sayang sekali! Apakah itu berfungsi jika Anda memperbaikinya? (Yaitu coba edit baru saya) Lagipula itu tidak mudah untuk diuji, itu sebabnya saya belum memasukkan tautan TIO.
Erik the Outgolfer

0

Haskell , 69 + 133 + 3 + 3 = skor 208

SEBUAH:

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

D:

!!1

Cobalah online!

Ya, ini cukup murah tapi saya tidak cukup pintar untuk solusi yang lebih keren. : P


1
Saya tidak tahu banyak tentang Haskell tetapi ini bisa membantu Anda dengansubsequences
Asone Tuhid

[x|x<-[1..n],mod n x<1]lebih pendek dari filter((<1).mod n)[1..n].
Laikoni
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.