Qual é a linha mais feia de código R que ainda analisa?


19

O objetivo é produzir uma única linha de código R que:

  1. Faz o mínimo possível
  2. No máximo de caracteres possível (máximo de 100 caracteres)
  3. E é o mais feio possível (onde "feio" pode significar estratégias computacionais ineficientes, caracteres estranhos, como ponto-e-vírgula final e assim por diante).

Faça o seu pior, pessoal!

Critérios objetivos para ganhar

A resposta vencedora será julgada de acordo com a seguinte escala de pontos (a resposta com mais pontos ganha):

  • Gere uma sequência de 0 a 10 ( 100 pontos)
  • No maior número possível de caracteres (N)
    • 0 pontos se N = 100
    • N-100 pontos se N <100 (isto é, perde um ponto para cada personagem abaixo de 100)
    • 2 (100-N) pontos se N> 100 (ou seja, perder dois pontos para cada personagem acima de 100)
  • Usando como muitos exemplos negativos a partir do R Inferno possível
    • 6 pontos por exemplo citado
    • Cada exemplo conta apenas uma vez. Isso ocorre porque um "herege preso em uma tumba flamejante" só pode ser preso uma vez. Assim, duas atribuições globais em sua linha de código representam apenas 6 pontos.

Não é um critério de vitória objetivo. Veja o FAQ.
perfil completo

4
FAQ você @dmckee :) os critérios são bastante objetivo
Tomas

Eu tentei tornar os critérios ainda mais explícitos. Se o critério 3 ainda não for objetivo o suficiente, eu poderia eliminá-lo, embora eu goste.
Ari B. Friedman

Eu não entendo o novo sistema de pontuação. O objetivo 2 deve ser o maior possível (sujeito a no máximo 100 caracteres), e você atribui menos pontos por estar mais próximo de 100 (e especifica pontos para programas com mais de 100 ??!); o objetivo 3 é ser o mais feio possível e você dá mais pontos aos programas mais feios. Então, os pontos devem ser bons ou ruins ?!
Peter Taylor

@PeterTaylor Editado para apontar que as duas fórmulas do objetivo nº 2 produzem pontos negativos. Os pontos são bons: "A resposta com mais pontos vence".
Ari B. Friedman

Respostas:


25

72 96 caracteres.

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

Feiúra:

  • Reutilizando um Nome de Função Padrão
  • Usando símbolos como nomes de variáveis
  • Atribuição global
  • Atribuição correta
  • Auto-redefinição de função
  • Ponto e vírgula final desnecessário
  • Números de sub-script desnecessários
  • Citação desnecessária do nome da variável
  • Deixa a área de trabalho em um estado que quase certamente interromperá qualquer execução de código subsequente

Gera a sequência de 0 a 10 (obrigado a Andrie pela ideia de fazer isso).

resultado:

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

4
Isso é realmente demente. Esta é a primeira vez que usei essa palavra como um elogio. Por outro lado, é um excelente trabalho para alguém ofuscar e aprender com uma crítica cuidadosa. Bom trabalho.
Iterator

Brilhante. Em cima da minha cabeça, os números de feiura 3,4,5,8,9 estão no Inferno. Então isso é 96 + 6 * 5 = 126 pontos pelos critérios de classificação.
Ari B. Friedman

Solução brilhante. Adicionado mais uma feiúra + 100 caracteres. Substituir todos os "com aspas simples questões de incorporação tendo.."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Gere uma sequência 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: gere uma sequência de 1 a 10.

Note que os números 2-10 NÃO estão no código ... - Pontos de bônus? :-)

Observe também que ele usa lapplypara desempenho máximo :)

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

Não tenho certeza se lapplyon strsplité um exemplo negativo, mas com certeza deve ser.

Retorna como um caractere:

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

deve ter um pouco menos de 100 caracteres e de alguma forma produzir 0:10


1
Conto 98 via nchar, contando espaços. Embora no meu sistema replicatenão consiga usar um vetor de caractere como argumento de comprimento.
Ari B. Friedman
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.