Tauschen Sie die Programmhälften aus, um die Teiler zu testen

19

Vier ganzzahlige Folgen

In dieser Challenge testen Sie vier verschiedene Eigenschaften einer positiven Ganzzahl, die durch die folgenden Sequenzen gegeben sind. Eine positive ganze Zahl N ist

  1. Perfekt ( OEIS A000396 ), wenn die Summe der richtigen Teiler von N gleich N ist . Die Sequenz beginnt mit 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 ...
  2. refactorable ( OEIS A033950 ), wenn die Anzahl der Teiler von N ein Teiler von N . Die Sequenz beginnt mit 1, 2, 8, 9, 12, 18, 24, 36, 40, 56, 60, 72, 80, 84, 88, 96, 104, 108, 128 ...
  3. praktisch ( OEIS A005153 ), wenn jede ganze Zahl 1 ≤ K ≤ N eine Summe einiger verschiedener Teiler von N ist . Die Sequenz beginnt mit 1, 2, 4, 6, 8, 12, 16, 18, 20, 24, 28, 30, 32, 36, 40, 42, 48, 54, 56 ...
  4. stark zusammengesetzt ( OEIS A002128 ), wenn jede Zahl 1 ≤ K <N streng weniger Teiler als N hat . Die Sequenz beginnt mit 1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040 ...

Vier Programme

Ihre Aufgabe ist es, vier Programme zu schreiben (dh vollständige Programme, Funktionsdefinitionen oder anonyme Funktionen, die E / A nach einer der Standardmethoden ausführen ). Jedes Programm soll das Mitgliedschaftsproblem einer dieser Sequenzen lösen. Mit anderen Worten, jedes Programm nimmt eine positive ganze Zahl N ≥ 1 als Eingabe und gibt einen Wahrheitswert aus, wenn N in der Sequenz ist, und einen falschen Wert, wenn nicht. Sie können davon ausgehen, dass N innerhalb der Grenzen des ganzzahligen Standardtyps Ihrer Programmiersprache liegt.

Die Programme müssen folgendermaßen verknüpft sein. Es gibt vier ABCDsolche Saiten

  1. AC ist das Programm, das perfekte Zahlen erkennt.
  2. AD ist das Programm, das refactorable Zahlen erkennt.
  3. BC ist das Programm, das praktische Zahlen erkennt.
  4. BD ist das Programm, das sehr zusammengesetzte Zahlen erkennt.

Wertung

Ihre Punktzahl ist die Gesamtlänge (in Byte) der Zeichenfolgen ABCD, oder mit anderen Worten die Gesamtbytezahl der vier Programme geteilt durch zwei. Die niedrigste Punktzahl in jeder Programmiersprache ist der Gewinner. Es gelten die Standardregeln für .

Wenn die vier Saiten sind zum Beispiel a{, b{n, +n}und =n}?, dann die vier Programme sind a{+n}, a{=n}?, b{n+n}und b{n=n}?, und das Ergebnis ist 2 + 3 + 3 + 4 = 12.

Zgarb
quelle
Verbunden , Verbunden , Verbunden .
Mr. Xcoder

Antworten:

6

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

EIN:

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

Das Ergebnis ist eine 4 anonyme Funktionen , die give truthy / falsy Werte für ihre jeweiligen Eingänge ( AC, ADund BCgive true/ false, BDgibt 1/ 0).

Testschnipsel

ETHproductions
quelle
1
Mir gefällt, wie Sie den eigentlichen Code auf alle 4 Teile verteilt und mit den "Bedingungen" gemischt haben, die ich nicht
kenne
2

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

EIN:

Æṣ⁼$Ædḍ$

B:

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

C:

ƭ

D:

0?

Für praktische Zahlen (BC) 0ist falsch und jedes andere Ergebnis ist wahr.

AC und BC sind vollständige Programme, da sie nicht als Funktionen wiederverwendbar sind.

Erik der Outgolfer
quelle
BC und BD scheinen nicht richtig zu funktionieren.
Jonathan Allan
ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµarbeitet als B für zwei Bytes (und bewirkt, dass BC nur wie die anderen 0 und 1 zurückgibt).
Jonathan Allan
@JonathanAllan Oh nein, so scheint es , dass ich verwirrt ŒPmit ŒṖ. Schade! Funktioniert es, wenn Sie das beheben? (zB probiere mein neues Edit aus) Es ist sowieso nicht so einfach zu testen, deshalb habe ich noch keinen TIO-Link eingefügt.
Erik der Outgolfer
0

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

EIN:

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

Probieren Sie es online!

Ja, es ist ziemlich billig, aber ich bin nicht schlau genug für eine coolere Lösung. : P

total menschlich
quelle
1
Ich weiß nicht viel über Haskell, aber das könnte dir helfensubsequences
Asone Tuhid
[x|x<-[1..n],mod n x<1]ist kürzer als filter((<1).mod n)[1..n].
Laikoni