La sfida intera ordine negativo, ma è Prime Time!


12

Sto parlando di questa domanda , date un'occhiata se siete un po 'confusi.

Compito principale

Il tuo compito è di generare numeri interi concatenati, in ordine decrescente, ma aumentando il numero intero massimo ogni volta che premi 1 (per questa domanda, 1 sarà considerato un numero primo) . Anche se questo non suona in modo diverso dalla prima domanda, ecco la parte difficile: tutti i numeri emessi possono essere solo numeri primi . Questi verranno uniti in un'unica stringa senza spazi o nuove righe. Il tuo input sarà anche un numero primo .

Esempio:

1
21
321
5321
75321
1175321
Valid output:
1213215321753211175321

Ingresso

Il codice può contenere solo un input: il numero primo più alto da stampare. Questo input può provenire da qualsiasi luogo (grafico, STDIN). Hai la certezza che l'ingresso è un numero primo.

Produzione

Dovrai produrre il numero risultante. Puoi ottenere questo numero continuando il conto alla rovescia, conta il numero solo se è un numero primo, quindi collega tutti i risultati insieme a un numero. L'ultimo numero "riga" (ad es. 7, 5, 3, 2, 1) Deve essere stampato completamente. L'output può essere qualsiasi cosa (numeri, stringhe, grafici), purché sia ​​leggibile. Si applica lo stesso schema Regex per il controllo dei casi di test:

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

Se l'output non corrisponde a questo modello, il codice non è valido.

Regole

  • L'input è garantito per essere primo, non includere la gestione degli errori, a meno che tu non voglia / necessità.
  • L'output può essere solo un numero completamente collegato, quindi non diviso per nulla, nemmeno per le nuove righe.
  • L'algoritmo non dovrebbe verificare la prima istanza di Napparire (ad esempio, 17in 1175321), ma piuttosto la prima istanza di Ncome numero effettivo.
  • Il tuo input è garantito per essere positivo, non aggiungere la gestione a meno che tu non voglia / necessità.

Casi test

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

Vincitore

Questo è , quindi vince l'autore del codice con la minima lunghezza in byte!


8
Non suggerirò di cambiare la sfida, ma non credo 1sia un numero primo per definizione.
Erik the Outgolfer,

3
1. Avere un caso di prova 1contraddice direttamente le specifiche, il che " assicura " che il numero di input sarà un numero primo. 2. Le specifiche di output sembrano contenere più contraddizioni e ambiguità. " L'ultimo numero" riga "(ad es. 7, 5, 3, 2, 1) deve essere stampato completamente " - quindi gli altri no? " Si applica lo stesso schema Regex per il controllo dei casi di test ", ma " L'output può essere solo un numero completamente collegato, quindi non diviso per nulla " contraddice questa regex. Ma la regex è chiaramente instabile perché consente la stringa vuota, e non c'è input che possa darla.
Peter Taylor,

1
1. " È consentita una sola nuova riga finale. " È ridondante / incoerente con il modello regex che consente un numero qualsiasi di caratteri finali. 2. La frase introduttiva " Il tuo compito è produrre numeri interi " è fuorviante poiché in seguito chiedi di produrre un singolo numero. 3. L'intera spiegazione della sequenza e dell'output è confusa: le persone devono fondamentalmente decodificare ciò che intendi studiando gli esempi (elenco delle sequenze e casi di test). Anche l'ultima sfida ha avuto questi problemi, e li ho affrontati lì in una modifica suggerita lì, che hai respinto ... :(
smls

5
Qual è il punto nel rendere arbitrariamente 1 un numero primo?
Xanderhall,

1
L'intero ordine negativo sfida ma ogni volta che è un numero primo diventa più veloce;)
SplittyDev

Risposte:


5

Gelatina , 9 byte

ÆR1;;\UFV

Provalo online!

Come funziona

Æ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.

So di imparare troppo a fondo il golf quando leggo la Jelly per capire la domanda piuttosto che il contrario. (Questo è in realtà un programma Jelly piuttosto leggibile, come vanno; l'unico punto di confusione per me è stato il caso strano strano di Vun elenco.)

5

Elaborazione, 161 byte

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

Una funzione esegue il controllo della primalità, l'altra esegue la stampa. Chiamalo dat(7)

Ungolfed

La prima funzione esegue il controllo della primalità. Restituisce un intanziché un booleanpoiché in questo modo vengono salvati più byte. ( intanziché boolean, 0anziché false, 1anziché true)

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

La seconda funzione stampa la stringa. Esegue l'iterazione di ogni numero, se non è un numero primo, passa alla successiva iterazione. Se è un numero primo, continua fino alla stampa all'interno di un'altra forcornice. Ancora una volta, se il numero è primo, lo stampiamo, altrimenti no.

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

Gelatina , 12 byte

ÆR;@1
ÇÇ€UVV

Provalo online!

Se non fosse stato per 1s, il mio codice sarebbe stato solo ÆRÆRUVVper 7 byte.

Spiegazione migliorata:

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

Il ragazzo irlandese (chiamato Dennis?) Mi ha in qualche modo superato lol.


4

05AB1E , 19 byte

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

Provalo online!

Spiegazione

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

Stupito dalla DpÏdichiarazione. Bel lavoro!
devRicher,

2

Brachylog , 17 byte

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

Provalo online!

Non riesco a diventare più corto di così ...

Spiegazione

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

Lingua GameMaker, 169 byte

Funzione principale (68 byte)

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

Funzione p (46 byte)

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

Funzione q (55 byte)

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

Bene

@FireCubez Grazie :) Lo usavo molto. In realtà è stato il primo linguaggio di programmazione che ho imparato.
Timtech,

1

MATL , 15 byte

Zq"1@ZqP]1v!VXz

Provalo 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

1

Perl 6 , 41 byte

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

( Provalo online. )

Spiegazione:

  • 1, |grep(*.is-prime, 2..$_): Sequenza di 1 e numeri primi ... (1 2 3 5)
  • [,] ...: Riduci ("piega") sull'operatore virgola ... (1 2 3 5)
  • [\,] ...: Con risultati intermedi ( riduzione triangolare ) ...((1) (1 2) (1 2 3) (1 2 3 5))
  • [\R,] ...: Applicare inversione meta-operatore per la virgola ...((1) (2 1) (3 2 1) (5 3 2 1))
  • [~] flat ...: Rimuove l'annidamento dell'elenco e piega l'operatore concat stringa ... 1213215321

(Questo si basa sulla mia risposta per la sfida precedente .)


1

Mathematica, 61 byte

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

Funzione senza nome che accetta un argomento intero e restituisce una stringa. (Se l'input non è un numero primo, si limita a "arrotondarlo per difetto" al numero primo più vicino; se l'input non è propositivo, finge che sia 1.)

Questa implementazione utilizza il brutto trucco della risposta di Martin Ender alla simile sfida precedente (chi dice che questo vecchio cane non può imparare nuovi trucchi?): Abusare <>di appiattire un elenco nidificato di numeri interi.

L'elenco nidificato in questione inizia generando un elenco nidificato simile a quello in quella risposta, con la lunghezza appropriata (dato da PrimePi@#, il numero di numeri primi fino al e incluso l'input); quindi Primeviene applicato a ogni elemento. Ad esempio, per l'input 5che è il 3o primo, il codice Range[Range@PrimePi@#,0,-1]produce {{1,0},{2,1,0},{3,2,1,0}}e applicando Primea ciascun elemento i rendimenti {{2,Prime[0]},{3,2,Prime[0]},{5,3,2,Prime[0]}}poiché il 1o, il 2o e il 3o primi sono 2, 3 e 5, rispettivamente. Sono orgoglioso di essere riuscito ad aggiungere ancora più errori all'approccio di Martin Ender: Mathematica si lamenta ogni volta che scrive Prime[0].

Prime[0]non è una cosa, ma va bene: /.Prime@0->1li trasforma tutti in 1s. E vogliamo anche un 1fronte, quindi sostituiamo la ""risposta di Martin Ender con semplicemente 1, che in realtà salva un byte.


0

PHP, 72 byte

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

Esegui l'umorismo -r

abbattersi

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)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.