Dato un numero, stampa la sua "somma collettiva"


20

Dato un numero come input, stampare la sua somma collettiva

Cos'è una somma collettiva?

Considera il numero 13214, l'input

Ripercorrendo ciascuna delle cifre a partire da sinistra, saremo in grado di ottenere la sua somma collettiva.

1 significa guardare la prima cifra e aggiungerla alla somma, somma = 1

3 significa guardare le "prime 3 cifre" e aggiungerlo alla somma, somma = 1 + 132

2 significa guardare le "prime 2 cifre" e aggiungerlo alla somma, somma = 1 + 132 + 13

1 significa guardare la prima cifra e aggiungerla alla somma, somma = 1 + 132 + 13 + 1

4 significa guardare le "prime 4 cifre" e aggiungerlo alla somma, somma = 1 + 132 + 13 + 1 + 1321

Somma totale = 1468e questo è il tuo output


Casi speciali:

Se incontriamo un 0, allora chiaramente manteniamo la somma la stessa

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

Se incontriamo un numero maggiore della lunghezza dell'input, aggiungiamo tutto

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

Casi test:

collectiveSum(0) = 0

collectiveSum(2) = 2

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

Vince il minor numero di byte. Buon golf!


6
Come spesso è una domanda con questo tipo di attività: possiamo accettare un elenco di cifre come input?
Jonathan Allan,

7
Nel 2315caso di test manca il + 2da 1e dovrebbe risultare in 2571.
Jonathan Allan,

Ci aspettiamo di avere a che fare con input che iniziano con 0 a parte 0? Come dovrebbe il programma gestire questi input
f --n --tɪk

Sembra che l'ultimo caso di test sia sbagliato; dovrebbe essere 2571.
Shaggy,

Non vedo perché l'input debba essere un numero anziché un elenco di numeri interi. Sembra una forma di input inutilmente ingombrante.
Wheat Wizard

Risposte:


7

05AB1E ,  4  3 byte

-1 grazie a Kevin Cruijssen (uso di evitare a })

€£O

Provalo online!

Come?

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

Battimi di 13 secondi xD
Magic Octopus Urn

Sono contento di aver aspettato di aggiungere il link ai byte quindi: p
Jonathan Allan

ε£}può essere €£per salvare un byte.
Kevin Cruijssen,

@KevinCruijssen era anche un'opzione quando l'ho creata?
Jonathan Allan,

@JonathanAllan Non sono del tutto sicuro, ma penso che lo sia già stato. Adnan ha iniziato a scrivere la riscrittura degli elisir nell'estate del 2018 (che è stata rilasciata ad agosto), ed era già lì da parecchio tempo nella versione precedente di 05AB1E prima. Era già lì quando ho pubblicato la mia prima risposta 05AB1E ad aprile 2018. Quindi potrebbe essere possibile che sia stato aggiunto poco dopo aver pubblicato questa risposta, ma non sono sicuro.
Kevin Cruijssen,

5

Python 2 , 43 byte

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

Provalo online!


Sfortunatamente questo sembra aumentare un ValueErrorinput per 1301o qualsiasi input che ha uno zero come una delle sue cifre.
Mathmandan,

@mathmandan Dovrebbe essere corretto ora?
ASCII il

La intfunzione può accettare un numero intero, sostituendo la '0'stringa letterale con just 0dovrebbe radere via un byte.
MooseOnTheRocks il

@MooseOnTheRocks Lo ha fatto in un modo che mi sembra meno confuso (?), A meno che non sia stupido e incasinato qualcosa (di solito)
ASCII il

4

Python 2, 72 byte

Prima presentazione! Grazie a @DestructibleLemon per l'aiuto!

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

Proprio per questo sai, il downvote sembra essere stato dato automaticamente dall'utente della comunità quando ho modificato l'intestazione del tuo post. Scusa. È una caratteristica fastidiosa e senza senso . Anche se non so perché questa volta lo abbia fatto, perché per quanto ne so, questo non è stato segnalato come di bassa qualità.
Steadybox,

Benvenuti in PPCG! Bella prima presentazione! E sì, come ha detto Steadybox, il downvote è stato automaticamente inserito senza una buona ragione in particolare. Il tuo post ha ottenuto alcuni voti, quindi si spera che al prossimo cron job il downvote automatico dovrebbe essere rimosso :)
HyperNeutrino,

3

Haskell, 43 37 byte

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

Provalo online!

Il numero di input viene considerato come una stringa.

   [        |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

Rubino , 36 byte

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

Provalo online!


#sumnon è definito su fixnums, quindi presumo che tu voglia nessere una stringa. Tuttavia, String#sumcalcola a not a particularly good checksume ignora il blocco che gli dai. Se volevi dire n.chars.sum{, Enumerable#sumnon è nel ruby ​​stdlib, è un'estensione fornita da rotaie. Si prega di testare le soluzioni prima di pubblicarle.
Shelvacu,

@Shelvacu Sì, sto prendendo input come array però ... vedi il footer fornito. Plus Enumerable#sumè in Ruby 2.4 e TIO utilizza 2.4
ASCII solo il

31 byte se prendi una matrice di cifre come input
Asone Tuhid,

@AsoneTuhid Non penso che sia una forma di input valida, se trovi altre prove per favore spiega
ASCII-only

Questa pagina non sembra affrontare il problema, ma non vedo un elenco di numeri interi troppo diverso da un elenco di caratteri (che è quello che la tua risposta accetta come input)
Asone Tuhid,

3

JavaScript, 42 40 byte

Grazie @Shaggy per il golf off 2 byte

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

Riceve input come stringa e restituisce un numero intero. Come attualmente scritto, questo codice lascia zero iniziali su qualsiasi numero intero.


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

3

R, 57 byte

salvato un altro grazie a @Vlo

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

è stato: salvato 4 byte grazie al suggerimento di @Robert Hacken.

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

Un semplice approccio basato su stringhe.


1
È possibile salvare 4 byte sostituendoli unlistcon el.
Robert Hacken,

1
Salva 1 con assegnazione in lineasum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

Carbone , 10 byte

IΣIEθ✂θ⁰Iι

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

   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, ho avuto la stessa identica cosa
solo ASCII il

2

Ottava , 56 byte

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

Funzione anonima che accetta una stringa come argomento di input e restituisce un numero come output.

Provalo online!

La versione più corta

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

funziona in Matlab, perché char(0)viene trattato come uno spazio.


2

Gelatina ,  7  5 byte

-2 grazie a Dennis (vettori di testa>. <)

4 se possiamo prendere elenchi di cifre *

Dḣ`ḌS

Provalo online!

* ḣ`ḌS

Come?

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 byte

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

Provalo

Allargato:

{  # 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 byte

Deve essere compilato con l' -lminterruttore o GCC non riconosce le funzioni matematiche.

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

Provalo online!


2

dc , 55 byte

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

Niente stringhe né array! In effetti, le cifre richieste vengono acquisite esclusivamente mediante manipolazione matematica.

Provalo online!


1

Buccia , 6 byte

ṁd´M↑d

Provalo online!

Spiegazione

ṁ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 byte

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

Spiegazione

Accetta una stringa come input

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

Provalo online!


1

Japt, 5 byte

Accetta l'input come stringa.

¬x@¯X

Provalo


Spiegazione

          :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 O Japt è davvero matto o sto sbagliando davvero
ASCII

2
@ ASCII-only: Japt è molto più "golfy" di quanto molti credano; vinciamo la nostra giusta dose di sfide, battendo persino Charcoal e SOGL in una recente sfida ascii-art .
Shaggy,

@Shaggy Certo, ma non mi rendevo conto che era Jelly / effettivamente / 05AB1E livello golfy
ASCII-solo

@ ASCII-only: Oh, sì, è sicuramente lì con loro, tenendolo proprio bene :) Se sei interessato, dai un'occhiata alla nostra lingua del mese nom. o vai nella chatroom di Japt qualche volta e ti faremo un tour.
Shaggy,

1

Stax , 6 byte

ç╫&º±å

Esegui ed esegui il debug online

La corrispondente rappresentazione ASCII dello stesso programma è questa.

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

In realtà , 10 byte

╝ß⌠≈╛H≈⌡MΣ

Provalo online!

Spiegazione

╝          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 byte

Sono passate le 3 del mattino, perché sto ancora giocando a golf ?!

Accetta l'input come stringa.

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

Provalo online


0

Perl 5, 26 byte

Include +1perp

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

0

K4 , 22 byte

Soluzione:

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

Esempi:

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

Spiegazione:

Rompi in base-10, prendi il minimo di ogni numero e la lunghezza della lista da questo. Converti indietro e riassumi.

+/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 byte

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

Spiegazione:

Provalo online.

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 byte

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                                 

Provalo qui
Fornisci il valore di input nella scheda STDIN.



0

Gelatina , 6 byte

DµḣµVS

Provalo online!

Prendi le Digit dell'input, quindi ottieni i primi [ogni cifra] elementi dell'input ( ead), quindi Vogni somma per renderlo nuovamente un numero e Sum.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.