Bunu hayal edin, sadece tek bir nesne içeren küresel bir kapsama sahip bir ortamımız var codegolf
. Bu nesnenin, stackexchange
adlı bir özelliği olan tek bir alt öğesi var com
.
Bu mülke erişmek şöyle görünecektir codegolf.stackexchange.com
.
Meydan okuma
Programınızın / fonksiyonunuzun girdisi, global kapsamdaki bir özelliğe erişmeye çalışan bir dize olacaktır. Bu özellik bulunduğunda, gerçek bir değer yazdırır / döndürürsünüz. Mülk bulunamazsa, bir sahte değer yazdırılır / iade edilir. Yakalama: var olmayan bir nesnede bir özelliğe erişmeye çalıştığınızda, programınız her türlü hatayı atmalıdır¹.
İşleri biraz kolaylaştırmak için, girdinin her zaman olacağını [a-z.]
, asla boş olmayacağını, asla tekrarlamayacağını .
ve asla a ile başlamayacağını veya bitmeyeceğini varsayabilirsiniz .
. Bu codegolf.
geçersiz bir giriş.
Test senaryoları
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
Bu kod golfü , bayt kazanımında en kısa kod kazanıyor
¹ if (ve ancak) seçtiğiniz dil hataları desteklemez hiç yapmanız gerekir bunun bir hata olduğunu temizlemek yapar çıktı üretir. Örneğin, doğruluk için 1 ve yanlış için 0 kullanırsanız, hata için "e" kullanabilirsiniz. Dönüş değerlerinizde tutarlı olun ve yayınınızdaki davranışı açıklayın.
codegolf.com
ekarte etmek için test codegolf(.stackexchange)?(.com)?$
foo.stackexchange.com
foo
dönecekti undefined
ama bir hata atmayacaktı. tanımlanmadığı foo.bar
için hata verir foo
.
codegolf.foo => 0
, öyle foo => 0
.
foo => Error
Daha uygun olacağını hissediyorum .