Le ruban adhésif peut tout réparer [fermé]

13

Aperçu

Ce défi a été inspiré par ce post StackOverflow Meta . Dans ce document, @hakre dit:

J'ai vu un projet vraiment écrit par Stackoverflow (un noob copie ensemble de SO ici et SO là-bas), l'attribution ne se fait normalement jamais, ce qui entraîne la résiliation des droits sous CC. (sic)

Votre mission est de créer le programme le plus intéressant possible - sans jamais écrire une seule ligne de code. Vous ne pouvez utiliser que du code déjà écrit pour vous, à la fois dans les questions et les réponses de StackOverflow. Tout ce que vous pouvez faire est de scotcher le tout le mieux possible. Et bien sûr, il est très important que nous fournissions une attribution appropriée afin de ne pas mettre fin à nos droits.


Règles

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

    une. Vous pouvez renommer des variables, des fonctions et des méthodes. (Cela ne signifie pas que vous pouvez changer une méthode invocation , en changeant, par exemple scanner.nextInt()àscanner.nextLine() et prétendant que vous modifiez le nom de la méthode. Le changement doit être dans la définition ou référence à la même entité.)

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

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

    ré. Si le langage requiert 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é.

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

  4. Vous ne pouvez pas prendre d'extraits d'extraits (ce qui signifie que si vous prenez un bloc de code d'une publication, vous prenez le tout)
  5. Fournissez une brève description de ce que fait le code pour les personnes qui ne sont pas familières avec la langue que vous utilisez.
  6. Concours de popularité, donc le plus de votes gagne!

Exemple ennuyeux de cinq minutes (Python 3)

La description : lit un tas de fichiers journaux à partir du répertoire actuel et randomise les lignes qu'ils contiennent (excitant, non? Cela gagnerait totalement un concours de popularité)

La source

import glob
import random

for file in glob.glob('log-*-*.txt'):
    # Etc.
    with open(file) as f:
        content = f.readlines()
        # shuffle the list in place 
        random.shuffle(content)

        # print it
        print(content)

Modifications légales

  • Renommé fnameà filepartir du lien 1
  • Renommé bà contentpartir du lien 2

Attributions

  1. /programming//a/3277516/1435657
  2. /programming//a/16737991/1435657
  3. /programming//a/4918520/1435657
asteri
la source
8
J'aime vraiment l'idée, mais je pense que cette question gagnerait énormément à limiter la portée à une tâche particulière. Cela a) inspirerait plus de créativité parce que vous ne pouvez pas copier n'importe quoi ensemble et b) cela laisserait la possibilité de réutiliser ce type de question (intéressant) plus tard dans un contexte différent. Si vous la laissez simplement "faites ce que vous voulez", toutes les autres questions comme celle-ci seront en double. J'ai peur qu'en l'état, je doive fermer le vote car "trop ​​large" car cela torpille des questions futures potentiellement intéressantes.
Martin Ender
2
Je devrais ajouter, non, je ne veux pas que cela devienne le prochain code-trolling, où tout le monde publie un "Ajouter deux nombres", "Diviser cette chaîne", avec une balise "duct-tape-coding". Je pense que nous pouvons gérer cela de manière plus créative que cela. Je voudrais simplement laisser de la place à d'autres interprétations de ce type de concours à source restreinte.
Martin Ender
1
@ m.buettner Je ne suis pas sûr non plus que CodeGolf.SE bénéficierait nécessairement de beaucoup de questions comme celle-ci, pour les mêmes raisons que vous mentionnez: pourquoi avoir "divisé une chaîne en utilisant le code SO", "obtenir un nombre aléatoire de 1 à 1" 100 en utilisant le code SO ", et ainsi de suite? Mais c'est juste mon opinion. Je suis loin d'être un pro de CodeGolf.SE. :)
asteri
3
Je vais supprimer la balise personnalisée aléatoire pour le moment parce que la nécessité de celle-ci n'a pas été établie (et elle sera très probablement inutile et n'ajoutera aucune valeur).
asteri
1
Je suis d'accord que nous devons être prudents avec l'inondation de PPCG avec des questions comme celle-ci, juste parce que c'est amusant et nouveau. Mais je pense que quelques questions vraiment différentes pourraient en découler ... comme une mathématique, une graphique, une qui utilise la notation par golf et peut-être un défi polyglotte. Par conséquent, je préférerais que la portée soit limitée. En ce qui concerne les personnes qui copient le défi sans rien de substantiel, je pense que c'est le devoir de la communauté d'être un peu plus stricte dans la «fermeture en double» quand il s'agit de nouveaux types de défi.
Martin Ender

Réponses:

8

C - calculateur d'une opération

Ayons cela pour commencer.
Il est en fait assez difficile de trouver des morceaux de programmes C qui ne sont pas des programmes entiers. J'ai eu le plus de mal avec les déclarations.

// http://stackoverflow.com/a/2911978 Block #1 (changed i to a)
static int a = 10;
// http://stackoverflow.com/a/2911978 Block #1 (changed i to b)
static int b = 10;
// http://stackoverflow.com/a/442647 Block #1 (changed c to op)
unsigned char op = (unsigned char)-1;
// http://stackoverflow.com/q/3711048 Inline block #1
int main()
// http://stackoverflow.com/a/14902422 Inline block #1
{
// http://stackoverflow.com/q/217074 Inline block #2 (changed i to a)
scanf("%d", &a)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/q/217074 Block #2 (changed c to op)
scanf("%c", &op)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/q/217074 Inline block #2 (changed i to b)
scanf("%d", &b)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/a/4173188 Block #2
int result = 0;
result = (op == '*') ? a * b : result;
result = (op == '/') ? a / b : result;
result = (op == '+') ? a + b : result;
result = (op == '-') ? a - b : result;
printf("%d",result);
// http://stackoverflow.com/a/3245525 Block #2
printf("\n");  /* prints newline */
// http://stackoverflow.com/q/4138649 Inline block #1
return 0;
// http://stackoverflow.com/a/14902422 Inline block #2
}

Prend une opération intégrale simple comme 3+151ou 41/2sur stdin et envoie le résultat à stdout.

mniip
la source
1
Réutilisation intéressante du même bloc de code et renommage de la variable deux fois. Je n'y ai même pas pensé! +1
asteri