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!



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)

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 


2
Czy to ja, czy widzę, że ten kod potajemnie kradnie część U $ D?
gcampbell


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


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.


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

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.


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.


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.


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

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


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>


Wydaje się, że nie działa na 9. Ponadto, dlaczego nie zainicjować cz innymi zmiennymi?
Neil

Masz moje poparcie.
Neil


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

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!



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

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


1

Lua, 57 lat

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

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


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

1

Perl, 36 bajtów

Obejmuje +1 dla -p

Uruchom z STDIN

perl -p reverse.pl <<< 6

reverse.pl

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

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 .



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)


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.


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.