Additionner les chiffres et les chiffres inversés


26

Étant donné un nombre> 0, sortez la somme avec tous les chiffres (1 .. n) concaténés et inversés et additionnez-les. Par exemple, avec n = 6:

Les numéros 1 à 6 concaténés:

123456

Renversé:

654321

Les additionner ensemble donnera: 777777. Un autre exemple est n = 11:

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

et

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

Les additionner ensemble se traduira par 2345555545332. Ceci est également connu comme A078262 .

Le code le plus court gagne!



Existe-t-il un lien nou devons-nous prendre en charge des entiers arbitrairement grands?
LegionMammal978

Je pense que la valeur par défaut est "délimitée par max(256,yourlanguagesdefaultintegertypelimit)". Mais il faut le préciser.
CalculatorFeline

@ LegionMammal978 Aussi haut que le supporte votre langue.
Lamaro

Cas de test important:, 10qui devrait donner 23333333231.
Adnan

Réponses:


9

05AB1E, 7 octets

LDRJsJ+

Essayez-le en ligne.

Explication

LDRJsJ+

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

Je me sens très confus par le choix de conception qui mène aux +listes à faire un ajout imbriqué, tandis que pour les chaînes, il se convertit en entiers puis ajoute. Mais je suppose que cela a fonctionné ici! : P
FryAmTheEggman

@FryAmTheEggman Je vais cependant supprimer l'ajout imbriqué. Cela n'a jamais été utile depuis le moment où je l'ai implémenté ...
Adnan

3
Sheesh, je quitte PPCG pendant deux heures et vous vous renommez Aqua Tart pendant mon absence ... Oh, la vie d'un utilisateur de PPCG.
ETHproductions

6

Gelée, 9 octets

R,U$DF€ḌS

livecoding 


2
Est-ce moi ou est-ce que je vois ce code voler secrètement des U $ D?
gcampbell

5

CJam, 15 14 octets

Merci à Martin d'avoir rasé un octet!

ri,:)_W%si\si+

Essayez-le en ligne!


1 octet de moins si vous retournez la chaîne au lieu du tableau numérique:ri,:)s_W%i\i+
Luis Mendo

Désolé, je pense que ma version ne fonctionne pas pour10
Luis Mendo

1
Ce code est secrètement heureux. :)
Cyoce

4

Pyth, 12 10 octets

ssMjLk_BSQ

Merci à @FryAmTheEggman pour 2 octets!

Qest l'entrée, Sil se transforme en [1, 2, ..., input()], _Bbifurque il plus _(inverse) pour créer [rng, rev(rng)], jLkcartes au -dessus joinde k(qui est la variable « chaîne vide »), sMcartes intsur ce tableau résultant, et scalcule enfin la somme.


4

JavaScript (ES6), 70 67 64 octets

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

Corrigé pour répondre aux exigences, car l'ancien code a été créé en raison d'une mauvaise compréhension de l'entrée.


@TimmyD Ajout d'une explication.
Mwr247

@TimmyD OH! > _ <Ma mauvaise compréhension du défi est de savoir comment ... Oui, je vais devoir résoudre ce problème.
Mwr247

@TimmyD Cela m'a pris assez de temps pour me remettre en ligne. C'est réparé maintenant, et merci d'avoir attrapé ça.
Mwr247

Comme indiqué pour une autre réponse, cela ne fonctionne que si le paramètre a est compris entre 1 et 12, c'est vraiment trop peu
edc65

@ edc65 Selon le commentaire de l'OP , c'est assez grand.
Mwr247

3

Python 3, 74

6 octets enregistrés grâce à DSM.

Rien de trop excitant, rejoignez les gammes puis convertissez-vous en pouces et ajoutez-les.

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

3

Rétine , 71

  • 7 octets enregistrés grâce à @daavko.
  • 3 octets économisés grâce aux fonctionnalités de la version 0.7.3

Parce que c'est manifestement le mauvais outil pour le travail.

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

Essayez-le en ligne.

Fonctionne pour des entrées jusqu'à 6, mais l'interpréteur en ligne expire après cela.


1
Vous pouvez le raccourcir à 74 en supprimant la dernière ligne et en changeant (c)+en c.
daavko

@daavko oui, bien sûr, merci!
Digital Trauma

Aussi, $&$*c-> $*cet \d+:?-> \d+et c'est 70. Et pour une raison quelconque, ça continue de fonctionner ...
daavko

3

Jolf, 9 octets

Essayez-le ici! Remplacez par \x10.

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

Je peux être capable de jouer au golf en se déplaçant autour du casting de type.


Vous battez pyth et poignée de porte!
Cyoce

@Cyoce donc j'ai fait O_O
Conor O'Brien

3

JavaScript (ES6), 67 66 octets

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

Oui, c'est un espace. Pouah. Au moins @Downgoat m'a aidé à économiser un octet.


1
Vous pouvez supprimer le premier +et faire le + +-> - -pour enregistrer un octet
Downgoat

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

Remarque: en utilisant l'arithmétique js simple, cela est limité aux valeurs 1 .. 12
edc65

2

Sérieusement, 12 octets

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

Essayez-le en ligne!

Explication:

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

param($a)+-join(1..$a)+-join($a..1)

Convertit l'entrée en plages avec .., puis -joinles regroupe et les additionne.

Fonctionnera pour les numéros d'entrée jusqu'à 138, tandis que 139donnera Infinity, et au 140-dessus résoudra une erreur de casting incroyablement verbeuse:

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

Cela ajoute chiffre par chiffre, de sorte qu'il peut gérer des nombres bien supérieurs aux 53 bits de précision de 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")

Tester

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>


Ne semble pas fonctionner pour 9. Aussi, pourquoi ne pas initialiser cavec les autres variables?
Neil

Vous avez mon vote positif.
Neil


2

MATL , 13 octets

:tP2:"wVXvU]+

EDIT (20 mai 2016) Le code dans le lien utilise à la Xzplace de Xv, en raison de récents changements dans la langue.

Essayez-le en ligne!

:                % 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

Ne fonctionne pas pendant 11 ou 10. (Indice: plage inverse avant la conversion en chaîne.)
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Merci! Corrigé
Luis Mendo

Génial! Ayez un vote positif.
Mama Fun Roll du

2

05AB1E , 5 octets

LJDR+

Explication:

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

Essayez-le en ligne!



1

Perl 6 , 25 octets

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

Usage:

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

Je pense que vous pouvez faire avec $nau lieu de$^n
andlrc

@ dev-null Pas si je veux que ce soit une entrée pour le bloc. le -> $n {est un différent de $^n.
Brad Gilbert b2gills

1

R, 34 60 64 octets

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

Suppose que le pryrpackage est installé. cela donne fun raccourci pour créer des fonctions.

Edit ajouté 26 octets mais renvoie une fonction qui fonctionne, pas quelque chose de complètement faux.

Edit a ajouté encore 4 octets pour gérer les cas au-dessus de n = 10 où strtoi (précédemment utilisé) retournait NA


1

Lua, 57

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

1

Lua, 53 octets

Ce programme prend ncomme argument de ligne de commande.

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

J'ai supposé que la sortie d'un nombre avec une partie décimale de 0 était correcte (dans le formulaire 777777.0car c'est la façon par défaut de sortir un nombre en lua (il n'y a pas de distinction entre entier et flottant)


Ce n'est pas la chaîne elle-même qui est inversée, mais les chiffres. Votre code échoue sur n> = 10.
Moop

@Moop Corrigé au prix de 1 octet ^^ '. Merci pour le commentaire ^^ '
Katenkyo

Vous pouvez enregistrer 3 autres en utilisant ... au lieu d'arg [1] beau travail sur le concat inverse pour r, je n'ai pas pensé à cela dans ma réponse. +1
Moop

@Moop J'ai vu votre message, bonne utilisation, je ne savais même pas que vous pouviez utiliser ...comme ça! Je vais le garder comme ça pour le moment, car je ne peux pas utiliser autre chose que le compilateur en ligne et il ne peut pas gérer ça (je voudrais le tester et jouer avec un peu avant de le mettre dans un réponse :))
Katenkyo

1

Perl 5, 37 octets

25 octets, plus 1 pour -pet 11 pour-MList::Gen

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

Solution précédente, 40 octets: 39, plus un pour -p

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

1

Perl, 36 octets

Comprend +1 pour -p

Courir avec sur STDIN

perl -p reverse.pl <<< 6

reverse.pl

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

1

Dyalog APL , 17 octets

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

invite pour entrée
'énumérer jusqu'à entrée
x←stocker la liste dans x
inverser x
x()ajouter la liste inversée avec la liste d'origine
⍕¨¨convertir chaque numéro de chaque liste en chaîne de caractères
∊¨transformer chaque liste de chaînes de caractères en chaînes de caractères simples
⍎¨convertir chaque chaîne de caractères en un nombre
+/additionner les deux nombres .



0

Rétine, 80 octets (codage ISO 8859-1)

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

IO est en unaire avec 'comme caractère de comptage. En théorie, prend en charge tout entier que vous lui lancez, en pratique ... l'interprète en ligne refuse de traiter tout ce qui dépasse 6 (unaire '''''').

Essayez-le en ligne!
Essayez-le en ligne! (IO décimal - 91 octets)


0

𝔼𝕊𝕄𝕚𝕟, 12 caractères / 15 octets

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

Try it here (Firefox only).

Meh.

Explication

Prend une gamme [1,input], la rejoint; prend cette même plage, l'inverse, puis la rejoint; la somme des deux plages est le résultat.


0

Ruby, 40 caractères

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

Exemple d'exécution:

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 octets

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

Pourrait peut-être jouer au golf plus loin. Pas vraiment sûr.


0

Groovy, 42 39 caractères

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

Exemple d'exécution:

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

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.