Schreiben Sie einen einfachen Taschenrechner, ohne eine einzige Codezeile zu schreiben


25

Es ist sehr leicht:

Erstellen Sie ein Programm, ohne eine einzige Codezeile zu schreiben. Der Code kann nur aus vorhandenen Fragen und Antworten zum Stapelüberlauf bestehen.

Das Programm sollte zwei Zufallszahlen erzeugen und diese ausgeben

  • hinzugefügt zu,
  • subtrahiert von,
  • multipliziert mit und
  • geteilt durch

gegenseitig.

Regeln

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

  1. Sie können Variablen, Funktionen und Methoden umbenennen. (Dies bedeutet nicht, dass Sie einen Methodenaufruf ändern können, indem Sie beispielsweise scanner.nextInt () in scanner.nextLine () ändern und behaupten, dass Sie einen Methodennamen ändern. Die Änderung muss in der Definition oder im Verweis auf erfolgen.) gleiche Entität.). Die Lösung sollte weiterhin funktionieren, wenn Variablen, Funktionen oder Methoden erneut umbenannt werden.

  2. Sie können den Einzug entsprechend anpassen.

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

  4. 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)C # usw.), können Sie den Code in die entsprechende Methode einbetten. Der Inhalt dieser Hauptmethode muss jedoch unverändert bleiben.

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

  6. Sie können keine Snippets von Snippets nehmen (dh, wenn Sie einen Codeblock aus einem Beitrag nehmen, nehmen Sie das Ganze). Geben Sie eine kurze Beschreibung dessen, was der Code für Personen bewirkt, die mit der von Ihnen verwendeten Sprache nicht vertraut sind. Sie müssen Snippets verwenden, die vor dem Start dieser Challenge veröffentlicht wurden.

Beliebtheitswettbewerb, damit die meisten Upvotes gewinnen!

Frist

Ich werde die Einreichung akzeptieren, die Ende August, 6, die meisten Stimmen hat.


Hallo Michael, und willkommen bei PPCG Stack Exchange! Eine der Regeln für Code-Herausforderungen auf dieser Site ist, dass sie eine objektive Gewinnbedingung haben müssen. Sie sollten daher eine solche Bedingung für diese auswählen. Dies ist eine ähnliche Herausforderung, die Ihnen einige Ideen geben könnte.
Isaacg

Hallo @isaacg, danke. Ich werde einen Blick darauf werfen und diesen löschen / bearbeiten.
Chris P. Bacon

@isaacg, hoffe, es ist jetzt in Ordnung. Sie sind erfahrener als ich hier, ist die Frist zu kurz oder zu weit?
Chris P. Bacon

Es ist viel besser. Die Frist ist jedoch viel zu kurz, Standard ist etwa 1-2 Wochen.
Isaacg

Ok, danke nochmal.
Chris P. Bacon

Antworten:


17

J, 7 Fragen / Antworten, keine über J

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

Es ist ein verdammt billiger Weg, ich werde nicht lügen. Hier sind die SO-Antworten, die ich verwendet habe:

Ich habe die Variable foowie aund bim Code umbenannt.


Ich stelle mir vor, dieser Ansatz wäre in APL viel schwieriger, aber es besteht immer noch eine gute Chance, die Zeichen in einem Codeblock selbst zu finden.
JohnE

1
@ JohnE Das ist der Vorteil von ASCII-Rauschen!
Fatalize

1
Ich mag diese Antwort, aber die Frage lautet: "Sie können keine Schnipsel von Schnipsel nehmen" - was macht das, richtig?
Unclemeat

3
@unclemeat "Wenn Sie einen Codeblock von einem Beitrag nehmen, nehmen Sie das Ganze". Für mich klingt es so, als ob es in einem Beitrag mehrere Codeblöcke gibt, Sie können nur einen nehmen, aber Sie können nicht an einem Codeblock teilnehmen.
Fatalize

All dies stammt aus vollständigen Codeblöcken - werfen Sie einen Blick auf die Quellen.
Sean Latham

7

Python 2, 7 6 Referenzen

Das Erstellen dieser Lösung war nicht so einfach wie es aussah. Das Durchsuchen des Stapelüberlaufs nach spezifischem Code ist schwierig, da Symbole nicht in die Suche einbezogen werden.

Ich hatte einen Weg gefunden, dies mit 2000-Bit-Zufallszahlen zu tun, wobei ichgetrandbitsos.urandomNotImplementedError anstelle von Ref # 1 eine andere Antwort verwendete, aber ich konnte sie in den von mir verwendeten Online-Umgebungen nicht testen, da es sich um Anrufe handelte , die mir Folgendes gaben : Also bin ich stattdessen diesen Weg gegangen. Dies könnte jetzt tatsächlich mit TIO verwendet werden.

Probieren Sie es online aus

#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

Verweise

import random wird als geladen angenommen, da die Frage besagt, dass dies erlaubt ist.

  1. lst = []und lst.append(random.randint(1, 100))- hier

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

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

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

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

  6. print x- Hier

Umbenannt

  1. lst umbenannt in n1 und n2(Ref # 1: Ich habe den gesamten Code zweimal verwendet)

  2. r1und r2umbenannt inn1 und n2(Ref # 2: Ich habe die separaten Variablen später verwendet, um die Karten zuzuweisen und im letzten Druck zu teilen, da die Antwort sie enthielt.)

  3. resultund aumbenannt in abund bumbenannt inn2 (Ref # 3)

  4. aund bumbenannt in n1undn2 (Ref # 4)

  5. firstund some_listbeide umbenannt r1, r2, ab, oder n2, je nachdem , welche Linie. (Ref. 5: Ich habe dies vier Mal verwendet. Beachten Sie, dass nur die erste Zuweisung verwendet wird, sodass ich sie nicht umbenennelast )

  6. xumbenannt wird r1, r2oder ab, je nachdem , welche Linie. (Ref # 6)


1

Dezimalzahl , 2 Verweise

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Verwendete Befehle:

  • 0 SET (Standard Stack Index)
  • 1 DRÜCKEN
    • 2 VERKOHLEN
  • 2 POP
  • 3 I / O
    • 00 doppelter Stapel
    • 01 vom Stack zum STDOUT
  • 4 MATHEMATIK
    • 1 HINZUFÜGEN
    • 2 SUBTRAHIEREN
    • 3 MULTIPLIZIEREN
    • 4 TEILEN
  • 8 BUILTIN
    • 2 Zufällige Ganzzahl zum Stapeln drücken

Erklärte Version:

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

Quellen:

Probieren Sie es online! Sie müssen den Ausgabecache deaktivieren, wenn er nicht automatisch deaktiviert wird.

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.