Какая самая уродливая строка кода R, которая все еще анализирует?


19

Цель состоит в том, чтобы создать одну строку кода R, которая:

  1. Делает как можно меньше
  2. Максимально возможное количество символов (не более 100 символов)
  3. И настолько уродлив, насколько это возможно (где под «уродливым» понимаются неэффективные вычислительные стратегии, посторонние символы, такие как завершающая точка с запятой и т. Д.).

Делай свое худшее, господа!

Объективные критерии для победы

Победивший ответ будет оцениваться по следующей шкале (выигрывает ответ с наибольшим количеством очков):

  • Генерация последовательности от 0 до 10 ( 100 баллов)
  • Как можно больше символов (N)
    • 0 баллов, если N = 100
    • N-100 баллов, если N <100 (то есть теряете балл за каждого персонажа до 100)
    • 2 (100-N) очков, если N> 100 (т.е. теряют два очка за каждого персонажа свыше 100)
  • Используя в качестве многих примеров негативных из R Инферно , как это возможно
    • 6 баллов за приведенный пример
    • Каждый пример имеет значение только один раз. Это так, потому что «еретик, заключенный в пламенную гробницу», может быть заключен в тюрьму только один раз. Таким образом, два глобальных назначения в вашей строке кода принесут вам всего 6 очков.

Не объективные критерии победы. Смотрите FAQ.
dmckee

4
FAQ вы @dmckee :) критерии довольно объективны
Томас

Я попытался сделать критерии еще более четкими. Если критерий 3 все еще недостаточно объективен, я мог бы устранить его, хотя мне это скорее нравится.
Ари Б. Фридман

Я совсем не понимаю новую систему начисления очков. Задача 2 - быть как можно более длинными (не более 100 символов), и вы даете меньше баллов за приближение к 100 (и указываете баллы для программ, длина которых превышает 100 ??!); Цель 3 - быть как можно более уродливой, и вы даете больше очков за более уродливые программы. Значит, очки должны быть хорошими или плохими ?!
Питер Тейлор

@PeterTaylor Отредактировано, чтобы указать, что обе формулы Задачи № 2 дают отрицательные моменты. Очки хороши: «Ответ с наибольшим количеством очков выигрывает».
Ари Б. Фридман

Ответы:


25

72 96 знаков.

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

Уродство:

  • Повторное использование стандартного имени функции
  • Использование символов в качестве имен переменных
  • Глобальное назначение
  • Правильное назначение
  • Самоопределение функции
  • Ненужная конечная точка с запятой
  • Ненужные номера подпрограмм
  • Ненужное цитирование имени переменной
  • Оставляет рабочее пространство в состоянии, которое почти наверняка нарушит любой последующий запуск кода

Создает последовательность 0-10 (спасибо Андри за идею сделать это).

выход:

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

4
Это действительно сумасшедший. Это первый раз, когда я использовал это слово в качестве комплимента. С другой стороны, это отличная работа для кого-то, чтобы де-запутать и извлечь уроки из тщательной критики. Хорошая работа.
Итератор

Brilliant. На макушке уродливые цифры 3,4,5,8,9 находятся в Inferno. Так что это 96 + 6 * 5 = 126 баллов по критериям оценки.
Ари Б. Фридман,

Гениальное решение. Добавлено еще одно безобразие + 100 символов. Замените все "с одинарными кавычками. Имея проблемы с встраиванием."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Генерация последовательности от 0 до 10.

100 знаков

{.=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 символов: создать последовательность от 1 до 10.

Обратите внимание, что цифры 2-10 НЕ в коде ... - Бонусные баллы? :-)

Также обратите внимание, что он использует lapplyдля максимальной производительности :)

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 знаков

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

Не уверен , что, если lapplyна strsplitэто отрицательный пример , но он уверен , что должно быть.

Возвращается как символ:

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

должно иметь чуть менее 100 символов и 0:10


1
Я считаю 98 через nchar, считая пробелы. Хотя в моей системе replicateнельзя использовать символьный вектор в качестве аргумента длины.
Ари Б. Фридман
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.