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!



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)

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 


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!


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.


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.


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

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.


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.


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.


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

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


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>


Sepertinya tidak berfungsi untuk 9. Juga, mengapa tidak menginisialisasi cdengan variabel lain?
Neil

Anda memiliki upvote saya.
Neil


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

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!



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

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


1

Lua, 57

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

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)


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"+"@_"

1

Perl, 36 byte

Termasuk +1 untuk -p

Jalankan dengan di STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_

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 .



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)


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.


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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.