«Écrire» une calculatrice simple sans écrire une seule ligne de code

25

C'est très facile:

Créez un programme sans écrire une seule ligne de code. Le code ne peut être composé que de questions et réponses Stack Overflow existantes.

Le programme doit créer deux nombres aléatoires et produire les nombres

  • ajouté à,
  • soustrait de,
  • multiplié par et
  • divisé par

L'un et l'autre.

Règles

Vous devez inclure des liens vers les questions / réponses que vous avez utilisées dans votre réponse. Vous ne pouvez pas modifier le code que vous trouvez, avec les exceptions suivantes:

  1. Vous pouvez renommer des variables, des fonctions et des méthodes. (Cela ne signifie pas que vous pouvez modifier un appel de méthode, en changeant, par exemple scanner.nextInt () en scanner.nextLine () et en prétendant que vous changez le nom d'une méthode. Le changement doit être dans la définition ou la référence à la même entité.). La solution devrait toujours fonctionner si les variables, fonctions ou méthodes devaient être renommées à nouveau.

  2. Vous pouvez ajuster l'indentation de manière appropriée.

  3. Vous pouvez supposer que les modules appropriés sont chargés pour que les extraits de code fonctionnent. (par exemple, importation d'instructions pour Java et Python, utilisation d'instructions pour C # et C ++, et leurs équivalents dans tous les langages) Si l'extrait de code inclut les importations pour vous, vous pouvez les déplacer vers le haut du code.

  4. Si le langage nécessite que le code soit dans une sorte de corps de méthode pour s'exécuter (par exemple, public static void main(String[] args)pour Java, static int Main(string[] args)pour C #, etc.), vous pouvez encapsuler votre code dans la méthode appropriée. Mais le contenu de cette méthode principale doit rester inchangé.

  5. Vous devez fournir une liste explicite de tout changement de nom de variable / méthode / fonction / classe effectué.

  6. Vous ne pouvez pas prendre d'extraits d'extraits (ce qui signifie que si vous prenez un bloc de code dans un message, vous prenez le tout) Fournissez une brève description de ce que le code fait pour les personnes qui ne sont pas intimes avec la langue que vous utilisez. Vous devez utiliser les extraits publiés avant le début de ce défi.

Concours de popularité, donc le plus de votes gagne!

Date limite

J'accepterai la proposition qui a recueilli le plus de votes vers la fin du 6 août.

baao
la source
Salut michael, et bienvenue sur PPCG stack exchange! L'une des règles pour les défis de code sur ce site est qu'ils doivent avoir une condition de gain objective, vous devez donc choisir une telle condition pour celle-ci. Il s'agit d'un défi similaire qui pourrait vous donner quelques idées.
isaacg
Salut @isaacg, merci. Je vais jeter un œil et supprimer / modifier celui-ci.
baao du
@isaacg, j'espère que ça va maintenant. Vous êtes plus expérimenté que moi ici, le délai est-il trop proche / éloigné?
baao
C'est beaucoup mieux. Le délai est beaucoup trop proche cependant, la norme est d'environ 1-2 semaines.
isaacg
Ok, merci encore.
baao

Réponses:

17

J, 7 questions / réponses, aucune sur J

echo a%b[echo a*b[echo a-b[echo a+b[b=:?2147483647 [a=:?2147483647

C'est une façon sacrément bon marché de le faire, je ne vais pas mentir. Voici les réponses SO que j'ai utilisées:

J'ai renommé la variable foocomme aetb à mesure du code.

Fatalize
la source
J'imagine que prendre cette approche serait beaucoup plus difficile dans APL, mais il y a encore de bonnes chances de trouver les caractères dans un bloc de code par eux-mêmes.
JohnE
1
@JohnE C'est l'avantage d'être du bruit ASCII!
Fatalize
1
J'aime cette réponse, mais la question dit "Vous ne pouvez pas prendre d'extraits de code" - ce que cela fait, non?
unclemeat
3
@unclemeat "si vous prenez un bloc de code d'une publication, vous prenez le tout". Pour moi, il semble que s'il y a plusieurs blocs de code dans un article, vous ne pouvez en prendre qu'un, mais vous ne pouvez pas faire partie d'un bloc de code.
Fatalize
Tout cela provient de blocs de code complets - jetez un œil aux sources.
Sean Latham
7

Python 2, 7 6 références

La création de cette solution n'a pas été aussi simple qu'elle en avait l'air. La recherche de dépassement de pile pour un code spécifique est difficile, car les symboles ne sont pas inclus dans la recherche.

J'avais trouvé un moyen de le faire avec des nombres aléatoires de 2000 bits, en utilisant une réponse différente à la place de la référence # 1, mais je n'ai pas pu le tester sur les environnements en ligne que j'utilise car cela implique getrandbits, qui appelle os.urandom, me donnant un NotImplementedError, donc je suis allé de cette façon à la place. Cela pourrait en fait être utilisé maintenant, avec TIO.

Essayez-le en ligne

#assumed to be loaded
import random

n1 = []
n1.append(random.randint(1, 100))

n2 = []
n2.append(random.randint(1, 100))

r1 = map(sum, zip(n1, n2))
r2 = map(lambda t: t[0] - t[1] ,zip(n1, n2))

ab = [n1[i]*n2[i] for i in range(len(n1))]

r1, last = r1[0], r1[-1]
r2, last = r2[0], r2[-1]
ab, last = ab[0], ab[-1]
n2, last = n2[0], n2[-1]

print r1
print r2
print ab
ab = float(ab) / n2
ab = float(ab) / n2
print ab

Les références

import random est supposé être chargé, car la question indique que cela est autorisé.

  1. lst = []et lst.append(random.randint(1, 100))- ici

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1Et r2- ici

  3. result = float(a) / b- Ici

  4. ab = [a[i]*b[i] for i in range(len(a))]- Ici

  5. first, last = some_list[0], some_list[-1]- Ici

  6. print x- Ici

Renommé

  1. lstrenommé en n1et n2(Réf # 1: j'ai utilisé le code entier deux fois)

  2. r1et r2renommé en n1et n2(Réf # 2: J'ai cependant utilisé les variables séparées plus tard, pour affecter les cartes et les diviser dans la dernière impression, car la réponse les incluait.)

  3. resultet arenommé en ab, et brenommé en n2(Réf # 3)

  4. aet brenommé en n1et n2(Réf # 4)

  5. firstet les some_listdeux rebaptisés à r1, r2, abou n2, selon la ligne. (Réf # 5: J'ai utilisé cela quatre fois. Notez que seule la première affectation est utilisée, donc je ne renomme pas last)

  6. xest renommé r1, r2ou ab, selon la ligne. (Réf # 6)

mbomb007
la source
1

Décimal , 2 références

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Commandes utilisées:

  • 0 SET (index de pile par défaut)
  • 1 POUSSER
    • 2 CARBONISER
  • 2 POP
  • 3 E / S
    • 00 pile en double
    • 01 de la pile à STDOUT
  • 4 MATH
    • 1 AJOUTER
    • 2 SOUSTRAIRE
    • 3 MULTIPLIER
    • 4 DIVISER
  • 8 BUILTIN
    • 2 pousser un entier aléatoire pour empiler

Version expliquée:

82D       ; push random INT    - stack contains {r1}
82D       ; push random INT    - stack contains {r1, r2}

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
41D       ; math +             - stack contains {r1, r2, r1+r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
42D       ; math -             - stack contains {r1, r2, r1-r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
43D       ; math *             - stack contains {r1, r2, r1*r2}
301       ; print from stack to output
2         ;                    - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
44D       ; math /             - stack contains {r1, r2, r1/r2}
301       ; print from stack to output

Sources:

Essayez-le en ligne! Vous devrez désactiver le cache de sortie s'il n'est pas automatiquement désactivé.

MD XF
la source