Todos sabemos que, se você pesquisar no Google a palavra "google", ela quebrará a Internet.
Sua tarefa é criar uma função que aceite uma sequência e retorne seu comprimento, no menor número possível de caracteres Unicode.
No entanto, se a sequência especificada for google
(minúscula), isso causará um erro.
Por exemplo, g('bing')
retornará, 4
mas g('google')
causará um erro.
Forneça um exemplo de uso e o erro, se possível.
Respostas:
Python 2, 29
Dá uma
ZeroDivisionError
em"google"
, e o comprimento de outro modo. Isso tira vantagem dos booleanos do Python iguais a0
e1
.fonte
g
comolambda
, ou chamá-lo anonimamente com uma entrada.Infinity
para "google" em vez de jogar um erro ...return
se você usoudef
L/lbnb"google
13 bytes.Excel, 23 caracteres
Cole isso em uma célula diferente de A1 e digite sua consulta de pesquisa em A1.
Por exemplo:
fonte
C #, 43 bytes
Uma melhoria em relação à resposta de Salah Alami. É recorrente lançar uma exceção de estouro de pilha ao fornecer "google"
fonte
StackOverflowException
. Na verdade, ele nunca retornará (se comporta comowhile(true){}
).Pitão,
1413 caracteresDefine uma função nomeada
y
.Isso divide o comprimento por 1 se a sequência não for google e por 0 em caso contrário. A ideia não é nova, mas a criei de forma independente.
Experimente online.
Como funciona
fonte
;
mas, obviamente, você não pode aqui ...y
. " Mas não háy
no seu código !?L
redefine a funçãoy
.MATLAB,
6341403836 bytesAgradecimentos a Tom Carpenter por reduzir 1 byte!
Agradecimentos a Stewie Griffin por remover 2 bytes!
Ao contrário das outras soluções mais elegantes, executar uma operação de divisão por zero no MATLAB não dará um erro, mas sim
Inf
. Esta solução encontra o comprimento da cadeia pornnz
. A sequência produzida é de maneira que você indexe do início à sequência, o que é essencialmente uma cópia da sequência. No entanto, o importante é que o início de onde acessar a sequência seja produzido, verificando se a entrada é igual ou não'google'
. Caso contrário, produz um índice inicial de 1 e indexamos normalmente na string ... quando o MATLAB inicia a indexação em 1. Se for igual, o índice produzido é 0 e o MATLAB emitirá um erro de indexação informando que o O índice precisa ser um número inteiro positivo. O Extra+
é garantir que a saída da verificação de igualdade seja numérica em vez de booleana /logical
. A omissão do+
aviso produzirá um aviso, mas como as especificações deste desafio não permitem avisos,+
é necessário ... completando o código.Exemplo de usos
Uma versão mais divertida,
8377767472 bytesAgradecimentos a Tom Carpenter por reduzir 1 byte!
Agradecimentos a Stewie Griffin por remover 2 bytes!
A descrição acima não é uma inscrição oficial, mas é algo mais divertido de executar. Abusando
eval
em funções anônimas, o que o código faz é verificar se a sequência de entrada é igual a'google'
... e, se for, isso abrirá o navegador da web incorporado do MATLAB e exibirá a página de erro 404 do Google tentando acessar o subpágina localizada emi
quando isso não existe. Caso contrário, exibimos o comprimento da string normalmente.Exemplo de usos
A última chamada usando
'google'
nos fornece esta tela:fonte
strcmp
vez deisequal
.strcmp
mas acabei usandoisequal
por algum motivo .... obrigado!nnz
é dois bytes menor quenumel
. Você teve meu voto há alguns anos atrás :-)JavaScript ES6,
342725 caracteresLança um ReferenceError no
Δ
para google.Mostrar snippet de código
fonte
#
, ele erros em JS afaikTI-BASIC, 15 bytes
Heck, enquanto estamos nisso , pode muito bem obter uma resposta TI-BASIC aqui.
O formato de entrada é
"string":prgmNAME
. Agradecemos a Thomas Kwa por encontrá-lo primeiro!(Guia: adicione 1 byte para cada letra minúscula, substituindo uma maiúscula. Então
s/GOOGLE/google/g => +6 bytes
.)ahhhhh casos de teste!
fonte
length(Ans)/(Ans≠"google
. Você também está com o caso errado; se maiúsculas são permitidas, são 14 bytes. A propósito, é válido passar argumentos pelos Ans.AGOOGLE
deve dar 7, correto? E você não deve contar o cabeçalho do programa no tamanho do seu código, portanto subtraia 10 bytes.length(
tem dois bytes, isso tornaria seus números 21 e 15 bytes.APL (14)
Explicação:
⍴
: comprimento÷
: dividido por'google∘≢
: argumento não é igual a'google
'.⍴
fornece o comprimento da string, que é dividido por 1 se a string não for igualgoogle
(o que devolve o comprimento inalterado) ou por 0 se a string for igualgoogle
(com erro).fonte
⍴
por≢
. Além disso, você pode ter uma aparência mais interessante trocando os operandos de∘
. Ah, não esqueça de remover os parênteses. Tudo em tudo:≢÷≢∘'google'
Python 3, 30 bytes
Indexa a lista de funções com 1 elemento, aumentando um
IndexError
se ou=='google'
predicado éTrue
(= 1). Tão funcional.Muitas variantes. Uau:
fonte
Haskell, 24 bytes
g s|s/="google"=length s
Resultado:
fonte
CJam, 16 caracteres
Isso divide o comprimento por 1 se a sequência não for google e por 0 em caso contrário. A ideia não é nova, mas a criei de forma independente.
Experimente online.
Como funciona
fonte
q_,\"google"=!/
. Desenvolvi antes de ver este post. Observe que isso recebe toda a entrada (que você parece usar como argumento de função). Infelizmente, você não pode usá-lo, pois isso solicita uma função :(Oitava, 63 bytes
Eu sei que é mais longo que a solução Matlab (que também funcionaria no Octave), mas é particularmente ruim. Estou criando uma função anônima (evil) usando literais de array de células (evil) (evil) contendo identificadores de função dependentes de uma função de retorno de chamada (ela própria, portanto recursiva, evil) que deve ser transmitida por meio de argumento. Então eu crio outro anônimo que basicamente reduz a função ao argumento string e corrige o segundo argumento
f
comof
(very evil). Qualquer humano são nunca faria isso, porque é quase tão ilegível quanto Perl ou regex (ou cjam / pyth / qualquer outro esolang).Portanto, se a string não for 'google', o segundo argumento da matriz de células será chamado, o que gera o comprimento da string. Caso contrário, a primeira função será chamada, que é passada como retorno de chamada (e passa por si mesma como retorno de chamada para si mesma), que posteriormente é a própria função. O erro é basicamente algum erro de profundidade de recursão máxima.
fonte
eval
aqui para torná-lo :-) realmente MALJavaScript, 25 bytes
Exemplo de JavaScript simples e agradável:
Se "google" for inserido, ele passa um
ReferenceError
Exemplo
fonte
APL,
1917 bytesEsta é uma função monádica sem nome que lançará um erro de sintaxe se a entrada for
google
. Isso é conseguido tentando adotar o logaritmo natural do nada.Experimente online
Economizou dois bytes graças a Dennis!
fonte
⍟
é conhecido informalmente como "splat". Um nome muito apropriado para esse uso.R, 46 bytes
A menos que eu esteja interpretando mal, a postagem original nunca especificou que o código precisava estar com a sintaxe correta.
Exemplo:
Eu nunca adicionei nada para o parâmetro "no" da instrução ifelse, portanto ele retornará um erro se esse parâmetro for evocado.
fonte
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 bytes-2b graças ao manatwork
Uso:
Se eu pudesse usar um programa em vez de uma função, o seguinte seria válido com apenas 20 bytes (linha de comando de +1 byte)
Erro é divisão por zero.
Explicação:
y///c
retorna o comprimento e!/^google$/
retornará 0 se a entrada corresponder a 'google'.Uso:
fonte
sub{…}
. (Então você chama assimsub{…}->("google")
).$_!=google
em vez de!/^google$/
!=
que não funcione para comparar as strings ... #Haskell - 30 caracteres
fonte
x=x;g"google"=x;g s=length s
, mas por algum motivo, as <<loop>> exceções não são lançadas no ghci.g s|s/="google"=length s
evita a necessidade deerror
Python 3, 35 bytes
fonte
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 bytesO código acima lançará
ArithmeticException
a divisão por zero e por qualquerString
outra que não sejagoogle
. Vale ressaltar que==
compara a referência e não funciona paraString
objetos.Java 8: 29 bytes
(Com base na sugestão dada no comentário abaixo)
fonte
s->(s.equals("google")?null:s).length();
==
Java geralmente não funcionará (a menos que você esteja contando com a internação de strings, o que é muito ruim). Talvez você tenha se confundido com JavaScript?C ++ 11, 54 (código) + 14 (#include) = 68
Bem, a divisão por zero é apenas um comportamento indefinido, que eu não chamaria de erro. Então, minha abordagem.
uso
fonte
size()
para salvar 2 bytes. No C ++ 14, você também pode usar lambdas genéricas e substituirstd::string
porauto
. Você precisaria passar um realstd::string
para ele em vez de umconst char*
.std::string
temsize()
método, obrigado por isso. Estou ciente das lambdas genéricas no C ++ 14, mas não sei como isso me ajudaria, pois"string"
éconst char*
e nãostd::string
.std::string
temsize()
elength()
porque é um contêiner e uma string . Quanto aauto
, você chamaria o lambda com em(std::string("google"))
vez de("google")
. A pergunta diz apenas "aceita 1 string" sem especificar o que é uma "string"."google"s
a construir umstd::string
:)throw;
acionarstd::terminate()
(porque não há nenhuma exceção atual aqui).MUMPS, 28 bytes
Uso:
Por quê? Bem,
$S[ELECT]
é basicamente uma declaração if-else compacta com várias cláusulas - quase como uma correspondência de padrões em uma linguagem como Haskell ou Rust. Exceto ... ao contrário de Haskell ou Rust, os padrões não são verificados quanto à exaustividade, porque a noção de "segurança em tempo de compilação" é completamente estranha ao MUMPS. Portanto, se sua entrada for um padrão que você não considerou, você receberá um erro de tempo de execução adorável<SELECT>
.fonte
Ruby,
34302726Desconhecido
t
gera exceção.Edit: versão totalmente legível e óbvia, que é mais curta ...
Velho: Parece muito com outras idéias. Aumentará
ArgumentError
se x for 'google'.fonte
x=='google'?t: x.size
JavaScript, 47 bytes
Agradável e simples.
Editar: agora está em conformidade com as regras
Testando
Erro lançado
Nenhum erro lançado
fonte
undefined
.C,
6648Original:
Usar o OSX gcc,
l("duck");
retorna4
,l("google");
causaFloating point exception: 8
.Em outras plataformas, as constantes podem precisar ser ajustadas para endianness.
Mais curto :
menos truque, mesmos resultados.
fonte
0x656c676f6f67
=elgoog
). Acho que essa resposta precisa de uma explicação para quem aprecia esse tipo de coisa louca de baixo nível.int
4 caracteres.char *
, com unidades de8-bits
, for convertido paralong *
, com unidades de64-bits
, sem ser realocado corretamente, os dados nesses 8 bytes de espaço de heap serão corrompidos e tratados como um número único (8*8 = 64
). É por isso que você recebe os 6 primeiros caracteres, + NUL + lixo. Isso é muito inteligente. Perigoso também. Me pergunto por que não falha. Esse oitavo byte de lixo está fora dos limites, não?Ruby, 29 bytes
Primeiro, criei algo muito semelhante à primeira tentativa de @ Borsunho, mas a minha era um pouco mais longa e ele postou a sua antes que eu terminasse. Veio com isso antes de seus 30 bytes editar :)
Exemplos de uso:
edit: Dois anos e algumas versões do Ruby mais tarde
Ruby , 25 bytes
Substituído
String#size
pelo novo plus unário. Experimente online!fonte
^
fora do grupo)..*
no final é o que a faz funcionar./\A(?!google\Z).*/m
corrige (ao custo de três bytes, no entanto).^
e$
coincidir com o início e o fim das linhas, enquanto\A
e\Z
coincidir com o início e o fim da sequência como um todo.> <>, 55 bytes
Achei que eu tentaria, não a minha melhor tentativa ou algoritmo de golfe. Não é uma função em si, mas acho que isso ainda deve se qualificar. Vou ver se consigo editar em uma versão melhor.
Se você pode imprimir o comprimento e depois o erro, aqui está uma solução de 46 bytes:
Solução anterior de 49 bytes desta natureza:
Fico feliz em apresentar uma explicação se houver algum interesse e informe-me se houver algo errado com minha resposta ou se você tiver sugestões de golfe.
fonte
Javascript ES6,
51 2725 bytesOlá, sou novo em codificar golfe, então provavelmente isso pode ser muito mais, mas aqui está:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
e algum teste:
Editar: adicionado? para substituir if e substituir Error por um objeto indefinido.Edição 2: percebi que minha contagem de bytes estava incorreta e removi g =
fonte
GolfScript,
1416 caracteresComo muitos outros, simplesmente compara a entrada
'google'
e divide o comprimento pelo inverso do resultado.Programas de exemplo:
'bing'
(saída:4
)'google'
(output: Error: Tentativa de dividir por zero. )fonte
Preso , 16 bytes
Seguir um método semelhante ao da maioria das pessoas causará um erro de divisão por 0 no "google" sendo inserido.
fonte
Lote do Windows, 118 caracteres
A saída é% stringlength%.
Código completo:
Modificado a partir da resposta de Joshua Honig, aqui .
fonte