単純なタスクを3回解決


15

1つの言語で3つのプログラムや関数を作成する必要があります。

これらのプログラムはすべて同じタスクを解決する必要がありますが、すべて異なる(ただし有効な)出力を提供する必要があります。(つまり、プログラムのすべてのペアに対して、異なる(しかし有効な)出力番号のセットを生成する入力が必要です。)

タスク

  • n1より大きい整数が与えられます
  • n 別個の正の整数を返すか出力する必要があり、それらのいずれもで割り切れないようにする必要がありますn
  • 数字の順序は重要ではなく、数字の順列は異なる出力としてカウントされません。

いくつかのinput => outputペアを持つプログラムの有効なトリプレット:

program A:
    2 => 5 9
    4 => 5 6 9 10
    5 => 2 4 8 7 1

program B:
    2 => 1 11
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

program C (differs only in one number from program B):
    2 => 1 13
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

得点

  • スコアは、3つのプログラムまたは機能の長さの合計です。
  • スコアが低いほど優れています。
  • プログラム/関数がコードを共有する場合、共有コードは、コードを使用するすべてのプログラムの長さにカウントされる必要があります。

1
各プログラムは、インクルードなしで独自のファイルから実行できる必要がありますか、それともプログラムは一度だけカウントされる共有モジュール/ライブラリに依存できますか?
キントピア

@quintopiaプログラム/関数はコードを共有しないでください。その場合、共有コードは、コードを使用するすべてのプログラムの長さにカウントされます。
randomra

回答:


4

Pyth、17 16バイト

5バイト:

^LhQQ

出力:

2: [1, 3]
3: [1, 4, 16]
4: [1, 5, 25, 125]

6バイト:

mh*QdQ

出力:

2: [1, 3]
3: [1, 4, 7]
4: [1, 5, 9, 13]

5バイト:

|RhQQ

出力:

2: [3, 1]
3: [4, 1, 2]
4: [5, 1, 2, 3]

代替バージョン、昇順: -ShQQ


1
ああ 私はその3番目のスキームが好きです。
キントピア

@isaacgああ、ごめんなさい
Maltysen

8

J、16バイト

機能1、5バイト

p:^i.

機能2、6バイト

+p:^i.

機能3、5バイト

>:^i.

使い方

機能1

p:^i.     Right argument: y

   i.     Compute (0 ... y-1).
p:        Compute P, the prime at index y (zero-indexed).
  ^       Return all powers P^e, where e belongs to (0 ... y-1).

以来、Pは素数でありP> YYが分裂することができないのP Eを

機能2

+p:^i.    Right argument: y

 p:^i.    As before.
+         Add y to all results.

場合yは分割PのE + yは、それだろうまた、分割のP E + Y - Y = PのE

機能3

>:^i.     Right argument: y

   i.     Compute (0 ... y-1).
>:        Compute y+1.
  ^       Return all powers (y+1)^e, where e belongs to (0 ... y-1).

場合yは分割(Y + 1)からeいくつかの素因数Qyが分割しなければならない(Y + 1)E

ただし、Qyy + 1の両方を分割するため、y + 1-y = 1になります。



2

Vitsy、54バイト

プログラム:

V1V \ [DV * 1 + N '' O1 +]
V2V \ [DV * 1 + N '' O1 +]
V3V \ [DV * 1 + N '' O1 +]

出力:

2 => 3 7
4 => 5 9 13 17
5 => 6 11 16 21 26
2 => 5 7
4 => 9 13 17 21
5 => 11 16 21 26 31
2 => 7 9
4 => 13 17 21 25 
5 => 16 21 26 31 36

仕組み(最初のプログラムを説明として使用):

V1V \ [DV * 1 + N '' O1 +]
V暗黙的な入力を最終的なグローバル変数としてキャプチャします。
 1後で使用するために1つをスタックにプッシュします。
  V \ []括弧内のすべての入力時間を実行します。
     Dスタックの一番上のアイテムを複製します。
      Vグローバル変数をスタックにプッシュします。
       * 1 +乗算し、1を加算します。これにより、割り切れなくなります。
          N '' O数字の後にスペースを出力します。
               1+スタックの残りの数に1を追加します。

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


2

Perl、79

これには-nフラグが必要なため、各プログラムに1文字が追加されます。

for$a(0..$_-1){say$_*$a+1}
for$a(1..$_){say$_*$a+1}
for$a(2..$_+1){say$_*$a+1}

かなり簡単です。


2

Mathematica、12 + 12 + 12 = 36バイト

# Range@#-1&
# Range@#+1&
#^Range@#+1&

テスト:

# Range@#-1&[10]
(* -> {9, 19, 29, 39, 49, 59, 69, 79, 89, 99} *)
# Range@#+1&[10]
(* -> {11, 21, 31, 41, 51, 61, 71, 81, 91, 101} *)
#^Range@#+1&[10]
(* -> {11, 101, 1001, 10001, 100001, 1000001, 10000001, 100000001, 1000000001, 10000000001} *)

出力例をいくつか追加していただけますか?
パエロエベルマン

2

CJam、8 + 8 + 8 = 24バイト

{,:)))+}
{_,f*:)}
{)_(,f#}

これらは、期待される3つの名前のない関数です。 n、スタック上にあり、その場所に整数のリストを残すことするです。これが最適かどうかはわかりませんが、後で短い解決策を探す必要があります。

テストスイート。

結果:

{,:)))+}
2 => [1 3]
3 => [1 2 4]
4 => [1 2 3 5]
5 => [1 2 3 4 6]

{_,f*:)}
2 => [1 3]
3 => [1 4 7]
4 => [1 5 9 13]
5 => [1 6 11 16 21]

{)_(,f#}
2 => [1 3]
3 => [1 4 16]
4 => [1 5 25 125]
5 => [1 6 36 216 1296]

最初のものも次のように動作します

{_),:)^}

または

{_(,+:)}

結果は、n = 2の場合に3つすべてが同じ出力を与えることを示します
-Sparr

@Sparr許可されています。チャレンジの例を確認してください。唯一の要件は、入力ごとに異なる結果ではなく、異なる関数を計算することです。
マーティンエンダー

ああ、彼らはいくつかの入力で異なる結果を持たなければなりません。それが私が誤解していることです。
スパー

2

Python 2、79バイト

lambda n:range(1,n*n,n)
lambda n:range(1,2*n*n,2*n)
lambda n:range(1,3*n*n,3*n)

で開始する三つの匿名関数1とのそれぞれでカウントアップn, 2*n, 3*nのためのn用語。


1

真剣に、20バイト

,;r*1+

,;R*1+

,;R1+*1+

ええ、これは最適ではありません...


1

パー、16バイト

ここで説明するカスタムエンコーディングは、文字ごとに1バイトのみを使用します。

✶″{*↑                   ## 3 => (0 1 2) => (0 3 6)  => (1 4 7)
✶″U{ⁿ↑                  ## 3 => (1 2 3) => (3 9 27) => (4 10 28)
✶U¡↑◄                   ## 3 => (1 2 3) =>             (1 2 4)

出力

2 => (1 3)
3 => (1 4 7)
4 => (1 5 9 13)
5 => (1 6 11 16 21)

2 => (3 5)
3 => (4 10 28)
4 => (5 17 65 257)
5 => (6 26 126 626 3126)

2 => (1 3)
3 => (1 2 4)
4 => (1 2 3 5)
5 => (1 2 3 4 6)

1

Haskell、54バイト

f n=n+1:[1..n-1]
g n=5*n+1:[1..n-1]
h n=9*n+1:[1..n-1]

これら3つの関数は非常に単純なので、…



1

Python 2、125バイト

N=input();print[i*N+1for i in range(N)]
N=input();print[i*N+1for i in range(1,N+1)]
N=input();print[i*N+1for i in range(2,N+2)]

ここの各行は完全なプログラムです。私の頭の中で最も明白な解決策。

EDIT @ Sherlock9は2バイトを保存しました。



0

Golfscript、50 51 57バイト

するために使用するもののGolfscriptバージョンquintopiaのPythonコード。各関数はnスタックを削除します。

{.,{1$*)}%\;}:f;    i*n+1 for i in range(n)
{.,{)1$*)}%\;}:g;   i*n+1 for i in range(1,n+1)
{.,{1$)\?}%\;}:h;   (n+1)**i for i in range(n)

0

TI-Basic(TI-84 Plus CE)、合計55 40バイト

PRGM:C 12 bytes
    seq(AnsX+1,X,1,Ans
PRGM:B 14 bytes
    seq(AnsX+1,X,2,Ans+1
PRGM:C 14 bytes
    seq(AnsX+1,X,3,Ans+2

シンプルで、他の多くの回答と同様に、それぞれはrange(N)のXの数字(X + A)N + 1のリストを表示し、Aはど​​のプログラム(1、2、または3)ですか。

古いソリューション(55バイト):

PRGM:C 17 bytes
    Prompt N
    For(X,1,N
    Disp XN+1
    End
PRGM:B 19 bytes
    Prompt N
    For(X,2,N+1
    Disp XN+1
    End
PRGM:C 19 bytes
    Prompt N
    For(X,3,N+2
    Disp XN+1
    End

シンプルで、他の多くの回答と同様に、それぞれがrange(N)のXに対して数字(X + A)N + 1を表示し、Aがどのプログラム(1、2、または3)であるかを示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.