Представьте себе, у нас есть среда с глобальной областью действия, содержащая только один названный объект codegolf
. У этого объекта есть единственный дочерний stackexchange
элемент с именем com
.
Доступ к этому свойству будет выглядеть следующим образом codegolf.stackexchange.com
.
Соревнование
Ввод вашей программы / функции будет строкой, пытающейся получить доступ к свойству в глобальной области видимости. Всякий раз, когда это свойство найдено, вы должны напечатать / вернуть истинное значение. Если свойство не найдено, ложное значение должно быть напечатано / возвращено. Подвох: когда вы пытаетесь получить доступ к свойству несуществующего объекта, ваша программа должна выдавать любую ошибку¹.
Чтобы упростить задачу, вы можете предположить, что входные данные всегда будут [a-z.]
, они никогда не будут пустыми, никогда не будут повторяться .
и никогда не будут начинаться или заканчиваться на .
. Так codegolf.
что неверный ввод.
Контрольные примеры
codegolf.stackexchange.com => 1 // or any other truthy value
codegolf.stackexchange.net => 0 // or any other falsy value
codegolf.stackexchange => 1
codegolf.foo => 0
codegolf => 1
foo => 0
codegolf.com => 0
codegolf.constructor => 0
codegolf.foo.bar => Error (since foo is undefined)
codegolf.stackexchange.com.foo => Error (since com is a value, not an object)
codegolf.stackexchange.com.foo.bar => Error
foo.stackexchange.com => Error
foo.bar => Error
foo.bar.baz => Error
Это код-гольф , выигрывает самый короткий код в байтах
¹ если (и только если) ваш язык выбора не поддерживает ошибки на всех , вы должны вывести что - то , что делает его ясно , что это ошибка. Например, если вы используете 1 для истины и 0 для фальсификации, вы можете использовать «e» для ошибки. Будьте последовательны в ваших возвращаемых значениях и объясните поведение в своем посте.
источник
foo => Error
было бы более подходящим.codegolf.com
в тестовыеcodegolf(.stackexchange)?(.com)?$
foo.stackexchange.com
foo
вернетсяundefined
, но не выдаст ошибку.foo.bar
выдаст ошибку, потому чтоfoo
не определено.codegolf.foo => 0
такfoo => 0
.Ответы:
JavaScript, 135 байт
Переделана первая попытка запретить доступ к встроенным ключам, в этот момент будет лучше использовать другой подход, но эй!
Возвращает true для действительного, false для отсутствующего и ошибки при ошибке.
источник
JavaScript (ES6), 87 байт
Возвращает
false
/true
или бросаетReferenceError
.Показать фрагмент кода
Вероятностная версия, 78 байт (неконкурентная)
Поскольку все свойства гарантированно совпадают
[a-z]
, мы можем попробовать это:Помимо того, что
587
это простое число и приводит к довольно коротким значениям для интересующих нас слов, это довольно случайный выбор по модулю.Несмотря на то, что он проходит все тестовые случаи, он, конечно, может возвращать ложные срабатывания.
Показать фрагмент кода
источник
Пакет,
269231 байтПринимает участие в STDIN; выдает синтаксическую ошибку для недопустимого свойства. Работает с использованием
w
в качестве конечного автомата. Еслиw
заканчивается на,.
это означает, что следующий доступ к свойству недействителен. Изменить: 17 байтов сохранены с помощью синтаксической ошибки для прерывания пакетного сценария. Сэкономил 21 байт, осознав, что одно из моих назначений может быть безусловным.источник
Javascript,
8482 байтаНедостаточно коротка, чтобы победить, но, поскольку я новичок, я подумала, что было бы интересно поделиться этим. Может быть, у кого-то есть предложения по улучшению.
Он проходит все тесты в вопросе, возвращает
true
для существующего значения,false
для несуществующего, и выдает ошибку, если вы пытаетесь получить свойство для несуществующей или не-объектной переменной. Однако теперь я понимаю, что у этого решения также есть некоторые проблемы. Как указано @Florent в комментариях, он возвращает true, когда.toString
вызываются свойства прототипа строки, такие как .Изменить : 2 байта короче благодаря @MamaFunRoll
Тестовый фрагмент:
источник
codegolf.foo.bar
.split('.')
->split`.`
Добро пожаловать!f("codegolf.toString")
должен вернутьсяfalse
.f("codegolf.toString.toString")
должен бросить.JavaScript, 173 байта
Работает с IE 10, поэтому должен работать на основных современных браузерах.
Попробуй это здесь (+ без золота)
источник
d=(a,b="codegolf",u="stackexchange",c=a.split`.`,e="e")=>c[l="length"]==1?c[0]==b:c[l]==2?c[0]==b?c[1]==u:e:c[l]==3?c[0]==b?c[1]==u?c[2]=="com":e:e:e
(149 байт)e="e"
, но -1 за IE 10.C #, 155 байт
Не собирался быть самым коротким, но думал, что будет интересно попробовать в C # ...
IndexOutOfRangeException
путем обращения к символу в позиции -1 в строке)..NET Fiddle
источник
Рубин,
8480 байтАнонимная функция, которая возвращает
true
илиfalse
или делит на ноль, чтобы вызвать ошибку:Попробуйте онлайн
источник
C
98112113 байтовungolfed
для нижеследующего он должен быть неисправен
источник
f(codegolf.stackexchage.com.foo)
если ошибка, а не возврат0
, например.# C, <strike>98</strike> 112 bytes #
было ясно, что вы его изменили.3
это тоже не ошибка, в Си это то, что считается «истинным» значением. Смотрите этот мета-пост и этот код .Ява,
187138 байтВерсия 2.0 ( 138 байт): Идея бесстыдно украдена у @Jamie.
Версия 1.0 ( 187 байт):
Объяснение обратной части:
источник