Sommando le cifre e le cifre invertite


26

Dato un numero> 0, emetti la somma con tutte le cifre (1 .. n) concatenate e invertite e sommale. Ad esempio, con n = 6:

I numeri da 1 a 6 concatenati:

123456

invertito:

654321

Sommandoli insieme si otterrà: 777777. Un altro esempio è n = 11:

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

e

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

Sommarli insieme comporterà 2345555545332. Questo è anche noto come A078262 .

Vince il codice più corto!



Esiste un limite no dobbiamo supportare numeri interi arbitrariamente grandi?
LegionMammal978,

Penso che il valore predefinito sia "limitato da max(256,yourlanguagesdefaultintegertypelimit)". Ma dovrebbe essere specificato.
CalculatorFeline

@ LegionMammal978 Alta quanto la tua lingua supporta.
Lamaro,

Importante test case: 10che dovrebbe dare 23333333231.
Adnan,

Risposte:


9

05AB1E, 7 byte

LDRJsJ+

Provalo online.

Spiegazione

LDRJsJ+

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

Mi sento molto confuso dalla scelta del design che porta a +liste che fanno un'aggiunta nidificata, mentre per le stringhe si converte in in e poi aggiunge. Ma immagino che abbia funzionato qui! : P
FryAmTheEggman,

@FryAmTheEggman Ho intenzione di rimuovere l'aggiunta nidificata però. Non è mai stato utile dal momento in cui l'ho implementato ...
Adnan,

3
Bene, lascio PPCG per due ore e ti rinominerai Aqua Tart mentre me ne vado ... Oh, la vita di un utente PPCG.
ETHproductions

6

Gelatina, 9 byte

R,U$DF€ḌS

livecoding 


2
Sono io o vedo quel codice rubare segretamente un po 'di U $ D?
gcampbell,

5

CJam, 15 14 byte

Grazie a Martin per aver rasato un byte!

ri,:)_W%si\si+

Provalo online!


1 byte in meno se capovolgi la stringa anziché l'array numerico:ri,:)s_W%i\i+
Luis Mendo,

Siamo spiacenti, penso che la mia versione non funzioni per10
Luis Mendo,

1
Questo codice è segretamente felice. :)
Cyoce,

4

Pyth, 12 10 byte

ssMjLk_BSQ

Grazie a @FryAmTheEggman per 2 byte!

Qè l'input, lo Strasforma in [1, 2, ..., input()], lo _Bbiforcisce su _(inverso) per creare [rng, rev(rng)], lo jLkmappa jointramite k(che è la variabile "stringa vuota"), sMesegue intil mapping su questo array risultante e sinfine calcola la somma.


4

JavaScript (ES6), 70 67 64 byte

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

Risolto il problema per soddisfare i requisiti, dato che il vecchio codice era stato creato sotto incomprensione dell'input.


@TimmyD Aggiunta una spiegazione.
Mwr247,

@TimmyD OH! > _ <Il mio fraintendimento della sfida è come ... Sì, dovrò risolvere questo problema.
Mwr247,

@TimmyD Mi ha impiegato abbastanza tempo per tornare online. Ora è stato risolto e grazie per averlo scoperto.
Mwr247,

Come notato per un'altra risposta, questo funziona solo se il parametro a è compreso tra 1 e 12, è davvero troppo piccolo
edc65

@ edc65 Per il commento di OP , è abbastanza grande.
Mwr247,

3

Python 3, 74

6 byte salvati grazie a DSM.

Niente di troppo eccitante, unisciti alle gamme e poi converti in ints e aggiungili.

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

3

Retina , 71

  • 7 byte salvati grazie a @daavko.
  • 3 byte salvati grazie alle funzionalità della versione 0.7.3

Perché è palesemente lo strumento sbagliato per il lavoro.

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

Provalo online.

Funziona con input fino a 6, ma l'interprete online scade dopo.


1
Puoi accorciarlo a 74 rimuovendo l'ultima riga e cambiando (c)+in c.
daavko,

@daavko sì, certo, grazie!
Trauma digitale

Inoltre, $&$*c-> $*ce \d+:?-> \d+ed è 70. E per qualche motivo continua a funzionare ...
daavko,

3

Jolf, 9 byte

Provalo qui! Sostituisci con \x10.

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

Io possa essere in grado di golf spostando intorno al tipo di fusione.


Hai battuto Pyth e Doorknob!
Cyoce,

@Cyoce, così ho fatto O_O
Conor O'Brien il

3

JavaScript (ES6), 67 66 byte

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

Sì, quello è uno spazio. Ugh. Almeno @Downgoat mi ha aiutato a salvare un byte.


1
Puoi rimuovere il primo +e fare il + +-> - -per salvare un byte
Downgoat

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

Nota: usando l'aritmetica js semplice questo è limitato ai valori 1 .. 12
edc65

2

Scherzi a parte, 12 byte

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

Provalo online!

Spiegazione:

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

Converte l'input in intervalli con .., quindi -joinli unisce e li aggiunge.

Funzionerà per i numeri di input fino a 138, mentre 139darà Infinity, 140e soprattutto emetterà un errore di casting incredibilmente dettagliato:

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

Questo aggiunge cifra per cifra, quindi può gestire numeri ben al di sopra dei 53 bit di precisione di 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>


Non sembra funzionare per 9. Inoltre, perché non inizializzare ccon le altre variabili?
Neil,

Hai il mio voto.
Neil,


2

MATL , 13 byte

:tP2:"wVXvU]+

EDIT (20 maggio 2016) Il codice nel link utilizza Xzinvece di Xv, a causa di recenti cambiamenti nella lingua.

Provalo 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

Non funziona per 11 o 10. (Suggerimento: inverti l'intervallo prima di convertirlo in stringa.)
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Grazie! Corretto
Luis Mendo il

Grande! Avere un voto.
Mama Fun Roll,

2

05AB1E , 5 byte

LJDR+

Spiegazione:

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

Provalo online!



1

Perl 6 , 25 byte

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

Uso:

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

Penso che tu possa fare con $ninvece di$^n
andlrc il

@ dev-null Non se voglio che sia un input per il blocco. la -> $n {è uno diverso da $^n.
Brad Gilbert b2gills

1

R, 34 60 64 byte

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

Presuppone che il pryrpacchetto sia installato. questo dà funa scorciatoia per la creazione di funzioni.

Modifica ha aggiunto 26 byte ma restituisce una funzione che funziona, non qualcosa di completamente sbagliato.

Modifica ha aggiunto altri 4 byte per gestire i casi sopra n = 10 in cui stava tornando strtoi (precedentemente utilizzato) NA


1

Lua, 57

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

1

Lua, 53 byte

Questo programma accetta ncome argomento della riga di comando.

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

Ho supposto che l'output di un numero con una parte decimale di 0 andasse bene (nella forma 777777.0perché questo è il modo predefinito per produrre un numero in lua (non c'è distinzione tra intero e float)


Non è la stringa stessa che viene invertita, ma le cifre. Il tuo codice ha esito negativo su n> = 10.
Moop,

@Moop Corretto al prezzo di 1 byte ^^ '. Grazie per il commento ^^ '
Katenkyo,

Puoi salvarne altri 3 usando ... invece di arg [1] un bel lavoro sul reverse concat per r, non ci ho pensato nella mia risposta. +1
Moop,

@Moop ho visto il tuo post, buon uso, non sapevo nemmeno che potessi usare ...così! Per il momento continuerò così, perché non posso usare nient'altro che il compilatore online e non può gestirlo (mi piacerebbe testarlo e giocarci un po 'prima di inserirlo in un risposta :))
Katenkyo,

1

Perl 5, 37 byte

25 byte, più 1 per -pe 11 per-MList::Gen

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

Soluzione precedente, 40 byte: 39, più uno per -p

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

1

Perl, 36 byte

Include +1 per -p

Esegui con su STDIN

perl -p reverse.pl <<< 6

reverse.pl

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

1

Dyalog APL , 17 byte

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

richiesta di input
'enumera fino a quando l'
x←elenco dell'archivio di input in x
reverse x
x(... )antepone l'elenco invertito con l'elenco originale
⍕¨¨converte ogni numero di ogni elenco in stringa di caratteri,
∊¨trasformando ogni elenco di stringhe di caratteri in stringhe di caratteri singoli
⍎¨convertendo ogni stringa di caratteri in un numero
+/somma i due numeri .


0

Mathematica, 64 byte

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&

0

Retina, 80 byte (codifica ISO 8859-1)

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

IO è unario con 'il carattere di conteggio. In teoria supporta qualsiasi numero intero che ci passi, in pratica ... l'interprete online rifiuta di elaborare qualcosa di più grande di 6 (unario '''''').

Provalo online!
Provalo online! (IO decimale - 91 byte)


0

𝔼𝕊𝕄𝕚𝕟, 12 caratteri / 15 byte

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

Try it here (Firefox only).

Meh.

Spiegazione

Prende un intervallo [1,input], lo unisce; prende lo stesso intervallo, lo inverte, quindi lo unisce; la somma di entrambi gli intervalli è il risultato.


0

Rubino, 40 caratteri

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

Esecuzione di esempio:

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 byte

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

Potrebbe essere possibile giocare a golf ulteriormente. Non sono proprio sicuro.


0

Groovy, 42 39 caratteri

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

Esecuzione di esempio:

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

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
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.