예약 된 JavaScript


41

ECMAScript를 2015 년으로, 자바 스크립트가 33 개 예약 된 키워드 등, break, constnew뿐만 아니라 10 개 앞으로 예약 된 키워드 등, letawait.

귀하의 작업은 기능적인 JavaScript 코드 3 을 작성하면서 가장 많은 수의 연속 된 1 개의 고유 예약 키워드 2를 연결 하는 것 입니다.

  1. 연속 예약 키워드-공백 및 / 또는 괄호 및 / 또는 중괄호로만 분리 된 예약 키워드입니다.
  2. 예약 키워드 -ECMAScript 2015 기준 예약 또는 향후 예약 키워드 . 기존 표준에서 예약 된 키워드는 제외되며 허용되는 키워드의 전체 목록은 다음과 같습니다.
  3. 기능 코드-코드가 실행되고 (필요한 경우 런타임 상태) 결국 중단되고 런타임 오류가 발생하지 않아야합니다.

코드에 특정 런타임이 필요한 경우 지정된 환경에서 사용 된 예약 키워드가 작동하지 않아야합니다.

예약 키워드 목록

채점 및 예

귀하의 점수는 연속 된 고유 예약 키워드의 최대 개수와 같습니다.
동일한 점수의 경우 가장 짧은 소스 코드 (바이트)가 이깁니다. 주석 처리 된 섹션과 문자열은 예약 된 키워드에는 포함되지 않지만 바이트 수에는 포함됩니다.

// score: 3
if (true) 0; else throw function() {}
             ^------------------^
// score: 2
let foo = typeof typeof void typeof void 0;
                             ^---------^
// score: 0
/* typeof default debugger */

// score: 0, doesn't halt or debugger is no-op, depending on the environment
debugger;

표준 허점이 적용됩니다.


관심있는 사람들을위한 샌드 박스 토론 .
Nit

키워드 사이에 괄호를 허용하지 않으면 더 흥미로울 것 같습니다.
밀 마법사

줄 바꿈이 허용됩니까?
l4m2

@ l4m2 예, 공백입니다.
Nit

1
@ l4m2 줄 바꿈없이 동일한 43 포인트 솔루션이 가능하므로 아마도 당신이하려는 포인트를 이해하지 못했을까요?
Nit

답변:


53

43 워드, 603 바이트

음, 허점인가요? 나는 이것이 합법적 인 JS인지 어떻게 알지 모르지만 작동하며 모든 단일 키워드를 사용합니다.

new (class await
{
    break(){}
    case(){}
    catch(){}
    const(){}
    continue(){}
    debugger(){}
    default(){}
    delete(){}
    do(){}
    else(){}
    enum(){}
    export(){}
    extends(){}
    finally(){}
    for(){}
    function(){}
    if(){}
    implements(){}
    import(){}
    in(){}
    instanceof(){}
    interface(){}
    let(){}
    package(){}
    private(){}
    protected(){}
    public(){}
    return(){}
    static(){}
    super(){}
    switch(){}
    this(){}
    throw(){}
    try(){}
    typeof(){}
    var(){}
    void(){}
    while(){}
    with(){}
    yield(){}
})

3
JS에 익숙하지는 않지만 ... 이 문맥에서 사용될 때 실제로 키워드 입니까, 키워드와 같은 어휘 구조를 가지고 있고 따옴표를 피하기 위해 설탕을 사용하는 문자열입니까?
Leushenko

1
@Leushenko 아마도 두 번째 (아마도 JS에 익숙하지는 않지만)는 사용되는 방식으로 함수 이름처럼 보입니다. 그러나 일반적으로 이러한 키워드를 함수 또는 클래스 이름으로 사용할 수는 없지만 Siguza는 여전히 괄호와 괄호 만 사용하는 챌린지 규칙을 준수하면서 여전히 키워드를 사용 했습니다. 다른 답변의 대부분이 실제로 키워드 AS 키워드를 사용하는 것이 더 인상적이지만, 내가 말하고 싶은 모든 단어 로이 도전을 완료하는 좋은 발견 . 나에게서 여전히 +1, 우리에게는 승자가있는 것 같습니다.
Kevin Cruijssen

6
왜 그래? 그렇게 간단하게 할 수있을 때 지나치게 복잡하게 보이는 이유는 무엇입니까? 코드 골프는 일반적으로 가능한 한 짧은 작업을 수행하지만 개인적으로는 여전히 가독성과 단순성을 어느 정도 확장하여 유지하는 것을 선호합니다 (이것은 코드 골프 도전이 아닙니다). 몇 가지 예 : 내가 사용하는 것을 선호 -1, i+1, i-1~0, -~i, ~-iI, 그것은 분명 그냥 있기 때문에 코드 골프와 너무 익숙하지 않은 사람들을 위해 읽을 수있을 때 ~아직. 나는 물론 항상 사용합니다 비록 i+~ji-~j골프 그 단일 바이트 i-j-1i+j+1. ;)
Kevin Cruijssen

2
예, 더 매시하고 바이트 카운트를 낮추려고 시도했습니다 ... 같은 시작 if(this)return void typeof function(){} else debugger은 생각해 내기가 어렵지 않지만 그 후에는 추악합니다. 하지만 그들 중 일부는 당신이 - 그리고 네, 이것은 완전히 식별자로 키워드를 전환 해야 하기에 (예를 사용할 수 있도록 enum). 방금 극단적으로 가져 갔지만 코드 골프가 무엇입니까? : P
Siguza

1
@Magic 아니요, 클래스 메서드의 이름을 제공하는 것은 리터럴 토큰이 예약어 인 경우에도 속성 이름으로 취급되는 문법적 컨텍스트입니다. 이것은 기본적으로 동일하게 의미 적으로 동일합니다 obj["break"] = function (){}.
apsillers

53

37 단어

if (void this) {
  do {
    with (protected)
      for (public in private)
        typeof static instanceof new (function implements() {
          var let
          try {
            throw (class extends {} {})
          } catch (package) {
            yield
          } finally {
            debugger
          }
          return
        })()
    continue
    break
  } while (interface)
} else {
  switch (delete await) { default : 42 }
}

사용되지 않은 키워드 :

  • case 필요하다 :
  • const 필요하다 =
  • export 엄격한 모드가 필요합니다
  • import 엄격한 모드가 필요합니다
  • super 필요하다 constructor

7
나는 웃었다는 것을 인정한다
nicael

48
일반적인 Java 상용구 코드처럼 보입니다 (예 : 계산) 1 + 2.
Eric Duminil

2
@EricDuminil 이것이 _Java_Script라고하는 실제 이유입니다.
wizzwizz4

5
@EricDuminil 그다지 간단하지 않습니다 1 + 2. 이 코드의 완전한 가치는 삶, 우주 및 모든 것의 궁극적 인 문제에 대한 해답입니다. 그건 복잡한 . :)
tsh

2
이것은 단지 훌륭합니다.
Pedro A

30

43 워드, 302 299 바이트

switch(void function(){for(const interface in public)do with(package)try{break}catch(private){if(typeof
this)throw yield static instanceof new class extends await{case(){return}super(){debugger}import(){}export(){}enum(){}}
else continue}finally{delete let}while(protected)var implements}){default:}

이론적 인 하한 277 (각 두 단어는 1 바이트로 분리)
l4m2

잘하셨습니다 enum. 현재는 실종 상태 입니다.
Nit

10

21 24 26 워드, 185 바이트

Arnauld 덕분에 + 1 2 단어, +1 ~ 12Me21!

void(function(){do{with({})if(typeof true in this)throw{}instanceof new(class extends{}{})
else return delete{}
try{break}finally{yield}
continue
}while(false)})()
switch({}){case{}:{}}

내가 도전을 이해했다고 가정하면, 이것은 24 단어를 득점합니다. 괄호, 대괄호 및 공백이없는 단어 :

void function do with if typeof true in this throw instanceof new class extends else return delete try break finally yield continue while false switch case

24 워드, 177 바이트

"true"와 "false"가 없으면 질문에 따른 키워드가 아닌 것 같습니다.

void(function(){do{with({})if(typeof{}in this)throw{}instanceof new(class extends{}{})
else return{}
try{break}finally{yield}
continue
}while(delete{})})()
switch({}){case{}:{}}

말:

void function do with if typeof in this throw instanceof new class extends else return try break finally yield continue while delete switch case

(실수로 대신 편집의 내 댓글을 삭제, 내용이었다 :) "당신이 생각하는 (그냥 아무것도 돌려주지 참 /의 거짓 대신에 {} 삭제 사용할 수 있습니다"
12Me21

아. 넵. 나는 그 규칙에 많은 관심을 기울이지 않았다.
Arnauld

당신은 넣을 수 있습니다 case ... :또는 default:(이후 끝에 :키워드 사이에 허용되지 않음)
12Me21

Ot for(let _;0;);+2 단어로 끝날 수는 있지만 case더 이상 사용할 수는 없습니다 .
Arnauld

switch({}){case{}:{}}=> switch({}){case{}:;}? ;때때로 필요한지 모른다
l4m2

6

38 39

class await {}
class g extends await {
 constructor() {
  super()
 }
}
switch ({}) {
 case function(){
  for (let in public)
  do with(package){
   try{break}catch(private){
   if(typeof this)
    throw static instanceof new (class extends await {})
   else{continue}}finally{debugger}
  }while(void protected)
  var implements
  return 
  yield delete interface
  const a=0
 }:
}

"super"에서 "const"까지의 단어

골프 버전 :

class e{}class g extends e{constructor(){super()}}switch({}){case
function(){for(let in public)do with(package)try{break}catch(private){if(typeof
this)throw static instanceof new(class extends await{})
else{continue}}finally{debugger}while(void protected)
var implements
return 
yield delete interface
const a=0}:}

지금 골프 시간입니까?
l4m2

내가지고있어 Uncaught SyntaxError: Unexpected token delete내가 구글 크롬에 내 자바 스크립트 콘솔에서 답을 실행하려고하면 어떻게 솔루션이 유효한 경우 테스트 할 수 있습니다?
Ferrybig

@Ferrybig Firefox를 사용하는데 제대로 작동합니다. 시스템으로 인해 새 버전의 Chrome을 설치할 수 없습니다
l4m2

Firefox에서이 오류가 발생합니다SyntaxError: yield expression is only valid in generators
TheChetan

나는 ff 52.7.2
l4m2를 사용합니다.

4

21 단어

( let및 확실하지 않음 await)

var await=String, let=String;
switch (await) {
    case void typeof new await instanceof let in (function()
{do{try{return this
if((class extends{}{})){}else{break}}finally{(delete {})}}while(false)})():break;
}

, =그리고 ;구분자로 사용할 수 없습니다.
user202729

2
그들은 계산되지 않습니다
soktinpk

3

43 워드, 300 바이트

with(this)try{let protected}catch(package){if(delete yield)for(const interface in typeof public)do{throw implements instanceof private}while(static)else debugger}finally{switch(void new class extends function(){return}{export(){var await}import(){break}super(){continue}enum(){}case(){}}){default:0}}

더 읽기 쉽게 :

with(this)
    try {
        let protected
    } catch(package){
        if(delete yield)
            for(const interface in typeof public)
                do {
                    throw implements instanceof private
                } while(static)
        else
            debugger
    } finally {
        switch(
          void new class extends function(){return} {
              export(){var await}
              import(){break}
              super(){continue}
              enum(){}
              case(){}
          }
        ){
            default:0
        }
    }

나는 "예약 된 단어를 메소드 이름으로"사용해야했다.

  • case(내가 이미 default와 함께 사용했기 때문에 swtich),
  • exportimport(모듈 모드는 항상 엄격하기 때문에 어떤 자격을 상실 with)
  • super(속성에 접근하거나 constructor기능에 배치해야하기 때문에 )
  • enum (문법적으로 유효하지 않은 예약어이므로 전혀 사용할 수 없음)

39 개의 솔루션 쇼 super는 이름없이 처음에 나타날 수 있지만 너무 비쌉니다
l4m2

3

14 15 16 괄호 나 줄 바꿈이없는 단어

!function(){if(0);else do throw yield new public in void typeof this instanceof class await extends function async(){}{};while(0)}

KEUMHEE L 님, 감사합니다.


생성기 함수로 만들 수 있습니까 yield?
Bergi

나는 이것이 무엇을하는지 알아 내려고 노력했지만 머리가 돌아 가기 시작했다. 설명을 게시 해 주시겠습니까?
Philipp

나는군요 Uncaught SyntaxError: Unexpected token new내 자바 스크립트 콘솔 내부에 붙여 넣을 때
Ferrybig

1
@Ferrybig은 대체 function와 함께 function*이 발전기로 인식 할 수 있도록.
guest-418

2

대괄호없는 28 단어, 234 바이트

식별자 정의를 메소드 정의 이름으로 사용하는 것이 너무 분명했습니다 ( 적어도 나에게는 ). 그래서 코드 스 니펫에서 예약어와 공백의 가장 긴 연속적인 고유 시퀀스를 찾고있었습니다.

죽은 코드 return가 허점으로 간주되지 않기를 희망 하지만 사용 된 식별자가 선언되면 코드를 계속 실행할 수 있습니다.

function*_(){implements:{
let private
var public
return yield typeof static
delete protected
throw new interface in package
break implements
debugger
void this instanceof class await extends function async(){}{}
do
continue
while(0)}}

이것은 미래의 예약 키워드 중 일부가 ES5.1의 엄격한 모드 에서만 유효하지 않은 것으로 간주 된다는 사실을 이용 합니다 (분명히 엔진이 ES3의 미래 예약어를 모두 차단하지 않으므로 웹에서 너무 많은 코드를 사용했기 때문에) ).

마찬가지로 ES8에 도입 된 asyncawait토큰은 엄격 모드의 키워드로만 간주됩니다.


breakcontinue가?
l4m2

함수를 호출하면 얻을 수 Uncaught SyntaxError: Undefined label 'implements'있습니다. 응답에 특정 런타임이 필요합니까?
Nit

@Nit Oops, 나는 실제로 그것을 부르지 않았고, 그것이 구문 적으로 허용되는지 (그리고 최적화 된 prosaicism : D) 여부 만 확인했습니다.
Bergi

@ l4m2 아, 맞아요, 그들이 할 수 없습니다하지만 난 통지 :-( 필요한 임의의 작업에 재정렬 (및 레이블 블록)의 비트 않았다 그래서 런타임 오류입니다.
BERGI

@Bergi Firefox에서 tio nodejs의 구문 오류입니다. 런타임입니다.
l4m2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.