Qual è la riga più brutta del codice R che analizza ancora?


19

L'obiettivo è quello di produrre una singola riga di codice R che:

  1. Fa il meno possibile
  2. Nel maggior numero di caratteri possibile (massimo 100 caratteri)
  3. Ed è il più brutto possibile (dove "brutto" può essere inteso come strategie computazionali inefficienti, caratteri estranei come un punto e virgola e così via).

Fai del tuo peggio, gentiluomo!

Criteri oggettivi per vincere

La risposta vincente verrà valutata in base alla seguente scala di punti (la risposta con il maggior numero di punti vince):

  • Genera una sequenza da 0 a 10 ( 100 punti)
  • Nel maggior numero possibile di caratteri (N)
    • 0 punti se N = 100
    • N-100 punti se N <100 (cioè perdi un punto per ogni personaggio inferiore a 100)
    • 2 (100-N) punti se N> 100 (ovvero perdi due punti per ogni personaggio oltre 100)
  • Utilizzando come molti esempi negativi dal R Inferno possibile
    • 6 punti per l'esempio citato
    • Ogni esempio conta solo una volta. Questo perché un "eretico imprigionato nella [a] tomba fiammeggiante" può essere imprigionato solo una volta. Quindi due incarichi globali nella tua riga di codice ti danno solo 6 punti.

Non è un criterio vincente oggettivo. Vedi le FAQ.
dmckee,

4
FAQ @dmckee :) i criteri sono piuttosto oggettivi
Tomas

Ho cercato di rendere i criteri ancora più espliciti. Se il criterio 3 non è ancora abbastanza obiettivo, potrei eliminarlo, anche se mi piace piuttosto.
Ari B. Friedman,

Non capisco affatto il nuovo sistema di punteggio. L'obiettivo 2 deve essere il più lungo possibile (soggetto a un massimo di 100 caratteri) e assegnare meno punti per essere più vicino a 100 (e specificare punti per programmi più lunghi di 100 ??!); l'obiettivo 3 è quello di essere il più brutto possibile e dare più punti a programmi più brutti. Quindi i punti dovrebbero essere buoni o cattivi ?!
Peter Taylor,

@PeterTaylor Modificato per sottolineare che entrambe le formule dell'obiettivo n. 2 producono punti negativi. I punti sono buoni: "La risposta con il maggior numero di punti vince".
Ari B. Friedman,

Risposte:


25

72 96 caratteri.

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

Bruttezza:

  • Riutilizzare un nome di funzione standard
  • Utilizzo dei simboli come nomi di variabili
  • Incarico globale
  • Assegnazione corretta
  • Auto-ridefinizione della funzione
  • Punto e virgola finale non necessari
  • Numeri di sub-scripting non necessari
  • Quotazione non necessaria del nome della variabile
  • Lascia l'area di lavoro in uno stato che quasi sicuramente interromperà qualsiasi successiva esecuzione del codice

Genera la sequenza 0-10 (grazie ad Andrie per l'idea di farlo).

produzione:

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

4
Questo è veramente demente. Questa è la prima volta che uso questa parola come un complimento. D'altra parte, è un lavoro eccellente per qualcuno da de-offuscare e imparare da un'attenta critica. Buon lavoro.
Iteratore

Brillante. In cima alla mia testa, i numeri di bruttezza 3,4,5,8,9 sono nell'Inferno. Quindi questo è 96 + 6 * 5 = 126 punti in base ai criteri di classificazione.
Ari B. Friedman,

Soluzione brillante. Aggiunta un'altra bruttezza + 100 caratteri. Sostituisci tutto "con virgolette singole. Problemi di incorporamento."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo,

7

Genera una sequenza da 0 a 10.

100 caratteri

{.=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 caratteri: genera una sequenza da 1 a 10.

Nota che i numeri 2-10 NON sono nel codice ... - Punti bonus? :-)

Si noti inoltre che utilizza lapplyper le massime prestazioni :)

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 caratteri

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

Non sono sicuro che lapplyon strsplitsia un esempio negativo ma sicuramente dovrebbe esserlo.

Ritorna come personaggio:

 [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))

dovrebbe avere leggermente meno di 100 caratteri e in qualche modo produrre 0:10


1
Conto 98 via nchar, contando gli spazi. Sebbene sul mio sistema replicatenon possa prendere un vettore di carattere come argomento di lunghezza.
Ari B. Friedman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.