La secuencia RATS


30

Su tarea es generar el enésimo término de la secuencia RATS, donde n es la entrada. La secuencia RATS también se conoce como la secuencia inversa Agregar luego ordenar. Esta secuencia también se puede encontrar aquí: http://oeis.org/A004000 .

Casos de prueba:

0 > 1
1 > 2
2 > 4
3 > 8
4 > 16
5 > 77
6 > 145
7 > 668

Por ejemplo, la salida para 5 es 77 porque 16 + 61 = 77. Después de esto, el 77 se ordena.

La presentación más corta gana. Este es mi primer desafío, así que espero que no sea un duplicado o algo así.


¿La entrada tiene que ser un entero o también podría ser una cadena?
Denker

@DenkerAffe, ¿te refieres a un número en forma de cadena?
justaprogrammer

@justaprogrammer Sí, entonces puedo obtener "123" en lugar de 123 como Integer. Podría haber ahorrado algunos bytes.
Denker

2
no es 77 + 77 = 154? ¿O me he perdido algo? EDITAR: Oh, sí, olvidé ordenar.
Denham Coote

66
@DenhamCoote Creo que quería decir "oh rata s , me olvidé de eso!"
Martin Ender

Respuestas:


11

MATL , 11 12 bytes

1i"tVPU+VSU

La entrada es una cadena (con comillas simples) que representa un número entero en unario . El desafío permite la entrada de cadenas y unary es un formato válido .

Pruébalo en línea!

Explicación

1      % push number 1 to the stack
i      % input. Will be a string of "n" ones 
"      % for loop: repeat n times (consumes string)
  t    %   duplicate
  V    %   convert to string
  P    %   reverse
  U    %   convert to number
  +    %   add
  V    %   convert to string
  S    %   sort
  U    %   convert to number
       % loop is implicitly ended
       % stack content is implicitly displayed    

44
No sé qué me asusta / deja perplejo, MATL o Jelly ... +1
Downgoat

9

05AB1E , 6 bytes

Código:

$FDR+{

Explicación:

$       # Push 1 and input
 F      # For N in range(0, input)
  D     # Duplicate top of the stack
   R    # Reverse top of the stack
    +   # Add top two items
     {  # Sort top of the stack
        # Implicitly print top of the stack

Esto también funciona con un programa de 0 bytes .


@Adnan Hace tres días , en realidad. Aún así, bien jugado ...
Pomo de la puerta

@Doorknob Justo a tiempo jaja
Adnan

19
Puede guardar 6 bytes eliminando su código fuente.
Dennis

2
También puede acortar 05AB1Eeliminando primero el cero inicial y luego omitiendo el 1, como 1E==E. Entonces obtienes solo 5ABE-2 bytes.
flawr

1
@Dennis gran observación
Adnan

8

CJam, 15 bytes

1ri{_sW%i+s$i}*

Pruébalo aquí.

Explicación

1     e# Push 1 as the start of the sequence.
ri    e# Read input and convert to integer N.
{     e# Run this block N times...
  _s  e#   Duplicate and convert to string.
  W%  e#   Reverse string.
  i+  e#   Convert back to integer and add to previous value.
  s$  e#   Convert to string and sort.
  i   e#   Convert back to integer for the next iteration.
}*

3
¿Cómo pueden ser todos estos idiomas tan cortos?
justaprogrammer

2
@justaprogrammer Los nombres de un solo carácter para las funciones integradas ayudan. ;) CJam, Pyth y Brachylog son todos lenguajes de golf, diseñados específicamente con el código de golf en mente. (Ver en.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages ) . Luego también hay idiomas como APL y J que no son idiomas de golf pero son igualmente concisos, porque los diseñadores pensaron que sería una buena idea.
Martin Ender

¿Cuál recomienda más para ganar desafíos como estos?
justaprogrammer

3
@justaprogrammer No elegiría uno en función de cuál está ganando estos desafíos (que probablemente sería Pyth o Jelly). Puede ser igual de divertido jugar al golf en un lenguaje "normal" (especialmente porque puede haber más competencia dentro de ese idioma). Para un lenguaje de golf, probablemente sea más importante que disfrute usarlo. CJam es bastante divertido: está basado en una pila que te hace inclinar tu mente un poco más que otros idiomas, y al mismo tiempo es un lenguaje bastante poderoso, que he comenzado a usar para scripts desechables simples fuera del golf, que Es un buen impulso para mi productividad.
Martin Ender

Estos idiomas se ven muy interesantes y no puedo esperar para aprender uno yo mismo. ¿No sé qué es la gelatina? ¿Es algún tipo de gelatina o algo así?
justaprogrammer

8

Pyth, 17 13 12 bytes

uS`+vGv_GQ\1
u        Q\1    reduce range(input()) on base case of "1" (string)
   +vG          eval the string (to get a number), and add...
      v_G       the same number, reversed first and then eval'd
 S`             convert back to string and sort

Pruébelo en el intérprete en línea .


44
¿Qué es esta magia? ¿Como funciona esto?
justaprogrammer

1
@justaprogrammer He agregado una explicación. :)
Pomo de la puerta

Huh, pero como. ¿Cómo se prueba este código?
justaprogrammer

1
@justaprogrammer He agregado un enlace a un intérprete en línea en el que puede ejecutar el código.
Pomo de la puerta

Esto es increíble, es tan corto, pero tan hermoso
justaprogrammer

5

Pitón 2, 72

f=lambda x,n=1:x and f(x-1,int(''.join(sorted(`n+int(`n`[::-1])`))))or n

Función recursiva, utiliza la abreviatura de Python 2 para __repr__, que se romperá una vez que la función alcance valores muy grandes ( Lse agregará un a la cadena del número), no estoy seguro de la especificación si hay un lugar donde podamos detenernos , pero si no cambia a str()solo agrega 6 bytes, pero luego se vuelve un poco más corto para generar como una cadena, a 75 bytes:

f=lambda x,n='1':x and f(x-1,''.join(sorted(str(int(n)+int(n[::-1])))))or n

1 byte guardado gracias a trichoplax en esta versión


¿Es un espacio sobrante antes ordel segundo bloque de código?
trichoplax

1
@trichoplax gracias por la captura :)
FryAmTheEggman 01 de

5

JavaScript ES6, 70 bytes

Guardado 1 byte gracias a @ user81655

f=n=>n?+[...+[...''+(b=f(n-1))].reverse().join``+b+''].sort().join``:1

suspiro JavaScript es realmente detallado. Una gran parte (> 50%) del código es solo caso a cadena + función de matriz + unión + conversión a int. He intentado reducir, evaluar y todo tipo de cosas, pero esta parece ser la más corta.

Pruébelo en línea (todos los navegadores funcionan)


2
Al igual que el mío, pero mejor (y publicado anteriormente). ¡Bah!
edc65

La manipulación de la cadena es que JS es tan larga que le
pido

@ user81655 genial, gracias! I nunca habría pensado que volver a pedir esa manera
Downgoat

f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'si se permite devolver la cadena
l4m2 el

4

Brachylog , 19 bytes

0,1 .|-1=:0&Rr+R=o.

Explicación

0,1 .               § If Input is 0, unify the Output with 1
     |              § Else
      -1=:0&R       § unify R with the output of this main predicate, with input = Input - 1
             r+R=o. § Reverse R, add it to itself and order it, then unify with the Output.

3

Haskell, 67 bytes

import Data.List
g i=i:g(sort$show$read i+read(reverse i))
(g"1"!!)

Ejemplo de uso: (g"1"!!) 7-> "668".

Es una implementación directa de la definición: comenzando con "1", agregue repetidamente el resultado de la suma inversa del elemento actual. La función principal (g"1"!!)selecciona el ielemento th.


¡Este es el programa más legible de menos de 70 bytes!
Gaurav Agarwal

3

Julia, 77 bytes

n->(x=1;for _=1:n x=(p=parse)(join(sort(["$(x+p(reverse("$x")))"...])))end;x)

Esta es una función lambda que acepta un entero y devuelve un entero. Para llamarlo, asígnelo a una variable.

Sin golf:

function f(n::Int)
    # Begin x at 1
    x = 1

    # Repeat this process n times
    for _ = 1:n
        # Add x to itself with reversed digits
        s = x + parse(reverse("$x"))

        # Refine x as this number with the digits sorted
        x = parse(join(sort(["$s"...])))
    end

    # Return x after the process (will be 1 if n was 0)
    return x
end

3

Jalea, 13 12 bytes

Estoy seguro de que esto probablemente se pueda jugar al golf, ya que esta es mi primera respuesta en Jelly / en un idioma tácito.

DUḌ+ðDṢḌ Performs RATS
1Ç¡      Loops

D        Converts integer to decimal
 U       Reverses
  Ḍ      Converts back to integer
   +     Adds original and reversed
    ð    Starts new chain
     D   Converts back to decimal
      Ṣ  Sorts
       Ḍ Back to integer again

1        Uses 1 instead of input
 Ḍ       Uses line above
  ¡      For loop

EDITAR: guardado 1 byte, gracias a Dennis


2

Java 1.8, 251 bytes

interface R{static void main(String[]a){int i,r,n=1,c=0,t=Byte.valueOf(a[0]);while(++c<=t){i=n;for(r=0;i!=0;i/=10){r=r*10+i%10;}n+=r;a[0]=n+"";char[]f=a[0].toCharArray();java.util.Arrays.sort(f);n=Integer.valueOf(new String(f));}System.out.print(n);}}

Expandido

interface R{
static void main(String[]args){
    int input,reversed,nextValue=1,count=0,target=Byte.valueOf(args[0]);
    while(++count<=target){
        input=nextValue;
        for(reversed=0;input!=0;input/=10){reversed=reversed*10+input%10;}
        nextValue+=reversed;
        args[0]=nextValue+"";
        char[]sortMe=args[0].toCharArray();
        java.util.Arrays.sort(sortMe);
        nextValue=Integer.valueOf(new String(sortMe));
    }
    System.out.print(nextValue);
}
}

¿Por qué usas interfaceR en lugar de classR, que es 4 bytes más corto?
Will Sherwood

1
@WillSherwood porque puedes omitir el modificador público en main (), lo que lo hace más corto en general :)
Denham Coote

2

En serio, 17 bytes

1,`;$R≈+$S≈`n

Pruébalo en línea!

Explicación:

1,`;$R≈+$S≈`n
1              push 1
 ,`       `n   do the following n times:
   ;$R≈        reverse
       +       add
        $S≈    sort

2

Lua, 179156 bytes

No puedo ver cómo podría jugar más al golf, pero estoy seguro de que hay una manera. Gracias a @LeakyNun, me tomé el tiempo para analizar esto y jugarlo de la manera correcta, tal vez aún podría ganar algunos bytes utilizando otro enfoque.

k=0z=table
for i=0,io.read()do
t={}(""..k+(""..k):reverse()):gsub("%d",function(d)t[#t+1]=d
end)z.sort(t)k=k<1 and 1or tonumber(z.concat(t,""))
end
print(k)

Sin golfos y explicaciones

k=0                                  
z=table                              -- z is a pointer on the table named table
                                     -- it allows me to use its functions
                                     -- while saving 4 bytes/use

for i=0,io.read()                    -- Iterate n times for the nth element
do
  t={}
  (""..a+(""..a):reverse())          -- we add k with its "reversed" value
                                     -- and convert the whole thing to a string
    :gsub(".",function(d)            -- for each character in it, use an anonymous fucntion
       t[#t+1]=d end)                -- which insert them in the array t
  z.sort(t)                          
  a=a<1 and 1 or                     -- if i==0, k=1
     tonumber(z.concat(t,""))        -- else we concat t in a string and convert it to number
end
print(k)

Bueno, parece que ya no estás aquí ... pero tal vez puedas consultar mi respuesta de Java.
Leaky Nun

@LeakyNun Bueno, no participo mucho esta vez, pero sigo llegando a los desafíos de vez en cuando, intentaré analizar tu respuesta, pero incluso sin eso veo algo que se puede jugar con bastante facilidad ( a=a<1 and 1orpor ejemplo).
Katenkyo

nos alegraría, me alegraría tenerte de vuelta.
Leaky Nun

2

Brachylog 2, 11 bytes, desafío de fechas posteriores al idioma

;1{↔;?+o}ⁱ⁽

Pruébalo en línea!

Explicación

;1{↔;?+o}ⁱ⁽
  {     }ⁱ  Repeatedly apply the following,
 1            starting at 1,
;         ⁽   a number of times equal to the input:
   ↔            reverse,
    ;?+         add the original input,
       o        then sort the resulting number

No tengo muy claro qué hace esto con cero dígitos, pero la pregunta no indica ningún manejo en particular, y probablemente no aparecen en la secuencia de todos modos.


1

ES6, 79 bytes

n=>eval("r=1;while(n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")

82 bytes sin eval:

n=>[...Array(n)].reduce(r=>+[...+[...r+''].reverse().join``+r+''].sort().join``,1)

Todas esas conversiones son dolorosas.

@ edc65 De hecho, ahorré 4 bytes al cambiar mapa reduceesta vez ... sin embargo, sin duda me volverás a demostrar que estoy equivocado.


fores más corto:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
Downgoat

@ Doᴡɴɢᴏᴀᴛ no funciona n=0, incluso después de haber corregido los errores de sintaxis.
Neil

1

Python 2, 91 bytes

Ingrese como Entero, el resultado se imprime en la pantalla.

def f(n):
 t=1
 for i in range(n):t=int("".join(sorted(str(int(str(t)[::-1])+t))))
 print t

Esto podría ser mucho más corto con algo de magia de recursión, supongo, pero todavía no puedo entenderlo. Voy a tener una nueva mirada más tarde y espero mejorar esta.


1

Python 2, 83 bytes

def f(n):
 v='1'
 for _ in v*n:v=''.join(sorted(str(int(v)+int(v[::-1]))))
 print v

1

Perl 6 , 40 bytes

{(1,{[~] ($_+.flip).comb.sort}...*)[$_]} # 40

(Si quieres que devuelva un Int pon un +derecho antes [~])

Uso:

# give it a lexical name
my &RATS = {…}

say RATS 5; # 77

# This implementation also accepts a list of indexes

# the first 10 of the sequence
say RATS ^10; # (1 2 4 8 16 77 145 668 1345 6677)

1

Mathematica 10.3, 66 61 bytes

Nest[FromDigits@Sort@IntegerDigits[#+IntegerReverse@#]&,1,#]&

Bastante sencillo.


1

PHP, 102 bytes

$r=[1];$i++<$argn;sort($v),$r[]=join($v))$v=str_split(bcadd(strrev($e=end($r)),$e));echo$r[$argn];

Versión en línea

PHP, 95 bytes

n <= 39

for($r=[1];$i++<$argn;sort($v),$r[]=join($v))$v=str_split(strrev($e=end($r))+$e);echo$r[$argn];

1

Java , 171 167 163 160 bytes

int f(int n){int a=n>0?f(n-1):0,x=10,b[]=new int[x],c=a,d=0;for(;c>0;c/=x)d=d*x+c%x;for(a+=d;a>0;a/=x)b[a%x]++;for(;a<x;c=b[a++]-->0?c*x+--a:c);return n>0?c:1;}

Pruébalo en línea!

¡No es la entrada más larga! \ o /


@Katenkyo ve esto
Leaky Nun

Es bien f (1) ... f (20) Pero a partir de f (21) resultado parece mal ...
RosLuP

Pérdida de precisión, supongo.
Leaky Nun


0

Axioma, 146 bytes

c(r:String):NNI==reduce(+,[(ord(r.i)-48)*10^(#r-i) for i in 1..#r]);f(n:INT):NNI==(n<1=>1;v:=f(n-1);v:=v+c(reverse(v::String));c(sort(v::String)))

prueba y resultados [secuencia RATS]

(3) -> [[i, f(i)] for i in 0..20]
   (3)
   [[0,1], [1,2], [2,4], [3,8], [4,16], [5,77], [6,145], [7,668], [8,1345],
    [9,6677], [10,13444], [11,55778], [12,133345], [13,666677], [14,1333444],
    [15,5567777], [16,12333445], [17,66666677], [18,133333444], [19,556667777],
    [20,1233334444]]

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.