Urutan RATS


30

Tugas Anda adalah untuk menghasilkan istilah ke-n dari urutan RATS, di mana n adalah input. Urutan RATS juga dikenal sebagai urutan Reverse Add Then Sort. Urutan ini juga dapat ditemukan di sini: http://oeis.org/A004000 .

kasus uji:

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

Misalnya, output untuk 5 adalah 77 karena 16 + 61 = 77. Setelah ini 77 diurutkan.

Pengajuan terpendek menang. Ini adalah tantangan pertama saya jadi saya harap ini bukan duplikat atau sesuatu.


Apakah input harus berupa Integer atau bisa juga berupa string?
Denker

@DenkerAffe maksud Anda angka dalam bentuk string?
justaprogrammer

@justaprogrammer Ya, jadi saya bisa mendapatkan "123" bukan 123 sebagai Integer. Akankah menghemat beberapa byte.
Denker

2
bukankah 77 + 77 = 154? Atau apakah saya melewatkan sesuatu? EDIT: Oh, ya, saya lupa menyortir.
Denham Coote

6
@DenhamCoote Saya pikir Anda berarti "oh tikus s , aku lupa untuk mengurutkan!"
Martin Ender

Jawaban:


11

MATL , 11 12 byte

1i"tVPU+VSU

Input adalah string (dengan tanda kutip tunggal) mewakili integer di unary . Input string diizinkan oleh tantangan, dan unary adalah format yang valid .

Cobalah online!

Penjelasan

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
Saya tidak tahu mana yang membuat saya takut / bingung, MATL atau Jelly ... +1
Downgoat

9

05AB1E , 6 byte

Kode:

$FDR+{

Penjelasan:

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

Ini juga berfungsi dengan program 0 byte .


@ Adnan Tiga hari yang lalu , sebenarnya. Tetap saja, dimainkan dengan baik ...
Gagang Pintu

@Doorknob Tepat pada waktunya haha
Adnan

19
Anda dapat menyimpan 6 byte dengan menghilangkan kode sumber Anda.
Dennis

2
Anda juga dapat mempersingkat 05AB1Edengan terlebih dahulu menghilangkan nol di depan, dan kemudian menghilangkan 1, sebagai 1E==E. Maka Anda hanya mendapatkan 5ABE, -2 byte.
flawr

1
@Dennis great observation
Adnan

8

CJam, 15 byte

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

Uji di sini.

Penjelasan

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
bagaimana semua bahasa ini sangat singkat
justaprogrammer

2
@justaprogrammer Nama-nama karakter tunggal untuk fungsi internal membantu. ;) CJam, Pyth dan Brachylog adalah semua bahasa golf, yang dirancang khusus dengan mempertimbangkan kode golf. (Lihat en.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages. ) Lalu ada juga bahasa-bahasa seperti APL dan J yang tidak bermain golf bahasa sama sekali tetapi sama-sama singkat, karena para desainer pikir itu akan menjadi ide yang baik.
Martin Ender

Mana yang paling Anda rekomendasikan untuk memenangkan tantangan seperti ini?
justaprogrammer

3
@ justaprogrammer Saya tidak akan memilih satu berdasarkan yang mana memenangkan tantangan ini (yang mungkin Pyth atau Jelly). Bermain golf dalam bahasa "normal" sama menyenangkannya (terutama karena mungkin ada lebih banyak kompetisi dalam bahasa itu). Untuk bahasa golf, mungkin lebih penting Anda menikmati menggunakannya. CJam cukup menyenangkan - ini adalah stack-based yang membuat Anda membengkokkan pikiran Anda sedikit lebih dari bahasa lain, dan pada saat yang sama itu adalah bahasa yang sangat kuat, yang saya mulai gunakan untuk skrip-skrip membuang yang sederhana di luar golf, yang adalah dorongan yang baik untuk produktivitas saya.
Martin Ender

Bahasa-bahasa ini terlihat sangat menarik dan saya tidak sabar untuk mempelajarinya sendiri. Saya tidak tahu apa itu jeli? Apakah itu semacam gelatin atau semacamnya?
justaprogrammer

8

Pyth, 17 13 12 byte

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

Cobalah menggunakan penerjemah online .


4
Apa sihir ini? Bagaimana cara kerjanya?
justaprogrammer

1
@justaprogrammer Saya telah menambahkan penjelasan. :)
Gagang Pintu

Hah, tapi bagaimana. Bagaimana Anda menguji kode ini?
justaprogrammer

1
@justaprogrammer Saya telah menambahkan tautan ke juru bahasa online tempat Anda dapat menjalankan kode.
Gagang pintu

Ini luar biasa, sangat singkat, namun begitu indah
justaprogrammer

5

Python 2, 72

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

Fungsi rekursif, menggunakan singkatan Python 2 untuk __repr__, yang akan pecah begitu fungsi mencapai nilai yang sangat besar (sebuah Lakan ditambahkan ke string angka), saya tidak yakin dari spesifikasi jika ada tempat di mana kita bisa berhenti , tetapi jika tidak berubah menjadi str()hanya menambah 6 byte, tetapi kemudian menjadi sedikit lebih pendek untuk output sebagai string, pada 75 byte:

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

1 byte disimpan berkat trichoplax pada versi ini


Apakah itu ruang kelebihan sebelum ordi blok kode kedua?
trichoplax

1
@trichoplax terima kasih atas tangkapannya :)
FryAmTheEggman

5

JavaScript ES6, 70 byte

Disimpan 1 byte berkat @ user81655

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

JavaScript sigh benar-benar bertele-tele. Sebuah banyak (> 50%) dari kode ini hanya kasus untuk fungsi array string + + bergabung + cor untuk int. Saya sudah mencoba mengurangi, mengevaluasi, dan segala macam hal tetapi ini tampaknya yang terpendek.

Cobalah online (Semua browser berfungsi)


2
Sama seperti milik saya, tetapi lebih baik (dan diposting sebelumnya). Bah!
edc65

Manipulasi String adalah JS begitu lama, Anda memiliki belasungkawa saya
MayorMonty

@ user81655 keren, terima kasih! Saya tidak akan pernah berpikir untuk memesan ulang seperti itu
Downgoat

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

4

Brachylog , 19 byte

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

Penjelasan

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 byte

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

Contoh penggunaan: (g"1"!!) 7-> "668".

Ini adalah implementasi langsung dari definisi: dimulai dengan "1", berulang kali menambahkan hasil reverse-add-sort dari elemen saat ini. Fungsi utama (g"1"!!)memilih ielemen th.


Ini adalah program yang paling mudah dibaca di bawah 70 byte!
Gaurav Agarwal

3

Julia, 77 byte

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

Ini adalah fungsi lambda yang menerima integer dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel.

Tidak Disatukan:

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

Jelly, 13 12 byte

Saya yakin ini mungkin bisa golf, karena ini adalah jawaban pertama saya di Jelly / dalam bahasa diam-diam.

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

EDIT: Disimpan 1 byte, terima kasih untuk Dennis


2

Java 1.8, 251 byte

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

Diperluas

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

Mengapa Anda menggunakan interfaceR bukannya classR yang 4 byte lebih pendek?
Will Sherwood

1
@ WillSherwood karena Anda kemudian dapat menghilangkan pengubah publik di main (), membuatnya lebih pendek secara keseluruhan :)
Denham Coote

2

Serius, 17 byte

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

Cobalah online!

Penjelasan:

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

2

Lua, 179 156 Bytes

Saya tidak bisa melihat bagaimana saya bisa bermain golf lebih banyak, tapi saya yakin ada cara. Berkat @LeakyNun saya meluangkan waktu untuk membahas ini dan golf dengan cara yang tepat, saya mungkin masih bisa memenangkan beberapa byte dengan menggunakan pendekatan lain.

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)

Tidak terseret dan penjelasan

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)

Yah sepertinya Anda tidak ada lagi di sini ... tapi mungkin Anda bisa merujuk ke jawaban java saya.
Leaky Nun

@ LeakyNun Yah, saya tidak banyak berpartisipasi kali ini tetapi masih memuncak pada tantangan dari waktu ke waktu, saya akan mencoba untuk melihat jawaban Anda, tetapi bahkan tanpa itu saya melihat beberapa hal yang dapat bermain golf dengan mudah ( a=a<1 and 1orcontohnya).
Katenkyo

kami akan senang - saya akan senang - memiliki Anda kembali.
Leaky Nun

2

Brachylog 2, 11 byte, tantangan tanggal akhir bahasa

;1{↔;?+o}ⁱ⁽

Cobalah online!

Penjelasan

;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

Saya tidak begitu jelas tentang apa yang dilakukan dengan nol digit, tetapi pertanyaannya tidak menyatakan penanganan tertentu, dan mereka mungkin tidak muncul dalam urutan.


1

ES6, 79 byte

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

82 byte tanpa eval:

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

Semua pertobatan itu menyakitkan.

@ edc65 Aku benar-benar disimpan 4 byte dengan beralih dari mapke reducewaktu ini ... tidak ada ragu Anda akan membuktikan saya salah lagi sekalipun.


forlebih pendek:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
Downgoat

@ Doᴡɴɢᴏᴀᴛ Tidak berfungsi n=0, bahkan setelah saya memperbaiki kesalahan sintaks.
Neil

1

Python 2, 91 Bytes

Input sebagai Integer, hasilnya dicetak ke layar.

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

Ini bisa jadi jauh lebih pendek dengan sihir rekursi kurasa, tapi aku belum bisa membungkus kepalaku. Akan terlihat segar nanti dan semoga memperbaiki yang ini.


1

Python 2, 83 byte

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

1

Perl 6 , 40 byte

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

(Jika Anda ingin mengembalikan Int meletakkan +hak sebelum [~])

Pemakaian:

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

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

Cukup sederhana.


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 Online

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 byte

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

Cobalah online!

Bukan entri terpanjang! \Hai/


@Katenkyo melihat ini
Leaky Nun

Tidak apa-apa f (1) ... f (20) Tetapi dari f (21) hasilnya keliru ...
RosLuP

Kehilangan presisi saya kira.
Leaky Nun


0

Aksioma, 146 byte

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

tes dan hasil [Urutan 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]]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.