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.


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


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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.