Concatenando n con n + 1


44

Introducción

La secuencia OEIS A127421 es la secuencia de números cuya expansión decimal es una concatenación de 2 números no negativos crecientes consecutivos. En pocas palabras, cada número en la secuencia se forma al juntar n con n + 1 para algún valor entero no negativo de n . Los primeros términos son:

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,…

Desafío

Dado un número entero positivo n , imprima las primeras n entradas de la secuencia OEIS A127421 en orden creciente.

  • La entrada y salida pueden estar en cualquier formato aceptable . Las cadenas o números están bien para la salida.
  • Los ceros a la izquierda no están permitidos.
  • Se permite un programa completo o una función.
  • Para los propósitos de este desafío, n será positivo y menor de 100.
  • Las lagunas estándar no están permitidas por defecto.
  • Esta pregunta es el código de golf, por lo que gana el conteo de bytes más bajo.
  • Aquí hay algunos ejemplos de entrada y salida:

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

Si tiene alguna pregunta, no dude en preguntar. Buena suerte.

PD: este es mi primer desafío, así que espero que todo esto tenga sentido.

EDITAR: Se eliminó la restricción de salida para permitir números o cadenas.


1
¿Puede ser 0 indexado?
Jo King

3
Nadie lo ha dicho todavía, ¡pero bienvenido a PPCG! Buena primera pregunta, no demasiado difícil, pero tampoco completamente trivial, y hay varios enfoques diferentes
Jo King,

3
Después de 7 días, aceptaré la respuesta más breve que cumpla con todos estos criterios. ¿Por qué es necesario que el desafío termine?
Erik the Outgolfer

2
Hoy en día tendemos a no aceptar una respuesta, porque desalienta la publicación posterior de respuestas. Supongo que tomas los viejos desafíos como modelo (lo que también se desaconseja). Ver cosas que
debes

2
@ Dennis Ok, eliminaré la fecha del desafío; tal vez acepte cuando no lleguen más respuestas nuevas.
Anfibológico

Respuestas:


13

Jalea , 3 bytes

ŻVƝ

Un enlace monádico que acepta un entero que produce una lista de enteros

Pruébalo en línea!

¿Cómo?

Ż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 superado!
Okx

10

R , 32 bytes

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

Pruébalo en línea!

Superado por MickyT , ¡así que vota tu respuesta!


Ha habido una edición para permitir cadenas ... ¡no hay necesidad de strtoi!
JayCe

2
@JayCe es necesario despojar al líder 0de la primera salida.
Giuseppe

¿no podría eliminar el cero inicial al terminar con en [-1]lugar de usarlo strtoio falla en algún caso de borde u otro?
JDL

@JDL strtoise está utilizando para convertir de "01"a 1porque paste0regresará c("01","12","23","34",...)y no se nos permite regresar "01".
Giuseppe

1
@CriminallyVulgar desafortunadamente eso fallará para la entrada de1
Giuseppe



7

Cubix , 19 bytes

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

Pruébalo en línea!

Esto se envuelve en el cubo de la siguiente manera

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

Míralo correr

Todavía tengo un pequeño espacio para jugar, pero por el momento

  • W redirigir a la cara superior hacia abajo
  • I1> configura la pila con la entrada y luego redirige al bucle principal
  • OSo;u generar la parte superior de la pila, agregar espacio para apilar, generar, eliminar y usar
  • -!@;Ou)reste los TOS de la entrada, si 0 detiene el resultado del pop, salga los TOS, use e incremente los TOS. De vuelta al bucle principal.

7

Perl 6 , 19 18 bytes

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

Pruébalo en línea!

Bloque de código anónimo que comprime el rango de 0 a n-1 con 1 a n usando el operador de concatenación, luego agrega 0 a cada elemento para forzarlo a un número y eliminar los ceros iniciales.


5

R , 30 29 bytes

Un byte extra gracias a @Giuseppe

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

Pruébalo en línea!

Una solución principalmente matemática, excepto por el uso en nchar()lugar de floor(log10()). Realmente me sorprendió que fuera más corto que la versión de cadena .


29 bytes! buen trabajo en esto, ¡nunca lo hubiera pensado!
Giuseppe

@Giuseppe gracias por el byte extra.
MickyT



4

Python 2 , 42 41 bytes

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

Pruébalo en línea!

Función recursiva que devuelve una lista mixta de cadenas y enteros.


¿Pretendía editar la descripción original "Función anónima que devuelve una lista"?
Esolanging Fruit

@EsolangingFruit Oopsie, arreglado! Gracias
Jo King

Tal vez me estoy perdiendo algo, pero esto no parece tener '12' como segundo elemento.
ElPedro

2
@ElPedro Eso se puede solucionar guardando un byte conn and
Mr. Xcoder

1
No es frecuente que una solución ahorre bytes :-)
ElPedro


4

Flor , 88 bytes

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 es un lenguaje de programación gráfica en el que estoy trabajando. Solo puede tomar gráficos como entradas, por lo que este programa espera un gráfico que comprenda un solo nodo con su etiqueta un número entero. Devuelve un gráfico de bordes conectados para formar el más cercano a una matriz que puedo obtener, y el gráfico resultante se imprime en la salida.

Una versión no minificada del código es esta:

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

Define dos reglas: una llamada expand, que (si bien hay un nodo con una etiqueta de valor entero en el gráfico actual) crea otro nodo con su incremento concatenado y reduce el valor. También crea una ventaja entre estos dos nodos. Esta regla también tiene la condición de que x es mayor que 0.

La !ejecuta esta regla durante el tiempo que se puede aplicar en el gráfico, por lo que en este caso se ejecutará hasta que x es 0. Y entonces elclean regla elimina esta 0 nodo y su borde.

Blossom no fue hecho para jugar al golf, pero no lo hace tan mal, no creo, considerando lo que es. Actualmente no existe una manera fácil para que las personas prueben el código de flor (y el intérprete en el que estoy trabajando en este momento no está del todo terminado y está un poco defectuoso), ¡pero esta no es exactamente una entrada competitiva!



3

Shakespeare , 703 bytes

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]

pruébalo aquí

versión sin golf

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 bytes

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

Pruébalo en línea!

Se me ocurrió la idea de usar * .with en lugar de .collect en el último minuto. No tengo idea de qué it+++itanaliza, pero si es it++ + ito it + ++itambos hacen lo mismo. Traté de pensar en una forma de deshacerme de <in .. <convirtiéndolo en 1..it y decrementando, pero no creo que se acorte más.


Bienvenido a PPCG; bonito primer post! Con respecto al análisis de a+++b, esta prueba sugiere que se analiza de izquierda a derecha, es decir (a++)+b.
Jonathan Frech

3

C (gcc) , 44 43 bytes

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

Pruébalo en línea!


@DLosc El %m$especificador de formato "denota la posición en la lista de argumentos del argumento deseado, indexado a partir de 1" ( printf(3)página del manual) . ¡Es bastante útil siempre que su biblioteca C lo admita!
ErikF

Gracias ... pero todavía estoy confundido por qué %d%d(y cambiar el orden de los argumentos) no funciona. (Lo intenté, pero no sé por qué no produce salida).
DLosc

@DLosc Si cambia la cadena de formato, asegúrese de cambiar el desplazamiento después (por ejemplo, " %d%d"debería haberlo hecho +3*!f(i); de lo contrario, el desplazamiento +5 apunta al NUL al final de la cadena).
ErikF

Oh, está bien, finalmente lo entiendo: el "# 2, luego el # 1" es necesario porque en el caso base, la cadena de formato acortada se convierte en solo "# 1", por lo que necesita el primer argumento printf i+1, no i. Muy interesante.
DLosc

3

Pyth , 9 8 6 bytes

ms+`dh

Pruébalo en línea!

Explicación:

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

1
Bienvenido a PPCG! :)
Shaggy

@ Shaggy Gracias, esta es la primera vez que hago esto.
u_ndefined

2

Jalea , 4 bytes

ḶżRV

Pruébalo en línea!

Cómo funciona

Ḷż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 bytes

>GNJ,N

Pruébalo en línea!

Explicación

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

LεD<ìï funcionaría para el mismo recuento de bytes pero con salida de lista




2

Japt -m , 6 5 bytes

ó2 ¬n

Pruébalo en línea!

Como siempre, conoce las banderas .

Desempaquetado y cómo funciona

-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 bytes . No sé por qué óno funciona aquí sin el 2.
Shaggy

Tengo otras 2 soluciones de 5 bytes (ambas usando el mismo método) que no usan una bandera, si alguien más quiere apuñalarlas.
Shaggy

Creo que 5 + 2 = 7 bytes debido a la bandera?
u_ndefined


2

C # (compilador interactivo de Visual C #) , 103 71 64 56 bytes


Golfed Pruébalo en línea!

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

Sin golf

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

Código 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");
}

Versiones mas antiguas:

  • v1.2, 64 bytes

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

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

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

Lanzamientos

  • v1.3 - - 8 bytes- Eliminado Consolegracias de nuevo a raznagul
  • v1.2 - - 7 bytes- Eliminado Systemgracias a raznagul
  • v1.1 --32 bytes
  • v1.0 - 103 bytes- Solución inicial.

Notas

  • Ninguna

1
El compilador interactivo de C # tiene importaciones estáticas para System.Console. Para que pueda guardar 15 bytes eliminándolo.
raznagul

¡Derecho! Hábito de tener que usar ellos
auhmaan

También puedes eliminar Console.: TIO
raznagul


2

ABAP, 101 bytes

No es realmente un lenguaje de golf, pero me estoy divirtiendo mucho con él

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 es el término de entrada, X es el contador de 1, Y es X-1 desde el segundo paso en adelante, Z es una cadena concatenada.


2

Powershell, 27 26 bytes

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

-1 byte: gracias AdmBorkBork

Script de prueba:

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

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

1
Puede guardar un byte haciendo en su 1.."$args"lugar.
AdmBorkBork



2

Javascript, 43 44,46,49,53 bytes

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

Versión anterior :

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

Ahorré 3 bytes gracias a la solución de @ Shaggy (que es mejor que la mía) para eliminar .keys()


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.