Ich experimentiere mit einer neuen Plattform und versuche, ein Programm zu schreiben, das sich mit Strings befasst, die nicht länger als 60 Zeichen sind. Ich möchte den Datenspeicher mit einigen berühmten oder bekannten kleinen Codestücken und füllen Gleichungen, da Programmierung und Mathematik zum Thema meiner Software gehören. Der Code kann in einer beliebigen Sprache und mit Gleichungen aus einer beliebigen mathematischen Disziplin verfasst sein, sofern sie nicht länger als 60 Zeichen sind. Ich vermute, die Leute werden für diesen einen Brainfuck machen .
Beispielsweise,
#include<stdio.h>
int main(){printf ("Hi World\n");return 0;}
Genau 60 Zeichen!
Vielen Dank für Ihre Weisheit!
algorithms
source-code
BeachRunnerJoe
quelle
quelle
Antworten:
Die klassische C-String-Kopierroutine ist an diesen Tagen immer weniger Menschen bekannt:
quelle
if (alarm = red) launchNukes();
-Falle behebt ). Dijkstra würde diesen Code für mehr als schädlich halten. Ich stimme zu, dass ein C-Programmierer diesen Code unbedingt verstehen muss, aber ich denke, es ist wichtiger, dass er weiß, wie er es besser machen kann.nicht eine Zeile, aber ich präsentiere The World's Last C Bug:
quelle
LaunchNukes();
Ich sehe Conways Spiel des Lebens in APL viel herumschwirren:
Ein zusätzlicher Bonus ist, dass dies sicherstellt, dass Sie den Unicode korrekt handhaben.
quelle
Eine modifizierte Version eines berühmten Perl-Einzeilers:
Dieser reguläre Ausdruck stimmt mit Zeichenfolgen überein, deren Länge prim ist.
Die Originalversion ist:
das passt zu Strings, die aus einer Primzahl von 1s bestehen.
quelle
Schnelle Sorte:
Wenn die Liste leer ist, ist das sortierte Ergebnis die leere Liste.
Wenn die Liste mit dem Element x beginnt und der Rest der Liste xs ist, ist das sortierte Ergebnis eine Liste, die aus der sortierten Liste besteht, die aus allen Elementen in xs besteht, die kleiner als x sind, und mit dem Element x verknüpft ist, das mit der sortierten Liste aller Elemente verknüpft ist Elemente in xs größer als x.
(oder mit anderen Worten - teilen Sie in zwei Stapel, alle kleiner als x und alle größer als x, sortieren Sie beide und erstellen Sie eine Liste mit dem Stapel kleiner als, dem Element x und dem Stapel größer als).
Übertrifft die Verständlichkeit der C-Version ganz leicht.
quelle
qsort (x:xs) = qsort lesser ++ equal ++ qsort greater where (lesser,equal,greater) = part x xs ([],[x],[])
Die Ackerman-Funktion . Die Implementierung der Ackermann-Péter-Version sollte in 60 Zeichen passen :)
Diese schöne hexadezimale Konstante: 0x5f3759df. Es ist das Herzstück des WTFing-Codes, den ich je gesehen habe: die schnelle Quadratwurzel .
Der berühmte XOR-Tausch .
question = /(bb|[^b]{2})/
quelle
Als ich die Bash-Gabelbombe zum ersten Mal herausgefunden habe, fand ich sie wirklich süß.
quelle
und seine Ableitungen scheinen populär zu sein. :-)
quelle
Da Sie Gleichungen erwähnen, gehört diese auf Ihre Liste:
( Wolfram Alpha Rendering : )
quelle
e^{i/pi} = i^2
i² == -1
, dass Sie die Gleichung ausgleichen können, indem Sie eine von beiden Seiten abziehen, die entfernen+1
und die=0
auf-1
oderi²
So erkennen Sie gerade Zahlen:
quelle
!(x%2)
in vernünftigen Sprachen.!(x & 1)
in Sprachen, ohne den Compiler zu optimieren.import this
in Python.BEARBEITEN, da Kommentare keine Zeilenumbrüche enthalten dürfen: Für Benutzer ohne einen handlichen Python-Interpreter ist dies die Ausgabe
quelle
Nicht ganz zwei Zeilen, aber ich würde sagen, das ist ziemlich berühmt:
Tatsächlich können einige Sprachen es in einer Zeile beschreiben. Lua kommt in den Sinn, aber es gibt noch mehr.
quelle
Mein Lieblingsbeispiel für eine Lambda-Rechnung ist der Y-Kombinator:
quelle
Aus einer Übung in K & R folgt eine Funktion, die zurückgibt, wie viele Bits in der angegebenen Zahl gesetzt sind. Bei 58 Zeichen:
Es dauert eine Zeit, die proportional zur Anzahl der gesetzten Bits ist. Der "ah ha" Teil hier ist das
Entfernt das am weitesten rechts gesetzte Bit von
n
.quelle
Rekursives Pascal-Dreieck in einer Zeile (Haskell)
Fügen Sie zweiundfünfzig Zeichen nach Belieben Leerzeichen hinzu. Mit freundlicher Genehmigung von "Ephemient" im Kommentar hier .
Ich dachte, dies sei ein besseres Beispiel als die kryptischen, aber kurzen Lösungen in J und K (obwohl ich noch kein Haskell-Benutzer bin).
quelle
Unix Roulette (GEFAHR!)
Mit freundlicher Genehmigung von Bigowns Antwort im Scherz-Thread (und dem Kommentar):
(Das ist 62 Zeichen lang, sodass Sie den Kommentar (würde es so funktionieren?) Oder einige nicht wesentliche Leerzeichen entfernen können.)
quelle
Unendliche Fibonacci-Sequenz (Haskell)
quelle
fibs = 0 : scanl (+) 0 fibs
?Dies ist einer der teuersten Fehler in der Geschichte. Diese Fortran-Anweisung weist der genannten Variablen den Gleitkommawert 1,3 zu
DO10I
.Der richtige Code - der Header der sich wiederholenden Schleifenanweisungen bis zur Anweisung mit der Bezeichnung 10 und die Schleifenvariable,
I
die die Werte 1, 2, 3 akzeptiert:quelle
Duffs Gerät :
Tom Duff entrollte einen speicherabgebildeten Port, der in eines der bizarrsten C-Konstrukte geschrieben wurde, die die Welt je gesehen hat.
quelle
Alles, was mit Hello World zu tun hat, fällt mir ein. Sie können verschiedene Varianten wählen, wenn Sie mehrere Sprachen speichern möchten.
Für etwas Nicht-Trivialeres gibt es Fibbonacci .
quelle
Die obige Zeile von Scala-Code-Partitionen
people
(eine Liste vonPerson
s) in zwei Listen, basierend auf ihrem jeweiligen Alter.Um das Gleiche in Java zu tun, ist der folgende Code erforderlich:
quelle
Tauschen Sie die Werte zweier Variablen aus, ohne eine dritte Variable zu verwenden. Dies ist eines der ersten Dinge in der Programmierung, die mir gesagt wurden und ich dachte "Hmm ... das ist cool"
quelle
XOR
s machen kannst , aber das war mein bisschen Nostalgie für heute :)Schwarze Magie von John Carmack
quelle
Die größte Zahl, die durch 8 Byte (Python) dargestellt werden kann
quelle
Bedingter Operator :
minVal = (a <b)? a: b;
Schaltergehäuse
für jede Schleife [Java]
quelle
!
den unären Operator oder+
den binären Operator nicht aufrufen würden . Es ist einfach nicht genau.?:
der bedingte Operator ist;)Dieses Quine aus der Jargon-Datei in C:
Es gibt auch eine LISP-Version, aber Sie können viele andere finden , die in so ziemlich jeder Sprache schweben, die Sie sich vorstellen können ...
quelle
eulers Identität, die die schönsten Zahlen im mathematischen Universum verknüpft: 1, 0, e, i und π: e ^ i (π) + 1 = 0
quelle
Ich hatte eine gute und schrieb sie am Rande auf.
quelle
Wahrscheinlich nicht berühmt, aber einer meiner Favoriten. Für die meisten ist es nicht sofort ersichtlich, warum es funktioniert.
quelle
Dies ist etwas mehr als 60 Zeichen, aber es hängt wirklich von der Benennung der Variablen ab (also schließe ich es ein!)
lies readLines (rdr: StreamReader) =
seq {während nicht rdr.EndOfStream
rdr.ReadLine ()} ergibt
Schöne kleine Funktion, um eine Datei Zeile für Zeile in F # in eine Sequenz einzulesen.
quelle