RATS dizisi


30

Göreviniz, n'nin girdi olduğu RATS dizisinin nt terimini üretmektir. RATS dizisi, Tersine Sonra Eklenen Sırala dizisi olarak da bilinir. Bu sekans burada da bulunabilir: http://oeis.org/A004000 .

test durumları:

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

Örneğin, 5 için çıktı 77, çünkü 16 + 61 = 77. Bundan sonra 77 sıralanır.

En kısa gönderim kazanır. Bu benim ilk meydan okumam, bu yüzden bunun yinelenen bir şey olmadığını umuyorum.


Giriş bir Tamsayı mı olmalı yoksa bir dize de olabilir mi?
Denker

@DenkerAffe dize şeklinde bir sayı mı demek istiyorsun?
justaprogrammer,

@justaprogrammer Yea, bu yüzden Tam Sayı olarak 123 yerine "123" alabilirim. Bazı baytları kurtarır.
Denker

2
77 + 77 = 154 değil mi? Yoksa bir şey mi kaçırdım? EDIT: Ah, evet, sıralamayı unuttum.
Denham Coote

6
Ne demek düşünüyorum @DenhamCoote "sıçan ah lar , ben sıralamak unuttum!"
Martin Ender

Yanıtlar:


11

Matl , 11 12 bayt

1i"tVPU+VSU

Giriş, tekli bir tamsayıyı temsil eden bir dizedir (tek tırnak işaretli ) . Dize girişine meydan okuma tarafından izin verilir ve unary geçerli bir formattır .

Çevrimiçi deneyin!

açıklama

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
Hangi beni daha çok korkutuyor / şaşırtıyor bilmiyorum, MATL veya Jelly ... +1
Downgoat

9

05AB1E , 6 bayt

Kod:

$FDR+{

Açıklama:

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

Bu ayrıca 0 baytlık bir programla da çalışır .


@Adnan Üç gün önce , aslında. Hala, iyi oynadı ...
Doorknob

@Doorknob Tam zamanında haha
Adnan

19
Kaynak kodunuzu kaldırarak 6 bayt tasarruf edebilirsiniz.
Dennis

2
Ayrıca kısaltabilir 05AB1Eilk lider sıfır ortadan kaldırarak ve ardından atlanması ile 1olduğu gibi, 1E==E. O zaman sadece 5ABE-2 bayt alırsınız .
kusur,

1
@Dennis harika gözlem
Adnan

8

CJam, 15 bayt

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

Burada test et.

açıklama

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
Bütün bu diller nasıl bu kadar kısa olabilir
justaprogrammer

2
@justaprogrammer Dahili işlevler için tek karakterlik isimler yardımcı olur. ;) CJam, Pyth ve Brachylog, özellikle golf kodları düşünülerek tasarlanmış golf dilleridir. (Bkz. En.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages. ) Ardından APL ve J gibi dilleri hiç golf oynamayan ama benzer şekilde veciz olan diller var, çünkü tasarımcılar bunun iyi bir fikir olacağını düşünüyorlardı.
Martin Ender

Bu gibi zorluklar için en çok hangisini öneriyorsun?
justaprogrammer,

3
@justaprogrammer (bu muhtemelen Pyth veya Jelly olacak) bu zorlukları kimin kazandığına dayanarak birini seçmem. (Daha fazla rekabet olabilir özellikle çünkü sadece bir "normal" bir dille golf eğlenceli gibi olabilir içinde o dil). Bir golf dili için, onu kullanmaktan zevk almanız muhtemelen daha önemlidir. CJam oldukça eğlenceli - beyninizi diğer dillerden biraz daha fazla eğilmenizi sağlayan, aynı zamanda oldukça güçlü bir dil, golfün dışına atılan basit komut dosyaları için kullanmaya başladım. üretkenliğime iyi bir destek.
Martin Ender

Bu diller çok ilginç görünüyor ve kendimi öğrenmek için sabırsızlanıyorum. Jöle nedir bilmiyorum? Bu bir tür jelatin ya da başka bir şey mi?
Justaprogrammer

8

Pyth, 17 13 12 bayt

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

Çevrimiçi tercüman üzerinde deneyin .


4
Bu sihir nedir? Bu nasıl çalışıyor?
Justaprogrammer

1
@justaprogrammer Bir açıklama ekledim. :)
Doorknob

Huh, ama nasıl. Bu kodu nasıl test edersiniz?
Justaprogrammer

1
@justaprogrammer Kodu çalıştırabileceğiniz çevrimiçi bir tercümana bağlantı ekledim.
Doorknob

Bu harika, çok kısa, ama çok güzel
justaprogrammer,

5

Python 2, 72

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

Özyinelemeli işlev, Python 2 kısayolunu kullanır __repr__, işlev çok büyük değerlere ulaştığında kırılır ( Lsayının dizgesine eklenir), durabileceğimiz bir yer olup olmadığından emin değilim. , ancak str()yalnızca 6 bayt olarak değiştirilmezse , 75 baytta bir dize olarak çıktısı biraz daha kısalır:

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

Bu sürümdeki trichoplax sayesinde 1 bayt kurtarıldı


orİkinci kod bloğundan önceki fazlalık bir boşluk mu?
trichoplax

1
@trichoplax yakalamak için teşekkürler :)
FryAmTheEggman

5

JavaScript ES6, 70 bayt

@ User81655 sayesinde 1 bayt kaydedildi

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

Sigh JavaScript gerçekten ayrıntılı. Bir çok kodunun (>% 50) dize + dizi fonksiyonu ile + sadece durumda int + döküm birleştirme olup. Küçültmeyi, değerlendirmeyi ve her türlü şeyi denedim ama bu en kısa gibi görünüyor.

Çevrimiçi deneyin (Tüm tarayıcılar çalışır)


2
Tıpkı benimki gibi, ama daha iyi (ve daha önce gönderildi). Bah!
edc65

Dize Manipülasyonu JS çok uzun, başsağlığılarım var
MayorMonty

@ user81655 harika, teşekkürler! Asla böyle bir sipariş
vermeyi düşünmemiştim

f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'
döndürülen

4

Brachylog , 19 bayt

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

açıklama

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 bayt

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

Kullanım örneği: (g"1"!!) 7-> "668".

Tanımın doğrudan bir uygulamasıdır: başlangıçtan itibaren "1", geçerli öğenin tersine sırala sonucunu art arda ekler. Ana işlev th öğesini (g"1"!!)seçer i.


Bu 70 baytın altındaki en okunaklı programdır!
Gaurav Agarwal

3

Julia, 77 bayt

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

Bu bir tamsayıyı kabul eden ve bir tamsayı döndüren bir lambda işlevidir. Aramak için değişkene atayın.

Ungolfed:

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

Jöle, 13 12 bayt

Jelly / in aptal bir dilde ilk cevabım olduğundan, muhtemelen golf oynayabileceğime eminim.

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: 1 bayt, Dennis sayesinde kaydedildi


2

Java 1.8, 251 bayt

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

Expanded

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

Neden 4 bayt daha kısa olan interfaceR yerine R kullanıyorsunuz class?
Sherwood

1
@WillSherwood, çünkü genel değiştiriciyi main () işlevinden çıkarabilir, genel olarak kısaltabilir :)
Denham Coote

2

Cidden, 17 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

2

Lua, 179 156 Bayt

Nasıl daha fazla golf oynayabileceğimi bilemiyorum, ama eminim ki bir yolu var. @LeakyNun sayesinde bunun üzerine gelip uygun bir şekilde golf oynamak için zaman harcadım, belki başka bir yaklaşım kullanarak hala bazı baytlar kazanabilirim.

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 ve açıklamalar

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)

Görünüşe göre artık burada değilsin ... ama belki java cevabımı kullanabilirsin.
Leaky Nun

@LeakyNun Pekala, bu sefer çok fazla katılmıyorum ama yine de zaman zaman zorlukların üstesinden gelmeye devam ediyorum, cevabınıza bir göz atmaya çalışacağım, ancak bu olmadan bile oldukça kolay golf oynayabilecek bir şey görebiliyorum ( a=a<1 and 1orÖrneğin).
Katenkyo

Memnun oluruz - Memnun olurum - Geri dönmene sevindim.
Sızdıran Rahibe

2

Brachylog 2, 11 bayt, dil postdates meydan okuma

;1{↔;?+o}ⁱ⁽

Çevrimiçi deneyin!

açıklama

;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

Bunun sıfır rakamlarla ne yaptığı konusunda net değilim, ancak soru belirli bir işlemeyi ifade etmiyor ve muhtemelen yine de sırayla görünmüyor.


1

ES6, 79 bayt

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

82 bayt olmadan eval:

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

Bütün bu dönüşümler acı verici.

@ edc65 Aslında geçiş yaparak 4 bayt kaydedildi mapiçin reducebu kez ... hayır olsa yanlış beni tekrar kanıtlamak olacak şüphesiz.


fordaha kısa:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
Downgoat

@ Yapma n=0Sözdizimi hatalarını düzelttikten sonra bile çalışmıyor .
Neil

1

Python 2, 91 Bayt

Tamsayı olarak giriş yapılır, sonuç ekrana yazdırılır.

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

Bu sanırım bazı özyineleme sihri ile çok daha kısa olabilir, ama kafamı henüz etrafına saramıyorum. Daha sonra yeni bir görünüme kavuşacak ve inşallah bunu daha da geliştireceğim.


1

Python 2, 83 bayt

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

1

Perl 6 , 40 bayt

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

(Daha +önce bir Int koymak bir int dönmek istiyorsanız [~])

Kullanımı:

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

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

Oldukça basit.


1

PHP, 102 Bayt

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

Çevrimiçi sürüm

PHP, 95 Bayt

n <= 39

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



0

Aksiyom, 146 bayt

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 ve sonuçlar [RATS dizisi]

(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]]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.