Range, Reverse, Sum!

21

Biorąc pod uwagę dodatnią liczbę całkowitą n jako dane wejściowe, wypisuje sumę odwróconego zakresu n.

Odwrócona suma zakresu jest tworzona przez utworzenie przedziału obejmującego do n, zaczynając od 1 i włączając n, odwrócenie każdej liczby w środku i zsumowanie jej.

Przykład:

Oto, co stałoby się dla wejścia 10:

Zasięg: [1,2,3,4,5,6,7,8,9,10]

Odwrotny: [1,2,3,4,5,6,7,8,9,01](1-znakowe liczby są odwrócone, 10 odwróconych to 01 lub 1)

Suma: 46

Liczby z 3+ cyframi są odwracane w taki sam sposób, jak cyfry z 2 cyframi. Na przykład 1234 stałby się 4321.

Przypadki testowe:

Input -> Output

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

Kompletne przypadki tekstowe do wprowadzenia 999 można znaleźć tutaj , bardzo dzięki @ fireflame241.

Towarzyszu SparklePony
źródło
Więcej wyników przypadków testowych (nie numerowanych, przepraszam, ale możesz przeanalizować i uzyskać ich numer linii, jeśli chcesz): Wypróbuj online!
Stephen
@StepHen>: D Węgiel drzewny jest szybszy
tylko ASCII
1
Odpowiedni
Silvio Mayolo
1
OEIS A062918
Leaky Nun
4
-1, ponieważ jest to nieciekawe. Wygląda na to, że większość, jeśli nie wszystkie, zgłoszeń stosuje to samo podejście. To wyzwanie wydaje się być szeregiem problemów, które zostały już zadane, po prostu połączone bez żadnych oczywistych skrótów.
Esolanging Fruit

Odpowiedzi:

16

05AB1E , 3 bajty

Kod

LíO

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Wyjaśnienie

L       # Range
 í      # Reverse
  O     # Sum
Adnan
źródło
20
objaśnienie danych tho
ETHproductions
@ETHproductions Reversepowinno być Reverse eachwłaściwie ...
Erik Outgolfer
@EriktheOutgolfer Nie jest wektoryzowany?
Tylko ASCII
@ Wektoryzacja 05AB1E tylko w ASCII ma głębokość 1 poziomu, a nie ∞. Również jest „odwróć” R, a í„odwróć”.
Erik the Outgolfer
12

Narzędzia Bash + GNU, 24

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

Wypróbuj online .

Wyjaśnienie

seq $1                    # range
      |rev                # reverse (each line)
          |paste -sd+|bc  # sum
Cyfrowa trauma
źródło
8

JavaScript (ES6), 42 bajty

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

Moje ulubione podwójnie rekurencyjne rozwiązanie jest niestety o 3 bajty dłuższe:

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)
ETHprodukcje
źródło
8

Perl 6 , 20 bajtów

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

Sprawdź to

Rozszerzony:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}
Brad Gilbert b2gills
źródło
Czy wymagane jest „możliwe równoległe”? Wygląda na to, że możesz pozbyć się jednego lub dwóch bajtów, pomijając go.
Pozew funduszu Moniki z
@QPaysTaxes nr ».flipwywołuje .flipmetodę na każdej wartości w zakresie. Kolejnym najkrótszym sposobem na to .map(*.flip)jest 5 bajtów więcej.
Brad Gilbert b2gills,
Och, więc kluczową częścią jest „każdy”, a nie „(prawdopodobnie równolegle)”. Może więc warto je rozdzielić.
Pozew Fund Moniki w dniu
@QPaysTaxes Nie jestem pewien, czy wiem, co masz na myśli, ».flipto wywołanie metody hyper. Chociaż mogę podzielić »i .flipużywając spacji, \ tak jak przedtem; utrudniłoby to zrozumienie, ponieważ wyglądałoby to na koniec qqww/ /konstrukcji ( « a b "c d" »).
Brad Gilbert b2gills,
7

Retina , 41 36 35 bajtów

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

.+
$*
1

Wypróbuj online! Link zawiera przypadki testowe. Edycja: Zapisano 5 bajtów dzięki @FryAmTheEggman. Zapisano 1 bajt dzięki @ PunPun1000. Wyjaśnienie:

.+
$*

Konwertuj na unary.

1
1$`¶

Utwórz zakres od 1do n.

1+
$.&

Konwertuj z powrotem na dziesiętne.

%O^$`.

Odwróć każdą liczbę.

.+
$*

Konwertuj z powrotem na jednoargumentowy.

1

Suma i przelicz z powrotem na dziesiętne.

Neil
źródło
@FryAmTheEggman Bah, ciągle o tym zapominam.
Neil
Nie potrzebne w .+¶ meczu będzie pasował do całej linii
PunPun1000
@ PunPun1000 Potrzebowałem go przed poprawką FryAmTheEggman!
Neil
Zauważam, że O^$s`.odwrócenie całego łańcucha również działa.
Neil,
6

Galaretka , 4 bajty

Ṛ€ḌS

Wypróbuj online!

W jaki sposób?

Ṛ€ḌS - Link: n
Ṛ€   - reverse for €ach (in implicit range)
  Ḍ  - convert from decimal list (vectorises)
   S - sum
Jonathan Allan
źródło
WIEDZIAŁEM, że musiał istnieć sposób na użycie niejawnie Range, +1
nmjcman101
6

Haskell, 34 bajty

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

Prosty i bezpośredni.

Silvio Mayolo
źródło
6

C (gcc) , 63 bajty

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

Wypróbuj online!

Leaky Nun
źródło
5

cQuents , 4 bajty

;\r$

Wypróbuj online!

Wyjaśnienie

       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
źródło
5

Python 2 , 38 bajtów

Nie można obliczyć warunków wyższych niż limit rekurencji:

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

Wypróbuj online!

Adnan
źródło
Możesz użyć, import sysa sys.setrecursionlimit()jeśli chcesz obsługiwać większe liczby, w nagłówku tio.
Pan Xcoder
5

Röda , 56 41 36 bajtów

15 bajtów zapisanych dzięki @fergusq

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

Wypróbuj online!

Jest to anonimowa funkcja, która pobiera liczbę całkowitą ze strumienia wejściowego i wyprowadza liczbę całkowitą do strumienia wyjściowego.

Wyjaśnienie

{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
źródło
Możesz zapisać wiele bajtów, używając [::-1]zamiast odwrotnej. Również ` $_` jest krótszy niż _..""i nawiasy po parseInteger nie są potrzebne.
fergusq
@fergusq Dzięki za wskazówki, moja Röda poszła trochę zardzewiała :)
Kritixi Lithos
4

C # (.NET Core) , 103 97 bajtów

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

Wypróbuj online!

Link TIO wyświetla wszystkie wyniki od 1 do 999, więc nie krępuj się sprawdzić moją pracę.

Spodziewałem się, że będzie to nieco krótsze, ale okazuje się Reverse() zwraca IEnumerable<char>zamiast innego ciągu, więc musiałem dodać trochę więcej, aby przekształcić go z powrotem w ciąg, aby móc go przeanalizować jako wartość całkowitą. Może jest krótsza droga do przejścia od IEnumerable<char>int do poprawnie.

Co ważne, wykorzystuje to również funkcje Range() Reverse() i Sum()wszystko w porządku.

-6 bajtów dzięki TheLethalCoder

Kamil Drakari
źródło
Nie potrzebujesz końcowego średnika. Myślę, że używanie new int[r]i .Select((_,n)=>...)pozwoli ci zaoszczędzić bajty.
TheLethalCoder
@TheLethalCoder Potrzeba new int[r+1]uzyskania prawidłowego wyniku, ponieważ indeks zaczyna się od 0, ale nadal zachowuje kilka bajtów. RIP Range()jednak
Kamil Drakari
4

Rubin, 56, 52, 41, 39 bajtów

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

Ruby, 34 bajty (jeśli parametr lambda jest ciągiem)

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

Dzięki @Unihedron za drugie rozwiązanie.

akostadinov
źródło
1
->n{działa również.
Wartość tuszu
1
Stworzyłem krótszy program w tym samym narzędziu (Ruby), który jest wystarczająco inny (zajmuje się wejściem i wyjściem), aby był własnym poddaniem, możesz go znaleźć tutaj: codegolf.stackexchange.com/a/150636/21830
Unihedron
@Unihedron, haha, nie wiedziałem, że Ruby jest tak szalona, ​​że ​​dopuszcza zakresy strun. Dzięki.
akostadinov
Tak, Ruby ma również fajne funkcje, takie jak ?a..?zi ?a1..?h8(choć lepiej uważaj na drugi format: D)
Unihedron
Zakresy muszą mieć wartość 1. (dla wartości początkowej) succi 2. (jeśli wartość początkowa lub końcowa nie jest implementowana succ) muszą być numeryczne, więc int..stringzostaną odrzucone jako „Zła wartość dla zakresu”. Odwrotność jest prawdziwa (ale niestety nie ma zasięgu (?1..n)
cofania
3

Mathematica, 47 bajtów

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

Wypróbuj online! (aby pracować z matematyką, musimy zamienić „Tr” na „Total”)

J42161217
źródło
Tr@*IntegerReverse@*Range
ngenisis
3

Węgiel drzewny , 14 13 bajtów

-1 bajt dzięki Carlos Alejo

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

Wypróbuj online! Link jest do pełnej wersji.

Wyjaśnienie

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))
Tylko ASCII
źródło
Możesz zapisać bajt, upuszczając ostatni ». Nawiasem mówiąc, gdzie w wiki Charcoal Reduceoperator jest udokumentowany?
Charlie
Nigdzie nie jest to przeciążenie pierwszego: | Mogę dać ci dostęp do edycji, jeśli chcesz (przepraszam, jestem zbyt leniwy, aby sam to zrobić)
tylko ASCII
Również tak, zapomniałem, dlaczego pomijanie nawiasów klamrowych działa lol
tylko ASCII
Naprawdę chciałbym, aby Wiki Charcoal było nieco bardziej udokumentowane, ponieważ wciąż istnieją pewne działające, ale ukryte funkcje. Jeśli przyznasz mi uprawnienia do edycji, zrobię co w mojej mocy, aby je udokumentować. Przykład: w jaki sposób można użyć Modulooperatora do formatowania ciągów znaków na węglu drzewnym?
Charlie
1
@CarlosAlejo Miałem trochę wolnego czasu, więc zacząłem dokumentować różne rzeczy, mam nadzieję, że Ci się spodoba!
Neil,
3

Magneson , 102 bajty

Źródło

To nie jest bardzo widoczne, więc oto wersja przeskalowana (uwaga: tak naprawdę nie będzie działać i nadal nie jest ładna)

Wyświetl tylko cele

Magneson działa poprzez parsowanie obrazu i ocenę poleceń na podstawie kolorów czytanych pikseli. Dlatego przechodząc przez obraz tego wyzwania, mamy:

  • R: 0, G: 1, B: 1to komenda przypisania liczb całkowitych, która pobiera ciąg nazwy zmiennej i wartości do przypisania. Użyjemy tego do przechowywania łącznej sumy.
  • R: 0, G: 1, B: 0jest wstępnie zbudowanym ciągiem o wartości VAR_1(Uwaga: dzieje się tak tylko wtedy, gdy prosimy o ciąg; kod koloru ma osobną funkcję, gdy jest używany gdzie indziej).
  • R: 3, G: 0, B: 0jest liczbą surową. Magneson obsługuje standardowe liczby, wymagając, aby czerwony składnik miał dokładnie 3, a następnie tworzy liczbę, używając bezpośrednio niebieskiej wartości plus zielonej wartości pomnożonej przez 256. W tym przypadku otrzymujemy tylko liczbę 0.
  • R: 0, G: 1, B: 1to kolejne polecenie przypisania liczb całkowitych. Tym razem przechowujemy zmienną iteracyjną, aby śledzić, na jakiej liczbie się znajdujemy
  • R: 0, G: 1, B: 1jest wstępnie zbudowanym ciągiem o wartości VAR_2(Raz jeszcze, tylko gdy potrzebujemy ciągu)
  • R: 3, G: 0, B: 0jest jeszcze raz liczbą 0. Na interesujące kawałki teraz.
  • R: 1, G: 0, B: 0wskazuje początek pętli. Pobiera to liczbę i wielokrotnie zapętla następujący fragment kodu.
  • R: 2, G: 0, B: 0jest funkcją STDIN, a przynajmniej wtedy, gdy potrzebujemy liczby. Odczytuje wiersz danych wejściowych z konsoli i zamienia go na liczbę, ponieważ poprosiliśmy o liczbę.
  • R: 0, G: 8, B: 0uruchamia nasz kod pętli i jest to polecenie addytywne. Dodaje to liczbę do zmiennej całkowitej, a zatem pobiera ciąg nazwy zmiennej i liczbę do dodania.
  • R: 0, G: 1, B: 1to wstępnie zbudowany ciąg VAR_2, który jest naszą zmienną iteracyjną.
  • R: 3, G: 0, B: 1 jest liczbą surową, ale tym razem jest to liczba 1.
  • R: 0, G: 8, B: 0 to kolejne polecenie dodawania.
  • R: 0, G: 1, B: 0jest ciągiem VAR_1, który jest naszą sumą całkowitą.
  • R: 0, G: 3, B: 0to funkcja odwracająca ciąg. W kontekście pytania o liczbę, następnie konwertuje odwrócony ciąg na liczbę.
  • R: 0, G: 2, B: 1to komenda pobierania liczb całkowitych, która pobierze liczbę zapisaną w podanej zmiennej. W kontekście pytania o ciąg znaków (na przykład z polecenia odwrotnego) konwertuje liczbę na ciąg znaków.
  • R: 0, G: 1, B: 1to imię VAR_2; nasza zmienna iteracyjna.
  • R: 1, G: 0, B: 1jest znacznikiem kończącym pętlę i wracającym do początku pętli, jeśli kryteria nie są spełnione (więc jeśli musimy kontynuować pętlę). W przeciwnym razie przejdź dalej.
  • R: 0, G: 0, B: 1 jest bardzo prostym poleceniem println i pobiera ciąg znaków.
  • R: 0, G: 2, B: 1 pobiera liczbę całkowitą ze zmiennej
  • R: 0, G: 1, B: 0 to nazwa naszej zmiennej sumarycznej, VAR_1

    Podsumowując, program:

  • Przypisuje wartość 0 do VAR_1iVAR_2
  • Pętle od 0 do liczby podanej w STDIN
    • Dodaje jeden do VAR_2
    • Dodaje całkowitą wartość cofania VAR_2doVAR_1
  • Drukuje zawartość VAR_1
Izaak
źródło
3

Python 2 , 50 47 bajtów

-3 bajty dzięki oficjalnemu!

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

Wypróbuj online!

notjagan
źródło
ponieważ jest to python 2, zamiast strzapisywać 3 bajty.
officialaimm
3

CJam , 12 bajtów

ri){sW%i}%:+

Wypróbuj online!

-1 dzięki Business Cat .

Wyjaśnienie:

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
źródło
Czy możesz dodać wyjaśnienie? Nie rozumiem CJam (ani GolfScript). Ale MOJE pokonały dwa (aczkolwiek starożytne pod względem golf-langs) języki gry w golfa!
Zacharý
@ Zacharý zrobione ...
Erik the Outgolfer
Nie potrzebujesz,
Business Cat
@BusinessCat Ohhh użył zbyt wiele do GolfScript najwyraźniej ...
Erik the Outgolfer
3

APL (Dyalog) , 10 7 bajtów

3 bajty w golfa dzięki @ Adám, przechodząc na tradfn z pociągu

+/⍎⌽⍕⍳⎕

Wypróbuj 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
źródło
Do @Uriel & Cows walczy z pytaniem na czacie: Cóż, zrobiłem część Matematyki, oprócz tego zostałem zawieszony na czacie, stąd nie odpowiadam.
Zacharý
7 bajtów:+/⍎⌽⍕⍳⎕
Adám
@ Adám Dzięki za wskazówkę. Usunięcie ¨było sprytne :)
Kritixi Lithos
3

Java 8, 97 bajtów

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

EDYTOWAĆ

Zgodnie z komentarzem Kevin Cruijssenchciałbym poprawić swoją odpowiedź.

Java 8, 103 bajty

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()
CoderCroc
źródło
1
Integer.valueOfmożna grać w golfa new Integeri .reverse().toString()można grać w golfa .reverse()+"". Ponadto należy podać wymagane parametry importu i lambda, takie jak java.util.stream.IntStreami n->przed nim. A można też golf IntStreami Integerdo LongStreama Long. Ostateczna odpowiedź to n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 bajty - Twoja aktualna odpowiedź z dodanym importem i parametrem lambda to 117 bajtów ). Wciąż +1, ładna odpowiedź!
Kevin Cruijssen
@KevinCruijssen Dziękujemy za cenne informacje. Zaktualizuję moją odpowiedź. Dzięki. :)
CoderCroc
3

Japt , 7 5 bajtów

-2 bajty dzięki @Shaggy.

õs xw

Wypróbuj online!

Wyjaśnienie

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

Stare rozwiązanie, 7 bajtów

Zachowuję to, ponieważ jest to naprawdę fajne zastosowanie z2.

õs z2 x

Wypróbuj online!

Wyjaśnienie

õ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
źródło
1
Wiesz, że z2na płaskiej tablicy jest to samo w, co ... hmm ... przepraszam za moją nieadekwatność w Japt ...
ETHproductions
6 bajtów: õ_swÃxdzięki nowemu dodaniu N.s(f).
Kudłaty
Lub nawet tylko õs xwna 5 bajtów.
Shaggy
@Shaggy Nie mogę uwierzyć, że nikt nie wspominał o tym 5-bajtowym rozwiązaniu do tej pory ... będzie się edytować. Jeśli chodzi o ten 6-bajtowy, jeśli zostałby dodany po opublikowaniu tego wyzwania, myślę, że nie byłby konkurencyjny.
Justin Mariner,
@JustinMariner, ja też nie mogę! : D Chociaż wstydem jest rzucić tę z2sztuczkę; to był cholernie geniusz. Pamiętaj, że niekonkurowanie nie jest już rzeczą .
Shaggy
3

C ++, 146 bajtów

#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
źródło
Dobra robota! Możesz oszczędzić trochę bajtów, usuwając nagłówek i wstawiając „using namespace std” (sprawdź tutaj tio.run/#cpp-gcc ). Myślę też, że możesz zastąpić „auto t” tylko „t” (?)
koita_pisw_sou
Tak, koita_pisw_sou ma rację co do pierwszej części. Ale potrzebujesz auto.
Zacharý
@koita_pisw_sou Czy masz na myśli, że mogę wykluczyć dyrektywę nagłówka z liczby bajtów? To samo dla przestrzeni nazw? autopotrzebne jest słowo kluczowe
HatsuPointerKun
Tak, sprawdź link, który wysłałem
koita_pisw_sou
(Ups, nie jestem pewien co do usunięcia nagłówka!) Ale miałem na myśli using namespace std;zapisywanie bajtów.
Zacharý
3

Łuska , 7 6 3 bajtów

ṁ↔ḣ

Wypróbuj online!

Niegolfowane / Wyjaśnienie

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

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

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

Wypróbuj online!

Xcali
źródło
26 bajtów: map$r+=reverse,1..<>;say$r.
Denis Ibaev
-p
Zrobiłem
2

RProgN 2 , 8 bajtów

{Ø.in}S+

Wyjaśnił

{Ø.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.

Wypróbuj online!

ATaco
źródło
2

Neim , 4 bajty

Δ𝐫)𝐬

Wypróbuj online!

Wyjaśnienie

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 
kosmiczne śmieci
źródło
2
Alternatywne rozwiązanie: 𝐈Ψ𝐫𝐬(utwórz zakres obejmujący, odwróć każdy element, suma)
Okx
@Okx nie wiedział, że Ψtoken istnieje! na pewno skorzystałbym z tego z perspektywy czasu. naprawdę fajnie
śmieci kosmiczne
2

C (gcc) , 71 bajtów

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;}

Wypróbuj online!

Giacomo Garabello
źródło
Czekaj, co? Jak f()zwraca wynik bez żadnego returnoświadczenia? Czy e=ainstrukcja manipuluje rejestrami w taki sposób, że wynik jest przechowywany w tym samym rejestrze, który jest używany przez zwracane wartości?
scottinet,