RATS 시퀀스


30

귀하의 작업은 RATS 시퀀스의 n 번째 항을 생성하는 것입니다. 여기서 n은 입력입니다. RATS 시퀀스는 Reverse Add Then Sort 시퀀스라고도합니다. 이 시퀀스는 http://oeis.org/A004000 에서도 찾을 수 있습니다 .

테스트 사례 :

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

예를 들어, 16 + 61 = 77이므로 5의 출력은 77입니다.이 후 77이 정렬됩니다.

최단 제출이 이깁니다. 이것은 나의 첫 번째 도전이므로 이것이 복제본이 아니기를 바랍니다.


입력이 정수 여야합니까, 아니면 문자열 일 수도 있습니까?
Denker

@DenkerAffe 당신은 문자열 형태의 숫자를 의미합니까?
justaprogrammer

@ justaprogrammer Yea이므로 123 대신 "123"을 Integer로 얻을 수 있습니다. 바이트를 절약 할 수 있습니다.
Denker

2
77 + 77 = 154 아닌가요? 아니면 내가 놓친 것이 있습니까? 편집 : 아, 그래, 정렬하는 것을 잊었다.
Denham Coote

6
@ DenhamCoote 나는 당신이 "오 쥐 s , 정렬하는 것을 잊었다!"
마틴 엔더

답변:


11

MATL , 11 12 바이트

1i"tVPU+VSU

입력은 unary 의 정수를 나타내는 문자열 (작은 따옴표 포함) 입니다. 챌린지는 문자열 입력을 허용하며 단항 은 유효한 형식 입니다.

온라인으로 사용해보십시오!

설명

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
MATL이나 Jelly 중 어느 것이 더
겁나게되는지 모르겠습니다

9

05AB1E , 6 바이트

암호:

$FDR+{

설명:

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

이것은 0 바이트 프로그램 에서도 작동 합니다.


@Adnan 실제로 3 일 전에 . 아직도, 잘 연주 ...
손잡이

@Doorknob Just in time haha
Adnan

19
소스 코드를 제거하여 6 바이트를 절약 할 수 있습니다.
Dennis

2
당신은 또한 단축 할 수 05AB1E먼저 앞에 0을 제거, 다음을 생략하여 1같은 1E==E. 그런 다음 5ABE-2 바이트 를 얻습니다 .
flawr

1
@Dennis 위대한 관찰
Adnan

8

CJam, 15 바이트

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

여기에서 테스트하십시오.

설명

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
모든 언어는 너무 짧게 할 수있는 방법
justaprogrammer

2
@justaprogrammer 내장 함수 도움말의 단일 문자 이름. ;) CJam, Pyth 및 Brachylog는 모두 골프 언어이며 코드 골프를 염두에두고 특별히 설계되었습니다. ( en.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages를 참조하십시오 . ) 그런 다음 APL 및 J와 같이 언어를 전혀 사용하지 않지만 유사하게 간결한 언어도 있습니다. 설계자가 좋은 생각이라고 생각했기 때문입니다.
Martin Ender 2016 년

이와 같은 도전 과제를 해결하기 위해 가장 추천하는 것은 무엇입니까?
justaprogrammer 2016 년

3
@ justaprogrammer 나는 어떤 도전 과제에서 이기고 있는지에 따라 하나를 선택하지 않을 것입니다 (Pyth 또는 Jelly 일 것입니다). "정상적인"언어로 골프를 치는 것도 재미있을 수 있습니다 (특히 해당 언어 내에서 더 많은 경쟁이있을 수 있기 때문에 ). 골프 언어의 경우, 사용하는 것이 더 중요 할 것입니다. CJam은 매우 재밌습니다. 스택 기반이기 때문에 다른 언어보다 마음을 조금 더 구부릴 수 있으며 동시에 골프 이외의 간단한 버리기 스크립트에 사용하기 시작한 매우 강력한 언어입니다. 생산성 향상에 도움이됩니다.
Martin Ender

이 언어들은 매우 흥미롭게 보이며 스스로 배우기를 기다릴 수 없습니다. 젤리가 뭔지 모르겠어요? 그게 일종의 젤라틴인가요?
justaprogrammer 2016 년

8

Pyth, 17 13 12 바이트

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

온라인 통역사에서 사용해보십시오 .


4
이 마술은 무엇입니까? 이것은 어떻게 작동합니까?
justaprogrammer

1
@ justaprogrammer 설명을 추가했습니다. :)
Doorknob

허, 그러나 어떻게. 이 코드를 어떻게 테스트합니까?
justaprogrammer

1
@ justaprogrammer 코드를 실행할 수있는 온라인 통역사에 대한 링크를 추가했습니다.
Doorknob

이것은 굉장합니다, 너무 짧지 만 너무 아름답습니다
justaprogrammer

5

파이썬 2, 72

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

재귀 함수는 파이썬 2 속기를 사용 __repr__합니다.이 함수는 매우 큰 값에 도달하면 중단됩니다 ( L숫자 문자열에 추가됩니다). 우리가 멈출 수있는 장소가 있다면 사양에서 확실하지 않습니다 으로 변경되지 않는 경우str() 6 바이트 만 추가하지만 75 바이트에서 문자열로 출력하는 것이 약간 짧아집니다.

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

이 버전의 trichoplax 덕분에 1 바이트 절약


or두 번째 코드 블록 앞의 잉여 공간 입니까?
trichoplax

1
@trichoplax 캐치 주셔서 감사합니다 :)
FryAmTheEggman

5

자바 스크립트 ES6, 70 바이트

@ user81655 덕분에 1 바이트 절약

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

한숨 JavaScript는 정말 장황하다. 코드의 많은 (> 50 %)은 문자열 + 배열 함수 + 조인 + int로 캐스트하는 경우입니다. 나는 reduce, eval 및 모든 종류의 것들을 시도했지만 이것이 가장 짧은 것 같습니다.

온라인으로 사용해보십시오 (모든 브라우저에서 작동)


2
내 것과 똑같지 만 더 좋았습니다 (이전에 게시). 바!
edc65

String Manipulation은 JS가 너무 길어서 애도가 있습니다
MayorMonty

@ user81655 감사합니다! 나는 그런 식으로 다시 주문 생각하지 않을 것입니다
Downgoat

f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'반환 문자열이 허용되는 경우
l4m2

4

Brachylog , 19 바이트

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

설명

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

하스켈, 67 바이트

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

사용 예 : (g"1"!!) 7->"668" .

정의의 직접 구현입니다.로 시작 "1"하여 현재 요소의 역 가산 정렬 결과를 반복적으로 추가하십시오. 주요 기능 (g"1"!!)ith 요소를 선택합니다 .


이것은 70 바이트 미만에서 가장 읽기 쉬운 프로그램입니다!
Gaurav Agarwal

3

줄리아, 77 바이트

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

정수를 받아들이고 정수를 반환하는 람다 함수입니다. 호출하려면 변수에 지정하십시오.

언 골프 드 :

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

젤리, 13 12 바이트

이것이 젤리 / 암묵적인 언어로 된 첫 번째 답변이므로 이것이 아마도 골프 일 수 있다고 확신합니다.

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

편집 : Dennis 덕분에 1 바이트를 절약했습니다.


2

자바 1.8, 251 바이트

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

넓히는

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

4 바이트보다 짧은 interfaceR 대신 R 을 사용하는 이유는 무엇 class입니까?
윌 셔우드

1
당신이 짧은 전체 :) 만드는) (주의 공용 수정을 생략 한 후 수 있기 때문에 @WillSherwood
덴햄 Coote


2

루아, 179156 바이트

어떻게 골프를 더 잘할 수 있는지 알 수 없지만 방법이 있다고 확신합니다. @LeakyNun 덕분 에이 문제를 해결하고 올바른 방법으로 골프를 치기 위해 시간이 걸렸습니다. 아마도 다른 접근법을 사용하여 일부 바이트를 이길 수 있습니다.

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)

언 골프 및 설명

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)

글쎄, 더 이상 여기에없는 것처럼 보이지만 아마도 내 자바 답변을 참조 할 수 있습니다.
Leaky Nun

@LeakyNun 글쎄, 나는 이번에 많이 참여하지 않지만 때때로 도전에서 정점에 달한다. 나는 당신의 대답을 보려고 노력할 것입니다. a=a<1 and 1or예를 들어).
Katenkyo

우리는 기뻐할 것입니다 – 나는 기뻐할 것입니다 – 당신을 다시 데려 오게합니다.
Leaky Nun

2

Brachylog 2, 11 바이트, 언어 날짜 도전 과제

;1{↔;?+o}ⁱ⁽

온라인으로 사용해보십시오!

설명

;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

나는 이것이 0 자릿수로 무엇을하는지 명확하지 않지만 질문에는 특정 처리가 명시되어 있지 않으며 어쨌든 순서에 나타나지 않을 것입니다.


1

ES6, 79 바이트

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

없는 82 바이트 eval:

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

이 모든 전환은 고통 스럽습니다.

@ edc65 실제로에서 전환하여 4 바이트를 저장 map하는 reduce이 시간 ... 더 당신이 잘못 생각 나를 다시 증명 할게요 의심하지 않습니다.


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

@ Doᴡɴɢᴏᴀᴛ n=0구문 오류를 수정 한 후에도 작동하지 않습니다 .
Neil

1

파이썬 2, 91 바이트

정수로 입력하면 결과가 화면에 인쇄됩니다.

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

이것은 내가 생각하는 재귀 마법으로 훨씬 짧을 수 있지만 아직 머리를 감쌀 수는 없습니다. 나중에 신선한 모습을 보았 으면 좋겠다.


1

파이썬 2, 83 바이트

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

1

펄 6 , 40 바이트

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

(Int를 반환하려면 +바로 전에 넣기 [~])

용법:

# 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 바이트

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

아주 간단합니다.


1

PHP, 102 바이트

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

온라인 버전

PHP, 95 바이트

n <= 39

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

1

자바 , 171 167 163 160 바이트

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

온라인으로 사용해보십시오!

가장 긴 항목이 아닙니다! \영형/


@Katenkyo 이것을 참조 하십시오
Leaky Nun

괜찮습니다 f (1) ... f (20) 그러나 f (21) 결과에서 잘못된 것 같습니다 ...
RosLuP

내가 생각하는 정밀도의 상실.
Leaky Nun


0

공리, 146 바이트

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

테스트 및 결과 [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]]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.