A partir de ECMAScript 2015, JavaScript tiene 33 palabras clave reservadas , como break
, const
y new
, así como 10 palabras clave reservadas futuras , como let
y await
.
Su tarea es encadenar el mayor número de 1 palabras clave reservadas distintas consecutivas 2 mientras escribe el código JavaScript funcional 3 .
- Palabras clave reservadas consecutivas: palabras clave reservadas que están separadas solo por espacios en blanco y / o paréntesis y / o llaves.
- Palabras clave reservadas: cualquier palabra clave reservada o futura reservada a partir de ECMAScript 2015 . Se excluyen las palabras clave reservadas de estándares anteriores, a continuación se ofrece una lista completa de palabras clave permitidas.
- Código funcional: su código debe ejecutarse (indique su tiempo de ejecución, si es necesario), finalmente detenerse y no arrojar ningún error de tiempo de ejecución.
Si su código necesita un tiempo de ejecución específico, las palabras clave reservadas utilizadas no deben ser no operativas en el entorno dado.
Lista de palabras clave reservadas
Puntuación y ejemplos
Su puntaje será igual al mayor número de palabras clave reservadas distintas consecutivas.
En el caso de puntajes iguales, gana el código fuente más corto en bytes. Las secciones y cadenas comentadas no cuentan para palabras clave reservadas, sino que cuentan para el recuento de bytes.
// 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;
Se aplican lagunas estándar .
fuente
Respuestas:
43 palabras, 603 bytes
Uhm, ¿es esto una escapatoria? No tengo idea de cómo demonios es legal JS, pero funciona y utiliza cada palabra clave.
fuente
-1
,i+1
,i-1
arriba~0
,-~i
,~-i
cuando puedo, simplemente porque es más fáciles de interpretar para aquellos que no están muy familiarizados con el código de golf y~
todavía. Aunque, por supuesto, siempre usaréi+~j
yi-~j
para golf ese solo byte dei-j-1
yi+j+1
. ;)if(this)return void typeof function(){} else debugger
que no es difícil de encontrar, pero después de eso se pone feo rápidamente. Y sí, esto resulta totalmente las palabras clave en los identificadores - pero para algunos de ellos que tienen a fin de ser capaces de utilizarlos (por ejemploenum
). Lo llevé al extremo, pero ¿no es eso de lo que se trata el golf de código? : Pobj["break"] = function (){}
etc.37 palabras
Palabras clave no utilizadas:
case
requiere:
const
requiere=
export
requiere modo estrictoimport
requiere modo estrictosuper
requiereconstructor
fuente
1 + 2
.1 + 2
. El valor completo de este código es la respuesta a la última pregunta de la vida, el universo y todo. Eso es compleja . :)43 palabras,
302299 bytesfuente
enum
.212426 palabras, 185 bytes+
12 palabras gracias a Arnauld, y +1 a 12Me21!Suponiendo que entendí el desafío, esto suma 24 palabras. Las palabras sin paréntesis, corchetes y espacios en blanco:
24 palabras, 177 bytes
Sin "verdadero" y "falso", que aparentemente no son palabras clave según la pregunta.
Palabras:
fuente
case ... :
odefault:
al final (ya:
que no está permitido entre palabras clave)for(let _;0;);
+2 palabras (pero ya no puedes usarcase
).switch({}){case{}:{}}
=>switch({}){case{}:;}
? No sé si a;
veces es necesario3839palabras de "super" a "const"
Versión de golf:
fuente
Uncaught SyntaxError: Unexpected token delete
cuando intento ejecutar su respuesta en mi consola Javascript en Google Chrome, ¿cómo puedo probar si su solución es válida?SyntaxError: yield expression is only valid in generators
21 palabras
(no estoy seguro
let
yawait
)fuente
,
=
y;
no están permitidos como separadores.43 palabras, 300 bytes
Más legible:
Tuve que usar la "palabra reservada como nombre del método" para tratar
case
(ya que ya lo había usadodefault
con miswtich
),export
yimport
(dado que el modo módulo siempre es estricto, lo que descalificawith
)super
(ya que debe ir seguido de un acceso a la propiedad o colocado en unaconstructor
función), yenum
(que nunca se puede usar en absoluto, siendo una palabra reservada sin uso gramaticalmente válido)fuente
super
pueden aparecer al principio sin ser un nombre, pero son demasiado caros141516 Palabras sin corchetes o nueva líneaGracias Bergi por +1
fuente
yield
?Uncaught SyntaxError: Unexpected token new
function
confunction*
, por lo que será reconocido como un generador.28 palabras sin corchetes, 234 bytes
Poner nombres de identificadores como nombres de definición de método era demasiado obvio ( al menos para mí ), por lo que estaba buscando la secuencia distinta consecutiva más larga de palabras reservadas y espacios en blanco en un fragmento de código.
Espero que el código muerto después de un
return
no cuente como un vacío legal, pero el código aún se puede ejecutar si se declaran los identificadores utilizados.Esto explota el hecho de que algunas de las futuras palabras clave reservadas solo se consideran inválidas en el modo estricto de ES5.1 (aparentemente porque los motores no se molestaron en bloquear todas las futuras palabras reservadas de ES3, por lo que había demasiado código usándolas en la web )
Del mismo modo, los tokens
async
yawait
introducidos en ES8 solo se consideran palabras clave en modo estricto.fuente
break
ycontinue
estar allí?Uncaught SyntaxError: Undefined label 'implements'
, ¿su respuesta requiere un tiempo de ejecución específico?