ลำดับ RATS


30

งานของคุณคือการสร้างคำที่ n ของลำดับ RATS โดยที่ n คืออินพุต ลำดับ RATS ยังเป็นที่รู้จักในลำดับกลับเพิ่มเรียงแล้ว ลำดับนี้ยังสามารถพบได้ที่นี่: http://oeis.org/A004000

กรณีทดสอบ:

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

ตัวอย่างเช่นผลลัพธ์สำหรับ 5 คือ 77 เพราะ 16 + 61 = 77 หลังจากนี้ 77 จะเรียงลำดับ

การส่งที่สั้นที่สุดชนะ นี่เป็นความท้าทายครั้งแรกของฉันดังนั้นฉันหวังว่านี่จะไม่ซ้ำกันหรืออะไร


อินพุตต้องเป็นจำนวนเต็มหรือเป็นสตริงได้หรือไม่
Denker

@DenkerAffe คุณหมายถึงตัวเลขในรูปแบบของสตริงหรือไม่
justaprogrammer

@justaprogrammer ใช่แล้วฉันจะได้ "123" แทน 123 เป็นจำนวนเต็ม อาจจะช่วยประหยัดไบต์
Denker

2
ไม่ใช่ 77 + 77 = 154? หรือฉันได้พลาดอะไรบางอย่าง? แก้ไข: โอ้ใช่ฉันลืมเรียงลำดับ
Denham Coote

6
@DenhamCoote ฉันคิดว่าคุณหมายถึง "โอ้หนูsฉันลืมที่จะเรียงลำดับ!"
Martin Ender

คำตอบ:


11

MATL , 11 12ไบต์

1i"tVPU+VSU

การป้อนข้อมูลเป็นสตริง (มีราคาเดียว) คิดเป็นจำนวนเต็มในเอก การป้อนข้อมูล String ที่ได้รับอนุญาตโดยท้าทายและเอกเป็นรูปแบบที่ถูกต้อง

ลองออนไลน์!

คำอธิบาย

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 or Jelly ... +1
Downgoat

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 สามวันที่ผ่านมาจริง ยังเล่นได้ดี ...
Doorknob

@Doorknob ทันเวลา haha
Adnan

19
คุณสามารถบันทึก 6 ไบต์ได้โดยกำจัดซอร์สโค้ดของคุณ
Dennis

2
นอกจากนี้คุณยังสามารถร่น05AB1Eครั้งแรกโดยการกำจัดศูนย์นำแล้วถนัดเช่น1 1E==Eจากนั้นคุณจะได้รับเพียง5ABE-2 ไบต์
ข้อบกพร่อง

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
ภาษาทั้งหมดเหล่านี้มีขนาดสั้น
แค่ไหน

2
@justaprogrammer ชื่ออักขระเดี่ยวสำหรับความช่วยเหลือฟังก์ชันในตัว ;) CJam, Pyth และ Brachylog เป็นภาษากอล์ฟทั้งหมดออกแบบมาโดยเฉพาะโดยคำนึงถึงการตีกอล์ฟ (ดูen.wikipedia.org/wiki/Code_golf#Dedicated_golfing_languages. ) จากนั้นก็มีภาษาเช่น APL และ J ที่ไม่ได้เล่นกอล์ฟภาษา แต่เป็นบทสรุปที่คล้ายกันเพราะนักออกแบบคิดว่ามันจะเป็นความคิดที่ดี
Martin Ender

คุณแนะนำแบบไหนให้ได้มากที่สุดสำหรับการท้าทายแบบนี้?
justaprogrammer

3
@justaprogrammer ฉันจะไม่เลือกอย่างใดอย่างหนึ่งโดยอิงจากสิ่งใดที่ชนะความท้าทายเหล่านี้ (ซึ่งน่าจะเป็น Pyth หรือ Jelly) มันสนุกเหมือนกับการเล่นกอล์ฟในภาษา "ปกติ" (โดยเฉพาะอย่างยิ่งเนื่องจากอาจมีการแข่งขันในภาษานั้นมากขึ้น) สำหรับภาษากอล์ฟอาจเป็นสิ่งสำคัญที่คุณจะสนุกกับการใช้มัน CJam ค่อนข้างสนุก - มันเป็นสแต็กที่ทำให้คุณงอใจมากกว่าภาษาอื่น ๆ และในขณะเดียวกันมันก็เป็นภาษาที่ทรงพลังมากซึ่งฉันได้เริ่มใช้สคริปต์แบบง่าย ๆ นอกสนามกอล์ฟ เป็นการเพิ่มผลิตผลที่ดีของฉัน
Martin Ender

ภาษาเหล่านี้ดูน่าสนใจมากและฉันแทบรอไม่ไหวที่จะเรียนรู้ด้วยตนเอง ฉันไม่รู้ว่าเยลลี่คืออะไร? นั่นคือเจลาตินหรืออะไรบางอย่าง?
justaprogrammer

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

Python 2, 72

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

ฟังก์ชั่นแบบเรียกซ้ำใช้ชวเลข Python 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

บันทึก 1 ไบต์ขอบคุณ trichoplax ในรุ่นนี้


นั่นคือพื้นที่ส่วนเกินก่อนหน้าorในบล็อกโค้ดที่สองหรือไม่
trichoplax

1
@trichoplax ขอบคุณสำหรับการจับ :)
FryAmTheEggman

5

JavaScript ES6, 70 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ user81655

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

ถอนหายใจ JavaScript เป็นจริง verbose มาก (> 50%) ของรหัสเป็นเพียงกรณีที่ฟังก์ชั่นสตริง + + อาร์เรย์เข้าร่วมหล่อ + เพื่อ int ฉันได้ลองลดล้างสิ่งต่าง ๆ และสิ่งต่าง ๆ แต่ดูเหมือนว่าจะสั้นที่สุด

ลองออนไลน์ (เบราว์เซอร์ทั้งหมดใช้งานได้)


2
เช่นเดียวกับฉัน แต่ดีกว่า (และโพสต์ก่อนหน้านี้) Bah!
edc65

String จัดการคือ 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

Haskell, 67 ไบต์

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

ตัวอย่างการใช้: (g"1"!!) 7->"668" ->

เป็นการใช้งานคำจำกัดความโดยตรง: เริ่มต้น"1"ผนวกผลลัพธ์การเพิ่มกลับเรียงขององค์ประกอบปัจจุบันซ้ำ ๆ ฟังก์ชั่นหลัก(g"1"!!)เลือกiองค์ประกอบที่


นี่เป็นโปรแกรมที่อ่านง่ายที่สุดต่ำกว่า 70 ไบต์!
Gaurav Agarwal

3

Julia, 77 ไบต์

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

นี่คือฟังก์ชั่นแลมบ์ดาที่รับจำนวนเต็มและคืนค่าจำนวนเต็ม หากต้องการเรียกใช้กำหนดค่าให้กับตัวแปร

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

เยลลี่, 13 12 ไบต์

ฉันแน่ใจว่านี่สามารถเล่นกอล์ฟได้เนื่องจากนี่เป็นคำตอบแรกของฉันในภาษา Jelly / ในภาษาที่มีความหมายโดยนัย

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

แก้ไข: บันทึก 1 ไบต์ต้องขอบคุณเดนนิส


2

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

ทำไมคุณใช้interfaceR แทนclassR ซึ่งสั้นกว่า 4 ไบต์?
Will Sherwood

1
@WillSherwood เพราะคุณสามารถละเว้นปรับปรุงสาธารณะใน main () ทำให้มันสั้นลงโดยรวม :)
Denham คู้ต


2

Lua, 179 156 Bytes

ฉันไม่เห็นว่าฉันจะตีกอล์ฟได้มากขึ้น แต่ฉันแน่ใจว่ามีวิธี ขอบคุณ @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)

Ungolfed และคำอธิบาย

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)

ดูเหมือนว่าคุณจะไม่อยู่ที่นี่อีกแล้ว ... แต่บางทีคุณอาจอ้างถึงคำตอบจาวาของฉัน
Leun Nun

@LeakyNun อืมฉันไม่ได้มีส่วนร่วมมากในเวลานี้ แต่ยังคงมองหาสิ่งที่ท้าทายเป็นครั้งคราวฉันจะลองดูคำตอบของคุณa=a<1 and 1orตัวอย่าง)
Katenkyo

เราจะดีใจ - ฉันจะดีใจ - มีคุณกลับมา
Leun 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

ฉันไม่ชัดเจนในสิ่งที่มันทำกับตัวเลขศูนย์ แต่คำถามไม่ได้ระบุการจัดการโดยเฉพาะและพวกเขาอาจไม่ปรากฏในลำดับต่อไป


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

Python 2, 91 Bytes

อินพุตเป็นจำนวนเต็มผลลัพธ์จะถูกพิมพ์ไปที่หน้าจอ

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

นี่อาจสั้นกว่านี้มากเมื่อใช้เวทย์มนตร์เรียกซ้ำ แต่ฉันไม่สามารถคาดศีรษะได้ จะมีรูปลักษณ์ใหม่ในภายหลังและหวังว่าจะปรับปรุงตัวนี้



1

Perl 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

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

ลองออนไลน์!

ไม่ใช่รายการที่ยาวที่สุด! \ O /


@Katenkyo เห็นสิ่งนี้
Leaky Nun

มันโอเค f (1) ... f (20) แต่ผลลัพธ์จาก f (21) ดูเหมือนผิด ...
RosLuP

การสูญเสียความแม่นยำฉันคิดว่า
Leun 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.