Bayangkan ini, kita memiliki lingkungan dengan cakupan global yang hanya berisi satu objek, disebut codegolf
. Objek ini memiliki satu anak yang dipanggil stackexchange
, yang memiliki properti yang disebut com
.
Mengakses properti ini akan terlihat seperti codegolf.stackexchange.com
.
Tantangan
Input dari program / fungsi Anda akan berupa string yang mencoba mengakses properti pada lingkup global. Setiap kali properti ini ditemukan, Anda harus mencetak / mengembalikan nilai yang sebenarnya. Jika properti tidak ditemukan, nilai palsu akan dicetak / dikembalikan. Tangkapannya: ketika Anda mencoba mengakses properti pada objek yang tidak ada, program Anda harus melakukan kesalahan apa pun¹.
Untuk mempermudah, Anda dapat mengasumsikan bahwa input akan selalu ada [a-z.]
, tidak akan pernah kosong, tidak akan pernah berulang .
, dan tidak akan pernah memulai atau berakhir dengan a .
. Begitu codegolf.
juga input yang tidak valid.
Uji kasus
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
Ini adalah kode-golf , kode terpendek dalam byte yang menang
¹ jika (dan hanya jika) bahasa pilihan Anda tidak mendukung kesalahan sama sekali , Anda harus menampilkan sesuatu yang menjelaskan bahwa ini adalah kesalahan. Misalnya, jika Anda menggunakan 1 untuk truey dan 0 untuk falsy, Anda dapat menggunakan "e" untuk kesalahan. Konsisten dalam nilai pengembalian Anda dan jelaskan perilaku di pos Anda.
sumber
foo => Error
akan lebih tepat.codegolf.com
kasus uji untuk mengesampingkancodegolf(.stackexchange)?(.com)?$
jenis cekfoo.stackexchange.com
foo
akan kembaliundefined
, tetapi itu tidak akan menimbulkan kesalahan.foo.bar
akan melempar kesalahan karenafoo
tidak didefinisikan.codegolf.foo => 0
, Jadifoo => 0
.Jawaban:
JavaScript, 135 byte
Mengolah kembali upaya pertama untuk mencegah kunci bawaan dapat diakses, pada titik ini akan lebih baik untuk menggunakan pendekatan yang berbeda, tapi hei!
Mengembalikan nilai true untuk valid, false untuk missing, dan error on error.
sumber
JavaScript (ES6), 87 byte
Pengembalian
false
/true
atau lemparanReferenceError
.Tampilkan cuplikan kode
Versi probabilistik, 78 byte (tidak bersaing)
Karena semua properti dijamin sesuai
[a-z]
, kami dapat mencoba ini:Terlepas dari fakta yang
587
utama dan mengarah ke nilai yang agak pendek untuk kata-kata yang kami minati, ini adalah pilihan modulo yang agak acak.Meskipun tidak lulus semua kasus uji, tentu saja kemungkinan untuk mengembalikan hasil positif palsu.
Tampilkan cuplikan kode
sumber
Batch,
269231 byteMengambil input dari STDIN; melempar kesalahan sintaks untuk properti yang tidak valid. Bekerja dengan menggunakan
w
mesin negara. Jikaw
diakhiri dengan.
ini berarti akses properti selanjutnya tidak valid. Sunting: Disimpan 17 byte dengan menggunakan kesalahan sintaks untuk membatalkan skrip batch. Disimpan 21 byte dengan menyadari bahwa salah satu tugas saya bisa tanpa syarat.sumber
Javascript,
8482 byteTidak cukup pendek untuk menang, tetapi karena saya seorang pemula saya pikir akan menyenangkan untuk membagikannya. Mungkin seseorang memiliki saran untuk perbaikan.
Itu melewati semua tes dalam pertanyaan, mengembalikan
true
untuk nilai yang ada,false
untuk tidak ada dan melempar kesalahan jika Anda mencoba untuk mendapatkan properti dari variabel tidak ada atau tidak-objek. Namun saya sekarang menyadari bahwa solusi ini memiliki beberapa masalah juga. Seperti yang ditunjukkan oleh @Florent di komentar itu mengembalikan true ketika properti prototipe string seperti.toString
dipanggil.Sunting : 2 byte lebih pendek berkat @MamaFunRoll
Cuplikan uji:
sumber
codegolf.foo.bar
.split('.')
->split`.`
Selamat datang!f("codegolf.toString")
harus kembalifalse
.f("codegolf.toString.toString")
harus membuang.JavaScript, 173 byte
Bekerja dengan IE 10, jadi harus bekerja pada browser modern utama.
Coba di sini (+ ungolfed)
sumber
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 bytes)e="e"
, tetapi -1 untuk IE 10.C #, 155 byte
Tidak akan menjadi yang terpendek tetapi berpikir akan menyenangkan mencobanya di C # ...
IndexOutOfRangeException
dengan mengakses char pada posisi -1 dalam string)..NET Fiddle
sumber
Ruby,
8480 byteFungsi anonim yang mengembalikan
true
ataufalse
, atau membaginya dengan nol untuk meningkatkan kesalahan:Cobalah online
sumber
C,
98112113 byteungolfed
untuk di bawah ini harus kesalahan seg
sumber
f(codegolf.stackexchage.com.foo)
seharusnya kesalahan, tidak kembali0
, misalnya.# C, <strike>98</strike> 112 bytes #
menjelaskan bahwa Anda memodifikasinya.3
juga bukan kesalahan, di C itu adalah apa yang dianggap sebagai nilai "kebenaran". Lihat posting meta ini , dan kode ini .Jawa,
187138 byteVersi 2.0 ( 138 byte): Ide tanpa malu dicuri dari @Jamie.
Versi 1.0 ( 187 byte):
Penjelasan dari bagian yang dikembalikan:
sumber