Kisaran, Balik, Jumlah!

21

Diberikan bilangan bulat positif n sebagai input, output jumlah rentang terbalik n.

Jumlah rentang terbalik dibuat dengan membuat rentang inklusif hingga n, dimulai dengan 1 dan termasuk n, membalikkan masing-masing angka di dalam, dan menjumlahkannya.

Contoh:

Inilah yang akan terjadi untuk input 10:

Jarak: [1,2,3,4,5,6,7,8,9,10]

Terbalik: [1,2,3,4,5,6,7,8,9,01](Angka 1-char terbalik adalah diri mereka sendiri, 10 terbalik adalah 01 atau 1)

Jumlah: 46

Angka dengan 3+ digit dibalik dengan cara yang sama dengan 2 digit. Sebagai contoh, 1234 akan menjadi 4321.

Kasus uji:

Input -> Output

10 -> 46
5 -> 15
21 -> 519
58 -> 2350
75 -> 3147
999 -> 454545

Kasing teks lengkap untuk input 999 dapat ditemukan di sini , terima kasih banyak ke @ fireflame241.

Kamerad SparklePony
sumber
Lebih banyak hasil test case (tidak bernomor, maaf, tetapi Anda dapat menguraikan dan mendapatkan nomor baris mereka jika Anda mau): Cobalah secara online!
Stephen
@StepHen>: D Arang lebih cepat
ASCII
1
Relevan
Silvio Mayolo
1
OEIS A062918
Leaky Nun
4
-1 karena ini tidak menarik. Sepertinya sebagian besar, jika tidak semua, kiriman menggunakan pendekatan yang sama. Tantangan ini tampaknya seperti banyak masalah yang telah ditanyakan, hanya disalurkan bersama tanpa ada jalan pintas yang jelas.
Buah Esolanging

Jawaban:

16

05AB1E , 3 byte

Kode

LíO

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan

L       # Range
 í      # Reverse
  O     # Sum
Adnan
sumber
20
dat penjelasan tho
ETHproduksi
@ ETHproduk dengan baik Reverseseharusnya Reverse eachbenar - benar ...
Erik the Outgolfer
@EriktheOutgolfer Ini bukan vektor?
ASCII
@ Vektorisasi 05AB1E hanya ASCII-benar-benar dalam 1 level, bukan ∞. Juga hanya "membalikkan" adalah R, sedangkan í"membalikkan masing-masing".
Erik the Outgolfer
12

Utilitas Bash + GNU, 24

seq $1|rev|paste -sd+|bc

Cobalah online .

Penjelasan

seq $1                    # range
      |rev                # reverse (each line)
          |paste -sd+|bc  # sum
Trauma Digital
sumber
8

JavaScript (ES6), 42 byte

f=n=>n&&+[...n+""].reverse().join``+f(n-1)

Solusi rekursi ganda favorit saya sayangnya 3 byte lebih lama:

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)
Produksi ETH
sumber
8

Perl 6 , 20 byte

{(1..$_)».flip.sum}

Menguji

Diperluas:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}
Brad Gilbert b2gills
sumber
Apakah 'mungkin secara paralel' diperlukan? Sepertinya Anda bisa menghilangkan satu atau dua byte dengan menghilangkannya.
Dana Gugatan Monica
@QPaysTaxes No. The ».flipmemanggil .flipmetode pada setiap nilai dalam Range. Cara terpendek berikutnya .map(*.flip)adalah 5 byte lebih.
Brad Gilbert b2gills
Oh, jadi kuncinya adalah "masing-masing", bukan "(mungkin secara paralel)". Mungkin layak untuk memisahkan mereka.
Dana Gugatan Monica
@ QPaysTaxes Saya tidak yakin saya tahu apa yang Anda maksud ».flipadalah pemanggilan metode hiper. Sementara saya dapat memisahkan »dan .flipdengan menggunakan ruang kosong \ seperti yang saya lakukan sebelumnya; yang akan membuatnya lebih sulit untuk dipahami, karena akan terlihat seperti akhir dari sebuah qqww/ /konstruk ( « a b "c d" »).
Brad Gilbert b2gills
7

Retina , 41 36 35 byte

.+
$*
1
1$`¶
1+
$.&
%O^$`.

.+
$*
1

Cobalah online! Tautan termasuk kasus uji. Sunting: Disimpan 5 byte berkat @FryAmTheEggman. Disimpan 1 byte berkat @ PunPun1000. Penjelasan:

.+
$*

Konversikan ke unary.

1
1$`¶

Buat rentang dari 1hingga n.

1+
$.&

Konversi kembali ke desimal.

%O^$`.

Membalikkan setiap nomor.

.+
$*

Konversi kembali ke unary.

1

Jumlahkan dan konversikan kembali ke desimal.

Neil
sumber
@FryAmTheEggman Bah, saya selalu lupa tentang itu.
Neil
Anda tidak perlu dalam .+¶ Pertandingan akan cocok di seluruh lini
PunPun1000
@ PunPun1000 Saya memang membutuhkannya sebelum perbaikan FryAmTheEggman!
Neil
Saya perhatikan bahwa O^$s`.membalik seluruh string juga berfungsi.
Neil
6

Jelly , 4 byte

Ṛ€ḌS

Cobalah online!

Bagaimana?

Ṛ€ḌS - Link: n
Ṛ€   - reverse for €ach (in implicit range)
  Ḍ  - convert from decimal list (vectorises)
   S - sum
Jonathan Allan
sumber
SAYA TAHU pasti ada cara untuk menggunakan Range secara implisit, +1
nmjcman101
6

Haskell, 34 byte

\n->sum$read.reverse.show<$>[1..n]

Sederhana dan mudah.

Silvio Mayolo
sumber
6

C (gcc) , 63 byte

f(n){int t=0,c=n;for(;c;c/=10)t=t*10+c%10;return n?t+f(n-1):0;}

Cobalah online!

Biarawati Bocor
sumber
5

cQuents , 4 byte

;\r$

Cobalah online!

Penjelasan

       Implicit input n.
;      Series mode. Outputs the sum of the sequence from 1 to n.
 \r$   Each item in the sequence equals:
 \r    String reverse of
   $                     current index (1-based)
Stephen
sumber
5

Python 2 , 38 byte

Tidak dapat menghitung istilah yang lebih tinggi dari batas rekursi:

f=lambda x:x and int(`x`[::-1])+f(x-1)

Cobalah online!

Adnan
sumber
Anda dapat menggunakan import sysdan sys.setrecursionlimit()jika Anda ingin menangani angka yang lebih besar, di tio header.
Tn. Xcoder
5

Röda , 56 41 36 byte

15 byte disimpan berkat @fergusq

{seq 1,_|parseInteger`$_`[::-1]|sum}

Cobalah online!

Ini adalah fungsi anonim yang mengambil integer dari aliran input dan output integer ke aliran output.

Penjelasan

{seq 1,_|parseInteger`$_`[::-1]|sum} Anonymous function
 seq 1,_                             Create a sequence 1 2 3 .. input and push each value to the stream
        |                            For each value in the stream:
                     `$_`             Cast it into a string
                         [::-1]       And reverse it
         parseInteger                 And parse the resulting string as an integer, while pushing the value to the stream
                               |sum  Sum all the values in the stream
Kritixi Lithos
sumber
Anda dapat menyimpan banyak byte dengan menggunakan [::-1]alih-alih mundur. Juga ` $_` lebih pendek dari _..""dan tanda kurung setelah parseInteger tidak diperlukan.
fergusq
@fergusq Terima kasih atas tipsnya, Röda saya sudah agak berkarat :)
Kritixi Lithos
4

C # (.NET Core) , 103 97 byte

using System.Linq;r=>new int[r+1].Select((_,n)=>int.Parse(string.Concat((n+"").Reverse()))).Sum()

Cobalah online!

TIO link menampilkan semua hasil dari 1 hingga 999, jadi silakan memeriksa pekerjaan saya.

Saya berharap ini menjadi sedikit lebih pendek, tetapi ternyata Reverse()mengembalikan IEnumerable<char>bukan string lain jadi saya harus menambahkan beberapa untuk mengubahnya kembali menjadi string sehingga saya bisa menguraikannya ke int. Mungkin ada cara yang lebih singkat untuk pergiIEnumerable<char> ke int dengan benar.

Catatan kecil, ini juga menggunakan fungsi Range() Reverse()dan Sum()semua dalam rangka.

-6 byte terima kasih kepada TheLethalCoder

Kamil Drakari
sumber
Anda tidak perlu trailing semi colon. Saya pikir menggunakan new int[r]dan .Select((_,n)=>...)akan menghemat byte.
TheLethalCoder
@TheLethalCoder Dibutuhkan new int[r+1]untuk mendapatkan output yang tepat sejak indeks dimulai pada 0, tetapi masih menyimpan beberapa byte. RIP Range()meskipun
Kamil Drakari
4

Rubi, 56, 52, 41, 39 byte

->n{(1..n).sum{|i|i.to_s.reverse.to_i}}

Ruby, 34 byte (jika lambda param adalah string)

->n{(1..n).sum{|i|i.reverse.to_i}}

Terima kasih kepada @Unihedron untuk solusi kedua.

akostadinov
sumber
1
->n{berfungsi juga.
Value Ink
1
Saya telah membuat program yang lebih pendek dalam alat yang sama (Ruby) yang cukup berbeda (yang berhubungan dengan input dan output) untuk diserahkan sendiri, Anda dapat menemukannya di sini: codegolf.stackexchange.com/a/150636/21830
Unihedron
@ Unihedron, haha, saya tidak tahu Ruby sangat gila untuk mengizinkan rentang string. Terima kasih.
akostadinov
Ya, ruby ​​juga memiliki fitur-fitur yang bagus seperti ?a..?zdan ?a1..?h8(walaupun Anda sebaiknya berhati-hati dengan format ke-2: D)
Unihedron
Rentang harus 1. (untuk nilai awal) menerapkan succdan 2. (jika nilai awal atau akhir tidak menerapkan succ) menjadi numerik, sehingga int..stringakan ditolak sebagai "Nilai buruk untuk rentang". Kebalikannya benar (tapi sayangnya tidak ada rentang downto), atau (?1..n)dapat digunakan sebagai gantinya
Unihedron
3

Mathematica, 47 byte

Tr[FromDigits@*Reverse/@IntegerDigits@Range@#]&

Cobalah online! (untuk mengerjakan matematika kita perlu mengganti "Tr" dengan "Total")

J42161217
sumber
Tr@*IntegerReverse@*Range
ngenisis
3

Arang , 14 13 byte

-1 byte terima kasih kepada Carlos Alejo

I∕…·⁰N«⁺ιI⮌Iκ

Cobalah online! Tautan adalah untuk versi verbose.

Penjelasan

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))
Khusus ASCII
sumber
Anda dapat menyimpan byte dengan menjatuhkan yang terakhir ». Ngomong-ngomong, di mana dalam Charcoal wiki yang Reducedidokumentasikan oleh operator?
Charlie
Tidak ada, ini adalah kelebihan dari divisi satu: | Saya dapat memberi Anda akses edit jika Anda mau (maaf saya terlalu malas untuk melakukannya sendiri)
ASCII-only
Juga ya saya lupa mengapa meninggalkan kawat gigi berakhir bekerja lol
ASCII-satunya
Saya benar-benar ingin wiki Charcoal sedikit lebih banyak didokumentasikan, karena masih ada beberapa fitur yang berfungsi tetapi tersembunyi. Jika Anda memberi saya akses edit, saya akan melakukan yang terbaik untuk mendokumentasikannya. Contoh: bagaimana Modulooperator dapat digunakan untuk memformat string di Charcoal?
Charlie
1
@CarlosAlejo Saya punya sedikit waktu luang jadi saya sudah mulai mendokumentasikan hal-hal, harap Anda menyukainya!
Neil
3

Magneson , 102 byte

Sumber

Itu tidak terlalu terlihat, jadi inilah versi yang ditingkatkan (Catatan: Tidak akan benar-benar berjalan, dan masih tidak terlalu cantik)

Hanya Tujuan Tampilan

Magneson beroperasi dengan mem-parsing gambar dan mengevaluasi perintah dari warna piksel yang dibacanya. Jadi melangkah melalui gambar untuk tantangan ini, kami memiliki:

  • R: 0, G: 1, B: 1adalah perintah penugasan integer, yang mengambil string untuk nama variabel dan nilai yang diberikan. Kami akan menggunakan ini untuk menyimpan jumlah total.
  • R: 0, G: 1, B: 0adalah string prebuilt dengan nilai VAR_1(Catatan: Ini hanya sementara kami meminta string; kode warna memiliki fungsi terpisah ketika digunakan di tempat lain).
  • R: 3, G: 0, B: 0adalah angka mentah. Magneson menangani angka-angka standar dengan meminta komponen Merah tepat 3, dan kemudian membentuk angka dengan menggunakan nilai biru secara langsung ditambah nilai hijau dikalikan dengan 256. Dalam hal ini, kami hanya mendapatkan angka 0.
  • R: 0, G: 1, B: 1adalah perintah penugasan integer lainnya. Kali ini, kami menyimpan variabel iterasi, untuk melacak nomor yang kami gunakan
  • R: 0, G: 1, B: 1adalah string prebuilt dengan nilai VAR_2(Sekali lagi, hanya ketika kita membutuhkan sebuah string)
  • R: 3, G: 0, B: 0adalah angka 0, sekali lagi. Ke bit menarik sekarang.
  • R: 1, G: 0, B: 0menunjukkan awal dari sebuah loop. Ini mengambil nomor dan mengulangi potongan kode berikut yang berkali-kali.
  • R: 2, G: 0, B: 0adalah fungsi STDIN, atau setidaknya ketika kita membutuhkan nomor. Ini membaca garis input dari konsol dan mengubahnya menjadi angka, karena kami meminta nomor.
  • R: 0, G: 8, B: 0memulai kode perulangan kami, dan ini merupakan perintah tambahan. Ini menambahkan angka ke variabel integer, dan dengan demikian mengambil string untuk nama variabel, dan nomor untuk ditambahkan.
  • R: 0, G: 1, B: 1adalah string prebuilt untuk VAR_2, yang merupakan variabel iterasi kami.
  • R: 3, G: 0, B: 1 adalah angka mentah, tetapi kali ini adalah angka 1.
  • R: 0, G: 8, B: 0 adalah perintah tambahan lainnya.
  • R: 0, G: 1, B: 0adalah string untuk VAR_1, yang merupakan jumlah total kami.
  • R: 0, G: 3, B: 0adalah fungsi yang membalikkan string. Dalam konteks meminta nomor, itu kemudian mengubah string yang dibalik ke nomor.
  • R: 0, G: 2, B: 1adalah perintah pengambilan integer, dan akan mengambil nomor yang disimpan dalam variabel yang disediakan. Dalam konteks meminta string (seperti dari perintah kebalikan), itu mengubah angka menjadi string.
  • R: 0, G: 1, B: 1adalah namanya VAR_2; variabel iterasi kami.
  • R: 1, G: 0, B: 1adalah penanda untuk mengakhiri loop, dan kembali ke awal loop jika kriteria tidak terpenuhi (jadi jika kita perlu terus mengulang) Jika tidak, lanjutkan.
  • R: 0, G: 0, B: 1 adalah perintah println yang sangat sederhana, dan mengambil string.
  • R: 0, G: 2, B: 1 mengambil integer dari variabel
  • R: 0, G: 1, B: 0 adalah nama dari jumlah total variabel kami, VAR_1

    Secara keseluruhan, program ini:

  • Menetapkan nilai 0 hingga VAR_1danVAR_2
  • Loop dari 0 ke nomor yang disediakan di STDIN
    • Menambahkan satu ke VAR_2
    • Menambahkan nilai integer dari pembalikan VAR_2keVAR_1
  • Mencetak isi VAR_1
Ishak
sumber
3

Python 2 , 50 47 byte

-3 Bytes berkat officialaimm!

lambda n:sum(int(`i+1`[::-1])for i in range(n))

Cobalah online!

notjagan
sumber
karena ini adalah python 2, `` alih-alih strmenghemat 3 byte.
officialaimm
3

CJam , 12 byte

ri){sW%i}%:+

Cobalah online!

-1 berkat Business Cat .

Penjelasan:

ri){sW%i}%:+
r            Get token
 i           To integer
  )          Increment
   {sW%i}    Push {sW%i}
    s         To string
     W        Push -1
      %       Step
       i      To integer
         %   Map
          :+ Map/reduce by Add
Erik the Outgolfer
sumber
Bisakah Anda menambahkan penjelasan? Saya tidak mengerti CJam (atau GolfScript). Tapi MY mengalahkan dua (meskipun kuno dalam hal golf-langs) bahasa golf!
Zacharý
@ Zacharý selesai ...
Erik the Outgolfer
Anda tidak perlu,
Business Cat
@BusinessCat Ohhh terlalu banyak menggunakan GolfScript ...
Erik the Outgolfer
3

APL (Dyalog) , 10 7 byte

3 byte golf berkat @ Adám dengan mengonversi ke tradfn dari kereta

+/⍎⌽⍕⍳⎕

Cobalah online!

          Input (example input: 10)
          Range; 1 2 3 4 5 6 7 8 9 10
          Stringify; '1 2 3 4 5 6 7 8 9 10'
          Reverse; '01 9 8 7 6 5 4 3 2 1'
          Evaluate; 1 9 8 7 6 5 4 3 2 1
+/         Sum; 46
Kritixi Lithos
sumber
Untuk @Uriel & Sapi berdetak tentang pertanyaan obrolan: Yah, saya melakukan bagian Matematika, selain itu, saya telah ditangguhkan dari obrolan, maka saya tidak menanggapi di sana.
Zacharý
7 byte:+/⍎⌽⍕⍳⎕
Adám
@ Adám Terima kasih atas tipnya. Menghapus ¨itu pintar :)
Kritixi Lithos
3

Java 8, 97 byte

IntStream.range(1,n+1).map(i->Integer.valueOf(new StringBuffer(""+i).reverse().toString())).sum()

EDIT

Sesuai komentar Kevin Cruijssen, saya ingin meningkatkan jawaban saya.

Java 8, 103 byte

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()
CoderCroc
sumber
1
Integer.valueOfbisa bermain golf new Integer, dan .reverse().toString()bisa bermain golf .reverse()+"". Anda juga harus memasukkan impor dan parameter lambda yang diperlukan, seperti java.util.stream.IntStreamdan n->sebelum itu. Dan Anda juga dapat bermain golf IntStream& Integerke LongStreamdan Long. Jawaban akhirnya adalah n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 byte - Jawaban Anda saat ini dengan parameter impor dan lambda ditambahkan akan 117 byte .) Masih +1, jawaban yang bagus!
Kevin Cruijssen
@KevinCruijssen Terima kasih atas masukan Anda yang berharga. Saya akan memperbarui jawaban saya. Terima kasih. :)
CoderCroc
3

Japt , 7 5 byte

-2 byte terima kasih kepada @Shaggy.

õs xw

Cobalah online!

Penjelasan

õs xw  Implicit input of integer U
õs     Create range [1,U] and map to strings
    w  Reverse each string
   x   Sum the array, implicitly converting to numbers.

Solusi lama, 7 byte

Menjaga ini karena ini adalah penggunaan yang sangat keren z2.

õs z2 x

Cobalah online!

Penjelasan

õs z2 x  Implicit input of integer U
õs       Create range [1,U] and map to strings
   z2    Rotate the array 180°, reversing strings
      x  Sum the array, implicitly converting back to integers
Justin Mariner
sumber
1
Anda tahu z2pada array datar adalah sama dengan w, baiklah ... uhm ... maafkan ketidakmampuan saya di Japt ...
ETHproduksi
6 byte: õ_swÃxterima kasih untuk penambahan baru N.s(f).
Shaggy
Atau bahkan hanya õs xwuntuk 5 byte.
Shaggy
@ Shaggy Saya tidak percaya tidak ada yang menyebutkan bahwa solusi 5-byte sampai sekarang ... akan diedit sedikit. Adapun yang 6-byte, jika itu ditambahkan setelah tantangan ini diposting, saya pikir itu tidak akan bersaing.
Justin Mariner
@JustinMariner, saya juga tidak bisa! : D Meskipun, tampaknya memalukan untuk membuang z2trik itu; itu sangat jenius. Perhatikan bahwa tidak bersaing bukan lagi suatu hal .
Shaggy
3

C ++, 146 byte

#include<string>
using namespace std;int r(int i){int v=0,j=0;for(;j<=i;++j){auto t=to_string(j);reverse(t.begin(),t.end());v+=stoi(t);}return v;}
HatsuPointerKun
sumber
Kerja bagus! Anda dapat menyimpan beberapa byte dengan menghapus header dan meletakkan "using namespace std" (lihat di sini tio.run/#cpp-gcc ). Saya juga berpikir Anda bisa mengganti "auto t" hanya dengan "t" (?)
koita_pisw_sou
Ya, koita_pisw_sou benar tentang bagian pertama. Tetapi Anda membutuhkan auto.
Zacharý
@koita_pisw_sou Maksud Anda bahwa saya dapat mengecualikan arahan header dari jumlah byte? Sama untuk namespace? autodiperlukan kata kunci
HatsuPointerKun
Ya, periksa tautan yang saya kirim
koita_pisw_sou
(Aduh, saya tidak yakin tentang menghapus header!) Tapi saya mengacu pada using namespace std;penghematan byte.
Zacharý
3

Sekam , 7 6 3 byte

ṁ↔ḣ

Cobalah online!

Tidak Terikat / Penjelasan

  ḣ  -- With the list [1..N] ..
ṁ    -- .. do the following with each element and sum the values:
 ↔   --    reverse it
ბიმო
sumber
3

Perl 5 , 29 27 22 + 1 ( -p) = 23 byte

map$\+=reverse,1..$_}{

Cobalah online!

Xcali
sumber
26 byte: map$r+=reverse,1..<>;say$r.
Denis Ibaev
Lebih jauh lagi menggunakan-p
Xcali
2

RProgN 2 , 8 byte

{Ø.in}S+

Dijelaskan

{Ø.in}S+
{    }S # Create a stack in range 0 through the implicit input, using the function defined
 Ø.     # Append nothing, stringifying the number
   i    # Reverse the string
    n   # Convert back to a number
       +# Get the sum of the stack, and output implicitly.

Cobalah online!

ATaco
sumber
2

Neim , 4 byte

Δ𝐫)𝐬

Cobalah online!

Penjelasan

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 
sampah luar angkasa
sumber
2
Solusi alternatif: 𝐈Ψ𝐫𝐬(buat rentang inklusif, balikkan setiap elemen, jumlah)
Okx
@Okx tidak tahu bahwa Ψtoken itu ada! pasti akan menggunakannya di belakang. real nice
space junk
2

C (gcc) , 71 byte

q(n,x,p){p=n?q(n/10,x*10+n%10):x;}f(w,a,e){for(a=0;w;)a+=q(w--,0);e=a;}

Cobalah online!

Giacomo Garabello
sumber
Tunggu apa? Bagaimana f()mengembalikan hasilnya tanpa returnpernyataan? Apakah e=ainstruksi memanipulasi register sedemikian rupa sehingga hasilnya disimpan dalam register yang sama daripada yang digunakan oleh nilai yang dikembalikan?
scottinet