Dodanie cyfr i cyfr odwróconych

26

Biorąc pod uwagę liczbę> 0, wypisz sumę ze wszystkimi cyframi (1 .. n) połączonymi i odwróconymi i dodaj je. Na przykład n = 6:

Łączone liczby od 1 do 6:

123456

Wywrócony:

654321

Zsumowanie ich spowoduje: 777777. Innym przykładem jest n = 11:

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

i

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

Dodanie ich razem spowoduje 2345555545332. Jest to również znane jako A078262 .

Najkrótszy kod wygrywa!

Lamaro
źródło
Czy istnieje ograniczenie n, czy też musimy wspierać dowolnie duże liczby całkowite?
LegionMammal978
Myślę, że wartość domyślna jest „ograniczona przez max(256,yourlanguagesdefaultintegertypelimit)”. Ale należy to określić.
CalculatorFeline
@ LegionMammal978 Tak wysoka, jak obsługuje Twój język.
Lamaro
Ważny przypadek testowy: 10który powinien dać 23333333231.
Adnan

Odpowiedzi:

9

05AB1E, 7 bajtów

LDRJsJ+

Wypróbuj online.

Wyjaśnienie

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)
spaghetto
źródło
Czuję się bardzo zdezorientowany wyborem projektu, który prowadzi do +zagnieżdżania na listach, podczas gdy dla ciągów konwertuje na ints, a następnie dodaje. Ale chyba się tu udało! : P
FryAmTheEggman
@FryAmTheEggman Mam zamiar usunąć zagnieżdżony dodatek. Nigdy nie był użyteczny od momentu jego wdrożenia ...
Adnan
3
Ojej, zostawiam PPCG na dwie godziny, a ty nie zmieniam nazwy Aqua Tart, kiedy mnie nie ma ... Och, życie użytkownika PPCG.
ETHprodukcje
6

Galaretka, 9 bajtów

R,U$DF€ḌS

kodowanie na żywo 

Lynn
źródło
2
Czy to ja, czy widzę, że ten kod potajemnie kradnie część U $ D?
gcampbell
5

CJam, 15 14 bajtów

Dzięki Martinowi za golenie bajtu!

ri,:)_W%si\si+

Wypróbuj online!

GamrCorps
źródło
1 bajt mniej, jeśli odwrócisz ciąg zamiast tablicy numerycznej:ri,:)s_W%i\i+
Luis Mendo
Niestety, myślę, że moja wersja nie działa10
Luis Mendo
1
Ten kod jest potajemnie szczęśliwy. :)
Cyoce
4

Pyth, 12 10 bajtów

ssMjLk_BSQ

Dzięki @FryAmTheEggman za 2 bajty!

Qjest wprowadzane, Szamienia go [1, 2, ..., input()], _Brozwidla ona ponad _(odwróconej), aby utworzyć [rng, rev(rng)], jLkmapuje się joinprzez k(jest to zmienna „pusta”), sModwzorowuje intsię ten wynikający tablicy i sostatecznie oblicza się sumę.

Klamka
źródło
4

JavaScript (ES6), 70 67 64 bajtów

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

Naprawiono, aby spełnić wymagania, ponieważ stary kod powstał w wyniku niezrozumienia danych wejściowych.

Mwr247
źródło
@TimmyD Dodano wyjaśnienie.
Mwr247
@TimmyD OH! > _ <Moje niezrozumienie wyzwania polega na tym, że ... Tak, będę musiał to naprawić.
Mwr247
@ TimmyD Zajęło mi to wystarczająco dużo czasu, aby wrócić do trybu online. Zostało to naprawione teraz i dzięki za złapanie tego.
Mwr247
Jak wspomniano w przypadku innej odpowiedzi, działa to tylko wtedy, gdy parametr a ma wartość między 1 a 12, to naprawdę za mało
edc65
@ edc65 Według komentarza OP , to wystarczająco duże.
Mwr247
3

Python 3, 74

Zaoszczędź 6 bajtów dzięki DSM.

Nic ekscytującego, dołącz do zakresów, a następnie przekonwertuj na ints i dodaj je.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))
Morgan Thrapp
źródło
3

Retina , 71

Ponieważ jest to ewidentnie złe narzędzie do pracy.

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

Wypróbuj online.

Działa dla danych wejściowych do 6, ale potem upłynie limit czasu dla tłumacza online.

Cyfrowa trauma
źródło
1
Możesz skrócić go do 74, usuwając ostatni wiersz i zmieniając (c)+na c.
daavko
@daavko tak, oczywiście, dziękuję!
Cyfrowa trauma
Ponadto $&$*c-> $*ci \d+:?-> \d+i jest 70. I z jakiegoś powodu nadal działa ...
daavko
3

Jolf, 9 bajtów

Wypróbuj tutaj! Wymień się \x10.

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

I może być w stanie golfa go poruszając się casting typu.

Conor O'Brien
źródło
Pokonałeś pyth i klamkę!
Cyoce
@Cyoce, więc zrobiłem O_O
Conor O'Brien
3

JavaScript (ES6), 67 66 bajtów

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

Tak, to przestrzeń. Ugh. Przynajmniej @Downgoat pomógł mi uratować bajt.

Neil
źródło
1
Możesz usunąć pierwszy +i zrobić + +-> - -aby zapisać bajt
Downgoat
n => (a = [... Array (n)]. map (_ => n -)). join- -a.reverse().join
edc65
Uwaga: przy użyciu prostej arytmetyki js jest to ograniczone do wartości 1 .. 12
edc65
2

Poważnie, 12 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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

PowerShell, 35 bajtów

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

Konwertuje dane wejściowe na zakresy .., następnie -joinłączy je razem i dodaje je.

Będzie działał dla liczb wejściowych do 138, dopóki 139da Infinity, 140a powyżej wyeliminuje niesamowicie pełny błąd rzutowania:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
AdmBorkBork
źródło
2

Pyth - 8 bajtów

siRT_BSQ

Wypróbuj online tutaj .

Maltysen
źródło
2
Myślę, że to nie działa 10lub11
Luis Mendo
2

JavaScript (ES6), 99

Dodaje cyfrę po cyfrze, dzięki czemu może obsługiwać liczby znacznie powyżej 53 bitów precyzji 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")

Test

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
źródło
Wydaje się, że nie działa na 9. Ponadto, dlaczego nie zainicjować cz innymi zmiennymi?
Neil
Masz moje poparcie.
Neil
2

Brachylog , 24 bajty

:1fLrcC,Lc+C=.,{,.:1re?}
Fatalizować
źródło
2

MATL , 13 bajtów

:tP2:"wVXvU]+

EDYCJA (20 maja 2016 r.) Kod w linku używa Xzzamiast z Xvpowodu ostatnich zmian w języku.

Wypróbuj 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
źródło
Nie działa dla 11 lub 10. (Wskazówka: odwróć zakres przed konwersją na ciąg.)
Mama Fun Roll
@ ҒЦꝆПҒЦꝆ Dzięki! Poprawiono
Luis Mendo,
Świetny! Zyskaj głos.
Mama Fun Roll
2

05AB1E , 5 bajtów

LJDR+

Wyjaśnienie:

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

Wypróbuj online!

Okx
źródło
1

Bash + coreutils, 39

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

Lub:

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

Ideone.

Cyfrowa trauma
źródło
1

Perl 6 , 25 bajtów

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

Stosowanie:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433
Brad Gilbert b2gills
źródło
Myślę, że możesz to zrobić $nzamiast$^n
andlrc
@ dev-null Nie, jeśli chcę, aby był to wkład do bloku. -> $n {jest inny jeden do $^n.
Brad Gilbert b2gills
1

R, 34 60 64 bajtów

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

Zakłada, że pryrpakiet jest zainstalowany. daje fto skrót do tworzenia funkcji.

Edytuj dodane 26 bajtów, ale zwraca funkcję, która działa, a nie coś zupełnie nie tak.

Edycja dodała kolejne 4 bajty do obsługi przypadków powyżej n = 10, do których zwracał się strtoi (poprzednio używany) NA

mnel
źródło
1

Lua, 57 lat

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b
Moop
źródło
1

Lua, 53 bajtów

Ten program przyjmuje njako argument wiersza polecenia.

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

Założyłem, że wypisywanie liczby z dziesiętną częścią 0 było w porządku (w postaci, 777777.0ponieważ jest to domyślny sposób wypisywania liczby w lua (nie ma różnicy między liczbą całkowitą a liczbą zmiennoprzecinkową)

Katenkyo
źródło
Odwrócony nie jest sam ciąg znaków, ale cyfry. Twój kod kończy się niepowodzeniem w dniu n> = 10.
Moop
@Moop Poprawione w cenie 1 bajta ^^ '. Dzięki za komentarz ^^ '
Katenkyo
Możesz zaoszczędzić 3 więcej, używając ... zamiast arg [1] dobrej pracy na odwrotnej konkatrze dla r, nie pomyślałem o tym w mojej odpowiedzi. +1
Moop
@Moop Widziałem twój post, miłego korzystania z niego, nawet nie wiedziałem, że możesz tak używać ...! Na razie zachowam to w ten sposób, ponieważ nie mogę używać niczego innego niż kompilator online i nie mogę sobie z tym poradzić (chciałbym to przetestować i zagrać trochę przed włożeniem odpowiedź :))
Katenkyo
1

Perl 5, 37 bajtów

25 bajtów plus 1 dla -pi 11 dla-MList::Gen

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

Poprzednie rozwiązanie, 40 bajtów: 39, plus jeden dla -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"
msh210
źródło
1

Perl, 36 bajtów

Obejmuje +1 dla -p

Uruchom z STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_
Ton Hospel
źródło
1

Dyalog APL , 17 bajtów

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

monit o wejście
”wylicz, aż
x←lista zapisów wejściowych w x
odwrotność x
x()poprzednia odwrócona lista z oryginalną listą
⍕¨¨przekonwertuj każdą liczbę każdej listy na ciąg znaków
∊¨przekształć każdą listę ciągów znaków w ciągi znaków pojedynczych
⍎¨przekonwertuj każdy ciąg znaków na liczbę
+/sumując dwie liczby .

Adám
źródło
0

Mathematica, 64 bajty

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&
CalculatorFeline
źródło
0

Siatkówka, 80 bajtów (kodowanie ISO 8859-1)

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

We / Wy jest jednoznaczne z 'postacią liczącą. Teoretycznie obsługuje każdą liczbę całkowitą, którą na nią rzucisz, w praktyce ... tłumacz online odmawia przetworzenia czegoś większego niż 6 (jednoargumentowy '''''').

Wypróbuj online!
Wypróbuj online! (dziesiętne IO - 91 bajtów)

daavko
źródło
0

𝔼𝕊𝕄𝕚𝕟, 12 znaków / 15 bajtów

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

Try it here (Firefox only).

Meh

Wyjaśnienie

Przybiera zasięg [1,input], dołącza do niego; przyjmuje ten sam zakres, odwraca go, a następnie łączy; suma obu zakresów jest wynikiem.

Mama Fun Roll
źródło
0

Ruby, 40 znaków

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

Przykładowy przebieg:

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
człowiek w pracy
źródło
0

C #, 126 bajtów

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

Można ewentualnie zagrać w golfa dalej. Nie jestem do końca pewien.

LegionMammal978
źródło
0

Groovy, 42 39 znaków

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

Przykładowy przebieg:

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

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
człowiek w pracy
źródło