Addition der Ziffern und der umgekehrten Ziffern


26

Bei einer Zahl> 0 wird die Summe mit allen Ziffern (1 .. n) verkettet und umgekehrt ausgegeben und addiert. Zum Beispiel mit n = 6:

Die Zahlen 1 bis 6 verkettet:

123456

Rückgängig gemacht:

654321

Wenn Sie diese addieren, erhalten Sie: 777777. Ein weiteres Beispiel ist n = 11:

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

und

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

Addieren Sie diese Werte, erhalten Sie 2345555545332. Dies ist auch als A078262 bekannt .

Kürzester Code gewinnt!



Gibt es eine Bindung an noder müssen wir beliebig große ganze Zahlen unterstützen?
LegionMammal978

Ich denke, der Standard ist "begrenzt durch max(256,yourlanguagesdefaultintegertypelimit)". Aber es sollte angegeben werden.
CalculatorFeline

@ LegionMammal978 So hoch wie Ihre Sprache unterstützt.
Lamaro

Wichtiger Testfall:, 10der geben sollte 23333333231.
Adnan

Antworten:


9

05AB1E, 7 Bytes

LDRJsJ+

Probieren Sie es online aus.

Erläuterung

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)

Ich bin sehr verwirrt über die Designauswahl, die dazu +führt, dass Listen eine verschachtelte Addition ausführen, während Zeichenfolgen in Ints konvertiert und dann hinzugefügt werden. Aber hier hat es wohl geklappt! : P
FryAmTheEggman

@FryAmTheEggman Ich werde jedoch verschachtelte Addition entfernen. Es war noch nie nützlich, seitdem ich es implementiert habe ...
Adnan

3
Meine Güte, ich verlasse PPCG für zwei Stunden und du benennst dich in Aqua Tart um, während ich weg bin ... Oh, das Leben eines PPCG-Benutzers.
ETHproductions

6

Gelee, 9 Bytes

R,U$DF€ḌS

Live-Codierung 


2
Bin ich es oder sehe ich, dass dieser Code heimlich U $ D stiehlt?
Gcampbell

5

CJam, 15 bis 14 Bytes

Vielen Dank an Martin für das Rasieren eines Bytes!

ri,:)_W%si\si+

Probieren Sie es online!


1 Byte weniger, wenn Sie die Zeichenfolge anstelle des numerischen Arrays umdrehen:ri,:)s_W%i\i+
Luis Mendo

Entschuldigung, ich denke, meine Version funktioniert nicht für10
Luis Mendo

1
Dieser Code ist insgeheim glücklich. :)
Cyoce

4

Pyth, 12 10 Bytes

ssMjLk_BSQ

Danke an @FryAmTheEggman für 2 Bytes!

Qist der Eingang, Smacht es zu [1, 2, ..., input()], _Bes gabelt über _(Rückwärts) zu erstellen [rng, rev(rng)], jLkes bildet über joindurch k(die die „leere Zeichenfolge“ Variable ist), sMordnet intüber diese resultierende Array, und sberechnet schließlich die Summe.


4

JavaScript (ES6), 70 67 64 Byte

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

Korrigiert, um die Anforderungen zu erfüllen, da alter Code unter Missverständnissen der Eingabe erstellt wurde.


@TimmyD Eine Erklärung hinzugefügt.
Mwr247

@TimmyD OH! > _ <Mein Missverständnis der Herausforderung ist, wie ... Ja, ich muss das beheben.
Mwr247

@TimmyD Ich habe lange genug gebraucht, um wieder online zu gehen. Es ist jetzt behoben, und danke, dass Sie es verstanden haben.
Mwr247

Wie für eine andere Antwort angemerkt, funktioniert dies nur, wenn der Parameter a zwischen 1 und 12 liegt, das ist wirklich zu wenig
edc65

@ edc65 Per OP's Kommentar ist das groß genug.
Mwr247,

3

Python 3, 74

6 Bytes gespart dank DSM.

Nichts zu aufregendes, schließen Sie sich den Bereichen an, konvertieren Sie sie in Ints und fügen Sie sie hinzu.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))

3

Retina , 71

Weil es offensichtlich das falsche Werkzeug für den Job ist.

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

Probieren Sie es online aus.

Funktioniert für Eingaben bis 6, aber der Online-Interpreter läuft danach ab.


1
Sie können es durch Entfernen der letzten Zeile auf 74 verkürzen und Wechsel (c)+zu c.
Daavko

@daavko ja natürlich danke!
Digital Trauma

Außerdem $&$*c-> $*cund \d+:?-> \d+und es ist 70. Und aus irgendeinem Grund funktioniert es weiter ...
Daavko


3

JavaScript (ES6), 67 66 Bytes

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

Ja, das ist ein Leerzeichen. Pfui. Zumindest @Downgoat hat mir geholfen, ein Byte zu speichern.


1
Sie können das erste entfernen +und das + +-> machen - -, um ein Byte zu speichern
Downgoat

n => (a = [... Array (n)]. map (_ => n -)). join- -a.reverse().join
edc65

Hinweis: Bei Verwendung von einfacher Js-Arithmetik ist dies auf die Werte 1 ... 12
edc65

2

Im Ernst, 12 Bytes

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

Probieren Sie es online!

Erläuterung:

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

Konvertiert die Eingabe mit .., dann in Bereiche-join fügt sie dann zusammen und addiert sie auf.

Funktioniert für Eingaben von bis zu 138, während 139gibt Infinity, 140und darüber wird ein äußerst ausführlicher Casting-Fehler angezeigt:

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

Dies fügt Ziffer für Ziffer hinzu, sodass Zahlen verarbeitet werden können, die deutlich über der 53-Bit-Genauigkeit von Javascript liegen

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

Prüfung

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>


Scheint nicht für 9 zu funktionieren. Warum nicht auch cmit den anderen Variablen initialisieren ?
Neil

Du hast meine Zustimmung.
Neil


2

MATL , 13 Bytes

:tP2:"wVXvU]+

EDIT (20. MAI 2016) Der Code in den Link verwendet Xzstatt Xv, in der Sprache , auf die jüngsten Veränderungen zurückzuführen ist .

Probieren Sie es 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

Funktioniert nicht für 11 oder 10. (Hinweis: Bereich umkehren, bevor in Zeichenfolge konvertiert wird.)
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПӍѲꝆΛҐӍΛ Danke! Korrigiert
Luis Mendo

Groß! Habe eine Gegenstimme.
Mama Fun Roll

2

05AB1E , 5 Bytes

LJDR+

Erläuterung:

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

Probieren Sie es online!



1

Perl 6 , 25 Bytes

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

Verwendung:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433

Ich denke, Sie können mit $nanstelle von$^n
andlrc

@ dev-null Nicht, wenn ich möchte, dass es eine Eingabe für den Block ist. das -> $n {ist ein anderes zu $^n.
Brad Gilbert b2gills

1

R 34 60 64 Bytes

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

Angenommen, das pryrPaket ist installiert. Dies ist feine Abkürzung zum Erstellen von Funktionen.

Edit fügte 26 Bytes hinzu, gab aber eine Funktion zurück, die funktioniert und nicht völlig falsch ist.

Edit fügte weitere 4 Bytes hinzu, um Fälle über n = 10 zu behandeln, in denen strtoi (zuvor verwendet) zurückgegeben wurde 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

Dieses Programm verwendet nein Befehlszeilenargument.

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

Ich habe angenommen, dass die Ausgabe einer Zahl mit einem Dezimalteil von 0 in Ordnung ist (in der Form, 777777.0weil dies die Standardmethode für die Ausgabe einer Zahl in Lua ist (es gibt keinen Unterschied zwischen Integer und Float).


Es ist nicht die Zeichenfolge selbst, die umgekehrt ist, sondern die Ziffern. Ihr Code schlägt am n> = 10 fehl.
Moop

@Moop Korrigiert zum Preis von 1 Byte ^^ '. Danke für den Kommentar ^^ '
Katenkyo

Sie können 3 weitere sparen, indem Sie ... anstelle von arg [1] an der Rückseite concat für r arbeiten. Daran habe ich in meiner Antwort nicht gedacht. +1
Moop

@Moop Ich habe deinen Beitrag gesehen, gute Verwendung, ich wusste nicht einmal, dass du ihn so verwenden könntest ...! Ich werde es für den Moment so belassen, weil ich nichts anderes als den Online - Compiler verwenden kann und er damit nicht umgehen kann (ich möchte es testen und ein wenig damit spielen, bevor ich es in a stecke Antwort :))
Katenkyo

1

Perl 5, 37 Bytes

25 Bytes plus 1 für -pund 11 für-MList::Gen

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

Vorherige Lösung, 40 Bytes: 39 plus eine für -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"

1

Perl, 36 Bytes

Beinhaltet +1 für -p

Führen Sie mit auf STDIN

perl -p reverse.pl <<< 6

reverse.pl

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

1

Dyalog APL , 17 Bytes

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

Eingabeaufforderung
'Aufzählen bis Eingabe
x←Speicherliste in x
umkehren x
x()Umgekehrte Liste mit Originalliste voranstellen
⍕¨¨Jede Nummer jeder Liste in
∊¨Zeichenkette
⍎¨umwandeln Jede Liste von Zeichenketten in einzelne Zeichenketten umwandeln Jede Zeichenkette in eine
+/Zahlensumme aus den beiden Zahlen .




0

𝔼𝕊𝕄𝕚𝕟 12 Zeichen / 15 Byte

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

Try it here (Firefox only).

Meh.

Erläuterung

Nimmt eine Strecke [1,input], schließt sich ihr an; Nimmt denselben Bereich, kehrt ihn um und schließt sich ihm an. Die Summe beider Bereiche ist das Ergebnis.


0

Ruby, 40 Zeichen

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

Probelauf:

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

126 Bytes

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

Könnte möglicherweise weiter golfen werden. Nicht wirklich sicher.


0

Groovy, 42 39 Zeichen

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

Probelauf:

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

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.