Trình tự RATS


30

Nhiệm vụ của bạn là tạo ra số hạng thứ n của chuỗi RATS, trong đó n là đầu vào. Trình tự RATS còn được gọi là trình tự Thêm Thêm rồi Sắp xếp. Trình tự này cũng có thể được tìm thấy ở đây: http://oeis.org/A004000 .

trường hợp thử nghiệm:

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

Ví dụ: đầu ra cho 5 là 77 vì 16 + 61 = 77. Sau đó, 77 được sắp xếp.

Bài nộp ngắn nhất sẽ thắng. Đây là thử thách đầu tiên của tôi vì vậy tôi hy vọng đây không phải là một bản sao hoặc một cái gì đó.


Đầu vào phải là một số nguyên hay nó cũng có thể là một chuỗi?
Denker

@DenkerAffe có nghĩa là một số ở dạng chuỗi?
justaprogrammer

@justaprogrammer Yea, vì vậy tôi có thể nhận "123" thay vì 123 là Integer. Có thể sẽ lưu một số byte.
Denker

2
không phải là 77 + 77 = 154? Hay tôi đã bỏ lỡ điều gì? EDIT: Ồ, vâng, tôi quên sắp xếp.
Denham Coote

6
@DenhamCoote Tôi nghĩ bạn có nghĩa là "oh chuột s , tôi quên sắp xếp!"
Martin Ender

Câu trả lời:


11

MATL , 11 12 byte

1i"tVPU+VSU

Đầu vào là một chuỗi (có dấu ngoặc đơn) đại diện cho một số nguyên trong unary . Nhập chuỗi được cho phép bởi thử thách và unary là định dạng hợp lệ .

Hãy thử trực tuyến!

Giải trình

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
Tôi không biết điều gì làm tôi sợ / bối rối hơn, MATL hay Jelly ... +1
Downgoat

9

05AB1E , 6 byte

Mã số:

$FDR+{

Giải trình:

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

Điều này cũng hoạt động với một chương trình 0 byte .


@Ad Nam Ba ngày trước , thực sự. Tuy nhiên, chơi tốt ...
Doorknob

@Doorknob Vừa đúng lúc haha
Adnan

19
Bạn có thể lưu 6 byte bằng cách loại bỏ mã nguồn của bạn.
Dennis

2
Bạn cũng có thể rút ngắn 05AB1Ebằng cách loại bỏ số 0 đứng đầu, sau đó bỏ qua 1, như 1E==E. Sau đó, bạn nhận được 5ABE, -2 byte.
flawr

1
@Dennis quan sát tuyệt vời
Adnan

8

CJam, 15 byte

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

Kiểm tra nó ở đây.

Giải trình

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
làm thế nào mà tất cả các ngôn ngữ này có thể ngắn đến vậy
justaprogrammer

2
@justaprogrammer Tên một ký tự cho các hàm tích hợp trợ giúp. ;) CJam, Pyth và Brachylog đều là những ngôn ngữ chơi gôn, được thiết kế đặc biệt dành cho môn đánh gôn. (Xem en.wikipedia.org/wiki/Code_golf#Dclus_golfing_lacular. ) Sau đó, cũng có những ngôn ngữ như APL và J hoàn toàn không phải là ngôn ngữ chơi gôn nhưng cũng tương tự, bởi vì các nhà thiết kế nghĩ rằng đó sẽ là một ý tưởng tốt.
Martin Ender

Bạn khuyên bạn nên làm điều gì nhất để chiến thắng những thử thách như thế này?
justaprogrammer

3
@justaprogrammer Tôi sẽ không chọn một người dựa trên đó ai sẽ chiến thắng những thử thách này (đó có thể là Pyth hoặc Jelly). Nó có thể thú vị như chơi golf trong một ngôn ngữ "bình thường" (đặc biệt là vì có thể có nhiều sự cạnh tranh trong ngôn ngữ đó). Đối với ngôn ngữ chơi gôn, có lẽ điều quan trọng hơn là bạn thích sử dụng nó. CJam khá thú vị - đó là một trò chơi dựa trên ngăn xếp khiến bạn phải suy nghĩ nhiều hơn một chút so với các ngôn ngữ khác, đồng thời nó là một ngôn ngữ khá mạnh mẽ, mà tôi đã bắt đầu sử dụng cho các kịch bản ném đơn giản bên ngoài sân golf, mà là một sự thúc đẩy tốt cho năng suất của tôi.
Martin Ender

Những ngôn ngữ này trông rất thú vị và tôi không thể chờ đợi để tự học một ngôn ngữ. Tôi không biết thạch là gì? Đó có phải là một loại gelatine hay cái gì đó?
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

Hãy thử nó trên trình thông dịch trực tuyến .


4
Phép thuật này là gì? Cái này hoạt động ra sao?
justaprogrammer

1
@justaprogrammer Tôi đã thêm một lời giải thích. :)
Doorknob

Hừ, nhưng thế nào. Làm thế nào để bạn kiểm tra mã này?
justaprogrammer

1
@justaprogrammer Tôi đã thêm một liên kết đến một trình thông dịch trực tuyến mà bạn có thể chạy mã trên.
Doorknob

Điều này thật tuyệt vời, nó rất ngắn, nhưng rất đẹp
justaprogrammer 31/1/2016

5

Con trăn 2, 72

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

Hàm đệ quy, sử dụng tốc ký Python 2 __repr__, sẽ bị phá vỡ khi hàm đạt đến các giá trị rất lớn ( Lsẽ được thêm vào chuỗi số), tôi không chắc chắn về thông số nếu có nơi chúng ta có thể dừng , nhưng nếu không thay đổi str()chỉ thêm 6 byte, nhưng sau đó nó trở nên ngắn hơn một chút để xuất ra dưới dạng chuỗi, ở mức 75 byte:

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

Lưu 1 byte nhờ trichoplax trên phiên bản này


Có phải đó là một không gian dư thừa trước orkhối mã thứ hai?
trichoplax

1
@trichoplax cảm ơn vì đã bắt :)
FryAmTheEggman

5

JavaScript ES6, 70 byte

Đã lưu 1 byte nhờ @ user81655

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

JavaScript thở dài thực sự dài dòng. Rất nhiều (> 50%) mã chỉ là trường hợp cho chuỗi + hàm mảng + nối + truyền tới int. Tôi đã thử giảm, eval, và tất cả các loại công cụ nhưng điều này dường như là ngắn nhất.

Dùng thử trực tuyến (Tất cả các trình duyệt hoạt động)


2
Giống như của tôi, nhưng tốt hơn (và được đăng trước đó). Bah!
edc65

Thao tác chuỗi là JS quá dài, bạn xin chia buồn
MayorMonty

@ user81655 tuyệt, cảm ơn! Tôi sẽ không bao giờ nghĩ sẽ đặt hàng lại theo cách đó
Downgoat

f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'nếu trả về chuỗi cho phép
l4m2

4

Brachylog , 19 byte

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

Giải trình

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

Ví dụ sử dụng: (g"1"!!) 7-> "668".

Đó là một triển khai trực tiếp của định nghĩa: bắt đầu bằng "1", liên tục nối thêm kết quả sắp xếp ngược lại của phần tử hiện tại. Hàm chính (g"1"!!)chọn iphần tử thứ.


Đây là chương trình dễ đọc nhất dưới 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)

Đây là hàm lambda chấp nhận một số nguyên và trả về một số nguyên. Để gọi nó, gán nó cho một biến.

Ung dung:

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

Thạch, 13 12 byte

Tôi chắc chắn rằng điều này có thể được đánh gôn, vì đây là câu trả lời đầu tiên của tôi bằng Jelly / bằng ngôn ngữ ngầm.

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: Đã lưu 1 byte, nhờ 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);}}

Mở rộng

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

Tại sao bạn sử dụng interfaceR thay vì classR ngắn hơn 4 byte?
Will Sherwood

1
@WillSherwood vì sau đó bạn có thể bỏ qua công cụ sửa đổi công khai trên main (), làm cho nó ngắn hơn về tổng thể :)
Denham Coote


2

Lua, 179 156 byte

Tôi không thể thấy làm thế nào tôi có thể chơi gôn nhiều hơn, nhưng tôi chắc chắn có một cách. Nhờ @LeakyNun tôi đã dành thời gian để giải quyết vấn đề này và chơi golf đúng cách, tôi vẫn có thể giành được một số byte bằng cách sử dụng một cách tiếp cận khác.

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)

Ungolfed và giải thích

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)

Chà có vẻ như bạn không còn ở đây nữa ... nhưng có lẽ bạn có thể tham khảo câu trả lời java của tôi.
Leaky Nun

@LeakyNun Chà, thỉnh thoảng tôi không tham gia nhiều lần nhưng vẫn vượt qua các thử thách, tôi sẽ cố gắng xem câu trả lời của bạn, nhưng ngay cả khi không thấy điều đó tôi có thể chơi golf khá dễ dàng ( a=a<1 and 1orví dụ).
Katenkyo

chúng tôi sẽ rất vui - tôi sẽ rất vui - có bạn trở lại.
Leaky Nun

2

Brachylog 2, 11 byte, thách thức ngôn ngữ

;1{↔;?+o}ⁱ⁽

Hãy thử trực tuyến!

Giải trình

;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

Tôi không rõ lắm về những gì nó làm với các chữ số 0, nhưng câu hỏi không nêu bất kỳ xử lý cụ thể nào và có lẽ chúng không xuất hiện trong chuỗi.


1

ES6, 79 byte

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

82 byte không có eval:

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

Tất cả những chuyển đổi là đau đớn.

@ edc65 Tôi thực sự lưu 4 byte bằng cách chuyển từ mapđể reducethời gian này ... không có nghi ngờ bạn sẽ chứng minh tôi sai một lần nữa mặc dù.


forngắn hơn:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
Hạ cấp

@ Doᴡɴɢᴏᴀᴛ Không hoạt động n=0, ngay cả sau khi tôi đã sửa các lỗi cú pháp.
Neil

1

Python 2, 91 byte

Nhập dưới dạng Integer, kết quả được in ra màn hình.

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

Tôi đoán nó có thể ngắn hơn rất nhiều với một số phép thuật đệ quy, nhưng tôi không thể quấn đầu xung quanh nó. Gonna có một cái nhìn mới mẻ sau đó và hy vọng cải thiện điều này.


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

(Nếu bạn muốn nó trả lại một Int, hãy đặt +quyền trước [~])

Sử dụng:

# 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

Toán học 10.3, 66 61 byte

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

Kha đơn gảin.


1

PHP, 102 byte

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

Phiên bản trực tuyến

PHP, 95 byte

n <= 39

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



0

Tiên đề, 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)))

kiểm tra và kết quả [trình tự 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]]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.