Todos sabemos que si buscas en Google la palabra "google", romperá Internet.
Su tarea es crear una función que acepte una cadena y devuelva su longitud, en la menor cantidad posible de caracteres Unicode.
Sin embargo, si la cadena dada es google
(minúscula), causará un error.
Por ejemplo, g('bing')
volverá 4
perog('google')
causará un error.
Proporcione un ejemplo de uso y el error si es posible.
Respuestas:
Pitón 2, 29
Da un
ZeroDivisionError
encendido"google"
y la longitud de lo contrario. Esto aprovecha la igualación0
y el valor booleano de Python1
.fuente
g
en sulambda
, o llamarlo anónimamente con una entrada.Infinity
para "google" en lugar de arrojar un error ...return
si lodef
L/lbnb"google
, 13 bytes.Excel, 23 caracteres
Pegue esto en una celda que no sea A1 y escriba su consulta de búsqueda en A1.
Por ejemplo:
fuente
C #, 43 bytes
Una mejora sobre la respuesta de Salah Alami. Se repite para lanzar una excepción de desbordamiento de pila al proporcionar "google"
fuente
StackOverflowException
. De hecho, nunca volverá (se comporta comowhile(true){}
).Pyth,
1413 caracteresDefine una función con nombre
y
.Esto divide la longitud por 1 si la cadena no es google y por 0 en caso contrario. La idea no es nueva, pero se me ocurrió de forma independiente.
Pruébalo en línea.
Cómo funciona
fuente
;
pero obviamente no puedes aquí ...y
" . ¿Pero no hay ningúny
en su código?L
redefine la funcióny
.MATLAB,
6341403836 bytes¡Gracias a Tom Carpenter por eliminar 1 byte!
¡Gracias a Stewie Griffin por eliminar 2 bytes!
A diferencia de otras soluciones más elegantes, realizar una operación de división por cero en MATLAB no dará un error, sino más bien
Inf
. Esta solución determina que la longitud de la cadenannz
. La cadena que se produce es de tal manera que se indexa desde el principio de la cadena hasta el final, que es esencialmente una copia de la cadena. Sin embargo, lo importante es que el comienzo de dónde acceder a la cadena se produce al verificar si la entrada es igual o no'google'
. Si no lo es, esto produce un índice inicial de 1 e indexamos en la cadena normalmente ... ya que MATLAB comienza a indexar en 1. Si es igual, el índice producido es 0 y MATLAB arrojará un error de indexación que indica que El índice debe ser un número entero positivo. El extra+
es asegurar que la salida de la verificación de igualdad sea numérica en lugar de booleana /logical
. Omitir+
producirá una advertencia, pero debido a que las especificaciones de este desafío no permiten advertencias,+
se requiere ... completando así el código.Usos de ejemplo
Una versión más divertida,
8377767472 bytes¡Gracias a Tom Carpenter por eliminar 1 byte!
¡Gracias a Stewie Griffin por eliminar 2 bytes!
Lo anterior no es una presentación oficial, pero es algo más divertido de ejecutar. Abusando de
eval
las funciones anónimas, lo que hace el código es que verifica si la cadena de entrada es igual a'google'
... y si es así, esto abrirá el navegador web incorporado de MATLAB y muestra la página de error 404 de Google tratando de acceder al subpágina ubicada eni
cuando eso no existe. Si no, mostramos la longitud de la cadena normalmente.Usos de ejemplo
La última llamada usando
'google'
nos da esta pantalla:fuente
strcmp
lugar deisequal
.strcmp
pero terminé usandoisequal
por alguna razón ... ¡gracias!nnz
es dos bytes más corto quenumel
. Tuviste mi voto hace unos años :-)JavaScript ES6,
342725 caracteresLanza un error de referencia
Δ
para google.Mostrar fragmento de código
fuente
#
, errores en JS afaikTI-BASIC, 15 bytes
Heck, mientras lo hacemos , bien podría obtener una respuesta TI-BASIC aquí.
El formato de entrada es
"string":prgmNAME
. ¡Gracias a Thomas Kwa por encontrarlo primero!(Guía: agregue 1 byte por cada letra minúscula reemplazando una mayúscula. Entonces
s/GOOGLE/google/g => +6 bytes
.)ahhhhh casos de prueba!
fuente
length(Ans)/(Ans≠"google
. También tienes el caso equivocado; si se permiten mayúsculas, son 14 bytes. Por cierto, es válido pasar argumentos a través de Ans.AGOOGLE
debería dar 7, ¿correcto? Y no deberías contar el encabezado del programa en el tamaño de tu código, así que resta 10 bytes.length(
tiene dos bytes, eso haría que sus números sean 21 y 15 bytes.APL (14)
Explicación:
⍴
: longitud÷
: dividido por'google∘≢
: argumento no es igual a'google
'.⍴
da la longitud de la cadena, que se divide por 1 si la cadena no es igualgoogle
(lo que devuelve la longitud sin cambios), o por 0 si la cadena es igualgoogle
(dando un error).fuente
⍴
con≢
. Además, puede hacer que se vea más genial intercambiando los operandos de∘
. Oh, no olvides quitar los parens. En general:≢÷≢∘'google'
Python 3, 30 bytes
Indexa la lista de funciones de 1 elemento, generando un
IndexError
si elu=='google'
predicado esTrue
(= 1). Tal funcional.Muchas variantes. Guau:
fuente
Haskell, 24 bytes
g s|s/="google"=length s
Salida:
fuente
CJam, 16 caracteres
Esto divide la longitud por 1 si la cadena no es google y por 0 en caso contrario. La idea no es nueva, pero se me ocurrió de forma independiente.
Pruébalo en línea.
Cómo funciona
fuente
q_,\"google"=!/
. Lo desarrollé antes de ver esta publicación. Tenga en cuenta que esto toma toda la entrada (que parece tomar de todos modos como argumento de función). Desafortunadamente, no puede usarlo, ya que esto pide una función :(Octava, 63 bytes
Sé que es más largo que la solución de Matlab (que también funcionaría en Octave), pero es particularmente malo. Estoy haciendo una función anónima (evil) usando literales de matriz de celdas (evil) (evil) que contienen manejadores de funciones dependientes de una función de devolución de llamada (en sí misma, por lo tanto, recursiva, evil) que se debe pasar por argumento. Luego creo otro anónimo que básicamente reduce la función al argumento de cadena y arregla el segundo argumento de
f
asf
(muy malvado). Cualquier humano sano nunca haría esto, porque es casi tan ilegible como Perl o regex (o cjam / pyth / cualquier otro esolang).Entonces, si la cadena no es 'google', se llamará al segundo argumento de la matriz de celdas que genera la longitud de la cadena. De lo contrario, se llamará a la primera función, que se pasa como devolución de llamada (y también se pasa a sí misma como devolución de llamada), que más tarde es la función misma. El error es básicamente un error de profundidad de recursión máxima.
fuente
eval
aquí para que sea realmente MAL :-)JavaScript, 25 bytes
Ejemplo de JavaScript agradable y simple:
Si se ingresa "google", entonces pasa un
ReferenceError
Ejemplo
fuente
APL,
1917 bytesEsta es una función monádica sin nombre que arrojará un error de sintaxis si la entrada es
google
. Esto se logra al intentar tomar el logaritmo natural de la nada.Pruébalo en línea
¡Ahorré dos bytes gracias a Dennis!
fuente
⍟
se conoce informalmente como "splat". Un nombre muy apropiado para este uso.R, 46 bytes
A menos que esté leyendo mal, la publicación original nunca especificó que el código tenía que ser la sintaxis correcta.
Ejemplo:
Nunca agregué nada para el parámetro "no" de la instrucción ifelse, por lo que devolverá un error si se evoca este parámetro.
fuente
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 bytes-2b gracias a manatwork
Uso:
Si pudiera salir con un programa en lugar de una función, lo siguiente sería válido con solo 20 bytes (línea de comando de +1 byte)
El error es la división por cero.
Explicación:
y///c
devuelve la longitud, luego!/^google$/
devolverá 0 si la entrada coincide con 'google'.Uso:
fuente
sub{…}
. (Entonces lo llamas comosub{…}->("google")
.)$_!=google
lugar de!/^google$/
!=
que no funcionará comparar cadenas ...Haskell - 30 caracteres
fuente
x=x;g"google"=x;g s=length s
, pero por alguna razón, las excepciones <<loop>> no se lanzan en ghci.g s|s/="google"=length s
evita la necesidad deerror
Python 3, 35 bytes
fuente
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 bytesEl código anterior arrojará la
ArithmeticException
división por cero y por cualquierString
otro que no seagoogle
. Vale la pena señalar que==
compara la referencia y no funcionará paraString
Objetos.Java 8: 29 bytes
(Basado en la sugerencia dada en el comentario a continuación)
fuente
s->(s.equals("google")?null:s).length();
==
Java generalmente no funcionará (a menos que esté confiando en el internamiento de cadenas, que es, bueno, malo). ¿Quizás te confundiste con JavaScript?C ++ 11, 54 (código) + 14 (#include) = 68
Bueno, la división por cero es solo un comportamiento indefinido, que no llamaría un error. Entonces mi enfoque.
uso
fuente
size()
para guardar 2 bytes. En C ++ 14, también puede usar lambdas genéricas y reemplazarstd::string
porauto
. Tendría que pasarle un realstd::string
en lugar de unconst char*
.std::string
tienesize()
método, gracias por eso. Soy consciente de lambdas genéricos en C ++ 14, pero no sé cómo me ayudaría, ya que"string"
esconst char*
y nostd::string
.std::string
tienesize()
ylength()
porque es tanto un contenedor como una cadena . En cuanto aauto
, llamarías a la lambda con en(std::string("google"))
lugar de("google")
. La pregunta solo dice "acepta 1 cadena" sin especificar qué es una "cadena"."google"s
que construir unstd::string
:)throw;
desencadenarstd::terminate()
(porque no hay una excepción actual aquí).MUMPS, 28 bytes
Uso:
¿Por qué? Bueno,
$S[ELECT]
es básicamente una declaración if-else compacta de múltiples cláusulas, casi como una coincidencia de patrones en un lenguaje como Haskell o Rust. Excepto ... a diferencia de Haskell o Rust, no se verifica la exhaustividad de los patrones, porque la noción de "seguridad en tiempo de compilación" es completamente ajena a MUMPS. Entonces, si su entrada es un patrón que no tuvo en cuenta, obtendrá un encantador error de tiempo de ejecución llamado<SELECT>
.fuente
Rubí,
34302726Desconocido
t
plantea excepción.Editar: versión totalmente legible y obvia que es más corta ...
Viejo: bastante similar a otras ideas, parece. Elevará
ArgumentError
si x es 'google'.fuente
x=='google'?t: x.size
JavaScript, 47 bytes
Agradable y simple
Editar: ahora cumple con las reglas
Pruebas
Error arrojado
Ningún error arrojado
fuente
undefined
.C,
6648Original:
Usando OSX gcc,
l("duck");
retornos4
,l("google");
causasFloating point exception: 8
.En otras plataformas, es posible que las constantes deban ajustarse según la resistencia.
Más corto :
menos dificultad, mismos resultados.
fuente
0x656c676f6f67
=elgoog
). Creo que esta respuesta necesita una explicación para aquellos de nosotros que apreciamos este tipo de cosas locas de bajo nivel.int
4 caracteres.char *
, con unidades de8-bits
, se lanza along *
, con unidades de64-bits
, sin reasignarse adecuadamente, los datos en esos 8 bytes de espacio de almacenamiento dinámico se corrompen y se tratan como un solo número (8*8 = 64
). Es por eso que obtienes los primeros 6 caracteres, + NUL + basura. Eso es muy inteligente. Peligroso también. Me pregunto por qué no se segfault. Ese octavo byte de basura está fuera de límites, ¿no?Ruby, 29 bytes
Primero se me ocurrió algo muy similar al primer intento de @ Borsunho, pero el mío fue un poco más largo y publicó el suyo antes de que terminara. Se le ocurrió esto antes de su edición de 30 bytes :)
Ejemplos de uso:
editar: Dos años y algunas versiones de Ruby más tarde
Rubí , 25 bytes.
Reemplazado
String#size
con el nuevo plus unario. Pruébalo en línea!fuente
^
del grupo de partidos)..*
al final es lo que lo hace funcionar./\A(?!google\Z).*/m
arregla (a costa de tres bytes, sin embargo).^
y hacer$
coincidir el principio y el final de las líneas, mientras que\A
y hacer\Z
coincidir el principio y el final de la cadena como un todo.> <>, 55 bytes
Sin embargo, pensé que lo intentaría, no es mi mejor intento o algoritmo de golf. No es una función per se, pero creo que esto aún debería calificar. Veré si puedo editar en una versión mejor.
Si puede imprimir la longitud y luego el error, aquí hay una solución de 46 bytes:
Solución previa de 49 bytes de esta naturaleza:
Me complace presentar una explicación si hay algún interés, y por favor avíseme si hay algún problema con mi respuesta o si tiene sugerencias de golf.
fuente
Javascript ES6,
51 2725 bytesHola, soy nuevo en el código de golf, por lo que probablemente se pueda jugar mucho más, pero aquí está:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
y alguna prueba:
Editar: ¿Agregado? para reemplazar si y reemplazar Error con un objeto indefinido.Edición 2: me di cuenta de que mi número de bytes estaba mal y eliminé el g =
fuente
GolfScript,
1416 caracteresComo muchos otros, simplemente compara la entrada
'google'
y divide la longitud por el inverso del resultado.Programas de ejemplo:
'bing'
(salida:4
)'google'
(salida: Error: Intento de dividir entre cero ) .fuente
Atascado , 16 Bytes
Seguir un método similar al de la mayoría de las personas provocará un error de división por 0 al ingresar "google".
fuente
Lote de Windows, 118 caracteres
La salida es% stringlength%.
Código completo:
Modificado de la respuesta de Joshua Honig, aquí .
fuente