プログラムの半分をスワップして除数をテストする


19

4つの整数シーケンス

この課題では、次のシーケンスで与えられる正の整数の4つの異なるプロパティをテストします。正の整数N

  1. 完璧OEIS A000396は)、の適切約数の和であればNは等しいNを。シーケンスは、6、28、496、8128、33550336、8589869056、137438691328、2305843008139952128 ...で始まります...
  2. refactorableOEIS A033950)の約数の数ならばNでの約数であるN。シーケンスは、1、2、8、9、12、18、24、36、40、56、60、72、80、84、88、96、104、108、128 ...で始まります
  3. 実用的なOEIS A005153)、すべての整数の場合1≤K≤Nは、いくつかの別個の約数の和であるN。シーケンスは、1、2、4、6、8、12、16、18、20、24、28、30、32、36、40、42、48、54、56 ...で始まります
  4. 高度に複合OEIS A002128毎番号場合、)1≤K <Nがより厳密に少ない除数有するNを。シーケンスは、1、2、4、6、12、24、36、48、60、120、180、240、360、720、840、1260、1680、2520、5040 ...で始まります

4つのプログラム

あなたの仕事は4つのプログラム(完全なプログラム、関数定義、または標準的な方法でI / Oを実行する匿名関数を意味する)を書くことです。各プログラムは、これらのシーケンスのいずれかのメンバーシップ問題を解決します。換言すれば、各プログラムは、整数陽性を取るN≥1入力として、及び出力truthy値の場合にNがない場合のシーケンスであり、そしてfalsy値。Nは、プログラミング言語の標準整数型の範囲内にあると仮定できます。

プログラムは次のように関連している必要があります。そのABCDような4つの文字列があります

  1. AC 完全な数字を認識するプログラムです。
  2. AD リファクタリング可能な数値を認識するプログラムです。
  3. BC 実用的な数字を認識するプログラムです。
  4. BD 高度に合成された数値を認識するプログラムです。

得点

スコアは、文字列の合計長(バイト単位)、ABCDつまり、4つのプログラムの合計バイト数を2で割ったものです。各プログラミング言語で最も低いスコアが勝者です。標準の規則が適用されます。

4つの文字列である場合、例えば、a{b{n+n}及び=n}?、その後、4つのプログラムがありa{+n}a{=n}?b{n+n}およびb{n=n}?、スコア2 + 3 + 3 + 4 = 12です。


回答:


6

JavaScript(ES6)、46 + 55 + 6 + 36 = 282 274 ... 158 143バイト

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

D:

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

結果は、所与truthy /それらのそれぞれの入力のfalsy値(4つの匿名関数でありACADおよびBCギブtrue/ falseBD得られます1/ 0)。

テストスニペット


1
実際のコードを4つのパートすべてに広げて、私とは異なる「条件」と混合する方法が気に入っています(パートAとBにコードがあり、パートCとDに「条件」があります)
Erik the Outgolfer

2

ゼリー、8 + 17 + 2 1 + 2 = 29 28バイト

A:

Æṣ⁼$Ædḍ$

B:

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

C:

ƭ

D:

0?

実用的な数値(BC)について0は、虚偽であり、その他の結果は真実です。

ACとBCは関数として再利用できないため、完全なプログラムです。


BCとBDは適切に機能していないようです。
ジョナサンアラン

ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµただし、2バイトのコストでBとして機能します(BCは他の場合と同様に0と1のみを返します)。
ジョナサンアラン

@JonathanAllanああ、それは私が混乱ŒPしたようŒṖです。残念だ!それを修正すると機能しますか?(つまり、私の新しい編集を試してみてください)とにかくテストするのが非常に簡単というわけではありません。だから私はまだTIOリンクを含めていません。
エリックアウトゴルファー

0

ハスケル、69 + 133 + 3 + 3 =スコア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

D:

!!1

オンラインでお試しください!

ええ、それはかなり安いですが、私はよりクールなソリューションのために十分にスマートではありません。:P


1
私はHaskellについてあまり知りませんが、これはあなたを助けることができますsubsequences
Asone Tuhid

[x|x<-[1..n],mod n x<1]はより短いfilter((<1).mod n)[1..n]
ライコニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.