Nous savons tous que si vous recherchez le mot "google" sur Google, cela cassera Internet.
Votre tâche consiste à créer une fonction qui accepte une chaîne et renvoie sa longueur, avec le moins de caractères Unicode possibles.
Cependant, si la chaîne donnée est google
(minuscule), une erreur sera générée.
Par exemple, g('bing')
retournera 4
mais g('google')
causera une erreur.
Veuillez fournir un exemple d'utilisation et l'erreur si possible.
Réponses:
Python 2, 29
Donne un
ZeroDivisionError
sur"google"
, et la longueur autrement. Cela profite de l’égalisation des booléens de Python0
et1
.la source
g
votrelambda
ou l'appelez anonymement avec une entrée.Infinity
pour "google" au lieu dereturn
si vous avez utilisédef
L/lbnb"google
13 octets.Excel, 23 caractères
Collez-le dans une cellule autre que A1 et tapez votre requête de recherche dans A1.
Par exemple:
la source
C #, 43 octets
Une amélioration par rapport à la réponse de Salah Alami. Rechute pour renvoyer une exception de débordement de pile en fournissant "google"
la source
StackOverflowException
. En fait, il ne reviendra jamais (se comporte commewhile(true){}
).Pyth,
1413 caractèresDéfinit une fonction nommée
y
.Cela divise la longueur par 1 si la chaîne n'est pas google et par 0 sinon. L'idée n'est pas nouvelle, mais je l'ai proposée indépendamment.
Essayez-le en ligne.
Comment ça fonctionne
la source
;
mais évidemment, vous ne pouvez pas ici ...y
. " Mais il n'y a pasy
de code dans votre code!?L
redéfinit la fonctiony
.MATLAB,
6341403836 octetsMerci à Tom Carpenter d’avoir supprimé 1 octet!
Merci à Stewie Griffin d'avoir réduit de 2 octets!
Contrairement aux autres solutions plus élégantes, effectuer une division par zéro dans MATLAB ne donnera pas une erreur, mais plutôt
Inf
. Cette solution trouve la longueur de la chaîne parnnz
. La chaîne produite est telle que vous indexez du début à la fin de la chaîne, ce qui est essentiellement une copie de la chaîne. Cependant, l’important est que le début de l’accès à la chaîne soit généré en vérifiant si l’entrée est égale ou non'google'
. Si ce n'est pas le cas, cela produit un index de début égal à 1 et nous indexons normalement dans la chaîne ... car MATLAB commence à indexer à 1. S'il est égal, l'index produit est 0 et MATLAB émettra une erreur d'indexation indiquant que le index doit être un entier positif. L'extra+
est de s'assurer que le résultat du contrôle d'égalité est numérique plutôt que booléen /logical
. Omettre le+
produira un avertissement, mais comme les spécifications de ce défi ne permettent pas les avertissements, le+
est requis ... complétant ainsi le code.Exemple d'utilisations
Une version plus amusante,
8377767472 octetsMerci à Tom Carpenter d’avoir supprimé 1 octet!
Merci à Stewie Griffin d'avoir réduit de 2 octets!
Ce qui précède n’est pas une candidature officielle, mais c’est quelque chose de plus amusant à exécuter. Utilisant abusivement
eval
des fonctions anonymes, le code vérifie si la chaîne de saisie est égale à'google'
... sous-page située ài
quand cela n'existe pas. Sinon, nous affichons la longueur de la chaîne normalement.Exemple d'utilisations
Le dernier appel en utilisant
'google'
nous donne cet écran:la source
strcmp
place deisequal
.strcmp
mais j'ai fini par utiliserisequal
pour une raison quelconque ... merci!nnz
est deux octets plus court quenumel
. Vous avez voté il y a quelques années :-)JavaScript ES6,
342725 caractèresLance une ReferenceError sur
Δ
pour Google.Afficher l'extrait de code
la source
#
, il erreurs dans JS afaikTI-BASIC, 15 octets
Heck, pendant que nous y sommes , autant obtenir une réponse TI-BASIC ici.
Le format d'entrée est
"string":prgmNAME
. Nous remercions Thomas Kwa de l' avoir trouvé en premier!(Guide: ajoutez 1 octet pour chaque lettre minuscule en remplaçant une lettre majuscule. Donc
s/GOOGLE/google/g => +6 bytes
.)ahhhhh cas de test!
la source
length(Ans)/(Ans≠"google
. Vous avez également le cas mal; si les majuscules sont autorisées, elles sont de 14 octets. En passant, il est valide de passer des arguments à Ans.AGOOGLE
devrait donner 7, correct? Et vous ne devriez pas compter l'en-tête du programme dans la taille de votre code, donc soustrayez 10 octets.length(
est deux octets, cela ferait vos nombres 21 et 15 octets.APL (14)
Explication:
⍴
: longueur÷
: divisé par'google∘≢
: l'argument n'est pas égal à'google
'.⍴
donne la longueur de la chaîne, divisée par 1 si la chaîne n'est pas égalegoogle
(ce qui rend la longueur inchangée), ou par 0 si la chaîne est égalegoogle
(en donnant une erreur).la source
⍴
par≢
. En outre, vous pouvez le rendre plus cool en échangeant les opérandes de∘
. Oh, n'oubliez pas de retirer les parens. Tout-en-un:≢÷≢∘'google'
Python 3, 30 octets
Indexe la liste de fonctions à 1 élément, en soulevant un
IndexError
si leu=='google'
prédicat estTrue
(= 1). Tellement fonctionnel.Beaucoup de variantes. Sensationnel:
la source
Haskell, 24 octets
g s|s/="google"=length s
Sortie:
la source
CJam, 16 caractères
Cela divise la longueur par 1 si la chaîne n'est pas google et par 0 sinon. L'idée n'est pas nouvelle, mais je l'ai proposée indépendamment.
Essayez-le en ligne.
Comment ça fonctionne
la source
q_,\"google"=!/
. Développé avant de voir ce post. Notez que cela prend toute l' entrée (que vous semblez prendre de toute façon comme argument de fonction). Malheureusement, vous ne pouvez pas l'utiliser, car cela demande une fonction :(Octave, 63 octets
Je sais que c'est plus long que la solution Matlab (qui fonctionnerait aussi dans Octave), mais c'est particulièrement pervers. Je crée une fonction anonyme (mal) en utilisant un tableau de cellules (mal) des littéraux (mal) contenant des descripteurs de fonction dépendants d'une fonction de rappel (elle-même, donc récursive, mal) qui doivent être transmis via un argument. Ensuite, je crée un autre anonyme qui réduit fondamentalement la fonction à l'argument chaîne et corrige le deuxième argument de
f
asf
(très diabolique). Aucun humain sensé ne le ferait jamais, car il est presque aussi illisible que Perl ou regex (ou cjam / pyth / tout autre esolang).Donc, si la chaîne n'est pas "google", le deuxième argument du tableau de cellules sera appelé, ce qui donnera la longueur de la chaîne. Sinon, la première fonction sera appelée, qui sera transmise comme rappel (et se transmettra elle-même comme rappel), qui sera plus tard la fonction elle-même. L'erreur est fondamentalement une erreur de profondeur de récursivité maximale.
la source
eval
ici pour le rendre vraiment MAL :-)JavaScript, 25 octets
Exemple JavaScript simple et agréable:
Si "google" est entré, alors il passe un
ReferenceError
Exemple
la source
APL,
1917 octetsIl s'agit d'une fonction monadique non nommée qui générera une erreur de syntaxe si l'entrée est
google
. Ceci est accompli en essayant de prendre le logarithme naturel de rien.Essayez-le en ligne
Sauvé deux octets grâce à Dennis!
la source
⍟
est connu de manière informelle comme "splat". Un nom très approprié pour cet usage.R, 46 octets
À moins que je ne me trompe, le message d'origine n'a jamais précisé que le code devait être une syntaxe correcte.
Exemple:
Je n’ai jamais rien ajouté pour le paramètre "no" de l’instruction ifelse, ce qui renverra une erreur si ce paramètre est évoqué.
la source
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 octets-2b grâce à manatwork
Usage:
Si je pouvais m'en tirer avec un programme plutôt qu'une fonction, les éléments suivants seraient valables avec seulement 20 octets (ligne de commande de +1 octet)
L'erreur est la division par zéro.
Explication:
y///c
retourne la longueur, puis!/^google$/
retournera 0 si l'entrée correspond à "google".Usage:
la source
sub{…}
. (Ensuite, vous l'appelez commesub{…}->("google")
.)$_!=google
au lieu de!/^google$/
!=
ne pas pouvoir comparer les cordes ...Haskell - 30 caractères
la source
x=x;g"google"=x;g s=length s
, mais pour une raison quelconque, les exceptions << boucle >> ne sont pas générées en ghci.g s|s/="google"=length s
évite le besoin deerror
Python 3, 35 octets
la source
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 octetsLe code ci-dessus jettera
ArithmeticException
pour la division par zéro et pour toutString
autre quegoogle
. Il convient de noter que==
compare la référence et ne fonctionnera pas pour lesString
objets.Java 8: 29 octets
(Basé sur la suggestion donnée dans le commentaire ci-dessous)
la source
s->(s.equals("google")?null:s).length();
==
en Java ne fonctionnera généralement pas (à moins que vous ne dépendiez de l'internalisation des chaînes, ce qui est mauvais). Peut-être que vous avez confondu avec JavaScript?C ++ 11, 54 (code) + 14 (#include) = 68
Eh bien, la division par zéro n’est qu’un comportement indéfini, ce que je n’appellerais pas une erreur. Donc mon approche.
usage
la source
size()
pour sauvegarder 2 octets. En C ++ 14, vous pouvez également utiliser des lambdas génériques et les remplacerstd::string
parauto
. Vous devez passer un réelstd::string
à la place d'unconst char*
.std::string
asize()
méthode, merci pour cela. Je connais des lambdas génériques en C ++ 14, mais je ne sais pas comment cela pourrait m'aider, puisque"string"
ouiconst char*
ou nonstd::string
.std::string
asize()
etlength()
parce que c'est à la fois un conteneur et une chaîne . En ce qui concerneauto
, vous appelez le lambda avec(std::string("google"))
au lieu de("google")
. La question dit seulement "accepte 1 chaîne" sans spécifier ce qu'est une "chaîne"."google"s
construire unstd::string
:)throw;
déclencherstd::terminate()
(car il n'y a pas d'exception actuelle ici).MUMPS, 28 octets
Usage:
Pourquoi? Eh bien, il
$S[ELECT]
s’agit en gros d’une déclaration multipartite if-else, presque semblable à une correspondance de motif dans un langage comme Haskell ou Rust. Sauf que, contrairement à Haskell ou Rust, les motifs ne sont pas vérifiés quant à leur exhaustivité, car la notion de "sécurité au moment de la compilation" est totalement étrangère à MUMPS. Donc, si votre entrée est un motif que vous n'avez pas pris en compte, vous obtenez une belle erreur d'exécution appelée<SELECT>
.la source
Ruby,
34302726Unknown
t
déclenche une exception.Edit: version totalement lisible et évidente qui est plus courte ...
Old: Assez similaire à d'autres idées semble-t-il Sera levé
ArgumentError
si x est 'google'.la source
x=='google'?t: x.size
JavaScript, 47 octets
Sympa et simple.
Edit: se conforme maintenant aux règles
Essai
Erreur levée
Aucune erreur jetée
la source
undefined
.C,
6648Original:
Utilisation de OSX gcc,
l("duck");
retours4
,l("google");
causesFloating point exception: 8
.Sur d'autres plates-formes, il peut être nécessaire d'ajuster les constantes en fonction de l'endianité.
Plus court :
moins d'astuce, mêmes résultats.
la source
0x656c676f6f67
=elgoog
). Je pense que cette réponse nécessite une explication pour ceux d’entre nous qui apprécions ce genre de trucs fous de bas niveau.int
, qui est de 4 caractères.char *
, avec des unités de8-bits
, est converti enlong *
unités64-bits
, sans être correctement réaffecté, les données de ces 8 octets d'espace de segment de mémoire sont corrompues et traitées comme un seul nombre (8*8 = 64
). C'est pourquoi vous obtenez les 6 premiers caractères, + NUL + garbage. C'est très intelligent. Dangereux aussi. Je me demande pourquoi il ne segfault pas. Ce 8ème octet de poubelle est hors limites, non?Ruby, 29 octets
J'ai tout d'abord proposé quelque chose de très similaire à la première tentative de @ Borsunho, mais la mienne était légèrement plus longue et il l'a postée avant la fin. Entré avec cela avant son édition de 30 octets :)
Exemples d'utilisation:
edit: Deux ans et quelques versions de Ruby plus tard
Ruby , 25 octets
Remplacé
String#size
par le nouveau plus unaire. Essayez-le en ligne!la source
^
dehors du groupe de match)..*
la fin qui fait son succès./\A(?!google\Z).*/m
résoudre le problème (au prix de trois octets, cependant).^
et$
correspond au début et à la fin des lignes, while\A
et\Z
au début et à la fin de la chaîne dans son ensemble.> <>, 55 octets
Je pensais que j'allais tenter le coup, pas ma meilleure tentative de golf ni mon meilleur algorithme. Pas une fonction en soi, mais je pense que cela devrait quand même être admissible. Je verrai si je peux éditer une meilleure version.
Si vous êtes autorisé à imprimer la longueur puis l'erreur, voici une solution de 46 octets:
Solution précédente de 49 octets de cette nature:
Je serai heureux de fournir une explication si cela vous intéresse, et s'il vous plaît, laissez-moi savoir si ma réponse a un problème ou si vous avez des suggestions pour le golf.
la source
Javascript ES6,
51 2725 octetsSalut, je suis nouveau sur le code de golf, donc cela peut probablement être joué beaucoup plus, mais voici:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
et quelques test:
Edit: ajouté? pour remplacer if et remplacer Error par un objet non défini.Edit 2: j’ai réalisé que mon nombre d’octets était faux et j’ai supprimé le g =
la source
GolfScript,
14 à16 caractèresComme beaucoup d'autres, compare simplement l'entrée à
'google'
et divise la longueur par l'inverse du résultat.Exemples de programmes:
'bing'
(sortie:4
)'google'
(sortie: Erreur: Tentative de division par zéro. )la source
Coincé , 16 octets
Suivre une méthode similaire à la plupart des gens provoquera une erreur de division par 0 sur "google" en cours de saisie.
la source
Lot Windows, 118 caractères
La sortie est% stringlength%.
Code complet:
Modifié à partir de la réponse de Joshua Honig, ici .
la source