По состоянию на ECMAScript 2015, JavaScript имеет 33 зарезервированных ключевые слова , такие как break
, const
и new
, а также 10 будущих зарезервированные ключевые слов , например, let
и await
.
Ваша задача - объединить наибольшее количество последовательных 1 отдельных зарезервированных ключевых слов 2 при написании функционального кода JavaScript 3 .
- Последовательные зарезервированные ключевые слова - зарезервированные ключевые слова, которые разделены только пробелами и / или круглыми скобками и / или фигурными скобками.
- Зарезервированные ключевые слова - любые зарезервированные или будущие зарезервированные ключевые слова начиная с ECMAScript 2015 . Зарезервированные ключевые слова из более старых стандартов исключены, полный список разрешенных ключевых слов приведен ниже.
- Функциональный код - ваш код должен запускаться (указывать время выполнения, если необходимо), в конечном итоге останавливаться и не выдавать никаких ошибок времени выполнения.
Если вашему коду требуется определенное время выполнения, используемые зарезервированные ключевые слова не должны быть запрещенными в данной среде.
Список зарезервированных ключевых слов
Оценка и примеры
Ваша оценка будет равна наибольшему количеству последовательных отдельных зарезервированных ключевых слов.
В случае равных результатов выигрывает самый короткий исходный код в байтах. Комментируемые разделы и строки не учитываются в зарезервированных ключевых словах, но учитываются в счетчиках байтов.
// 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;
Применяются стандартные лазейки .
источник
Ответы:
43 слова, 603 байта
Хм, это лазейка? Я понятия не имею, как, черт возьми, это законно JS, но он работает, и он использует каждое ключевое слово.
источник
-1
,i+1
,i-1
выше~0
,-~i
,~-i
когда я могу, только потому , что понятнее читать для тех , кто не слишком хорошо знакомы с кодовым гольфом и~
еще. Хотя я, конечно, всегда буду использоватьi+~j
иi-~j
для игры в гольф этот единственный байтi-j-1
иi+j+1
. ;)if(this)return void typeof function(){} else debugger
которое не сложно придумать, но после этого оно становится ужасно быстрым. И да, это полностью превращает ключевые слова в идентификаторы - но для некоторых из них вам необходимо их использовать (напримерenum
). Я просто довел это до крайности, но разве это не то, что такое гольф-код? : Pobj["break"] = function (){}
и т. Д.37 слов
Ключевые слова не используются:
case
требует:
const
требует=
export
требует строгого режимаimport
требует строгого режимаsuper
требуетconstructor
источник
1 + 2
.1 + 2
. Полная ценность этого кода - ответ на главный вопрос жизни, вселенной и всего. Это сложно . :)43 слова,
302299 байтисточник
enum
.212426 слов, 185 байт+1
1слово благодаря Арно и +1 к 12Me21!Предполагая, что я понял задачу, это оценивает 24 слова. Слова без скобок, скобок и пробелов:
24 слова, 177 байтов
Без "true" и "false", которые, по-видимому, не являются ключевыми словами в соответствии с вопросом.
Слова:
источник
case ... :
илиdefault:
в конце (поскольку:
между ключевыми словами не допускается)for(let _;0;);
на +2 слова (но вы не можетеcase
больше использовать ).switch({}){case{}:{}}
=>switch({}){case{}:;}
? Не знаю , если;
это иногда необходимо3839слова из "супер" в "конст"
Гольф версия:
источник
Uncaught SyntaxError: Unexpected token delete
когда пытаюсь запустить ваш ответ в консоли Javascript в Google Chrome. Как я могу проверить правильность вашего решения?SyntaxError: yield expression is only valid in generators
21 слово
(не уверен насчет
let
аawait
)источник
,
=
и;
не допускаются в качестве разделителей.43 слова, 300 байт
Более читабельно:
Мне пришлось использовать «зарезервированное слово в качестве имени метода», чтобы иметь дело с
case
(так как я уже использовалdefault
с моимswtich
),export
иimport
(поскольку модуль-режим всегда строг, что дисквалифицируетwith
)super
(поскольку за ним должен следовать доступ к свойству или помещать вconstructor
функцию), иenum
(который никогда не может использоваться вообще, будучи зарезервированным словом без грамматически допустимого использования)источник
super
могут появиться в начале, не будучи141516 Слова без скобок или перевода строкиСпасибо Берги за +1
источник
yield
?Uncaught SyntaxError: Unexpected token new
когда яfunction
наfunction*
, чтобы он распознавался как генератор.28 слов без скобок, 234 байта
Помещать имена идентификаторов в качестве имен определений методов было слишком очевидно ( для меня по крайней мере ), поэтому я искал самую длинную последовательную последовательность зарезервированных слов и пробелов в фрагменте кода.
Я надеюсь, что мертвый код после a
return
не будет рассматриваться как лазейка, но код по-прежнему работает, если объявлены используемые идентификаторы.Это использует тот факт, что некоторые из будущих зарезервированных ключевых слов считаются недействительными только в строгом режиме ES5.1 (очевидно, потому что движки не удосужились заблокировать все будущие зарезервированные слова ES3, поэтому в Интернете было слишком много кода, использующего их ).
Точно так же, как
async
иawait
жетоны , введенные в ES8 рассматриваются только ключевые слова в строгом режиме.источник
break
иcontinue
быть там?Uncaught SyntaxError: Undefined label 'implements'
, требует ли ваш ответ определенного времени выполнения?