Klebeband kann alles reparieren [geschlossen]


13

Überblick

Diese Herausforderung wurde von diesem StackOverflow-Metapost inspiriert . Darin sagt @hakre:

Ich habe ein Projekt gesehen, das wirklich von Stackoverflow geschrieben wurde (ein Noob kopiert hier und da von SO zusammen). Die Zuweisung wird normalerweise nie durchgeführt, was zu einer Kündigung der Rechte unter CC führt. (sic)

Ihre Mission ist es, das interessanteste Programm zu erstellen, das Sie können - ohne jemals eine einzige Codezeile zu schreiben. Sie können nur Code verwenden, der bereits für Sie geschrieben wurde, sowohl in Fragen als auch in Antworten von StackOverflow. Alles, was Sie tun können, ist Klebeband alles zusammen, so gut Sie können. Und natürlich ist es sehr wichtig, dass wir eine angemessene Namensnennung vornehmen, damit unsere Rechte nicht gekündigt werden.


Regeln

  1. Sie müssen Links zu den Fragen / Antworten einfügen, die Sie in Ihrer Antwort verwendet haben.
  2. Sie können den gefundenen Code mit den folgenden Ausnahmen nicht ändern:

    ein. Sie können Variablen, Funktionen und Methoden umbenennen. (Das bedeutet nicht , eine Methode ändern Aufruf , durch Änderung, sagen scanner.nextInt()zu scanner.nextLine()und behauptet , dass Sie einen Methodennamen sind zu ändern. Die Änderung der Definition oder Verweis auf die gleiche Person sein muss.)

    b. Sie können den Einzug entsprechend anpassen.

    c. Sie können davon ausgehen, dass die richtigen Module geladen sind, damit die Codeausschnitte funktionieren. (z. B. importAnweisungen für Java und Python, usingAnweisungen für C # und C ++ sowie deren Entsprechungen in allen Sprachen) Wenn das Code-Snippet das imports für Sie enthält, können Sie sie an den oberen Rand des Codes verschieben.

    d. Wenn die Sprache erfordert, dass sich der Code in einem auszuführenden Methodentext befindet (z. B. public static void main(String[] args)für Java, static int Main(string[] args)für C # usw.), können Sie den Code in die entsprechende Methode einschließen. Der Inhalt dieser Hauptmethode muss jedoch unverändert bleiben.

  3. Sie müssen eine explizite Liste aller durchgeführten Umbenennungen von Variablen / Methoden / Funktionen / Klassen angeben.

  4. Sie können keine Snippets von Snippets nehmen (dh wenn Sie einen Codeblock von einem Beitrag nehmen, nehmen Sie die ganze Sache)
  5. Geben Sie eine kurze Beschreibung der Funktionsweise des Codes für Personen an, die mit der von Ihnen verwendeten Sprache nicht vertraut sind.
  6. Beliebtheitswettbewerb, damit die meisten Upvotes gewinnen!

Langweiliges Fünf-Minuten-Beispiel (Python 3)

Beschreibung : Liest eine Reihe von Protokolldateien aus dem aktuellen Verzeichnis und ordnet die darin enthaltenen Zeilen nach dem Zufallsprinzip an (aufregend, oder? Dies würde einen Beliebtheitswettbewerb total gewinnen).

Quelle

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)

Rechtliche Änderungen

  • Umbenannt fnamein filevon Link 1
  • Umbenannt bin contentvon Link 2

Zuschreibungen

  1. /programming//a/3277516/1435657
  2. /programming//a/16737991/1435657
  3. /programming//a/4918520/1435657

8
Die Idee gefällt mir sehr gut, aber ich denke, diese Frage würde immens davon profitieren, den Umfang auf eine bestimmte Aufgabe zu beschränken. Das würde a) mehr Kreativität anregen, weil man nicht einfach irgendetwas zusammen kopieren kann und b) es würde die Möglichkeit offen lassen, diese (interessante) Art von Frage später in einem anderen Kontext wiederzuverwenden. Wenn Sie es einfach so belassen, dass Sie tun, was Sie wollen, werden alle weiteren Fragen wie diese Duplikate sein. Ich fürchte, so wie es aussieht, muss ich als "zu breit" abstimmen, weil es möglicherweise interessante zukünftige Fragen torpediert.
Martin Ender

2
Ich sollte hinzufügen, nein, ich möchte nicht, dass dies das nächste Code-Trolling wird, bei dem jeder ein "Add two numbers", "Split this string", mit einem "duct-tape-coding" -Tag postet. Ich denke, wir können kreativer damit umgehen. Ich möchte nur etwas Raum für andere Interpretationen dieser Art von Wettbewerb mit eingeschränkten Quellen lassen.
Martin Ender

1
@ m.buettner Ich bin mir auch nicht sicher, ob CodeGolf.SE aus den gleichen Gründen, die Sie erwähnen, unbedingt von vielen Fragen wie diesen profitieren würde: Warum haben Sie "einen String mit SO-Code geteilt", "bekommen Sie eine Zufallszahl von 1- 100 mit SO Code "und so weiter? Aber das ist nur meine Meinung. Ich bin weit entfernt von einem CodeGolf.SE Pro. :)
Asteri

3
Ich werde das zufällige benutzerdefinierte Tag vorerst entfernen, da die Notwendigkeit dafür nicht festgestellt wurde (und es wird sehr wahrscheinlich unnötig sein und keinen Wert hinzufügen).
Asteri

1
Ich stimme zu, dass wir vorsichtig sein müssen, wenn wir PPCG mit Fragen wie diesen überschwemmen, nur weil es Spaß macht und neuartig ist. Aber ich denke, ein paar wirklich unterschiedliche Fragen könnten sich daraus ergeben ... wie eine mathematische, eine grafische, eine, die Code-Golf-Scoring und vielleicht eine polyglotte Herausforderung verwendet. Daher würde ich es vorziehen, den Umfang zu begrenzen. Was die Leute angeht, die die Herausforderung nur ohne nennenswerten Aufwand kopieren, ist es meiner Meinung nach die Pflicht der Community, bei neuen Herausforderungstypen etwas strenger zu "Closing as duplicate" zu sein.
Martin Ender

Antworten:


8

C - ein Betriebsrechner

Lassen Sie uns dies für einen Anfang haben.
Es ist tatsächlich ziemlich schwierig, Teile von C-Programmen zu finden, die keine vollständigen Programme sind. Ich hatte größte Probleme mit Erklärungen.

// 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
}

Führt eine einfache Integraloperation wie 3+151oder 41/2auf stdin durch und gibt das Ergebnis auf stdout aus.


1
Interessante Wiederverwendung des gleichen Codeblocks und zweimaliges Umbenennen der Variablen. Daran habe ich gar nicht gedacht! +1
Asteri
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.