Programme Python A + B le plus court avec entrée et sortie

10

Certains d'entre vous peuvent dire que je perds mon temps, mais cette tâche ne me donne pas la paix pendant plus de 500 jours. Il est nécessaire d'écrire un programme en Python 3.x qui prend deux nombres en entrée et affiche leur somme. Les nombres sont donnés dans le format suivant:

a b

Quelques exemples de cas de test:

100 500 -> 600
3 4     -> 7

La longueur du code est calculée avec la formule max (longueur de code sans espaces ni tabulations ni sauts de ligne, longueur de code / 4) . Je ne connais que 2 solutions, chacune d'elles a une longueur de 36 caractères:

print(sum(map(int, input().split())))

et:

print(eval(input().replace(' ', '+')))

Je sais aussi que la solution existe avec une longueur de 34 symboles. Vous pouvez le vérifier sur ce site .

Evgeny
la source
10
Si les espaces ne comptent pas, j'ai une solution à 34 caractères ( SHA1 est e3eb1f896cffc2dbff531ce5ba8fa25d34c22c76). Je ne suis pas sûr qu'il serait bon de publier publiquement une solution à ce qui semble être un concours de programmation continue. Avons-nous une politique de site à ce sujet?
xnor
@ xnor, c'est une tâche très ancienne, personne ne peut vous empêcher de résoudre ce problème ici.
Evgeny
1
@xnor, car nous avons déjà une solution de 34 caractères, cela vous dérangerait-il de poster la vôtre? Le SHA1 de Claudio est différent du vôtre
Felipe Nardi Batista
2
@FelipeNardiBatista C'est la même chose avec les guillemets doubles.
xnor

Réponses:

5

Étant donné le bon indice vers la solution dans le commentaire de la même question posée sur stackoverflow (voir ici ), je l'ai obtenu jusqu'à 34 et sans aucune limitation sur le nombre d'entrée ou d'autres astuces nécessaires:

print(eval(input().replace(*' +')))

Voici un bref résumé des différentes solutions actuellement connues:

print(eval(input().replace(' ','+'))) # 36

print(sum(map(int,input().split()))) # 36

print(eval(input().replace(*' +'))) # 34

print(sum(map(int,input()[::2]))) # 33 (limité aux nombres entre 0 et 9)

Cela pourrait peut-être être considéré comme de la triche, mais peut-être pas. Au moins, il n'y a pas encore de règle pour cela défini, alors incluons-le dans la collection de solutions possibles:

import f;f.f() # 13

Pour que cette solution fonctionne, un script f.py est disponible dans un répertoire de recherche pour les modules de Python avec le contenu suivant:

def f():
    print(sum(map(int,input().split()))) 
Claudio
la source
Si vous lisez la question, elle doit fonctionner sur le site Web donné, où il n'y aurait pas de script externe à importer.
mbomb007
@ mbomb007: J'ai lu la question et elle n'est pas mentionnée dans la question, ou pouvez-vous fournir une citation de la question indiquant qu'elle l'est?
Claudio
1
"Vous pouvez le vérifier [(le problème)] sur ce site Web." Et sur le site Web, les spécifications nécessitent la contribution de STDIN. acmp.ru/index.asp?main=task&id_task=1 Vous ne pouvez pas créer un autre module.
mbomb007
1
@Claudio merci pour la réponse. La version correcte est print (eval (input (). Replace (* '+'))) # 34
Evgeny
@Claudio, puis-je fermer le double de cette question sur stackoverflow?
Evgeny