Was ist die hässlichste Zeile von R-Code, die noch analysiert wird?


19

Das Ziel ist es, eine einzelne Zeile R-Code zu erzeugen, die:

  1. Macht so wenig wie möglich
  2. In so vielen Zeichen wie möglich (maximal 100 Zeichen)
  3. Und ist so hässlich wie möglich (wobei "hässlich" ineffiziente Rechenstrategien, fremde Zeichen wie ein abschließendes Semikolon usw. bedeuten kann).

Tu dein schlimmstes, sanftes Volk!

Objektive Gewinnkriterien

Die gewinnende Antwort wird anhand der folgenden Punkteskala bewertet (die Antwort mit den meisten Punkten gewinnt):

  • Generiere eine Sequenz von 0 bis 10 ( 100 Punkte)
  • In so vielen Zeichen (N) wie möglich
    • 0 Punkte, wenn N = 100
    • N-100 Punkte, wenn N <100 (dh für jedes Zeichen unter 100 einen Punkt verlieren)
    • 2 (100-N) Punkte, wenn N> 100 (dh zwei Punkte für jedes Zeichen über 100 verlieren)
  • Verwenden Sie so viele negative Beispiele aus dem R Inferno wie möglich
    • 6 Punkte pro angeführtem Beispiel
    • Jedes Beispiel zählt nur einmal. Dies ist so, weil ein "Ketzer, der in einem flammenden Grab eingesperrt ist", nur einmal eingesperrt werden kann. Somit bringen Ihnen zwei globale Zuweisungen in Ihrer Codezeile nur 6 Punkte ein.

Kein objektives Gewinnkriterium. Siehe die FAQ.
dmckee

4
FAQ you @dmckee :) Die Kriterien sind ziemlich objektiv
Tomas

Ich habe versucht, die Kriterien noch deutlicher zu machen. Wenn Kriterium 3 immer noch nicht objektiv genug ist, könnte ich es beseitigen, obwohl es mir eher gefällt.
Ari B. Friedman

Ich verstehe das neue Punktesystem überhaupt nicht. Ziel 2 soll so lang wie möglich sein (maximal 100 Zeichen), und Sie geben weniger Punkte für die Annäherung an 100 (und geben Punkte für Programme an, die länger als 100 ??! Sind); Ziel 3 ist es, so hässlich wie möglich zu sein, und Sie geben mehr Punkte für hässlichere Programme. Sollen Punkte also gut oder schlecht sein ?!
Peter Taylor

@PeterTaylor Bearbeitet, um darauf hinzuweisen, dass beide Ziel # 2-Formeln negative Punkte ergeben. Punkte sind gut: "Die Antwort mit den meisten Punkten gewinnt".
Ari B. Friedman

Antworten:


25

72 96 Zeichen.

`c`<-function(...){list(...)[[-1]];}->>`c`;`[`=0;`]`=10;c(c,c)(c,c)(c,invisible)(`[`[]:`]`[])[];

Hässlichkeit:

  • Wiederverwenden eines Standardfunktionsnamens
  • Verwenden von Symbolen als Variablennamen
  • Globale Zuordnung
  • Richtige Zuordnung
  • Selbstneudefinition der Funktion
  • Unnötige nachgestellte Semikolons
  • Unnötige Subskriptionsnummern
  • Unnötige Angabe des Variablennamens
  • Belässt den Arbeitsbereich in einem Zustand, der mit ziemlicher Sicherheit jede nachfolgende Codeausführung unterbricht

Erzeugt die Sequenz 0-10 (danke an Andrie für die Idee, das zu tun).

Ausgabe:

 [1]  0  1  2  3  4  5  6  7  8  9 10

4
Das ist wirklich wahnsinnig. Dies ist das erste Mal, dass ich dieses Wort als Kompliment verwende. Auf der anderen Seite ist es eine hervorragende Arbeit für jemanden, sich zu enttarnen und aus einer sorgfältigen Kritik zu lernen. Gute Arbeit.
Iterator

Brillant. Aus der Vogelperspektive sind die Hässlichkeitszahlen 3,4,5,8,9 im Inferno. Das sind also 96 + 6 * 5 = 126 Punkte nach den Bewertungskriterien.
Ari B. Friedman

Geniale Lösung. Eine weitere Hässlichkeit + 100 Zeichen hinzugefügt. Ersetzen Sie alle "mit einfachen Anführungszeichen. Mit Einbettungsproblemen."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Erzeugen Sie eine Sequenz von 0 bis 10.

100 Zeichen

{.=0;for(`~1` in c(1,2,3,4,5,6,7,8,9,10)){.=c(., `~1`,recursive=F)};print(unname(.[drop=T]));rm(.)}
 [1]  0  1  2  3  4  5  6  7  8  9 10

5

100 Zeichen: Generieren Sie eine Sequenz von 1 bis 10.

Beachten Sie, dass die Zahlen 2-10 NICHT im Code enthalten sind ... - Bonuspunkte? :-)

Beachten Sie auch, dass es lapplyfür maximale Leistung verwendet :)

unlist(lapply(LETTERS[-(11:26)],function(x) as.integer(charToRaw(x))-as.integer(charToRaw('A'))+1L))
#[1]  1  2  3  4  5  6  7  8  9 10 

2

100 Zeichen

assign("a",1:10);b<<-paste(c(a),collapse=";");unlist(lapply(strsplit(b,";")[[1]],function(c)c[[1]]))

Ich bin nicht sicher, ob lapplyon strsplitein negatives Beispiel ist, aber es sollte es sein.

Gibt als Zeichen zurück:

 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

1
I(cumsum(Reduce("sum", replicate(paste0(as.integer(T),as.integer(T)), T), accumulate=1-F) - T >0))

sollte etwas weniger als 100 Zeichen haben und irgendwie 0:10 produzieren


1
Ich zähle 98 durch nchar, zähle Leerzeichen. Obwohl in meinem System replicateein Zeichenvektor nicht als Längenargument verwendet werden kann.
Ari B. Friedman
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.