¿Cuál es la línea más fea de código R que aún se analiza?


19

El objetivo es producir una sola línea de código R que:

  1. Hace lo menos posible
  2. En tantos caracteres como sea posible (máximo de 100 caracteres)
  3. Y es lo más feo posible (donde "feo" puede tomarse como estrategias computacionales ineficientes, caracteres extraños como un punto y coma de terminación, etc.).

¡Haz lo peor, caballeros!

Criterios objetivos para ganar

La respuesta ganadora se evaluará de acuerdo con la siguiente escala de puntos (la respuesta con más puntos gana):

  • Generar una secuencia de 0 a 10 ( 100 puntos)
  • En tantos caracteres (N) como sea posible
    • 0 puntos si N = 100
    • N-100 puntos si N <100 (es decir, perder un punto por cada personaje menor de 100)
    • 2 (100-N) puntos si N> 100 (es decir, perder dos puntos por cada personaje de más de 100)
  • Usando tantos ejemplos negativos del Infierno R como sea posible
    • 6 puntos por ejemplo citado
    • Cada ejemplo solo cuenta una vez. Esto es así porque un "hereje encarcelado en [una] tumba en llamas" solo puede ser encarcelado una vez. Por lo tanto, dos asignaciones globales en su línea de código solo le dan 6 puntos.

No es un criterio ganador objetivo. Ver las preguntas frecuentes.
dmckee

44
FAQ you @dmckee :) los criterios son bastante objetivos
Tomás

He intentado hacer que los criterios sean aún más explícitos. Si el criterio 3 todavía no es lo suficientemente objetivo, podría eliminarlo, aunque prefiero.
Ari B. Friedman

No entiendo el nuevo sistema de puntuación en absoluto. El objetivo 2 es ser lo más largo posible (sujeto a un máximo de 100 caracteres), y otorgará menos puntos por estar más cerca de 100 (y especificará puntos para programas de más de 100 ??); El objetivo 3 es ser lo más feo posible y dar más puntos por programas más feos. ¿Entonces se supone que los puntos son buenos o malos?
Peter Taylor

@PeterTaylor Editado para señalar que ambas fórmulas del Objetivo # 2 producen puntos negativos. Los puntos son buenos: "La respuesta con más puntos gana".
Ari B. Friedman

Respuestas:


25

72 96 caracteres.

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

Fealdad:

  • Reutilizando un nombre de función estándar
  • Usando símbolos como nombres de variables
  • Asignación global
  • Asignación correcta
  • Autodefinición de la función.
  • Puntos y comas innecesarios
  • Números de subcriptación innecesarios
  • Cita innecesaria del nombre de la variable
  • Deja el espacio de trabajo en un estado que seguramente romperá cualquier ejecución de código posterior

Genera la secuencia 0-10 (gracias a Andrie por la idea de hacer eso).

salida:

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

44
Eso es realmente demente. Esta es la primera vez que uso esa palabra como un cumplido. Por otro lado, es un excelente trabajo para que alguien se ofusque y aprenda de una crítica cuidadosa. Buen trabajo.
Iterator

Brillante. Fuera de mi cabeza, los números de fealdad 3,4,5,8,9 están en el Infierno. Entonces eso es 96 + 6 * 5 = 126 puntos según los criterios de calificación.
Ari B. Friedman

Solución brillante Se agregó una fealdad más + 100 caracteres. Reemplace todos los "con comillas simples. Tiene problemas de incrustación."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Genera una secuencia de 0 a 10.

100 caracteres

{.=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 caracteres: genera una secuencia del 1 al 10.

Tenga en cuenta que los números del 2 al 10 NO están en el código ... - ¿Puntos de bonificación? :-)

También tenga en cuenta que se utiliza lapplypara obtener el máximo rendimiento :)

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 caracteres

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

No estoy seguro si lapplyon strsplites un ejemplo negativo, pero seguramente debería serlo.

Devuelve como un personaje:

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

debería tener un poco menos de 100 caracteres y de alguna manera producir 0:10


1
Cuento 98 via nchar, contando espacios. Aunque en mi sistema replicateno puedo tomar un vector de caracteres como argumento de longitud.
Ari B. Friedman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.