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

justaprogrammer
fuente
¿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    
Luis Mendo
fuente
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
fuente
@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.
}*
Martin Ender
fuente
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 .

Pomo de la puerta
fuente
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

FryAmTheEggman
fuente
¿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)

Downgoat
fuente
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.
Fatalizar
fuente
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.

nimi
fuente
¡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
Alex A.
fuente
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

Solo ASCII
fuente
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);
}
}
Denham Coote
fuente
¿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
Mego
fuente
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)
Katenkyo
fuente
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.


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

Neil
fuente
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.

Denker
fuente
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
jatinderjit
fuente
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)
Brad Gilbert b2gills
fuente
1

Mathematica 10.3, 66 61 bytes

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

Bastante sencillo.

LegionMammal978
fuente
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];
Jörg Hülsermann
fuente
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 /

Monja permeable
fuente
@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]]
RosLuP
fuente
0

Tcl , 91 bytes

proc R n {join [lsort [split [expr {$n?[set v [R [expr $n-1]]]+[string rev $v]:1}] ""]] ""}

Pruébalo en línea!

sergiol
fuente