จำนวนเต็มเอาต์พุตตามลำดับลบเพิ่มจำนวนเต็มสูงสุดทุกครั้ง


44

งานหลัก

งานของคุณคือการพิมพ์จำนวนเต็มตามลำดับจากมากไปน้อยเริ่มจาก 1 และเพิ่มตามที่คุณกดปุ่ม 1 อีกครั้งจนกระทั่งถึงอินพุตที่กำหนดจากนั้นพิมพ์ส่วนที่เหลือจนกว่าคุณจะกด 1 อีกครั้ง ตัวอย่างที่มีการป้อนข้อมูล6:

1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
หมายเหตุด้านข้าง: นี่คือA004736ใน OEIS นอกจากนี้ตัวอย่างแรก (พร้อมการขึ้นบรรทัดใหม่) เป็นผลลัพธ์ที่ไม่ถูกต้องตามที่ระบุในกฎ

อินพุต

รหัสของคุณอาจใช้การป้อนข้อมูลใด ๆ (กราฟิก, STDIN) ในรูปแบบของจำนวนเต็มหรือตัวเลข

เอาท์พุต

รหัสของคุณควรส่งออกตามลำดับที่อธิบายไว้ข้างต้นจนกระทั่งถึงหมายเลขอินพุทแล้วจึงส่งออกจนครบ 1 อีกครั้ง เอาท์พุทอาจเป็นอะไรก็ได้ดังนั้นตัวเลข, สตริง, จำนวนเต็มหรือเอาท์พุทกราฟิก จำเป็นต้องพิมพ์หมายเลขเดียว (ไม่มีการขึ้นบรรทัดใหม่หากเป็นสตริง) เอาต์พุตของคุณสามารถเข้าและออกด้วยอักขระได้มากเท่าที่คุณต้องการ (เช่น[])

เนื่องจากมีความเข้าใจผิดบางส่วนนี่เป็นรูปแบบ regex ที่คุณสามารถลองใช้กับผลลัพธ์ได้

^(\D*(\d)+\D*)$

กฎระเบียบ

  • ผลลัพธ์จะต้องเป็นตัวเลขเต็มไม่แยกจากสิ่งใดแม้แต่บรรทัดใหม่
  • อัลกอริทึมไม่ควรตรวจสอบอินสแตนซ์แรกของ N ที่ปรากฏในวิธีใด ๆ (เช่น21อิน121321) แต่สำหรับอินสแตนซ์แรกของ N เป็นจำนวนจริง
  • อนุญาตให้ขึ้นบรรทัดใหม่ต่อท้ายได้หนึ่งบรรทัด
  • การจัดการอินพุตที่ลบนั้นเป็นทางเลือกของคุณอย่างสมบูรณ์ แต่ตัวเลขที่เป็นลบไม่ใช่กรณีที่คุณควรทดสอบ

กรณีทดสอบ

Input: 6
Output: 121321432154321654321

Input: 1 Output: 1

Input: 26 Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321

Input: 0 Output: 0, Empty, or Error

Input: 21 Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321

ขอบคุณ @Emigna ฉันใช้อัลกอริทึมของเขาในการคำนวณกรณีทดสอบเหล่านี้

ผู้ชนะ

ผู้ชนะได้รับเลือก! มันเป็นคำตอบของ ErikGolferที่น่าประทับใจ5ไบต์! ขอแสดงความยินดี!


The output must be a full number ...คุณหมายถึงลำดับทั้งหมดหรือเฉพาะซับสเตรตที่แตกต่างกัน (1, 2-1, 3-1 ... )? ตัวอย่างแรกของคุณดูเหมือนจะไม่ตรงกับคำสั่งนี้
steenbergh

1
ถ้าผลลัพธ์จะต้องเป็นตัวเลขเดียวมันจะเป็น "อาร์เรย์" ได้อย่างไร?
smls

อาร์เรย์นี้จะยอมรับได้ในรูปแบบเอาต์พุตหรือไม่ [1, 21, 321, 4321, 54321, 654321] แล้วอันนี้ละ? [1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1] หรือคุณเพียงแค่พูดถึงอาร์เรย์ด้วยองค์ประกอบเดียวเช่น[121321432154321654321]?
smls

1
ฉันสับสนเกี่ยวกับรูปแบบผลลัพธ์ คุณสามารถยกตัวอย่างสิ่งที่ยอมรับได้หรือไม่? อาเรย์ของตัวเลข? สตริงที่มีตัวเลขคั่นด้วยช่องว่างหรือไม่
Luis Mendo

1
regex mickey321211mouseของคุณช่วยให้การส่งออกของ จริงๆแล้ว\Dชิ้นส่วนไม่มีเหตุผลที่จะอยู่ที่นั่น
edc65

คำตอบ:


13

เยลลี่ 5 ไบต์

RRUVV

ลองออนไลน์!

สูตรไม่ใช่ของฉัน

ฉันสงสัยว่าจะเกิดขึ้นที่นี่มากเกินไป ...

[คำตอบที่ยอมรับ] ฉันได้ให้ตัวแทน 5 คนให้กับ Dennis แล้ว แต่นี่ไม่ใช่การแลกเปลี่ยนชื่อเสียง เดนนิสแสดงให้ฉันเห็นถึงVVพฤติกรรม ฉันประหลาดใจนี่สั้นกว่า 05AB1E


ขอแสดงความยินดีรหัสนี้มีรหัสน้อยที่สุด!
devRicher

19

05AB1E , 6 ไบต์

L€LíJJ

ลองออนไลน์!

คำอธิบาย

ตัวอย่างอินพุต 4

L       # range [1 ... input]
        # STACK: [1,2,3,4]
 €L     # map: range
        # STACK: [[1],[1,2],[1,2,3],[1,2,3,4]]
   í    # reverse each
        # STACK: [[1],[2,1],[3,2,1],[4,3,2,1]]
    J   # join inner lists
        # STACK: ['1','21','321','4321']
     J  # join list
        # OUTPUT: 1213214321

13

JavaScript (ES6), 37 ไบต์

f=(n,k=1)=>k>n?n--?f(n):'':f(n,k+1)+k

การสาธิต

วิธีสำรองสำหรับ n <10, 34 bytes (ไม่แข่งขัน)

f=(n,s='1')=>--n?s+f(n,++s[0]+s):s

ใน JavaScript สตริงจะไม่เปลี่ยนรูป ดังนั้นจึงเป็นไปไม่ได้ที่จะปรับเปลี่ยนเนื้อหาของตัวละครชับของสตริงโดยการกำหนดค่าใหม่เพื่อss[N]

อย่างไรก็ตามนิพจน์++s[N]นั้นถูกต้องและประเมินผลตามที่คาดหวังแม้ว่าสตริงจะยังคงไม่เปลี่ยนแปลง ตัวอย่างเช่น

++"1"[0] // equals 2

และโดยการขยาย:

s = "21"
++s[0] + s // equals "321"

ดูเหมือนจะไม่ทำงานสำหรับ n> 9
edc65

@ edc65 แน่นอนถูกต้อง ฉันไม่รู้ว่าทำไมฉันคิดว่ามันก็โอเคที่จะหยุดที่ 9
Arnauld

12

V, 29 28 27 23 19 17 16 ไบต์

บันทึก8ไบต์ด้วย @DJMcMayhem

บันทึก3ไบต์ด้วย @ nmjcman101

"apÀ­ñÄòy$jpkgJ

ตัวละครที่ซ่อนอยู่:

"apÀ<C-x>ñÄ<C-x>òy$jpkgJ

C-x คือ Ctrl + x

ลองออนไลน์! รับอินพุตผ่านอาร์กิวเมนต์บรรทัดรับคำสั่ง

hexdump:

0000000: 2261 70c0 adf1 c418 f279 246a 706b 674a  "ap......y$jpkgJ

คำอธิบาย

"ap            Paste the argument
À<C-x>         Argument minus 1 times (so that we exclude the 0)
ñ ... ò        Loop (for some weird reason the ò closes the ñ)
Ä<C-x>         paste current line above and decrement it

ตอนนี้ดูเหมือนว่า:

1
2
...
n

อย่างต่อเนื่อง ...

ò             recursively do (until a breaking error)
y$             yank this line
  jp           paste it down
    kgJ        go up and join
              implicit ò end

GIF (ล้าสมัย)

(หาเรื่อง6)

GIF


ฉันได้รับเพียงไม่กี่โดยการเปลี่ยนวงของคุณเป็น) จบโดยปริยายและ b) เข้าร่วมเส้นตามที่มันไป (มากกว่าที่ตอนท้าย)òy$jpkgJ
nmjcman101

@ nmjcman101 ขอบคุณที่ช่วยฉันประหยัด 2 ไบต์!
Kritixi Lithos

นี่เป็นสนามที่ค่อนข้างดี ฉันได้รับสมองของฉันเป็นเวลา 20 นาทีและฉันไม่สามารถคิดอะไรที่สั้นกว่านี้ :)
DJMcMayhem

@DJMcMayhem มันเป็นเพราะผมเคยมีบางความช่วยเหลือที่ดี :)
Kritixi Lithos

ฉันทำมัน! คุณสามารถลงได้ถึง 16 ไบต์ หากคุณวาง ARG จากนั้นทำซ้ำ / ลดระดับขึ้นคุณจะต้องลบ H จากนั้นถ้าคุณใช้โอเปอเรเตอร์การลดลงของÀคุณคุณจะไม่มี 0 ที่ด้านบนเพื่อให้คุณสามารถลบ x จากนั้นดูเหมือนòจะเป็นการปิด­ñเพื่อให้คุณสามารถลบที่สอง­ñ(ซึ่งเป็นไบต์ที่คุณบันทึก) เชื่อมโยงเพราะไม่มีเหตุผล
nmjcman101

11

C #, 72 69 65 ไบต์

n=>{for(int i=0,j;i<n;)for(j=++i;j>0;)System.Console.Write(j--);}

หากเอาต์พุตสามารถส่งคืนได้ตรงข้ามกับการเขียนไปยังคอนโซล

C #, 71 68 64 ไบต์

n=>{var s="";for(int i=0,j;i<n;)for(j=++i;j>0;)s+=j--;return s;}

ขอบคุณ @VisualMelon สำหรับการบันทึกจำนวนมาก

ทดสอบได้ที่นี่ (อย่างใจจดใจจ่อคอมไพเลอร์ออนไลน์หยุดพักที่หมายเลขใด ๆ ข้างต้น 420)


มันเร็วมาก
devRicher

@devRicher ฉันสามารถพูดอะไรได้บ้างฉันกำลังรอสิ่งที่จะโพสต์: P
Alfie Goodacre

2
ไม่มีเหตุผลที่จะใช้วง while ใน C # code golf การ for-loop จะทำงานได้ดีหากไม่ดีขึ้น ในกรณีนี้คุณสามารถรวมการกำหนดj=1ใน for-loop และบันทึกเซมิโคลอน นอกจากนี้คุณยังสามารถประกาศjพร้อมกับเพื่อบันทึกi ยังสามารถย้ายไปอยู่ที่ได้รับมอบหมายประหยัดไบต์ นอกจากนี้คุณควรจะสามารถที่จะแทนที่ด้วยถ้าคุณทำมันแทนและเริ่มต้นที่ inti++j=ii<=ni<nj=++ii0
VisualMelon

@VisualMelon แก้ไขแล้วบันทึก 3 ไบต์! การประกาศ ints เข้าด้วยกันทำให้ไม่มีความแตกต่างกับจำนวนไบต์ แต่มันทำให้ลูปดูดีขึ้นเล็กน้อย
Alfie Goodacre

@AlfieGoodacre หากคุณประกาศร่วมกันใน for for loop คุณจะประหยัดได้อีก 2 ไบต์for(int i=0,j;i<n;);) นอกจากนี้ยังไม่จำเป็นต้องใช้{}วงในสำหรับวนรอบอีกด้วย
VisualMelon

8

ทุบตีบริสุทธิ์ 34

eval eval printf %s \\{{1..$1}..1}

การยืดรั้งสองระดับ ด้วยการป้อนข้อมูลในระดับแรกจะขยาย6 {1..1} {2..1} {3..1} {4..1} {5..1} {6..1}นี้จากนั้นจะขยายไป1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1ซึ่งเป็น smushed printf %sร่วมกันเพื่อสตริงเป็นหนึ่งเดียวกับ evalจำเป็นต้องมีการขยายตัวทั้งสองระดับ - สำหรับระดับแรกเพื่อให้$1พารามิเตอร์ถูกขยายก่อนและสำหรับระดับที่สองเพื่อที่จะขยายหลังจากระดับแรก

ลองออนไลน์



7

Pyth, 7 ไบต์

jks}R1S

โปรแกรมที่รับอินพุตของจำนวนเต็มและพิมพ์ผลลัพธ์

ลองออนไลน์!

มันทำงานอย่างไร

jks}R1S   Program. Input: Q
jks}R1SQ  Implicit input fill
    R     Map
      SQ  over [1, 2, 3, 4, ..., Q] with i:
   } 1     Yield [i, i-1, i-2, i-3, ..., 1]
  s       Merge
jk        Join
          Implicitly print

โดยส่วนตัวแล้วฉันผิดหวังมากที่jk_hC.:Sใช้เวลานานกว่า แต่ก็ทำได้ดีมาก!
FryAmTheEggman

7

GeoGebra , 67 ไบต์

1
InputBox[a]
Sum[Join[Sequence[Sequence[Text[j],j,i,1,-1],i,1,a]]]

แต่ละบรรทัดถูกป้อนแยกกันในแถบป้อนข้อมูล อินพุตถูกนำมาจากกล่องอินพุต

นี่คือ gif ของการประมวลผล:

การทำงานของโปรแกรม

มันทำงานอย่างไร

เข้าสู่1ปริยายกำหนดaไป1และคำสั่งเชื่อมโยงช่องป้อนข้อมูลด้วยInputBox aจากนั้นแต่ละiใน{1, 2, 3, ..., a}รายการ{i, i-1, i-2, ..., 1}จะถูกสร้างขึ้นโดยใช้Sequenceคำสั่งและแต่ละคนในรายการที่จะถูกแปลงเป็นสตริงใช้j Textในที่สุดJoinผสานรายการทั้งหมดและSumเชื่อมองค์ประกอบทั้งหมดเข้ากับวัตถุข้อความเดียวซึ่งจะปรากฏขึ้น


@devRicher ดูเหมือนว่าสมเหตุสมผล ขอบคุณ!
TheBikingViking


7

เรติน่า26 26ไบต์

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

.+
$*

$`¶
1
$.%'
0?¶

ลองออนไลน์!

คำอธิบาย

.+
$*

แปลงอินพุตเป็น unary


$`¶

ที่แต่ละตำแหน่งใส่คำนำหน้าจนถึงจุดนั้นเช่นเดียวกับ linefeed สิ่งนี้จะสร้างช่วง unary จาก2ถึงn+1หนึ่งค่าต่อบรรทัด

1
$.%'

แทนที่แต่ละตัว1ด้วยจำนวนอักขระหลังจากนั้นในบรรทัดเดียวกัน นี้จะเปลี่ยนสิ่งที่ต้องการลงไปใน1111143210

0?¶

ลบ linefeeds ทั้งหมดและศูนย์ที่อยู่ข้างหน้าพวกเขา



5

APL, 10 ไบต์

∊⍕¨∘⌽∘⍳¨∘⍳

เช่น:

      (∊⍕¨∘⌽∘⍳¨∘⍳)6
121321432154321654321

คำอธิบาย:

  • : รับตัวเลขตั้งแต่ 1 ถึง N
  • ⍳¨∘: สำหรับแต่ละคนรับตัวเลขตั้งแต่ 1 ถึง N
  • ⌽∘: ย้อนกลับรายการนั้น
  • ⍕¨∘: ได้รับการแสดงตัวละครของแต่ละรายการ (ดังนั้นจึงไม่ได้ส่งออกตัวเลขที่มีช่องว่างในระหว่าง)
  • : แผ่อาร์เรย์ผลลัพธ์

ดังนั้นมันจะแยกรหัสย้อนหลังหรือไม่
devRicher

คือการจัดองค์ประกอบของฟังก์ชั่นฉันได้อธิบายตามลำดับที่ฟังก์ชันได้รับการประเมินจริง ๆ
marinus

1
นี่คือต้นไม้แยกสำหรับคนที่อยากรู้อยากเห็น: tryapl.org/…
marinus

5

Python 2, 71 68 ไบต์

ฉันพนันได้ว่าการแก้ปัญหาแบบเรียกซ้ำอาจสั้นกว่านี้ แต่ฉันมีเวลายากในการกำหนดให้เป็นหนึ่ง

n=input()
i=0
o=""
while i<n:
    i+=1;j=i
    while j:o+=`j`;j-=1
print o

ลองออนไลน์


5

จริง 8 ไบต์

RR♂RΣRεj

ครั้งแรกที่โพสต์คำตอบในความเป็นจริงเพื่อให้สามารถเล่นกอล์ฟได้

มันทำงานอย่างไร

Program takes implicit input, implicit print at EOF
R           Takes the input and creates a range (1, input)   
                STACK = [1,2,..,n]
 R          Reverse the top stack item (our range)
                STACK = [n,..,2,1]
  ♂R        For each item in our range, create a range (1, rangeitem)
                STACK = [[1,2,..,n], .., [1,2], [1]]
    Σ       Stitch the items of the list together
                STACK = [n,..,1,2,3,1,2,1]
     R      Reverse the top stack item again (our answer)
                STACK = [1,2,1,3,2,1,..n]
      εj    Create an empty string and append each item from the list to it.
            (turns non string items into strings)

ลองออนไลน์!


1
ผมไม่แน่ใจว่ามีเป็นวิธีการแก้ปัญหาที่สั้นกว่า แต่ผมได้พิสูจน์ตัวเองที่ไม่ถูกต้องก่อน ไม่ว่าในกรณีใด ๆนี่คือลิงก์ลองใช้ออนไลน์สำหรับคำตอบของคุณ
Sherlock9

1
รหัสR♂R♂RΣεjมีจำนวนไบต์เท่ากัน แต่การเขียนคำอธิบายอาจทำได้ง่ายกว่า
Sherlock9

@ Sherlock9 แนวทางของคุณดูดีกว่านี้เล็กน้อยฉันได้เพิ่มลิงก์และคำอธิบายที่ฉันลืมเพิ่มเมื่อวานนี้เพื่อลองอธิบายอีกครั้ง
นกกระทุงนกเป็ดน้ำ


4

Perl 6 , 22 ไบต์

{[~] flat [\R,] 1..$_}

แลมบ์ดาที่ส่งคืนสตริง

( ลองออนไลน์ )

คำอธิบาย:

  • 1..$_: ช่วงของจำนวนเต็ม ... (1 2 3 4)
  • [,] 1..$_: ย่อ ("หมอบ") เหนือเครื่องหมายจุลภาค ... (1 2 3 4)
  • [\,] 1..$_: ด้วยผลลัพธ์ระดับกลาง ( ลดรูปสามเหลี่ยม ) ...((1) (1 2) (1 2 3) (1 2 3 4))
  • [\R,] 1..$_: ใช้การสลับเมตาดาต้าโอเปอเรเตอร์กับเครื่องหมายจุลภาค ...((1) (2 1) (3 2 1) (4 3 2 1))
  • [~] flat ...: ลบการซ้อนกันของรายการและพับตัวดำเนินการ concat สตริง ... 1213214321

4

Haskell, 35 ไบต์

f x=[1..x]>>= \y->[y,y-1..1]>>=show

ตัวอย่างการใช้งาน: ->f 6"121321432154321654321"

สำหรับตัวเลขทั้งหมดxในการ1 ... xทำรายการx,x-1, ... ,1ให้เปลี่ยนตัวเลขเป็นสตริงและเชื่อมโยงมันเป็นสตริงเดียว อีกครั้งเชื่อมสตริงเหล่านั้นเป็นสตริงเดียว


4

C89, 54 ไบต์

i,j;f(n){for(i=1;j<=n;j=i++)while(j)printf("%d",j--);}

56 -2 = 54 ต้องขอบคุณ ErikGolfer!


ฉันคิดว่าคุณสามารถทำได้(j=i++)แทน(j=i)และลบล่าสุดi++(ยังไม่ทดลอง)
Erik the Outgolfer

นี่คือเวอร์ชันเรียกซ้ำที่สั้นกว่า: i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}(52 bytes)
Steadybox

@Steadybox คุณสามารถเพิ่มเป็นคำตอบของคุณเองหากคุณต้องการ แต่ขอบคุณ!
แมว

@cat ตกลงขอบคุณเพิ่งทำไป ไม่แน่ใจว่าควรแก้ไขเพราะฉันเพิ่งแก้ไขปัญหาของคุณหรือไม่
Steadybox

4

Python 3, 87 92 83 74 ไบต์

lambda n:"".join(["".join([str(i)for i in range(1,k)][::-1])for k in range(1,n+2)])

คำตอบที่สั้นกว่าโดยใช้การสอบถามซ้ำ:

f=lambda n:f(n-1)+"".join([str(i)for i in range(1,n+1)][::-1])if n>0else""

อาจไม่ใช่อันที่สั้นที่สุด แต่ทำด้วยความเข้าใจในรายการของ Python เท่านั้น!

(แก้ไขเพื่อเพิ่มฟังก์ชันการพิมพ์และลบ \ n)

(แก้ไขเพื่อลบฟังก์ชั่นการพิมพ์และเปลี่ยน n + 1, k + 1 เป็น n, k + 2)


ใช้งานได้กับ k, n + 2 แต่ไม่ใช่กับ k + 2, n ขอบคุณสำหรับความคิด :)
Sygmei

รหัสที่คุณให้คะแนนควรเป็นอันดับแรก นอกจากนี้คุณควรใช้งูหลาม 2 แล้วใช้แทน`i` str(i)และคุณสามารถใช้"".join(...)แทน"".join([...])และเพื่อลบrange(1,k,-1) [...][::-1]
mbomb007

นอกจากนี้ยังสามารถn>0 และผมก็มีความหมายn และการใช้งานrange(n,0,-1) n and f(n-1)+...)or""
mbomb007

1
62 ไบต์ จริงนี้อาจจะได้รับมากเกินไปใกล้กับคำตอบนี้
mbomb007

ใช่สิ่งนี้กำลังใกล้เข้ามาฉันเห็นว่าหลังจากทำรุ่นที่สองของฉัน :(
Sygmei



3

Mathematica ขนาด 36 ไบต์

ToString/@(""<>Range[Range@#,1,-1])&

โยนคำเตือนจำนวนมากซึ่งสามารถละเว้นได้อย่างปลอดภัย

คำอธิบาย

การใช้อินพุต5เป็นตัวอย่าง:

Range@#

{1, 2, 3, 4, 5}สร้างช่วง

Range[...,1,-1]

Rangeสามารถฟังได้ดังนั้นเราจึงสามารถให้รายการสำหรับอาร์กิวเมนต์ใด ๆ ของมันและมันจะเธรดอาร์กิวเมนต์นั้นโดยอัตโนมัติ ดังนั้นนี่ทำให้เรามีรายการย้อนกลับมากมาย:

{{1}, {2, 1}, {3, 2, 1}, {4, 3, 2, 1}, {5, 4, 3, 2, 1}}

ต่อไป:

(""<>...)

สิ่งนี้จะรวมรายการซ้อนกับสตริงว่าง เนื่องจากรายการที่ซ้อนกันไม่มีสตริงใด ๆ จึงไม่สามารถเข้าร่วมค่าได้ (ซึ่งเป็นที่ที่คำเตือนถูกสร้างขึ้น) แต่""<>มีผลข้างเคียงของการทำให้รายการแบน ดังนั้นสิ่งนี้ทำให้เรา

1 <> 2 <> 1 <> 3 <> 2 <> 1 <> 4 <> 3 <> 2 <> 1 <> 5 <> 4 <> 3 <> 2 <> 1

ตอนนี้ฟีเจอร์ที่สวยงามของ Mathematica ที่Mapไม่สนใจโครงสร้างที่กำลังทำแผนที่อยู่ ตามปกติคุณจะนำไปใช้กับรายการ แต่ใช้ได้กับทุกหัว ก็จะช่วยให้คุณf /@ h[a, b, c] h[f[a], f[b], f[c]]ในกรณีของเราส่วนหัวStringJoinและค่าคือจำนวนเต็ม

ToString/@...

นี่ก็แค่เปลี่ยนจำนวนเต็มเป็นสตริง ณ จุดนั้นStringJoin[...]รู้ว่าจะทำอย่างไรกับพวกเขาและรวมพวกเขาทั้งหมดเข้าไปในสายเดียว:

"121321432154321"

1
นั่นเป็นเพียงที่น่ารังเกียจธรรมดา :)
Greg Martin

3

GolfScriptขนาด 14 ไบต์

~,{),{)}%-1%}%

ลองออนไลน์!

แน่นอนวิธีการปกติ แต่นี่คือ GolfScript

คำอธิบายสำหรับโค้ดVASTนี้:

~,{),{)}%-1%}% # Code
               # Initial stack.      ["n"]
~              # Eval ToS.           [n]
 ,             # ToS' lowered range. [[0..n)]
  {),{)}%-1%}  # Block. 1 argument.  [a]
   )           # Increment.          [a+1]
    ,          # Range.              [[0..a)]
     {)}       # Block. 1 argument.  [b]
      )        # Increment.          [b+1]
        %      # Map.                [[1..a]]
         -1    # Integer. -1         [[1..a] -1]
           %   # Each nth element.   [[a..1]]
             % # Map.                [[[1],[2,1],...,[n..1]]]
               # Implicit output.    121...n..1

โปรดทราบว่าการส่งออกเป็นจำนวนเดียว \nการลาก


3

R, 38 33 44 ไบต์

if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")

รับอินพุตไปยัง STDIN และวนจาก 1 ถึง n สร้างลำดับ i ถึง 1 สำหรับแต่ละขั้นตอนและพิมพ์

แก้ไข: แทนที่seq(i,1)ด้วยi:1การบันทึก 5 ไบต์และแสดงสาเหตุที่ฉันไม่ควรเล่นกอล์ฟในระหว่างการประชุม


นี้ผลิตถ้าใส่เป็น101 ไม่หลอกลวง 0if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
Frédéric

ประณามสมมุติว่าอินพุตไม่เป็นศูนย์ :(
JAD

if(n<-scan())ควรจะเพียงพอ
Giuseppe

3

MATL , 14 11 ไบต์

:"@:P]v!VXz

ลองออนไลน์!

คำอธิบาย

:      % Input N implicitly. Push range [1 2 ...N]
"      % For each k in [1 2 ...N]
  @:   %   Push range [1 2 ... k]
  P    %   Reverse
]      % End
v!     % Concatenate all arrays horizontally
V      % Convert to string
Xz     % Remove spaces. Display implicitly

not split up by anythingไม่คิดว่าอันที่สองจะได้รับอนุญาต
JAD

2
@JarkoDubbeldam ฉันจะลบอันนั้นจนกว่า OP ชี้แจง
Luis Mendo

1
@Jarko OP ชี้แจง โซลูชันปัจจุบันสอดคล้องกับข้อกำหนด
Luis Mendo

3

brainfuck, 17 ไบต์

>,[>[+.>]+.[<]>-]

คำอธิบาย

>           keep the first cell at 0
 ,          input of the decimal number into the cell
  [>        start a conditionnal loop and go to the next cell
   [+.>]    while it don't find 0, increment each cells and output the value
    +.      increment the new cell and output
     [<]    go to the first cell
      >-]   decrement the second cell and restart

ลองออนไลน์!


ยินดีต้อนรับสู่ PPCG! คุณอ่านหน้าทัวร์และคำถามเมตาที่ร้อนแรงที่สุดแล้วหรือยัง? ฉันแนะนำให้คุณพวกเขากำลังเป็นประโยชน์! นอกจากนี้ให้ห่อรหัสของคุณในการจัดรูปแบบรหัส! คุณอ่านวิธีใช้การจัดรูปแบบแล้วหรือยัง? คุณควรอธิบายว่ารหัสของคุณทำงานอย่างไรถ้าทำได้!
devRicher

@muddyfish ฉันเพิ่งเพิ่มคำอธิบาย
Milihhard

ฉันใช้แอพมือถือ คุณสามารถดูหน้าจอของผลลัพธ์
Milihhard

ไม่เป็นไร. แต่ในลิงค์ ouput นั้นอยู่ใน ascii ไม่ใช่ทศนิยมดังนั้นคุณจะไม่เห็นผลลัพธ์จริงๆ
Milihhard

@muddyfish ความคิดของคุณช่างสับสนเล็กน้อย มี 0x06 ที่มองไม่เห็นในการป้อนข้อมูลตามหลักทศนิยมเป็น6
เดนนิส

3

Python , 63 57 59 ไบต์

โซลูชันแบบเรียกซ้ำที่ทำงานได้ทั้ง Python 2 และ 3 ซึ่งอาจจะสามารถเล่นกอล์ฟต่อไปได้ ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ! ลองออนไลน์!

แก้ไข: -6 ไบต์ขอบคุณ Jonathan Allan +2 ไบต์ด้วยขอบคุณ mbomb007 สำหรับชี้ปัญหาด้วยคำตอบของฉัน

f=lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""

Ungolfing

def f(n):
    s = ""
    for i in range(n+1):
        m = map(str, range(n, 0, -1))
        s += "".join(m)
    return s

2
ใช้ a mapเพื่อบันทึก 6 ไบต์:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
Jonathan Allan

2

PHP, 35 34 33 ไบต์

บันทึกหนึ่งไบต์เพราะฉันผิดพลาดไปแล้วขอบคุณติตัส! เเละอีกอย่าง!

while($i++<$argv[1])echo$s=$i.$s;

-rเรียกใช้จากบรรทัดคำสั่งด้วย

คำตอบที่ง่ายสวยวนซ้ำจาก 1 ถึงอินพุตของเราnตรึงหมายเลขลงบนจุดเริ่มต้นของสตริงและพิมพ์ออกมา


ฉันนับ 34. สั้นลงหนึ่งไบต์พร้อมกับการเพิ่มภายหลัง
ติตัส

33 ไบต์:while($i++<$argv[1])echo$s=$i.$s;
aross

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.