Jaka jest najbrzydsza linia kodu R, która wciąż analizuje?


19

Celem jest stworzenie pojedynczego wiersza kodu R, który:

  1. Robi jak najmniej
  2. W jak największej liczbie znaków (maksymalnie 100 znaków)
  3. I jest tak brzydki, jak to tylko możliwe (gdzie „brzydki” może oznaczać nieefektywne strategie obliczeniowe, obce znaki, takie jak średnik kończący itd.).

Rób swoje najgorsze, gentelfowie!

Obiektywne kryteria wygranej

Zwycięska odpowiedź zostanie oceniona według następującej skali punktowej (wygrywa odpowiedź z największą liczbą punktów):

  • Wygeneruj sekwencję od 0 do 10 ( 100 punktów)
  • W jak największej liczbie znaków (N)
    • 0 punktów, jeśli N = 100
    • N-100 punktów, jeśli N <100 (tj. Stracisz punkt za każdą postać poniżej 100)
    • 2 (100-N) punktów, jeśli N> 100 (tj. Stracisz dwa punkty za każdą postać powyżej 100)
  • Stosując jako liczne przykłady negatywnych z R Inferno możliwie
    • 6 punktów za przytoczony przykład
    • Każdy przykład liczy się tylko raz. Jest tak, ponieważ „heretyka uwięzionego w płonącym grobie” można tak uwięzić tylko raz. Zatem dwa globalne zadania w linii kodu dają ci tylko 6 punktów.

Nie obiektywne kryteria wygranej. Zobacz FAQ.
dmckee

4
FAQ you @dmckee :) kryteria są dość obiektywne
Tomas

Starałem się, aby kryteria były jeszcze bardziej wyraźne. Jeśli kryterium 3 nadal nie jest wystarczająco obiektywne, mógłbym je wyeliminować, chociaż raczej mi się podoba.
Ari B. Friedman

W ogóle nie rozumiem nowego systemu punktacji. Cel 2 ma być jak najdłuższy (z zastrzeżeniem maksymalnie 100 znaków), a ty dajesz mniej punktów za zbliżenie się do 100 (i określasz punkty dla programów dłuższych niż 100 ??!); cel 3 to bycie tak brzydkim, jak to możliwe, a ty dajesz więcej punktów za brzydsze programy. Czy więc punkty mają być dobre czy złe ?!
Peter Taylor

@PeterTaylor Zredagowano, aby wskazać, że obie formuły celu 2 generują punkty ujemne. Punkty są dobre: ​​„Wygrywa odpowiedź z największą liczbą punktów”.
Ari B. Friedman

Odpowiedzi:


25

72 96 znaków.

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

Brzydota:

  • Ponowne użycie standardowej nazwy funkcji
  • Używanie symboli jako nazw zmiennych
  • Przydział globalny
  • Właściwe zadanie
  • Samookreślenie definicji funkcji
  • Niepotrzebne końcowe średniki
  • Niepotrzebne numery subskryptowe
  • Niepotrzebne cytowanie nazwy zmiennej
  • Pozostawia obszar roboczy w stanie, który prawie na pewno zepsuje kolejne uruchomienie kodu

Generuje sekwencję 0-10 (dzięki Andrie za pomysł, aby to zrobić).

wynik:

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

4
To jest naprawdę szalone. Po raz pierwszy użyłem tego słowa jako komplementu. Z drugiej strony jest to świetna robota dla kogoś, kto chce zaciemnić i uczyć się na podstawie uważnej krytyki. Dobra robota.
Iterator,

Znakomity. Z czubka mojej głowy, firmy 3,4,5,8,9 znajdują się w Inferno. To 96 + 6 * 5 = 126 punktów według kryteriów oceny.
Ari B. Friedman

Genialne rozwiązanie. Dodano jeszcze jedną brzydotę + 100 znaków. Zastąp wszystkie „pojedynczymi cudzysłowami. Problemy z osadzaniem."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Wygeneruj sekwencję od 0 do 10.

100 znaków

{.=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 znaków: generuj sekwencję od 1 do 10.

Zauważ, że liczby 2-10 NIE są w kodzie ... - Punkty bonusowe? :-)

Pamiętaj też, że używa lapplydo maksymalnej wydajności :)

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 znaków

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

Nie jestem pewien, czy lapplyon strsplitjest negatywnym przykładem, ale na pewno powinien.

Zwraca jako postać:

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

powinien mieć nieco mniej niż 100 znaków i jakoś wygenerować 0:10


1
Liczę 98 poprzez nchar, licząc spacje. Chociaż w moim systemie replicatenie mogę przyjąć wektora znaków jako argumentu długości.
Ari B. Friedman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.