Wyobraź sobie, że mamy środowisko o zasięgu globalnym zawierające tylko jeden obiekt o nazwie codegolf. Ten obiekt ma jedno dziecko o nazwie stackexchange, które ma właściwość o nazwie com.
Wyglądałby dostęp do tej właściwości codegolf.stackexchange.com.
Wyzwanie
Dane wejściowe twojego programu / funkcji będą ciągiem próbującym uzyskać dostęp do właściwości w zasięgu globalnym. Ilekroć ta właściwość zostanie znaleziona, wydrukujesz / zwrócisz prawdziwą wartość. Jeżeli właściwość nie zostanie znaleziona, wartość fałszowania zostanie wydrukowana / zwrócona. Złap: gdy próbujesz uzyskać dostęp do właściwości nieistniejącego obiektu, twój program powinien zgłosić dowolny błąd¹.
Aby było trochę łatwiej, możesz założyć, że dane wejściowe zawsze będą [a-z.], nigdy nie będą puste, nigdy nie będą powtarzać .i nigdy nie zaczną się ani nie zakończą na .. Podobnie codegolf.jest z nieprawidłowym wejściem.
Przypadki testowe
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
To jest code-golf , wygrywa najkrótszy kod w bajtach
¹ jeśli (i tylko wtedy) swój język z wyboru nie obsługuje błędy w ogóle , trzeba wyjście coś, co sprawia, że jest jasne, że to błąd. Na przykład, jeśli użyjesz 1 dla prawdy i 0 dla fałszu, możesz użyć „e” dla błędu. Zachowaj spójność w zakresie wartości zwrotnych i wyjaśnij zachowanie w poście.
codegolf.comdo przypadków testowych w celu wykluczenia codegolf(.stackexchange)?(.com)?$kontroli typu
foo.stackexchange.com
foowróci undefined, ale nie wyrzuci błędu. foo.barzgłosi błąd, ponieważ foonie jest zdefiniowany.
codegolf.foo => 0, Tak foo => 0.
foo => Errorbyłoby bardziej odpowiednie.