Sekwencja RATS


30

Twoim zadaniem jest wygenerowanie n-tego ciągu sekwencji RATS, gdzie n jest wejściem. Sekwencja RATS jest również znana jako sekwencja odwrotnego dodawania, a następnie sortowania. Sekwencję tę można również znaleźć tutaj: http://oeis.org/A004000 .

przypadki testowe:

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

Na przykład wynik dla 5 wynosi 77, ponieważ 16 + 61 = 77. Następnie 77 jest sortowany.

Wygrywa najkrótsze zgłoszenie. To jest moje pierwsze wyzwanie, więc mam nadzieję, że nie jest to duplikat ani nic takiego.


Czy dane wejściowe muszą być liczbą całkowitą, czy też może być ciągiem?
Denker

@DenkerAffe masz na myśli liczbę w postaci ciągu?
justaprogrammer

@ justaprogrammer Tak, więc mogę uzyskać „123” zamiast 123 jako liczbę całkowitą. Mógłby zaoszczędzić trochę bajtów.
Denker

2
nie jest 77 + 77 = 154? A może coś przeoczyłem? EDYCJA: Och, tak, zapomniałem sortować.
Denham Coote

6
@DenhamCoote Chyba masz na myśli „och szczur s , zapomniałem sortować!”
Martin Ender

Odpowiedzi:


11

MATL , 11 12 bajtów

1i"tVPU+VSU

Dane wejściowe to ciąg (z pojedynczymi cudzysłowami) reprezentujący liczbę całkowitą w jedności . Dane wejściowe są dozwolone przez wyzwanie, a unary jest poprawnym formatem .

Wypróbuj online!

Wyjaśnienie

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    

4
Nie wiem, co mnie bardziej przeraża / wprawia w zakłopotanie, MATL lub Galaretkę ... +1
Downgoat

9

05AB1E , 6 bajtów

Kod:

$FDR+{

Wyjaśnienie:

$       # 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

Działa to również z programem 0-bajtowym .


@Adnan Właściwie trzy dni temu . Mimo to dobrze zagrane ...
Klamka

@Doorknob W samą porę haha
Adnan

19
Możesz zapisać 6 bajtów, eliminując kod źródłowy.
Dennis

2
Możesz także skrócić 05AB1E, najpierw eliminując wiodące zero, a następnie pomijając 1, as 1E==E. Wtedy dostajesz tylko 5ABE-2 bajty.
flawr

1
@Dennis wielka obserwacja
Adnan

8

CJam, 15 bajtów

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

Sprawdź to tutaj.

Wyjaśnienie

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
jak wszystkie te języki mogą być tak krótkie
justaprogrammer 31.01.16

2
@ justaprogrammer Pomocy mogą zawierać nazwy jednoznakowe dla wbudowanych funkcji. ;) CJam, Pyth i Brachylog to języki gry w golfa, zaprojektowane specjalnie z myślą o golfie kodowym. (Zobacz en.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages ) . Są też takie języki, jak APL i J, które wcale nie są językami gry w golfa, ale są podobnie zwięzłe, ponieważ projektanci pomyśleli, że to dobry pomysł.
Martin Ender

Który z nich najbardziej polecasz do wygrywania takich wyzwań?
justaprogrammer 31.01.16

3
@ justaprogrammer Nie wybrałbym takiego, w oparciu o który wygrywa te wyzwania (prawdopodobnie byłby to Pyth lub Jelly). Granie w golfa w „normalnym” języku może być równie zabawne (zwłaszcza, że w tym języku może być więcej konkurencji ). W przypadku języka golfowego ważniejsze jest prawdopodobnie korzystanie z niego. CJam jest całkiem zabawny - oparty na stosie, który sprawia, że ​​zginasz się trochę bardziej niż inne języki, a jednocześnie jest to dość potężny język, którego zacząłem używać do prostych skryptów do gry poza golfem, które to dobry wzrost mojej wydajności.
Martin Ender

Te języki wyglądają bardzo interesująco i nie mogę się doczekać, aby nauczyć się jednego z nich. Nie wiem co to jest galaretka? Czy to jakiś żelatyna czy coś takiego?
justaprogrammer 31.01.16

8

Pyth, 17 13 12 bajtów

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

Wypróbuj go w tłumaczu online .


4
Co to za magia? Jak to działa?
justaprogrammer

1
@ justaprogrammer Dodałem wyjaśnienie. :)
Klamka

No ale jak. Jak testujesz ten kod?
justaprogrammer 31.01.16

1
@justaprogrammer Dodałem link do tłumacza online, na którym można uruchomić kod.
Klamka

To jest niesamowite, jest takie krótkie, ale takie piękne
justaprogrammer 31.01.16

5

Python 2, 72

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

Funkcja rekurencyjna wykorzystuje skrót Python 2 __repr__, który się zepsuje, gdy funkcja osiągnie bardzo duże wartości ( Lzostanie dodana do ciągu liczby), nie jestem pewien ze specyfikacji, czy jest miejsce, w którym możemy się zatrzymać , ale jeśli nie zmienia się na str()dodanie tylko 6 bajtów, ale wtedy staje się nieco krótszy, aby wyświetlać jako ciąg, przy 75 bajtach:

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

1 bajt zapisany dzięki trichoplax w tej wersji


Czy to nadwyżka miejsca przed ordrugim blokiem kodu?
trichoplax

1
@trichoplax dzięki za połów :)
FryAmTheEggman

5

JavaScript ES6, 70 bajtów

Zapisano 1 bajt dzięki @ user81655

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

westchnienie JavaScript jest naprawdę pełne. Znaczna część (> 50%) kodu to po prostu wielkość ciągu + funkcja tablicy + złączenie + rzut na int. Próbowałem zredukować, ewaluować i wszelkiego rodzaju rzeczy, ale wydaje się to być najkrótsze.

Wypróbuj online (działają wszystkie przeglądarki)


2
Podobnie jak mój, ale lepszy (i opublikowany wcześniej). Bah!
edc65

String Manipulation is JS jest tak długi, że masz moje kondolencje
MayorMonty

@ user81655 spoko, dzięki! Nigdy bym nie pomyślał o ponownym zamówieniu w ten sposób
Downgoat

f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'jeśli dozwolone jest zwracanie ciągu
l4m2

4

Brachylog , 19 bajtów

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

Wyjaśnienie

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 bajtów

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

Przykład użycia: (g"1"!!) 7-> "668".

Jest to bezpośrednia implementacja definicji: zaczynając od "1", wielokrotnie dołączaj wynik odwrotnego dodawania-sortowania bieżącego elementu. Główna funkcja (g"1"!!)wybiera ten ielement.


Jest to najbardziej czytelny program poniżej 70 bajtów!
Gaurav Agarwal

3

Julia, 77 bajtów

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

Jest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca liczbę całkowitą. Aby go wywołać, przypisz go do zmiennej.

Nie golfowany:

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

Galaretka, 13 12 bajtów

Jestem pewien, że można to prawdopodobnie zagrać w golfa, ponieważ jest to moja pierwsza odpowiedź w Jelly / w milczącym języku.

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

EDYCJA: Zaoszczędził 1 bajt, dzięki Dennis


2

Java 1.8, 251 bajtów

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

Rozszerzony

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

Dlaczego używasz interfaceR zamiast classR, który jest o 4 bajty krótszy?
Will Sherwood,

1
@WillSherwood, ponieważ możesz wtedy pominąć publiczny modyfikator na main (), co czyni go ogólnie krótszym :)
Denham Coote

2

Poważnie, 17 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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

2

Lua, 179 156 bajtów

Nie widzę, jak mógłbym bardziej zagrać w golfa, ale jestem pewien, że jest na to sposób. Dzięki @LeakyNun poświęciłem trochę czasu, aby zejść na dół i zagrać w golfa we właściwy sposób, być może nadal mogę wygrać trochę bajtów, stosując inne podejście.

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)

Bez golfa i wyjaśnienia

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)

Wygląda na to, że już cię tu nie ma ... ale może możesz odnieść się do mojej odpowiedzi w języku Java.
Leaky Nun

@LeakyNun Cóż, tym razem nie biorę dużo udziału, ale od czasu do czasu sprawdzam wyzwania, postaram się rzucić okiem na twoją odpowiedź, ale nawet bez tego widzę coś, na co można grać w golfa dość łatwo ( a=a<1 and 1orna przykład).
Katenkyo

bylibyśmy szczęśliwi - byłbym szczęśliwy - gdybyś wrócił.
Leaky Nun

2

Brachylog 2, 11 bajtów, wyzwanie dotyczące postdatacji języka

;1{↔;?+o}ⁱ⁽

Wypróbuj online!

Wyjaśnienie

;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

Nie jestem całkiem pewien, co to robi z cyframi zerowymi, ale pytanie nie określa żadnej konkretnej obsługi i prawdopodobnie nie pojawiają się w sekwencji.


1

ES6, 79 bajtów

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

82 bajty bez eval:

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

Wszystkie te konwersje są bolesne.

@ edc65 Właściwie zaoszczędziłem 4 bajty, przechodząc z mapdo reducetego czasu ... bez wątpienia znowu udowodnisz, że się mylę.


forjest krótszy:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
Downgoat 31.01.16

@ Doᴡɴɢᴏᴀᴛ Nie działa n=0, nawet po naprawieniu błędów składniowych.
Neil

1

Python 2, 91 bajtów

Wprowadź jako liczbę całkowitą, wynik zostanie wydrukowany na ekranie.

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

To może być o wiele krótsze z pewną magią rekurencyjną, ale nie mogę jeszcze owinąć wokół niej głowy. Zobaczę później i mam nadzieję, że poprawię ten.


1

Python 2, 83 bajty

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

1

Perl 6 , 40 bajtów

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

(Jeśli chcesz, aby zwrócił Int wstaw +wcześniej [~])

Stosowanie:

# 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 bajtów

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

Całkiem proste.


1

PHP, 102 bajtów

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

Wersja online

PHP, 95 bajtów

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 bajtów

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

Wypróbuj online!

Nie najdłuższy wpis! \ o /


@Katenkyo zobacz to
Leaky Nun

Jest ok f (1) ... f (20) Ale z f (21) wynik wydaje się zły ...
RosLuP

Utrata precyzji, jak sądzę.
Leaky Nun


0

Aksjomat, 146 bajtów

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

test i wyniki [sekwencja 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]]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.