負の整数のチャレンジですが、それはプライムタイムです!


12

私はこの質問について話している、あなたが少し混乱している場合はそれを見てみましょう。

主な任務

あなたの仕事は、連結された整数を降順で出力することですが、ヒットするたびに最大整数を増やします1 (この質問では、1は素数と見なされます)。これは最初の質問と何ら変わりはありませんが、ここで注意が必要な部分があります。出力されるすべての数値は素数にすぎない場合があります。これらは、スペースや改行なしで1つの文字列にまとめられます。入力も素数になります。

例:

1
21
321
5321
75321
1175321
Valid output:
1213215321753211175321

入力

コードに入力できるのは、印刷する最高の素数のみです。この入力はどこからでも入力できます(グラフィカル、STDIN)。入力は素数であることが保証されます。

出力

結果の数値を出力する必要があります。この数を得るには、カウントダウンを続け、それが素数である場合にのみ数を数え、すべての結果を1つの数に結び付けます。最後の番号「行」(例7, 5, 3, 2, 1)は完全に印刷する必要があります。出力は、読み取り可能なものであれば何でもかまいません(数字、文字列、グラフィカル)。テストケースをチェックするための同じ正規表現パターンが適用されます。

^(\D*(\d)+\D*|)$

出力がこのパターンと一致しない場合、コードは無効です。

ルール

  • 入力は素数であることが保証されており、必要でない限り、エラー処理を含めないでください。
  • 出力は、完全に接続された数値のみである可能性があるため、改行や改行でさえも分割されません。
  • アルゴリズムは、最初のインスタンスN(たとえば、17in 1175321)をチェックするのではなくN、実際の番号としての最初のインスタンスをチェックする必要があります。
  • 入力は確実に確実に行われます。必要がない限り、処理を追加しないでください。

テストケース

Input: -2, 0
Output: Any, or none (number isn't positive)

Input: 9
Output: Any, or none (number isn't prime)

Input: 1
Output: 1

Input: 7
Output: 121321532175321

Input: 23
Output: 1213215321753211175321131175321171311753211917131175321231917131175321

勝者

これはであるため、バイト長が最小のコードの作成者が勝ちます!


8
私は挑戦を変えることを提案しませんが、私は1定義によってプライムだとは思いません。
エリックアウトゴルファー16

3
1.テストケース1を作成することは、仕様と直接矛盾します。これにより、入力番号が素数であることが「保証」されます。2.出力仕様には、複数の矛盾とあいまいさが含まれているようです。「最後の数「行」(たとえば、7、5、3、2、1)を完全に印刷する必要があります」-他の人は印刷しませんか?「テストケースをチェックするための同じ正規表現パターンが適用されます」が、「出力は完全に接続された数値のみであるため、何によっても分割されない」ことはその正規表現に矛盾します。しかし、正規表現は空の文字列を許可するため、とにかく明らかに危険です。また、それを与える可能性のある入力はありません。
ピーターテイラー

1
1.「1つの末尾の改行が許可されます。」は、任意の数の末尾の文字を許可する正規表現パターンと冗長/矛盾します。2.「あなたの仕事は整数を出力する」というイントロ文は、後で単一の数値を出力するように要求するため、誤解を招く可能性があります。3.シーケンスと出力の全体的な説明は紛らわしいです。人々は基本的に、例(シーケンスリストとテストケース)を研究することによって、あなたが意味することをリバースエンジニアリングする必要があります。最後の課題にもこれらの問題があり、そこで提案された編集でそれらに対処しましたが、あなたはそれを拒否しました... :(
smls

5
1を任意に素数にすることのポイントは何ですか?
ザンダーホール

1
負の整数のチャレンジは、素数になるたびに速くなります;)
SplittyDev

回答:


5

ゼリー、9バイト

ÆR1;;\UFV

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

使い方

ÆR1;;\UFV  Main link. Argument: n

ÆR         Prime range; yield all primes up to n.
  1;       Prepend the "prime" 1.
    ;\     Cumulative concatenation; yield all prefixes of the prime range.
      U    Upend; reverse each prefix.
       F   Flatten the resulting 2D array.
        V  Eval. This casts the integer array to string first, thus concatenating
           the integers.

私はゼリーを読んで、その質問を理解するために、逆ではなく、ゴルフについて学ぶことにあまりにも深く関わっていることを知っています。(これは実際にはかなり読みやすいJellyプログラムです。私にとって紛らわしい点はV、リスト上の奇妙な特別なケースだけでした。)

5

処理中、161バイト

int p(int n){for(int k=1;++k<=sqrt(n);)if(n%k<1)return 0;return 1;}void t(int n){for(int i=1,j;i<=n;i++){if(p(i)<1)continue;for(j=i;j>0;j--)print(p(j)<1?"":j);}}

1つの関数が素数のチェックを行い、もう1つの関数が印刷を行います。で呼び出すt(7)

非ゴルフ

最初の関数は素数チェックを行います。この方法ではより多くのバイトが保存さintれるbooleanため、代わりにを返します。(のint代わりにboolean、の0代わりにfalse、の1代わりに、true

int Q103891p(int n){
  for(int k=1;++k<=sqrt(n);)
    if(n%k<1)return 0;
  return 1;
}

2番目の関数は、文字列を出力します。素数でない場合は、すべての数値を反復処理し、次の反復にスキップします。素数の場合、別のforループ内の印刷まで続きます。繰り返しますが、数値が素数であれば、それを印刷します。

void Q103891(int n){
  for(int i=1,j;i<=n;i++){
    if(p(i)<1)continue;
    for(j=i;j>0;j--)
      print(p(j)<1?"":j);
  }
}

5

ゼリー、12バイト

ÆR;@1
ÇÇ€UVV

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

1s がまったくなかったら、私のコードはÆRÆRUVV7バイトだけだったでしょう。

強化された説明:

ÇÇ€UVV Main link. Arguments: z.
Ç      Run link1 on z.
 ǀ    Run link1 on z's elements.
   U   Reverse z's elements.
    V  Flatten z.
     V Concatenate z's elements.

ÆR;@1 Link 1. Arguments: z.
ÆR    Range of primes [2..z].
    1 Integer: 1.
  ;@  Concatenate x to y.

(デニス?と呼ばれる)アイルランドの男が何らかの形でoutgolfed笑私を。


4

05AB1E、19バイト

LDpÏX¸ì€Lí˜ÐXQsp+ÏJ

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

説明

L                     # range [1 ... input]
 DpÏ                  # keep only primes
    X¸ì               # prepend a 1
       €L             # map: range [1 ... n]
         í            # reverse each sublist
          ˜           # flatten list to 1D
           Ð          # triplicate
            XQ        # check elements in one copy for equality with 1
              sp      # check elements in one copy for primality
                +     # add the above lists giving a list with true values at indices
                      # comtaining 1 or a prime
                 Ï    # keep only those elements of the unmodified copy of the list
                  J   # join

DpÏ文に驚いた。よくやった!
devRicher

2

Brachylog、17バイト

y:{e1|e#p}f@[rcw\

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

それより短くなることはできないようです...

説明

y                      The list [0, ..., Input]
 :{      }f            Find all...
   e1                     ...elements that are 1 (there is 1)...
     |                    ...or...
      e#p                 ...elements that are prime...
           @[          Take a prefix of the result
             rc        Reverse it and concatenate it into a number
               w       Write to STDOUT
                  \    Backtrack: try another prefix

2

GameMaker言語、169バイト

メイン関数(68バイト)

b=""for(i=1;i<=argument0;i++){c=i while(j)b+=string(p(c--))}return b

関数p(46バイト)

for(a=0;a<argument0;a++)while q(++b){}return b

関数q(55バイト)

n=argument0 for(i=2;i<n;i++)if!(n mod i)p=1return p|n=1

ニース、GMLを使用している人
FireCubez

@FireCubezありがとう:)よく使っていました。実際に私が学んだ最初のプログラミング言語でした。
ティムテック

1

MATL、15バイト

Zq"1@ZqP]1v!VXz

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

Zq      % Implicit input. Push array of primes up to that value
"       % For each prime in that array
  1     %   Push 1
  @     %   Push current prime
  Zq    %   Push array of primes up to that
  P     %   Reverse
]       % End
1       % Push 1
&h      % Concatenate all stack horizontally
V       % Convert to string
Xz      % Remove spaces. Implicit display

1

Perl 6、41バイト

{[~] flat [\R,] 1,|grep *.is-prime,2..$_}

オンラインで試してください。

説明:

  • 1, |grep(*.is-prime, 2..$_):1と素数のシーケンス... (1 2 3 5)
  • [,] ...:カンマ演算子を減らす(「fold」)... (1 2 3 5)
  • [\,] ...:中間結果(三角リデュース)で...((1) (1 2) (1 2 3) (1 2 3 5))
  • [\R,] ...反転メタ演算子をコンマに適用...((1) (2 1) (3 2 1) (5 3 2 1))
  • [~] flat ...:リストのネストを削除し、文字列連結演算子を折り返します... 1213215321

(これは、前のチャレンジに対する私の答えに基づいています。)


1

Mathematica、61バイト

ToString/@(1<>Prime@Range[Range@PrimePi@#,0,-1]/.Prime@0->1)&

整数の引数を取り、文字列を返す名前のない関数。(入力が素数でない場合は、最も近い素数に「切り捨て」ます。入力が正でない場合は、1のふりをします。)

この実装では、以前の同様の課題(この老犬は新しいトリックを学べないと言っている人)に対するMartin Enderの答えからの厄介なトリックを使用し<>ます。

問題のネストされたリストは、適切な長さ(で与えられPrimePi@#、入力までの素数の数)で、その回答と同様のネストされたリストを生成することから始まります。その後Prime、すべての要素に適用されます。たとえば5、3番目の素数である入力の場合、1番目、2番目、および3番目の素数はそれぞれ2、3、および5であるため、コードはをRange[Range@PrimePi@#,0,-1]生成し{{1,0},{2,1,0},{3,2,1,0}}Prime各要素に適用すると収量が生成され{{2,Prime[0]},{3,2,Prime[0]},{5,3,2,Prime[0]}}ます。マーティン・エンダーのアプローチにさらに多くのエラーを追加できたことを誇りに思いますPrime[0]

Prime[0]それは問題ではありませんが、それは大丈夫です:/.Prime@0->1それらをすべて1sに変えます。また1、先頭にが必要なので""、Martin Enderの回答を単に1に置き換えます。これは実際にバイトを節約します。


0

PHP、72バイト

for(;$n<$argv[1];print$s=$n.$s)for($i=2;$i>1;)for($i=++$n;--$i&&$n%$i;);

ウィットを実行 -r

壊す

for(;$n<$argv[1];               // loop $n up to argument:
    print$s=$n.$s)                  // 2. prepend $n to $s, print $s
    for($i=2;$i>1;)                 // 1. find next prime: break if $i<2
        for($i=++$n;--$i&&$n%$i;);      // if $n is prime, $i is 1 after loop (0 for $n=1)

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