Imagínese esto, tenemos un entorno con un alcance global que contiene un solo objeto, llamado codegolf
. Este objeto tiene un solo hijo llamado stackexchange
, que tiene una propiedad llamada com
.
El acceso a esta propiedad se vería así codegolf.stackexchange.com
.
El reto
La entrada de su programa / función será una cadena que intenta acceder a una propiedad en el ámbito global. Siempre que se encuentre esta propiedad, deberá imprimir / devolver un valor verdadero. Si no se encuentra la propiedad, se imprimirá / devolverá un valor falso. El problema: cuando intentas acceder a una propiedad en un objeto no existente, tu programa debería arrojar cualquier tipo de error¹.
Para hacer las cosas un poco más fáciles, puede suponer que la entrada siempre será [a-z.]
, nunca estará vacía, nunca tendrá repeticiones .
y nunca comenzará o terminará con a .
. Entonces codegolf.
es una entrada inválida.
Casos de prueba
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
Este es el código de golf , el código más corto en bytes gana
¹ si (y sólo si) el idioma de su elección no admite errores en absoluto , debe algo de salida que deja claro que esto es un error. Por ejemplo, si usa 1 para verdadero y 0 para falso, puede usar "e" para un error. Sea consistente en sus valores de retorno y explique el comportamiento en su publicación.
fuente
foo => Error
que sería más apropiado.codegolf.com
a los casos de prueba para descartarcodegolf(.stackexchange)?(.com)?$
verificaciones de tipofoo.stackexchange.com
foo
volveríaundefined
, pero no arrojaría un error.foo.bar
arrojaría un error porquefoo
no está definido.codegolf.foo => 0
, De modofoo => 0
.Respuestas:
JavaScript, 135 bytes
Se modificó el primer intento para evitar que las claves integradas sean accesibles, en este punto será mejor usar un enfoque diferente, pero ¡oye!
Devuelve verdadero para válido, falso para faltante y errores por error.
fuente
JavaScript (ES6), 87 bytes
Devoluciones
false
/true
o lanzamientosReferenceError
.Mostrar fragmento de código
Versión probabilística, 78 bytes (no competitiva)
Debido a que se garantiza que todas las propiedades coinciden
[a-z]
, podemos probar esto:Además del hecho de que
587
es primo y conduce a valores bastante cortos para las palabras que nos interesan, esta es una opción de módulo bastante aleatoria.Aunque supera todos los casos de prueba, es probable que arroje falsos positivos.
Mostrar fragmento de código
fuente
Lote,
269231 bytesToma entrada en STDIN; arroja un error de sintaxis para una propiedad no válida. Funciona mediante el uso
w
como una máquina de estado. Siw
termina con un,.
esto significa que el siguiente acceso a la propiedad no es válido. Editar: se guardaron 17 bytes usando el error de sintaxis para abortar el script por lotes. Ahorré 21 bytes al darme cuenta de que una de mis asignaciones podría ser incondicional.fuente
Javascript,
8482 bytesNo es lo suficientemente corto como para ganar, pero como soy un principiante, pensé que sería divertido compartirlo. Tal vez alguien tiene una sugerencia para mejorar.
Pasa todas las pruebas en la pregunta, regresa
true
valor existente,false
no existe y arroja un error si intenta obtener una propiedad de una variable no existente o no objeto. Sin embargo, ahora me doy cuenta de que esta solución también tiene algunos problemas. Como señaló @Florent en los comentarios, devuelve verdadero cuando.toString
se llaman propiedades de prototipo de cadena como .Editar : 2 bytes más cortos gracias a @MamaFunRoll
Fragmento de prueba:
fuente
codegolf.foo.bar
.split('.')
->split`.`
Bienvenido!f("codegolf.toString")
Debería volverfalse
.f("codegolf.toString.toString")
debería tirar.JavaScript, 173 bytes
Funciona con IE 10, por lo que debería funcionar en los principales navegadores modernos.
Pruébalo aquí (+ sin golf)
fuente
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"
, pero -1 para IE 10.C #, 155 bytes
No iba a ser el más corto, pero pensé que sería divertido intentarlo en C # ...
IndexOutOfRangeException
acceso a un carácter en la posición -1 en la cadena)..NET Fiddle
fuente
Ruby,
8480 bytesFunción anónima que devuelve
true
ofalse
, o se divide por cero para generar un error:Pruébalo en línea
fuente
C,
98112113 bytessin golf
para el siguiente tiene que seg culpa
fuente
f(codegolf.stackexchage.com.foo)
debería error, no volver0
, por ejemplo.# C, <strike>98</strike> 112 bytes #
dejar en claro que lo modificó.3
tampoco es un error, en C es lo que se considera un valor "verdadero". Vea esta meta publicación y este código .Java,
187138 bytesVersión 2.0 ( 138 bytes): Idea robada descaradamente de @Jamie.
Versión 1.0 ( 187 bytes):
Explicación de la parte de devolución:
fuente