Concatenando n con n + 1


44

introduzione

La sequenza OEIS A127421 è la sequenza di numeri la cui espansione decimale è una concatenazione di 2 numeri non negativi crescenti consecutivi. In parole povere, ogni numero nella sequenza viene formato mettendo insieme n con n + 1 per un valore intero non negativo di n . I primi diversi termini sono:

1, 12, 23, 34, 45, 56, 67, 78, 89, 910, 1011, 1112, 1213, 1314, 1415, 1516, 1617, 1718, 1819, 1920, 2021, 2122, 2223, 2324, 2425, 2526, 2627, 2728, 2829, 2930, 3031, 3132, 3233, 3334, 3435, 3536, 3637, 3738, 3839, 3940, 4041, 4142, 4243, 4344, 4445, 4546, ...

Sfida

Dato un singolo numero intero positivo n , stampare le prime n voci della sequenza OEIS A127421 in ordine crescente.

  • L'input e l'output possono essere in qualsiasi formato accettabile . Stringhe o numeri vanno bene per l'output.
  • Gli zeri iniziali non sono ammessi.
  • È consentito un programma o una funzione completi.
  • Ai fini di questa sfida, n sarà positivo e inferiore a 100.
  • Le scappatoie standard non sono consentite per impostazione predefinita.
  • Questa domanda è il golf del codice, quindi vince il conteggio dei byte più basso.
  • Ecco alcuni esempi di input e output:

    1 => 1
    2 => 1, 12
    3 => 1, 12, 23
    10 => 1, 12, 23, 34, 45, 56, 67, 78, 89, 910
    

Se avete domande, non esitate a chiedere. In bocca al lupo.

PS questa è la mia prima sfida, quindi spero che tutto abbia un senso.

EDIT: rimossa la restrizione di output per consentire numeri o stringhe.


1
Può essere 0 indicizzato?
Jo King

3
Nessuno lo ha ancora detto, ma benvenuto in PPCG! Bella prima domanda, non troppo difficile, ma nemmeno del tutto banale, e ci sono una serie di approcci diversi
Jo King

3
Dopo 7 giorni, accetterò la risposta più breve che soddisfa tutti questi criteri. Perché è necessario che la sfida finisca?
Erik the Outgolfer,

2
Al giorno d'oggi tendiamo a non accettare una risposta, perché scoraggia l'ulteriore pubblicazione di risposte. Suppongo che tu prenda delle vecchie sfide come modello (che è anche scoraggiato) Vedi le cose da evitare quando scrivi le sfide
user202729

2
@Dennis Ok, rimuoverò la data dalla sfida; forse accetterò quando non arriveranno più nuove risposte.
Anfibologico,

Risposte:


13

Gelatina , 3 byte

ŻVƝ

Un collegamento monadico che accetta un numero intero che produce un elenco di numeri interi

Provalo online!

Come?

ŻVƝ - Link: integer       e.g. 59
Ż   - zero-range               [0,1,2,3,4,5,6, ... ,58,59]
  Ɲ - apply to each pair: i.e: [0,1] or [5,6]  or  [58,59]
 V  -   evaluate* jelly code   1     or 56     or  5859
    -                       -> [1,12,23,45,56, ... 5859]

* When given a list V actually joins the Python string values and evaluates that
  ...so e.g.: [58,59] -> ['58','59'] -> '5859' -> 5859

Dennis superato!
Okx,

10

R , 32 byte

strtoi(paste0((x=1:scan())-1,x))

Provalo online!

Superato da MickyT , quindi vota per quella risposta!


C'è stata una modifica per consentire le stringhe ... non c'è bisogno di strtoi!
JayCe

2
@JayCe è necessario eliminare il comando 0dal primo output.
Giuseppe,

non è possibile rimuovere lo zero iniziale terminando con [-1]anziché utilizzando strtoio non funziona in alcuni casi limite o altro?
JDL,

@JDL strtoiviene utilizzato per la conversione da "01"a 1perché paste0tornerà c("01","12","23","34",...)e non ci è permesso di tornare "01".
Giuseppe,

1
Sfortunatamente @CriminallyVulgar fallirà per l'inserimento di1
Giuseppe,



7

Cubix , 19 byte

I.1.W)>OSo;u.uO;@!-

Provalo online!

Questo si avvolge sul cubo come segue

    I .
    1 .
W ) > O S o ; u
. u O ; @ ! - .
    . .
    . .

Guardalo correre

Ho ancora una piccola stanza con cui giocare, ma al momento

  • W reindirizzare alla faccia superiore andando verso il basso
  • I1> imposta lo stack con l'ingresso e 1 quindi reindirizza nel loop principale
  • OSo;u output la parte superiore dello stack, aggiungere spazio per impilare, output, rimuovere e uturn
  • -!@;Ou)sottrai TOS dall'input, se 0 ferma il risultato pop altrimenti, output TOS, output e incrementa TOS. Torna nel loop principale.

7

Perl 6 , 19 18 byte

{(^$_ Z~1..$_)X+0}

Provalo online!

Blocco di codice anonimo che comprime l'intervallo da 0 a n-1 con 1 a n utilizzando l'operatore di concatenazione, quindi aggiunge 0 a ogni elemento per forzarlo a un numero e rimuovere gli 0 iniziali.


5

R , 30 29 byte

Un byte in più grazie a @Giuseppe

10^nchar(n<-1:scan())*(n-1)+n

Provalo online!

Una soluzione per lo più matematica, tranne per l'utilizzo nchar()piuttosto che floor(log10()). Sono rimasto davvero sorpreso dal fatto che fosse più corto della versione a stringa .


29 byte! bel lavoro su questo, non ci avrei mai pensato!
Giuseppe,

@Giuseppe grazie per il byte extra.
MickyT



4

Python 2 , 42 41 byte

f=lambda n:n-1and f(n-1)+[`n-1`+`n`]or[1]

Provalo online!

Funzione ricorsiva che restituisce un elenco misto di stringhe e numeri interi


Hai intenzione di modificare la descrizione originale "Funzione anonima che restituisce un elenco"?
Esolanging Fruit

@EsolangingFruit Oopsie, risolto! Grazie
Jo King

Forse mi manca qualcosa, ma questo non sembra avere '12' come secondo elemento.
ElPedro,

2
@ElPedro Questo può essere risolto salvando un byte conn and
Mr. Xcoder

1
Non capita spesso che una correzione salvi i byte :-)
ElPedro il


4

Blossom , 88 byte

rule e<int x>[1(x)]=>[1(x-1),2(str(x)+str(x+1))|1->2];rule c[1(0),2|1->2]=>[2("12")];e!c

Blossom è un linguaggio di programmazione grafico a cui sto lavorando. Può solo prendere grafici come input, quindi questo programma prevede un grafico comprendente un singolo nodo con la sua etichetta un intero. Restituisce un grafico dei bordi collegati per formare il più vicino a un array che posso ottenere e il grafico risultante viene stampato sull'output.

Una versione non modificata del codice è questa:

rule expand <int x>
    [ 1 (x) ]
 => [ 1 (x-1), 2(str(x)+str(x+1)) | 1->2 ]
where x > 0;

rule clean
    [ 1 (0), 2 ("12") | 1->2 ]
 => [ 2 ("12") ];

expand! clean

Definisce due regole: una chiamata expand, che (mentre c'è un nodo con un'etichetta a valori interi nel grafico corrente) crea un altro nodo con il suo incremento concatenato e abbassa il valore. Inoltre crea un vantaggio tra questi due nodi. Questa regola ha anche la condizione che x sia maggiore di 0.

Le !esegue questa regola finché può essere applicato sul grafico, quindi in questo caso si eseguirà finché x è 0. E poi la cleanregola rimuove questo nodo 0 ed il suo bordo.

Il Blossom non è stato creato per il golf, ma non fa troppo male, non credo., Considerando quello che è. Al momento non c'è davvero un modo semplice per le persone di testare il codice fiore (e l'interprete su cui sto lavorando al momento non è del tutto finito e un po 'buggy), ma questa non è esattamente una voce in competizione!



3

Shakespeare , 703 byte

Q.Ajax,.Ford,.Act I:.Scene I:.[enter Ajax and Ford]Ford:Open mind!Scene V:.Ajax:You is the sum of thyself the sum of myself the sum of a big bad fat old red pig a big bad fat old lie!Ford:Open mind!Is you nicer zero?Ajax:If so, you is twice the sum of the sum of twice thyself twice thyself thyself!If so,Let us Scene V!Ford:You a cat!Open heart!Scene X:.Ajax:You is the sum of thyself a pig!Is you worse than a cat?If so,let us Scene C.Remember thyself.You is the sum of the sum of a big old red cute rich cat a big old red cute joy a big old pig!Speak mind!You is a big old red cute rich cat!Speak mind!Recall!Ford:Open heart!You is the sum of thyself a joy!Open heart!Let us Scene X.Scene C:.[exeunt]

provalo qui

versione non golfata

127421th Night.
Ajax, likes to read the stars.
Ford, someone Ajax can always count on.
Act I:.
Scene I: Ajax reads a star.
[enter Ajax and Ford]
Ford: Open your mind! 
Scene V: Ford counts what ajax has learned.
Ajax: you are the sum of thyself and the sum of myself and the sum of a big bad fat old red pig and a big bad fat old lie!
Ford: Open Your mind! Are you nicer than zero?
Ajax: If so, you are twice the sum of the sum of twice thyself and twice thyself and thyself! 
If so, Let us Scene V!
Ford: You are a cat! Open your heart!

Scene X: Ajax and Ford recall the nights.
Ajax: You are the sum of thyself and a pig! Are you worse than a cat? If so, Let us Scene C.
Remember thyself. 
You are the sum of the sum of a big old red cute rich cat and a big old red cute joy and a big old pig! 
Speak you mind!
You are a big old red cute rich cat! Speak your mind! Recall your finest hour!
Ford: Open your heart! You are the sum of thyself and a joy! Open your heart! Let us Scene X.
Scene C: Fin.
[exeunt]

3

Groovy , 35 byte

{(0..<it)*.with{""+it+++it as int}}

Provalo online!

Ho pensato all'ultimo minuto con l'idea di usare * .with invece di .collect. Non ho idea di cosa it+++itanalizzare ma se è it++ + ito it + ++itentrambi fanno la stessa cosa. Ho provato a pensare a un modo per sbarazzarmi di <in .. <trasformandolo in 1..it e decrementandolo, ma non credo che si ridurrebbe.


Benvenuti in PPCG; bel primo post! Per quanto riguarda l'analisi di a+++b, questo test suggerisce che è analizzato da sinistra a destra, il che significa (a++)+b.
Jonathan Frech,

3

C (gcc) , 44 43 byte

f(i){i--&&printf(" %2$d%d"+5*!f(i),i+1,i);}

Provalo online!


@DLosc L'identificatore di %m$formato "indica la posizione nell'elenco degli argomenti dell'argomento desiderato, indicizzato a partire da 1" ( printf(3)pagina man) . È abbastanza utile finché la tua libreria C lo supporta!
ErikF,

Grazie ... ma sono ancora confuso perché %d%d(e cambiando l'ordine degli argomenti) non funziona. (L'ho provato, ma non so perché non produca alcun output.)
DLosc

@DLosc Se modifichi la stringa di formato, assicurati di cambiare l'offset dopo di essa (ad es. " %d%d"Dovrebbe avere +3*!f(i); altrimenti, l'offset +5 punta al NUL alla fine della stringa.)
ErikF

Oh, okay - Finalmente capisco: "# 2, quindi # 1" è necessario perché nel caso di base, la stringa di formato abbreviata diventa solo "# 1" e quindi è necessario il primo argomento printf i+1, no i. Molto interessante.
DLosc,

3

Pyth , 9 8 6 byte

ms+`dh

Provalo online!

Spiegazione:

       - implicit output
m      - map function with argument d:
  +    -  concatenate
    d  -  argument d
   `   -  to string
     h -  into implicit d + 1
       - into Q (implicit input)

1
Benvenuto in PPCG! :)
Shaggy,

@Shaggy Grazie, questa è la prima volta che lo faccio.
U_ndefined

2

Gelatina , 4 byte

ḶżRV

Provalo online!

Come funziona

ḶżRV  Main link. Argument: n

Ḷ     Unlength; yield [0, ..., n-1].
  R   Range; yield [1, ... n].
 ż    Zipwith; yield [[0, 1], ..., [n-1, n]].
   V  Eval; cast each array to string and evaluate, yielding integers.


2

05AB1E , 6 byte

>GNJ,N

Provalo online!

Spiegazione

>G       # for N in [1 ... input]
  N      # push N
   J     # join stack
    ,    # print
     N   # push N (for next iteration)

LεD<ìï funzionerebbe per lo stesso conteggio byte ma con output elenco




2

Japt -m , 6 5 byte

ó2 ¬n

Provalo online!

Come sempre, conosci le bandiere .

Disimballato e come funziona

-m       Convert to range and map...

Uó2 q n
Uó2      Construct [U, U+1]
    q    Join
      n  Convert to number

         Implicit output (Array is printed as comma-delimited values)

5 byte . Non so perché ónon funziona qui senza 2.
Shaggy

Ho altre 2 soluzioni a 5 byte (entrambe con lo stesso metodo) che non usano un flag, se qualcun altro vuole prenderli a pugni.
Shaggy

Penso che 5 + 2 = 7 byte a causa della bandiera?
U_ndefined


2

C # (compilatore interattivo Visual C #) , 103 71 64 56 byte


Golf Provalo online!

i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}

Ungolfed

i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
}

Codice completo

Action<Int32> a = i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
    };

Int32[]
    testCases = new Int32[] {
        1,
        2,
        3,
        10,
    };

foreach( Int32[] testCase in testCases ) {
    WriteLine( $" Input: {testCase}\nOutput:" );
    a(testCase);
    WriteLine("\n");
}

Versioni precedenti:

  • v1.2, 64 byte

    i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.1, 71 byte

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.0, 103 byte

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?",":"")}{x++*System.Math.Pow(10,$"{x}".Length)+x}");}

Uscite

  • v1.3 - - 8 bytes- Rimosso Consolegrazie ancora a raznagul
  • v1.2 - - 7 bytes- Rimosso Systemgrazie a raznagul
  • v1.1 --32 bytes
  • v1.0 - 103 bytes- Soluzione iniziale.

Gli appunti

  • Nessuna

1
Il compilatore interattivo C # ha importazioni statiche per System.Console. Quindi puoi salvare 15 byte rimuovendolo.
raznagul,

Destra! L'abitudine di dover utilizzare loro
auhmaan

Puoi anche rimuovere Console.: TIO
raznagul


2

ABAP, 101 byte

Non proprio un linguaggio da golf, ma mi sto divertendo molto

WHILE x<w.
CLEAR z.
IF x=1.
WRITE x.
ELSE.
CONCATENATE y x INTO z.
WRITE z.
ENDIF.
y=x.
x=x+1.
ENDDO.

W è il termine di input, X è il contatore da 1, Y è X-1 dal secondo passaggio in poi, Z è una stringa concatenata.


2

Powershell, 27 26 byte

1.."$args"|%{"$p$_";$p=$_}

-1 byte: grazie AdmBorkBork

Script di prova:

$f = {
1.."$args"|%{"$p$_";$p=$_}
}

&$f 1
""
&$f 2
""
&$f 3
""
&$f 10
""
&$f 46

1
Puoi invece salvare un byte facendo 1.."$args".
AdmBorkBork,


2

PHP, 33 32 byte

while($argv[1]--)echo" $i".++$i;

Provalo online

Vecchia versione

for(;$i<$argv[1];)echo" $i".++$i;     // 33 bytes

2

Javascript, 43 44,46,49,53 byte

n=>[...Array(n)].map((_,a)=>~~(a+(a+1+"")))

Versione precedente :

n=>[...Array(n)].map((_,a)=>~~(a+(""+ ++a)))
n=>[...Array(n)].map((_,a)=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>parseInt(a+(""+ ++a)))

Salvato 3 byte grazie alla soluzione di @ Shaggy (che è migliore della mia) da rimuovere .keys()


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.