Die negative Order Integer Challenge, aber es ist Prime Time!

12

Im Gespräch über diese Frage , werfen Sie einen Blick darauf, wenn Sie ein bisschen verwirrt sind.

Hauptaufgabe

Ihre Aufgabe ist es, verkettete Ganzzahlen in absteigender Reihenfolge auszugeben, aber die maximale Ganzzahl bei jedem Treffer zu erhöhen 1 (für diese Frage wird 1 als Primzahl betrachtet) . Dies hört sich zwar nicht anders an als die erste Frage, aber hier kommt der schwierige Teil: Alle ausgegebenen Zahlen dürfen nur Primzahlen sein . Diese werden ohne Leerzeichen oder Zeilenumbrüche zu einer einzigen Zeichenfolge zusammengefügt. Ihre Eingabe wird auch eine Primzahl sein .

Beispiel:

1
21
321
5321
75321
1175321
Valid output:
1213215321753211175321

Eingang

Ihr Code kann nur eine Eingabe annehmen: die höchste zu druckende Primzahl. Diese Eingabe kann von überall kommen (grafisch, STDIN). Sie können sicher sein, dass die Eingabe eine Primzahl ist.

Ausgabe

Sie müssen die resultierende Nummer ausgeben. Sie können diese Zahl erhalten, indem Sie den Countdown fortsetzen. Zählen Sie die Zahl nur, wenn es sich um eine Primzahl handelt, und verbinden Sie dann alle Ergebnisse zu einer Zahl. Die letzte Zahl "row" (zB 7, 5, 3, 2, 1) muss vollständig ausgedruckt werden. Die Ausgabe kann beliebig sein (Zahlen, Zeichenfolgen, Grafiken), solange sie lesbar ist. Es gilt dasselbe Regex-Muster für die Überprüfung Ihrer Testfälle:

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

Wenn Ihre Ausgabe nicht mit diesem Muster übereinstimmt, ist Ihr Code ungültig.

Regeln

  • Die Eingabe wird als primitiv eingestuft. Schließen Sie die Fehlerbehandlung nicht ein, es sei denn, Sie möchten / müssen.
  • Die Ausgabe kann nur eine vollständig verbundene Nummer sein und wird daher nicht durch irgendetwas aufgeteilt, auch nicht durch Zeilenumbrüche.
  • Ihr Algorithmus sollte nicht auf die erste Instanz des NAuftretens prüfen (z. B. den 17Eingang 1175321), sondern auf die erste Instanz von Nals tatsächliche Zahl.
  • Ihre Eingabe ist positiv, fügen Sie keine Bearbeitung hinzu, es sei denn, Sie möchten / müssen.

Testfälle

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

Gewinner

Das ist , also gewinnt der Autor des Codes mit der geringsten Länge in Bytes!

devRicher
quelle
8
Ich werde nicht vorschlagen, die Herausforderung zu ändern, aber ich denke nicht, dass dies 1per Definition eine Primzahl ist.
Erik der Outgolfer
3
1. Ein Testfall 1widerspricht direkt der Spezifikation, die " sicherstellt ", dass die eingegebene Zahl eine Primzahl ist. 2. Die Ausgabespezifikation scheint mehrere Widersprüche und Mehrdeutigkeiten zu enthalten. " Die letzte Zahl" row "(zB 7, 5, 3, 2, 1) muss vollständig gedruckt werden " - also die anderen nicht? " Es gilt dasselbe Regex-Muster für die Prüfung Ihrer Testfälle ", aber " Die Ausgabe ist möglicherweise nur eine vollständig verbundene Zahl, daher nicht durch irgendetwas aufgeteilt " widerspricht diesem regulären Ausdruck. Aber der reguläre Ausdruck ist ohnehin eindeutig zweifelhaft, weil er die leere Zeichenfolge zulässt, und es gibt keine Eingabe, die dies bewirken könnte.
Peter Taylor
1
1. " Eine einzelne abschließende Zeile ist zulässig. " Ist redundant / inkonsistent mit dem Regex-Muster, das eine beliebige Anzahl abschließender Zeichen zulässt . 2. Der Intro-Satz " Ihre Aufgabe ist es, Ganzzahlen auszugeben " ist irreführend, da Sie später nach einer einzelnen Zahl fragen. 3. Die gesamte Erklärung der Sequenz und der Ausgabe ist verwirrend - die Leute müssen im Grunde das, was Sie meinen, durch Studieren der Beispiele (Sequenzliste und Testfälle) rückentwickeln. Die letzte Herausforderung hatte auch diese Probleme, und ich habe sie dort in einem
Änderungsvorschlag
5
Was bringt es, 1 willkürlich zur Primzahl zu machen?
Xanderhall
1
Die negative Ordnung ganzzahlige Herausforderung, aber jedes Mal, wenn es eine Primzahl ist, wird es schneller;)
SplittyDev

Antworten:

5

Gelee , 9 Bytes

ÆR1;;\UFV

Probieren Sie es online!

Wie es funktioniert

Æ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.
Dennis
quelle
Ich weiß, dass ich zu tief in das Golfen eintauche, wenn ich das Gelee lese, um die Frage zu verstehen, und nicht umgekehrt. (Dies ist eigentlich ein ziemlich lesbares Jelly-Programm. Der einzige verwirrende Punkt für mich war der seltsame Sonderfall Vauf einer Liste.)
5

Verarbeitung, 161 Bytes

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);}}

Eine Funktion führt die Primalitätsprüfung durch, die andere den Druck. Nennen Sie es durcht(7)

Ungolfed

Die erste Funktion führt die Primalitätsprüfung durch. Es wird eine intstatt einer zurückgegeben, booleanda auf diese Weise mehr Bytes gespeichert werden. ( intstatt boolean, 0statt false, 1statt true)

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

Die zweite Funktion druckt den String aus. Es durchläuft jede Zahl. Wenn es keine Primzahl ist, fahren Sie mit der nächsten Iteration fort. Wenn es eine Primzahl ist, fährt es mit dem Drucken in einer anderen forSchleife fort. Wiederum, wenn die Zahl eine Primzahl ist, drucken wir sie aus, andernfalls nicht.

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);
  }
}
Kritixi Lithos
quelle
5

Gelee , 12 Bytes

ÆR;@1
ÇÇ€UVV

Probieren Sie es online!

Wenn es nicht für 1s gewesen wäre, wäre mein Code nur ÆRÆRUVVfür 7 Bytes gewesen.

Erweiterte Erklärung:

ÇÇ€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.

Der Ire (genannt Dennis?) Hat mich irgendwie überrannt , lol.

Erik der Outgolfer
quelle
4

05AB1E , 19 Bytes

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

Probieren Sie es online!

Erläuterung

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
Emigna
quelle
Erstaunt über die DpÏAussage. Gute Arbeit!
DevRicher
2

Brachylog , 17 Bytes

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

Probieren Sie es online!

Kann nicht kürzer scheinen als das ...

Erläuterung

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
Tödlich
quelle
2

GameMaker-Sprache, 169 Byte

Hauptfunktion (68 Bytes)

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

Funktion p (46 Bytes)

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

Funktion q (55 Bytes)

n=argument0 for(i=2;i<n;i++)if!(n mod i)p=1return p|n=1
Timtech
quelle
Nett, jemand, der GML verwendet
FireCubez
@FireCubez Danke :) Ich habe es oft benutzt. Es war tatsächlich die erste Programmiersprache, die ich gelernt habe.
Timtech
1

MATL , 15 Bytes

Zq"1@ZqP]1v!VXz

Probieren Sie es online!

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
Luis Mendo
quelle
1

Perl 6 , 41 Bytes

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

( Probieren Sie es online. )

Erläuterung:

  • 1, |grep(*.is-prime, 2..$_): Folge von 1 und Primzahlen ... (1 2 3 5)
  • [,] ...: Verkleinern ("Falten") über Kommaoperator ... (1 2 3 5)
  • [\,] ...: Mit Zwischenergebnissen ( dreieckig reduzieren ) ...((1) (1 2) (1 2 3) (1 2 3 5))
  • [\R,] ...: Wende den umgekehrten Meta-Operator auf das Komma an ...((1) (2 1) (3 2 1) (5 3 2 1))
  • [~] flat ...: Listenverschachtelung entfernen und String-Concat-Operator umklappen ... 1213215321

(Dies basiert auf meiner Antwort für die vorherige Herausforderung .)

smls
quelle
1

Mathematica, 61 Bytes

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

Unbenannte Funktion, die ein ganzzahliges Argument verwendet und eine Zeichenfolge zurückgibt. (Wenn es sich bei der Eingabe nicht um eine Primzahl handelt, wird sie nur auf die nächste Primzahl "abgerundet". Wenn die Eingabe nicht positiv ist, gibt sie vor, dass sie 1 ist.)

Diese Implementierung verwendet den bösen Trick aus Martin Enders Antwort auf die ähnliche vorherige Herausforderung (wer sagt, dass dieser alte Hund keine neuen Tricks lernen kann?): Missbrauch <>, um eine verschachtelte Liste von ganzen Zahlen zu reduzieren.

Die betreffende verschachtelte Liste erstellt zunächst eine ähnliche verschachtelte Liste wie in dieser Antwort mit der entsprechenden Länge (angegeben durch PrimePi@#die Anzahl der Primzahlen bis einschließlich der Eingabe). dannPrime wird auf jedes Element angewendet. Für die Eingabe, bei 5der es sich um die 3. Primzahl handelt, Range[Range@PrimePi@#,0,-1]ergibt der Code {{1,0},{2,1,0},{3,2,1,0}}, und Primefür jedes Element ergibt sich, {{2,Prime[0]},{3,2,Prime[0]},{5,3,2,Prime[0]}}da die 1., 2. und 3. Primzahl 2, 3 bzw. 5 sind. Ich bin stolz darauf, dass es mir gelungen ist, Martin Enders Ansatz noch mehr Fehler hinzuzufügen - Mathematica beklagt sich jedes Mal, wenn er schreibt Prime[0].

Prime[0]ist keine sache, aber das ist okay: /.Prime@0->1macht sie alle zu 1s. Und wir wollen auch eine 1an der Front, also ersetzen wir die"" die Antwort von Martin Ender durch einfaches 1, was tatsächlich ein Byte spart.

Greg Martin
quelle
0

PHP, 72 Bytes

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

Lauf mit -r

Nervenzusammenbruch

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)
Titus
quelle