여전히 구문 분석되는 가장 추악한 R 코드 줄은 무엇입니까?


19

목표는 다음과 같은 단일 행의 R 코드를 생성하는 것입니다.

  1. 가능한 한 적게한다
  2. 가능한 한 많은 문자로 (최대 100 자)
  3. 그리고 가능한 한 못생긴 것입니다 ( "못생긴"은 비효율적 인 계산 전략, 종료 세미콜론과 같은 외부 문자 등을 의미 할 수 있습니다).

당신의 최악의 신사를하십시오!

승리를위한 객관적인 기준

당첨 답변은 다음 점수 척도에 따라 판단됩니다 (가장 많은 점수를 얻은 답변).

  • 0에서 10까지 시퀀스 생성 ( 100 포인트)
  • 가능한 많은 문자 (N)
    • N = 100 인 경우 0 점
    • N <100 인 경우 N-100 포인트 (즉 100 미만의 모든 문자에 대해 포인트를 잃음)
    • N> 100 인 경우 2 (100-N) 포인트
  • 로부터 많은 부정적인 예로서 사용 R 지옥 가능한
    • 인용 된 예당 6 점
    • 각 예는 한 번만 계산합니다. "불타는 무덤에있는 이단자"는 한 번만 투옥 될 수 있기 때문이다. 따라서 코드 라인에서 2 개의 전역 할당은 6 포인트 만 가능합니다.

객관적인 승리 기준이 아닙니다. FAQ를 참조하십시오.
dmckee

4
자주 묻는 질문 @dmckee :) 기준은 꽤 객관적입니다
Tomas

나는 기준을 더욱 명확하게 만들려고 노력했다. 기준 3이 여전히 객관적이지 않다면, 나는 그것을 좋아하지만 제거 할 수 있습니다.
Ari B. Friedman

새로운 점수 시스템을 전혀 이해하지 못합니다. 목표 2는 가능한 한 길어야하며 (최대 100 자에 따라 다름) 100에 가까워 질수록 더 적은 점수를 부여합니다 (100보다 긴 프로그램에 대해서는 포인트를 지정 하시겠습니까?!). 목표 3은 가능한 한 못 생겨야하며, 추악한 프로그램에 더 많은 점수를줍니다. 그렇다면 점수가 좋거나 나쁘다고 생각됩니까?!
피터 테일러

@PeterTaylor 두 Objective # 2 수식 모두 음수를 생성하도록 수정되었습니다. 점수가 좋다 : "가장 많은 점수를 얻은 답이 이긴다".
아리 B. 프리드먼

답변:


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
그것은 진정으로 demented입니다. 이 단어를 칭찬으로 사용한 것은 이번이 처음입니다. 반면에, 누군가가 신중한 비판을 통해 난독 화를 배우고 배우는 것은 훌륭한 일입니다. 잘 했어.
Iterator

훌륭한. 내 머리 꼭대기에서 못생긴 숫자 3,4,5,8,9는 인페르노에 있습니다. 따라서 채점 기준으로 96 + 6 * 5 = 126 포인트입니다.
Ari B. Friedman

훌륭한 솔루션. 추한 + 100 문자를 하나 더 추가했습니다. 모든 "를 작은 따옴표로 "<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
바꾸

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
nchar공백을 계산 하여를 통해 98을 계산합니다. 내 시스템 replicate에서는 문자 벡터를 길이 인수로 사용할 수 없습니다.
Ari B. Friedman 23.40.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.