การเพิ่มตัวเลขและตัวเลขกลับด้าน


26

รับตัวเลข> 0 ส่งออกผลรวมกับตัวเลขทั้งหมด (1 .. n) เรียงต่อกันและย้อนกลับและเพิ่มขึ้น ตัวอย่างเช่นด้วย n = 6:

หมายเลข 1 ถึง 6 เรียงต่อกัน:

123456

ย้อนกลับ

654321

การรวมเข้าด้วยกันจะทำให้: 777777 อีกตัวอย่างหนึ่งคือ n = 11:

1 2 3 4 5 6 7 8 9 10 11 > 1234567891011

และ

11 10 9 8 7 6 5 4 3 2 1 > 1110987654321

2345555545332เพิ่มพวกเขาขึ้นมาด้วยกันจะส่งผลให้ นอกจากนี้ยังเป็นที่รู้จักกันA078262

รหัสที่สั้นที่สุดชนะ!



มีข้อผูกมัดnหรือเราจำเป็นต้องสนับสนุนจำนวนเต็มขนาดใหญ่โดยพลการหรือไม่?
LegionMammal978

ฉันคิดว่าค่าเริ่มต้นคือ "ล้อมรอบด้วยmax(256,yourlanguagesdefaultintegertypelimit)" แต่มันควรจะระบุ
CalculatorFeline

@ LegionMammal978 สูงที่สุดเท่าที่ภาษาของคุณรองรับ
Lamaro

กรณีทดสอบสำคัญ: ซึ่งควรจะให้10 23333333231
Adnan

คำตอบ:


9

05AB1E, 7 ไบต์

LDRJsJ+

ลองออนไลน์

คำอธิบาย

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)

ฉันรู้สึกสับสนอย่างมากจากตัวเลือกการออกแบบที่นำไปสู่+รายการที่ซ้อนกันในขณะที่สตริงจะแปลงเป็น ints แล้วจึงเพิ่ม แต่ฉันคิดว่ามันทำงานได้ที่นี่! : P
FryAmTheEggman

@FryAmTheEggman ฉันจะลบการเพิ่มที่ซ้อนกัน มันไม่เคยมีประโยชน์เลยตั้งแต่วินาทีที่ฉันได้ติดตั้ง ...
Adnan

3
Sheesh ฉันออกจาก PPCG เป็นเวลาสองชั่วโมงและคุณเปลี่ยนชื่อตัวเอง Aqua Tart ในขณะที่ฉันไป ... โอ้ชีวิตของผู้ใช้ PPCG
ETHproductions


5

CJam, 15 14 ไบต์

ขอบคุณ Martin สำหรับการโกนไบต์!

ri,:)_W%si\si+

ลองออนไลน์!


น้อยกว่า 1 ไบต์ถ้าคุณพลิกสตริงแทนที่จะเป็นอาร์เรย์ตัวเลข:ri,:)s_W%i\i+
Luis Mendo เมื่อ

ขออภัยฉันคิดว่าเวอร์ชันของฉันใช้งานไม่ได้10
Luis Mendo

1
รหัสนี้มีความสุขแอบ :)
Cyoce

4

Pyth, 12 10 ไบต์

ssMjLk_BSQ

ขอบคุณ@FryAmTheEggmanสำหรับ 2 ไบต์!

Qคือการป้อนข้อมูลSเปลี่ยนมันเป็น[1, 2, ..., input()], _Bbifurcates มันมากกว่า_(ย้อนกลับ) เพื่อสร้าง[rng, rev(rng)], jLkแผนที่มันมากกว่าjoinโดยk(ซึ่งเป็นตัวแปร "สตริงที่ว่างเปล่า") sMแผนที่intมากกว่านี้อาร์เรย์ที่เกิดและsในที่สุดก็จะคำนวณผลรวม


4

JavaScript (ES6), 70 67 64 ไบต์

a=>(z=[...Array(a)].map((b,c)=>c+1)).join``- -z.reverse().join``

คงที่เพื่อตอบสนองความต้องการเนื่องจากโค้ดเก่าถูกสร้างขึ้นภายใต้ความเข้าใจผิดของอินพุต


@TimmyD เพิ่มคำอธิบาย
Mwr247

@ TimmyD OH! > _ <การเข้าใจผิดเกี่ยวกับความท้าทายของฉันคือวิธีการ ... ใช่ฉันจะต้องแก้ไขปัญหานี้
Mwr247

@ TimmyD พาฉันไปนานพอที่จะกลับมาออนไลน์ได้ ตอนนี้ได้รับการแก้ไขแล้วและขอขอบคุณที่ติดตาม
Mwr247

ตามที่ระบุไว้สำหรับคำตอบอื่นจะใช้งานได้เฉพาะถ้าพารามิเตอร์ a อยู่ระหว่าง 1 และ 12 นั่นน้อยเกินไปจริงๆ
edc65

@ edc65 ต่อความคิดเห็นของ OPมีขนาดใหญ่พอ
Mwr247

3

Python 3, 74

บันทึก 6 ไบต์ด้วย DSM

ไม่มีอะไรน่าตื่นเต้นเกินไปเข้าร่วมช่วงแล้วแปลงเป็น ints และเพิ่มพวกเขา

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))

3

เรติน่า , 71

เพราะมันโจ๋งครึ่มเครื่องมือที่ผิดสำหรับงาน

.+
$*a:$&$*
+`^(a+)a\b(.*)\b1(1+)$
$1 $& $3
 ?(\w)+ ?
$#1
\d+:?
$&$*c
c

ลองออนไลน์

ใช้งานได้กับอินพุตสูงสุด 6 แต่ล่ามออนไลน์หมดเวลาหลังจากนั้น


1
คุณสามารถย่อให้เหลือ 74 โดยการเอาบรรทัดสุดท้ายและการเปลี่ยนแปลงไป(c)+ c
daavko

@daavko ใช่แน่นอนขอบคุณ!
Digital Trauma

นอกจากนี้$&$*c-> $*cและ\d+:?-> \d+และเป็น 70 และด้วยเหตุผลบางอย่างมันยังคงทำงานอยู่ ...
daavko

3

Jolf, 9 ไบต์

ลองที่นี่! แทนที่ด้วย\x10

+P►γzjP_γ
    zj    range 1...j
   γ      γ = ^
  ►        ^ .join("")
 P         as a number
+     P_γ  and γ reversed

ฉันอาจตีกอล์ฟด้วยการเคลื่อนที่ไปรอบ ๆ แบบหล่อ


คุณชนะพีทและลูกบิดประตู!
Cyoce

@Cyoce ดังนั้นฉันจึงทำ O_O
Conor O'Brien

3

JavaScript (ES6), 67 66 ไบต์

n=>(a=[...Array(n+1).keys()].slice(1)).join``- -a.reverse().join``

ใช่นั่นคือพื้นที่ ฮึ. อย่างน้อย @Downgoat ช่วยฉันประหยัด byte


1
คุณสามารถลบอันแรก+และทำการ+ +-> - -เพื่อบันทึก byte
Downgoat

n => (a = [... Array (n)]. map (_ => n -)) เข้าร่วม- -a.reverse().join
edc65

หมายเหตุ: การใช้เลขคณิต js ง่าย ๆ ซึ่ง จำกัด ไว้ที่ค่า 1 .. 12
edc65


2

PowerShell, 35 ไบต์

param($a)+-join(1..$a)+-join($a..1)

แปลงอินพุตให้เป็นช่วงด้วย..จากนั้น-joinรวมเข้าด้วยกันและเพิ่ม 'em up

จะทำงานให้ใส่ตัวเลขขึ้นไป138ในขณะที่139จะให้Infinityและ140และข้างต้นจะ barf จากข้อผิดพลาด awesomely verbose หล่อ:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."


2

JavaScript (ES6), 99

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

n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

ทดสอบ

f=n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

// Less golfed
U=n=>{
  for(a=b=c=r=''; n; --n)
      b=n+b, a+=n;
  for(i=a.length; i--; r = c%10+r) 
      c=(c>9)-(-a[i]-b[i]);
  return c>9? 1+r : r;
}

function test() {
  var n=+I.value
  R.textContent=f(n)
}  

test()
N: <input id=I value=11 oninput="test()"> -> <span id=R></span>


ดูเหมือนจะใช้งานไม่ได้กับ 9. นอกจากนี้ทำไมไม่เริ่มต้นcกับตัวแปรอื่น ๆ
Neil

คุณมี upvote ของฉัน
Neil


2

MATL , 13 ไบต์

:tP2:"wVXvU]+

แก้ไข (20 พฤษภาคม 2016) รหัสในลิงก์ใช้XzแทนXvเนื่องจากมีการเปลี่ยนแปลงล่าสุดในภาษา

ลองออนไลน์!

:                % range [1,2,...,n], where n is input
 tP              % duplicate and flip
   2:"     ]     % do this twice
      w          % swap
       V         % convert array of numbers to string with numbers and spaces
        Xv       % remove spaces
          U      % convert to number
            +    % add the two numbers

ใช้งานไม่ได้กับ 11 หรือ 10 (คำแนะนำ: ย้อนกลับช่วงก่อนที่จะแปลงเป็นสตริง)
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆขอบคุณ! แก้ไขแล้ว
Luis Mendo

ที่ดี! มี upvote
Mama Fun Roll



1

Perl 6 , 25 ไบต์

{([~] @_=1..$^n)+[R~] @_}
{
  (
    [~]           # reduce with the string concatenation infix op:
    @_ = 1 .. $^n # the range 1 to input ( also stored in @_ )
  )
  +               # add that to
  [R~] @_         # @_ reduced in reverse
}

การใช้งาน:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433

ฉันคิดว่าคุณสามารถทำอะไรกับ$nแทน$^n
andlrc

@ dev-null ไม่ใช่ถ้าฉันต้องการให้มันเป็นอินพุตของบล็อก เป็นหนึ่งที่แตกต่างกันไป-> $n { $^n
Brad Gilbert b2gills

1

R, 34 60 64 ไบต์

f=pryr::f;g=f(as.numeric(paste(x,collapse='')));f(g(1:n)+g(n:1))

สันนิษฐานว่าpryrติดตั้งแพ็คเกจแล้ว สิ่งนี้จะให้fความสำคัญกับการสร้างฟังก์ชัน

แก้ไขเพิ่ม 26 ไบต์ แต่ส่งคืนฟังก์ชันที่ใช้งานได้ไม่ใช่สิ่งผิดปกติอย่างสิ้นเชิง

แก้ไขเพิ่มอีก 4 ไบต์เพื่อจัดการเคสด้านบน n = 10 โดยที่ strtoi (ใช้ก่อนหน้านี้) กำลังกลับ NA



1

Lua, 53 ไบต์

โปรแกรมนี้ใช้nเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

s=""r=s for i=1,arg[1]do r,s=i..r,s..i end print(s+r)

ฉันคิดว่าการส่งออกตัวเลขที่มีส่วนทศนิยมเป็น 0 ก็โอเค (ในรูปแบบ777777.0เพราะนี่เป็นวิธีเริ่มต้นในการส่งออกตัวเลขใน lua (ไม่มีความแตกต่างระหว่างจำนวนเต็มและทศนิยม)


ไม่ใช่สตริงที่กลับด้าน แต่เป็นตัวเลข รหัสของคุณล้มเหลวใน n> = 10
Moop

@Moop แก้ไขที่ราคา 1 ไบต์ ^^ ' ขอบคุณสำหรับความคิดเห็น ^^ '
Katenkyo

คุณสามารถประหยัดได้มากขึ้น 3 โดยใช้ ... แทนที่จะแย้ง [1] ทำงานได้ดีในการสลับย้อนกลับสำหรับ r ไม่คิดในคำตอบของฉัน +1
Moop

@Moop ฉันเห็นโพสต์ของคุณใช้มันฉันไม่รู้ว่าคุณจะใช้...แบบนั้นได้! ฉันจะเก็บแบบนี้ไว้ครู่หนึ่งเพราะฉันไม่สามารถใช้สิ่งอื่นใดได้นอกจากคอมไพเลอร์ออนไลน์และมันไม่สามารถจัดการได้ (ฉันต้องการทดสอบและเล่นกับมันก่อนที่จะวางลงใน คำตอบ :))
Katenkyo

1

Perl 5, 37 ไบต์

25 ไบต์, บวก 1 สำหรับ-pและ 11 สำหรับ-MList::Gen

$_=<[.]1..$_>+<[R.]1..$_>

โซลูชันก่อนหน้า 40 ไบต์: 39 และอีกอันสำหรับ -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"


1

Dyalog APLขนาด 17 ไบต์

+/⍎¨∊¨⍕¨¨x(⌽x←⍳⎕)

พรอมต์สำหรับอินพุต
'แจกแจงจนกว่า
x←รายการที่เก็บอินพุตใน x
ย้อนกลับ x
x(... เพิ่ม)รายการที่กลับรายการด้วยรายการดั้งเดิม
⍕¨¨แปลงแต่ละหมายเลขของแต่ละรายการเป็นสตริงอักขระ
∊¨ทำให้แต่ละรายการของสตริงอักขระเป็นสตริงอักขระเดี่ยว
⍎¨แปลงสตริงอักขระแต่ละตัวเป็น
+/ตัวเลข .



0

เรติน่า, 80 ไบต์ (การเข้ารหัส ISO 8859-1)

'+
$0¶$0
+`^(('+)')
$2 $1
+`('('+))$
$1 $2
(')+( |$)?
$#1
(\d+)¶(\d+)
$1$*'$2$*'

IO อยู่ในสถานะเดียวกันโดยมี'อักขระนับอยู่ ในทางทฤษฎีสนับสนุนจำนวนเต็มใด ๆ ที่คุณโยนในทางปฏิบัติ ... ล่ามออนไลน์ปฏิเสธที่จะประมวลผลอะไรที่มีขนาดใหญ่กว่า 6 (unary '''''')

ลองออนไลน์!
ลองออนไลน์! (ทศนิยม IO - 91 ไบต์)


0

𝔼𝕊𝕄𝕚𝕟, 12 ตัวอักษร / 15 ไบต์

⨭⟮⩤⁽1ï⟯⨝,Ⅰᴚ⨝

Try it here (Firefox only).

Meh

คำอธิบาย

ใช้ช่วง[1,input], รวมมัน; ใช้ช่วงเดียวกันนั้นกลับด้านแล้วเข้าร่วม ผลรวมของทั้งสองช่วงคือผลลัพธ์



0

C #, 126 ไบต์

using System.Linq;a=>{var b=Enumerable.Range(1,a);return long.Parse(string.Concat(b))+long.Parse(string.Concat(b.Reverse()));}

อาจจะเล่นกอล์ฟต่อไป ไม่แน่ใจจริงๆ


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