Menjumlahkan digit dan digit terbalik

26

Diberi angka> 0, hasilkan penjumlahan dengan semua digit (1 .. n) digabungkan dan dibalik serta ditambahkan. Misalnya, dengan n = 6:

Angka 1 hingga 6 digabungkan:

123456

Terbalik:

654321

Menambahkannya bersama-sama akan menghasilkan: 777777. Contoh lain adalah n = 11:

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

dan

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

Menambahkannya bersama akan menghasilkan 2345555545332. Ini juga dikenal sebagai A078262 .

Kode terpendek menang!

Lamaro
sumber
Terkait
Zgarb
Apakah ada batasan n, atau apakah kita harus mendukung bilangan bulat besar yang sewenang-wenang?
LegionMammal978
Saya pikir defaultnya adalah "dibatasi oleh max(256,yourlanguagesdefaultintegertypelimit)". Tetapi harus ditentukan.
CalculatorFeline
@ LegionMammal978 Setinggi yang didukung bahasa Anda.
Lamaro
Kasus uji penting:, 10yang harus diberikan 23333333231.
Adnan

Jawaban:

9

05AB1E, 7 byte

LDRJsJ+

Cobalah online.

Penjelasan

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)
sebuah spaghetto
sumber
Saya merasa sangat bingung dengan pilihan desain yang mengarah ke +daftar melakukan penambahan bersarang, sedangkan untuk string dikonversi ke int dan kemudian menambahkan. Tapi saya kira itu berhasil di sini! : P
FryAmTheEggman
@FryAmTheEggman Saya akan menghapus tambahan bersarang. Ini tidak pernah berguna sejak saat saya menerapkannya ...
Adnan
3
Sheesh, saya meninggalkan PPCG selama dua jam dan Anda mengubah nama diri Anda menjadi Aqua Tart saat saya pergi ... Oh, kehidupan pengguna PPCG.
ETHproduksi
6

Jelly, 9 byte

R,U$DF€ḌS

livecoding 

Lynn
sumber
2
Apakah saya atau saya melihat kode itu diam-diam mencuri beberapa U $ D?
gcampbell
5

CJam, 15 14 byte

Terima kasih kepada Martin karena telah mencukur byte!

ri,:)_W%si\si+

Cobalah online!

GamrCorps
sumber
1 byte lebih sedikit jika Anda membalikkan string alih-alih susunan angka:ri,:)s_W%i\i+
Luis Mendo
Maaf, saya pikir versi saya tidak berfungsi untuk10
Luis Mendo
1
Kode ini diam-diam bahagia. :)
Cyoce
4

Pyth, 12 10 byte

ssMjLk_BSQ

Terima kasih kepada @FryAmTheEggman untuk 2 byte!

Qadalah input, Smengubahnya menjadi [1, 2, ..., input()], _Bmembagi dua atas _(mundur) untuk membuat [rng, rev(rng)], jLkmemetakannya joindengan k(yang merupakan variabel "string kosong"), sMmemetakan di intatas array yang dihasilkan ini , dan sakhirnya menghitung jumlah.

Gagang pintu
sumber
4

JavaScript (ES6), 70 67 64 byte

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

Tetap memenuhi persyaratan, karena kode lama dibuat di bawah kesalahpahaman dari input.

Mwr247
sumber
@TimmyD Menambahkan penjelasan.
Mwr247
@TimmyD OH! > _ <Kesalahpahaman saya tentang tantangan adalah bagaimana ... Ya, saya harus memperbaikinya.
Mwr247
@TimmyD Butuh waktu cukup lama untuk kembali online. Sudah diperbaiki sekarang, dan terima kasih sudah menangkapnya.
Mwr247
Seperti dicatat untuk jawaban lain, ini hanya berfungsi jika parameter a adalah antara 1 dan 12, itu benar-benar terlalu kecil
edc65
@ edc65 Per komentar OP , itu cukup besar.
Mwr247
3

Python 3, 74

Disimpan 6 byte berkat DSM.

Tidak ada yang terlalu menarik, bergabunglah dengan rentang lalu konversikan ke int dan tambahkan mereka.

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

Retina , 71

Karena itu alat yang salah untuk pekerjaan itu.

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

Cobalah online.

Berfungsi untuk input hingga 6, tetapi penerjemah online akan keluar setelah itu.

Trauma Digital
sumber
1
Anda dapat mempersingkatnya menjadi 74 dengan menghapus baris terakhir dan mengubahnya (c)+menjadi c.
daavko
@daavko ya, tentu saja, terima kasih!
Digital Trauma
Juga, $&$*c-> $*cdan \d+:?-> \d+dan saat ini 70. Dan untuk beberapa alasan itu terus bekerja ...
daavko
3

Jolf, 9 byte

Coba di sini! Ganti dengan \x10.

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

Saya mungkin bisa bermain golf dengan bergerak di sekitar casting tipe.

Conor O'Brien
sumber
Anda mengalahkan pyth dan gagang pintu!
Cyoce
@Cyoce jadi saya melakukan O_O
Conor O'Brien
3

JavaScript (ES6), 67 66 byte

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

Ya, itu ruang. Ugh. Setidaknya @Downgoat membantu saya menghemat satu byte.

Neil
sumber
1
Anda dapat menghapus yang pertama +dan membuat + +-> - -untuk menyimpan byte
Downgoat
n => (a = [... Array (n)]. map (_ => n -)) - -a.reverse().join
.gabung
Catatan: menggunakan aritmatika js sederhana ini terbatas pada nilai 1 .. 12
edc65
2

Serius, 12 byte

,R;Rεj≈@εj≈+

Cobalah online!

Penjelasan:

,R;Rεj≈@εj≈+
,R;           push two copies of range(1, input()+1)
   R          reverse one copy
    εj≈@εj≈   concatenate both and cast both to ints
           +  add
Mego
sumber
2

PowerShell, 35 byte

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

Mengonversi input menjadi rentang dengan .., lalu -joinmenyatukannya, dan menambahkannya.

Akan bekerja untuk nomor input hingga 138, sementara 139akan memberikan Infinity, 140dan di atas akan menghasilkan kesalahan pengecoran verbose yang luar biasa:

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

Pyth - 8 byte

siRT_BSQ

Cobalah online di sini .

Maltysen
sumber
2
Saya pikir ini tidak berhasil 10atau11
Luis Mendo
2

JavaScript (ES6), 99

Ini menambahkan digit demi digit, sehingga dapat menangani angka di atas 53 bit ketepatan javascript

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

Uji

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>

edc65
sumber
Sepertinya tidak berfungsi untuk 9. Juga, mengapa tidak menginisialisasi cdengan variabel lain?
Neil
Anda memiliki upvote saya.
Neil
2

Brachylog , 24 byte

:1fLrcC,Lc+C=.,{,.:1re?}
Fatalisasi
sumber
2

MATL , 13 byte

:tP2:"wVXvU]+

EDIT (20 Mei 2016) Kode dalam tautan menggunakan Xzalih-alih Xv, karena perubahan terbaru dalam bahasa.

Cobalah online!

:                % 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
Luis Mendo
sumber
Tidak berfungsi untuk 11 atau 10. (Petunjuk: rentang mundur sebelum mengkonversi ke string.)
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ Terima kasih! Diperbaiki
Luis Mendo
Besar! Dapatkan upvote.
Mama Fun Roll
2

05AB1E , 5 byte

LJDR+

Penjelasan:

L     # Pushes an array containing 1 .. [implicit] input
 J    # Join the array to a string (eg. [1, 2, 3] -> 123)
  D   # Duplicate the array
   R  # Reverse the duplicate
    + # Add them together

Cobalah online!

Okx
sumber
1

Bash + coreutils, 39

eval echo {1..$1} + {$1..1}|tr -d \ |bc

Atau:

bc<<<`eval printf %s {1..$1} + {$1..1}`

Ideone.

Trauma Digital
sumber
1

Perl 6 , 25 byte

{([~] @_=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
}

Pemakaian:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433
Brad Gilbert b2gills
sumber
Saya pikir Anda bisa melakukannya dengan $nbukan$^n
andlrc
@ dev-null Tidak jika saya ingin itu menjadi input ke blok. yang -> $n {merupakan salah satu yang berbeda untuk $^n.
Brad Gilbert b2gills
1

R, 34 60 64 byte

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

pryrPaket diasumsikan diinstal. ini memberikan fsingkatan untuk membuat fungsi.

Edit ditambahkan 26 byte tetapi mengembalikan fungsi yang berfungsi, bukan sesuatu yang sepenuhnya salah.

Sunting ditambahkan 4 byte lain untuk menangani kasus di atas n = 10 di mana strtoi (sebelumnya digunakan) kembali NA

mnel
sumber
1

Lua, 57

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b
Moop
sumber
1

Lua, 53 Bytes

Program ini digunakan nsebagai argumen baris perintah.

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

Saya berasumsi bahwa mengeluarkan angka dengan bagian desimal 0 tidak apa-apa (dalam bentuk 777777.0karena ini adalah cara default untuk menghasilkan angka dalam lua (tidak ada perbedaan antara integer dan float)

Katenkyo
sumber
Ini bukan string itu sendiri yang dibalik, tetapi digit. Kode Anda gagal pada n> = 10.
Moop
@Moop Dikoreksi dengan harga 1 byte ^^ '. Terima kasih atas komentarnya ^^ '
Katenkyo
Anda dapat menghemat 3 lebih banyak menggunakan ... alih-alih arg [1] kerja bagus di concat terbalik untuk r, tidak memikirkan hal itu dalam jawaban saya. +1
Moop
@Moop Saya melihat posting Anda, penggunaan yang bagus, saya bahkan tidak tahu Anda bisa menggunakan ...seperti itu! Saya akan tetap seperti ini untuk saat ini, karena saya tidak bisa menggunakan apa pun selain kompiler online dan tidak bisa mengatasinya (saya ingin mengujinya dan bermain sedikit sebelum memasukkannya ke dalam jawaban :))
Katenkyo
1

Perl 5, 37 byte

25 byte, ditambah 1 untuk -pdan 11 untuk-MList::Gen

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

Solusi sebelumnya, 40 byte: 39, ditambah satu untuk -p

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

Perl, 36 byte

Termasuk +1 untuk -p

Jalankan dengan di STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_
Ton Hospel
sumber
1

Dyalog APL , 17 byte

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

meminta input input
menghitung sampai
x←daftar toko input dalam x
terbalik x
x(... )tambahkan daftar terbalik dengan daftar asli
⍕¨¨mengkonversi setiap nomor dari setiap daftar menjadi string karakter
∊¨membuat setiap daftar string karakter menjadi string karakter tunggal,
⍎¨mengkonversi setiap string karakter menjadi jumlah
+/jumlah kedua nomor .

Adám
sumber
0

Mathematica, 64 byte

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&
CalculatorFeline
sumber
0

Retina, 80 byte (penyandian ISO 8859-1)

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

IO tidak sama dengan 'sebagai karakter penghitungan. Secara teori mendukung bilangan bulat apa pun yang Anda gunakan, dalam praktiknya ... juru bahasa online menolak untuk memproses sesuatu yang lebih besar dari 6 (unary '''''').

Cobalah online!
Cobalah online! (desimal IO - 91 byte)

daavko
sumber
0

𝔼𝕊𝕄𝕚𝕟, 12 karakter / 15 byte

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

Try it here (Firefox only).

Meh

Penjelasan

Mengambil rentang [1,input], bergabunglah; mengambil rentang yang sama, membalikkannya, lalu bergabung dengannya; jumlah dari kedua rentang adalah hasilnya.

Mama Fun Roll
sumber
0

Ruby, 40 karakter

->n{eval (l=[*1..n])*''+?++l.reverse*''}

Contoh dijalankan:

irb(main):001:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[11]
=> 2345555545332

irb(main):002:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[6]
=> 777777
manatwork
sumber
0

C #, 126 byte

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

Mungkin bisa bermain golf lebih lanjut. Tidak begitu yakin.

LegionMammal978
sumber
0

Groovy, 42 39 karakter

{[1..it,it..1]*.join()*.toLong().sum()}

Contoh dijalankan:

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(11)
===> 2345555545332

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
manatwork
sumber