Drucken Sie unter Angabe einer Nummer die „Gesamtsumme“ aus.


20

Geben Sie eine Zahl als Eingabe ein und drucken Sie die Gesamtsumme aus

Was ist eine kollektive Summe?

Betrachten Sie die Zahl 13214, die Eingabe

Durchlaufen Sie jede der Ziffern ab der linken Seite, um die Gesamtsumme zu erhalten.

1 bedeutet, schauen Sie sich die erste Ziffer an und addieren Sie sie zur Summe, Summe = 1

3 bedeutet, schauen Sie sich die "ersten 3 Ziffern" an und addieren Sie sie zur Summe, Summe = 1 + 132

2 bedeutet, schauen Sie sich die "ersten 2 Ziffern" an und addieren Sie sie zur Summe, Summe = 1 + 132 + 13

1 Das heißt, Sie sehen sich die erste Ziffer an und addieren sie zur Summe, Summe = 1 + 132 + 13 + 1

4 bedeutet, schauen Sie sich die "ersten 4 Ziffern" an und addieren Sie sie zur Summe, Summe = 1 + 132 + 13 + 1 + 1321

Gesamtsumme = 1468und dies ist Ihre Ausgabe


Spezialfälle:

Wenn wir auf eine stoßen 0, halten wir die Summe natürlich gleich

The number 1301 would have a sum = 1 + 130 + 1 = 132

Wenn wir auf eine Zahl stoßen, die größer ist als die Länge der Eingabe, addieren wir alles

The number 251 would have a sum = 25 + 251 + 2 = 278

Testfälle:

collectiveSum(0) = 0

collectiveSum(2) = 2

collectiveSum(2315) = 23 + 231 + 2 + 2315 = 2571

Die kürzeste Anzahl von Bytes gewinnt. Viel Spaß beim Golfen!


6
Wie oft stellt sich bei solchen Aufgaben die Frage: Dürfen wir eine Liste der Ziffern als Eingabe akzeptieren?
Jonathan Allan

7
Dem 2315Testfall fehlt der + 2aus 1und sollte ergeben 2571.
Jonathan Allan

Müssen wir uns mit Eingaben beschäftigen, die mit 0 beginnen, abgesehen von 0? Wie soll das Programm mit diesen Eingaben umgehen?
fənɛtɪk

Es sieht so aus, als ob der letzte Testfall falsch ist. sollte sein 2571.
Shaggy

Ich verstehe nicht, warum die Eingabe eher eine Zahl als eine Liste von ganzen Zahlen sein sollte. Es scheint eine unnötig umständliche Form der Eingabe zu sein.
Weizen-Assistent

Antworten:


7

05AB1E ,  4  3 Bytes

-1 dank Kevin Cruijssen (Verwendung von a zu vermeiden })

€£O

Probieren Sie es online!

Wie?

€£O - implicit input   e.g. 2315
€   - map with:
 £  -   head to             23, 231, 2, 2315
  O - sum                   2571

Schlage mich um 13 Sekunden xD
Magic Octopus Urn

Ich bin froh, dass ich darauf gewartet habe, den Link zu den Bytes hinzuzufügen: p
Jonathan Allan

ε£}kann sein €£, ein Byte zu speichern.
Kevin Cruijssen

@ KevinCruijssen War das auch eine Option, als ich das erstellt habe?
Jonathan Allan

@ JonathanAllan Bin mir nicht ganz sicher, aber ich denke es war ja schon. Adnan begann im Sommer 2018 (der im August veröffentlicht wurde) mit dem Schreiben des Elixir- Rewrites und war bereits eine Weile in der älteren Version von 05AB1E davor dabei. Es war bereits da, als ich meine allererste 05AB1E-Antwort im April 2018 veröffentlichte. Es ist also möglich, dass es kurz nach dem Posten dieser Antwort hinzugefügt wurde, aber ich bin mir nicht sicher.
Kevin Cruijssen

5

Python 2 , 43 Bytes

lambda n:sum(int('0'+n[:int(x)])for x in n)

Probieren Sie es online!


Leider scheint dies eine ValueErrorfor-Eingabe von 1301oder eine Eingabe mit einer Null als einer ihrer Ziffern auszulösen.
Mathmandan

@mathmandan Sollte jetzt behoben werden?
Nur ASCII

Die intFunktion kann eine Ganzzahl akzeptieren, wobei das '0'Zeichenfolgenliteral durch 0ein Byte ersetzt werden muss.
MooseOnTheRocks

@MooseOnTheRocks Hat auf eine Art und Weise funktioniert, die mir weniger hackig vorkommt (?), Es sei denn, ich bin dumm und habe (normalerweise) etwas durcheinander gebracht
ASCII

4

Python 2, 72 Bytes

Erste Einreichung! Danke an @DestructibleLemon für die Hilfe!

import sys;d=sys.argv[1];s=0;for e in d:s+=int(d[:int(e)]);print str(s)

Nur damit Sie wissen, scheint das Downvote vom Community-Benutzer automatisch vergeben worden zu sein, als ich den Header Ihres Posts bearbeitet habe. Es tut uns leid. Es ist eine nervige, unsinnige Funktion . Obwohl ich nicht weiß, warum es diesmal geschah, da dies, soweit ich das beurteilen kann, nicht als minderwertig eingestuft wurde.
Steadybox

Willkommen bei PPCG! Schöne erste Einreichung! Und ja, wie Steadybox sagte, wurde das Downvote automatisch ohne besonderen Grund platziert. Dein Post hat ein paar Upvotes bekommen, also sollte die automatische Downvote beim nächsten Cron Job entfernt werden :)
HyperNeutrino

3

Haskell, 43 37 Bytes

f l=sum[read$'0':take(read[d])l|d<-l]

Probieren Sie es online!

Die eingegebene Nummer wird als Zeichenfolge verwendet.

   [        |d<-l]      -- for every digit d in the input string
        read[d]         -- convert to a number
      take     l        -- and take that many digits from l
     0:                 -- prepend a 0 (to handle 0s)
   read                 -- convert to a number
sum                     -- sum all numbers

3

Ruby , 36 Bytes

->n{n.sum{|x|n[0,x.to_i].join.to_i}}

Probieren Sie es online!


#sumist nicht auf fixnums definiert, also nehme ich an, dass Sie neine Zeichenfolge sein möchten . Jedoch String#sumberechnet ein not a particularly good checksumund ignoriert den Block geben Sie es. Wenn Sie meinten n.chars.sum{, Enumerable#sumist es nicht in der ruby ​​stdlib, es ist eine Erweiterung, die durch Schienen bereitgestellt wird. Bitte testen Sie Ihre Lösungen, bevor Sie sie veröffentlichen.
Shelvacu

@Shelvacu Ja, ich nehme allerdings Eingaben als Array ... siehe die bereitgestellte Fußzeile. Plus Enumerable#sumist in Ruby 2.4 und TIO verwendet 2.4
ASCII

31 Bytes, wenn Sie ein Array von Ziffern als Eingabe nehmen
Asone Tuhid

@AsoneTuhid Ich glaube nicht, dass dies eine gültige Form der Eingabe ist. Wenn Sie andere Beweise finden, erläutern Sie dies bitte
ASCII

Diese Seite scheint das Problem nicht zu lösen, aber ich sehe keine Liste von Ganzzahlen, die sich zu stark von einer Liste von Zeichen unterscheidet (was Ihre Antwort als Eingabe
akzeptiert

3

JavaScript, 42 bis 40 Bytes

Vielen Dank an @Shaggy für das Golfen mit 2 Bytes

f=
x=>[...x].map(y=>a+=+x.slice(0,y),a=0)|a

console.log(f("2315"))
console.log(f("0100"))
console.log(f("2"))
console.log(f("01025"))

Erhält Eingaben als Zeichenfolge und gibt eine Ganzzahl zurück. Wie derzeit geschrieben, hinterlässt dieser Code führende Nullen in allen Ganzzahlen.


40 Bytes:x=>[...x].map(y=>a+=+x.slice(0,y),a=0)|a
Shaggy

3

R, 57 Bytes

hat dank @Vlo noch eins gespart

sum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))

was: 4 Bytes gespart dank @Robert Hackens Vorschlag.

i=scan(,"");sum(strtoi(substring(i,1,el(strsplit(i,"")))))

Ein einfacher String-Ansatz.


1
Sie können 4 Bytes einsparen, indem Sie unlistdurch ersetzen el.
Robert Hacken

1
Speichern Sie 1 mit Inline-Zuordnungsum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

Kohle , 10 Bytes

IΣIEθ✂θ⁰Iι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

   Eθ       Map over input string
        Iι  Cast current character to integer
     ✂θ⁰    Slice input string to that length
 ΣI         Cast slices to integer and take the sum
I           Cast result to string and implicitly print

Haha, ich hatte genau das Gleiche
ASCII

2

Oktave , 56 Bytes

@(n)sum(str2num(['' 32+char(n.*(find(n)<=(n'-48))-32)]))

Anonyme Funktion, die eine Zeichenfolge als Eingabeargument und eine Zahl als Ausgabe zurückgibt.

Probieren Sie es online!

Die kürzere Version

@(n)sum(str2num(['' char(n.*(find(n)<=(n'-48)))]))

arbeitet in Matlab, weil char(0)es als Leerzeichen behandelt wird.


2

Gelee ,  7  5 Bytes

-2 dank Dennis (Kopf vektorisiert>. <)

4 wenn wir Ziffernlisten nehmen dürfen *

Dḣ`ḌS

Probieren Sie es online!

* ḣ`ḌS

Wie?

Dḣ`ḌS - Link: integer, n   e.g. 2315
D     - to decimal list         [2,3,1,5]
  `   - repeat left as right    [2,3,1,5]
 ḣ    - head                    [2,3], [2,3,1], [2], [2,3,1,5]
   Ḍ  - from decimal lists      23, 231, 2, 2315
    S - sum                     2571

2

Perl 6 , 27 Bytes

{sum $_ X[&substr]^«.comb}

Probier es aus

Erweitert:

{  # bare block lambda with implicit param 「$_」

  sum

    $_           # the input

      X[&substr] # crossed using &substr sub as if it was an infix operator

    \          # upto 「^」 for each of the following 「«」 (creates Range objects)
    .comb        # the input split into digits (implicit method call on 「$_」
}

2

C (gcc) , 77 75 Bytes

Muss mit dem -lmSchalter kompiliert werden oder GCC erkennt die mathematischen Funktionen nicht.

r,q,i;f(n){for(r=0,i=n;i;i/=10)q=log10(n)+1-i%10,r+=n/pow(10,q>0?q:0);n=r;}

Probieren Sie es online!


2

dc , 55 Bytes

[0*]sq?dsfZ1-se[lfddZrIle^/I%-d0>qIr^/+led1-se0<a]dsaxp

Keine Zeichenfolgen oder Arrays! In der Tat werden die erforderlichen Ziffern nur durch mathematische Manipulation erfasst.

Probieren Sie es online!


1

Schale , 6 Bytes

ṁd´M↑d

Probieren Sie es online!

Erläuterung

ṁd´M↑d  -- example input: 1301
     d  -- decimal digits: [1,3,0,1]
  ´M    -- map over it using it as argument (example with 3):
    ↑   -- | take: [1,3,0]
        -- : [[1],[1,3,0],[],[1]]
ṁ       -- map and then sum the result (example on [1,3,0]):
 d      -- | as decimal: 130
        -- : 1 + 130 + 0 + 1 = 132

1

J , 18 Bytes

[:+/"."0".@{."0 1]

Erläuterung

Nimmt einen String als Eingabe

           {."0 1  - take
    "."0           - current char as int items
                 ] - from the argument
         ".        - and convert them to an integer  
[:+/               - add them up

Probieren Sie es online!


1

Japt, 5 Bytes

Übernimmt die Eingabe als Zeichenfolge.

¬x@¯X

Versuch es


Erläuterung

          :Implicit input of integer string U
¬         :Split to an array of characters/digits
  @       :Pass each X through a function
   ¯X     :Slice U from the first to the Xth character
 x        :Reduce by addition

O_o Entweder ist Japt richtig golfen oder ich mache eigentlich falsch
ASCII

2
@ Nur ASCII: Japt ist viel "golfiger" als die meisten Leute glauben; Wir gewinnen unseren fairen Anteil an Herausforderungen und schlagen sogar Charcoal und SOGL bei einer kürzlichen Herausforderung im Bereich Asci -Art .
Shaggy

@ Shaggy Sicher, aber ich wusste nicht, dass es Jelly / Actually / 05AB1E Level Golf ist
ASCII

@ ASCII-only: Oh, ja, es ist definitiv eine gute Sache für sie :) Wenn Sie interessiert sind, schauen Sie sich unsere Sprache des Monats nom an. oder schau mal in den Japt Chatroom und wir geben dir eine Tour.
Shaggy

1

Stax , 6 Bytes

ç╫&º±å

Führen Sie es online aus und debuggen Sie es

Dies ist die entsprechende ASCII-Darstellung desselben Programms.

EZFy(e+

E        get array of digits
 Z       push 0 under array of digits
  F      for each digit, run the rest of the program
   y     input as a string
    (    get start of string for specified number of characters
     e   evaluate substring as integer
      +  add

0

Eigentlich 10 Bytes

╝ß⌠≈╛H≈⌡MΣ

Probieren Sie es online!

Erläuterung

╝          Push input to register 1
 ß         Push n-th input (0 by default)
        M  Map
  ⌠    ⌡   Function
   ≈       Cast current character of input to int
    ╛      Get value of register 1 (input)
     H     Push input[:current character]
      ≈    Cast to int
         Σ Sum

0

JavaScript, 43 Bytes

Es ist gut nach 3 Uhr morgens, warum spiele ich noch Golf ?!

Übernimmt die Eingabe als Zeichenfolge.

s=>(g=x=>s[x]?+s.slice(0,s[x])+g(++x):0)(0)

Probieren Sie es online aus


0

Perl 5, 26 Bytes

Enthält +1fürp

perl -pE 's%.%/.{0,$&}/;$\+=$&%eg}{' <<< 2315; echo

0

K4 , 22 Bytes

Lösung:

+/10/:'(x&#x)#\:x:10\:

Beispiele:

q)k)+/10/:'(x&#x)#\:x:10\:13214
1468
q)k)+/10/:'(x&#x)#\:x:10\:1301
132
q)k)+/10/:'(x&#x)#\:x:10\:251
278
q)k)+/10/:'(x&#x)#\:x:10\:2315
2571

Erläuterung:

Brechen Sie in die Basis 10 ein, nehmen Sie von jeder Zahl min und daraus die Länge der Liste. Rechne zurück und fasse zusammen.

+/10/:'(x&#x)#\:x:10\: / the solution
                  10\: / to base 10, 123 => 1 2 3
                x:     / save as x
             #\:       / take (#) each left
       (    )          / the left
          #x           / count (#) length of x
        x&             / min of x and the length
  10/:'                / from base 10 each
+/                     / sum up the results

0

Java 8, 92 Bytes

n->n.chars().map(c->(c-=48)>0?new Integer(n.substring(0,c<n.length()?c:n.length())):0).sum()

Erläuterung:

Probieren Sie es online aus.

n->                                  // Method with String parameter and int return-type
  n.chars()                          //  Loop over the characters
   .map(c->(c-=48)                   //   Convert character to digit
        >0?                          //    And if it's larger than 0
         new Integer(n.substring(0,  //     Take the first `x` digits, where `x` is:
          c<n.length()?              //      If the digit higher than the total a.o. digits
           c                         //       Take the first `c` digits
          :                          //      Else:
           n.length()))              //       Take all digits
         :                           //    Else:
          0)                         //     Take 0
   .sum()                            //   And sum everything

0

REXX 118 Bytes

pull n                           
l=length(n)                      
a=0                              
j=1                              
do while (j<=l)                  
if substr(n,j,1)==0 then m=0;    
else m=substr(n,1,substr(n,j,1));
a=a+m                            
j=j+1                            
end                              
say a                                 

Versuchen Sie es hier.
Geben Sie auf der Registerkarte STDIN einen Eingabewert ein.



0

Gelee , 6 Bytes

DµḣµVS

Probieren Sie es online!

Holen Sie sich die DZiffern der Eingabe, dann holen Sie sich die ersten [jede Ziffer] Elemente der Eingabe ( ead), dann Valle Summen, um es wieder eine Zahl zu machen und Sum.

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.