Wir alle wissen, dass wenn Sie das Wort "google" googeln, es das Internet brechen wird.
Ihre Aufgabe ist es, eine Funktion zu erstellen, die eine Zeichenfolge akzeptiert und deren Länge in möglichst wenigen Unicode-Zeichen zurückgibt.
Wenn die angegebene Zeichenfolge jedoch google
Kleinbuchstaben enthält, wird ein Fehler verursacht.
Zum Beispiel g('bing')
wird zurückkehren , 4
sondern g('google')
wird einen Fehler verursachen.
Bitte geben Sie ein Verwendungsbeispiel und den Fehler an, falls möglich.
Antworten:
Python 2, 29
Gibt einen
ZeroDivisionError
an"google"
und die Länge sonst. Dies nutzt Pythons Boolesche Werte gleich0
und1
.quelle
g
um Ihrelambda
mit einem Eingang, oder rufen Sie es anonym, though.Infinity
für "google" zurück, anstatt einen Fehler zu werfen ...return
wenn Sie verwendetdef
L/lbnb"google
13 Bytes.Excel, 23 Zeichen
Fügen Sie dies in eine andere Zelle als A1 ein und geben Sie Ihre Suchanfrage in A1 ein.
Zum Beispiel:
quelle
C # 43 Bytes
Eine Verbesserung gegenüber Salah Alamis Antwort. Rekursionen zum Auslösen einer Stapelüberlauf-Ausnahme bei der Bereitstellung von "google"
quelle
StackOverflowException
. In der Tat wird es nie zurückkehren (verhält sich wiewhile(true){}
).Pyth,
1413 ZeichenDefiniert eine benannte Funktion
y
.Dies teilt die Länge durch 1, wenn die Zeichenfolge nicht google ist, und durch 0, wenn dies nicht der Fall ist . Die Idee ist nicht neu, aber ich habe sie eigenständig entwickelt.
Probieren Sie es online aus.
Wie es funktioniert
quelle
;
aber offensichtlich kann man nicht hier ...y
. " Aber es gibt keiney
in Ihrem Code!?L
definiert die Funktion neuy
.MATLAB,
6341403836 BytesVielen Dank an Tom Carpenter für das Abschneiden von 1 Byte!
Vielen Dank an Stewie Griffin für das Abschneiden von 2 Bytes!
Im Gegensatz zu den anderen eleganteren Lösungen führt das Durchführen einer Division durch Null in MATLAB nicht zu einem Fehler, sondern zu einer Abweichung
Inf
. Diese Lösung ermittelt die Länge der Zeichenkette nachnnz
. Die erzeugte Zeichenfolge wird so erstellt, dass Sie vom Anfang der Zeichenfolge bis zum Ende indexieren. Dies ist im Wesentlichen eine Kopie der Zeichenfolge. Wichtig ist jedoch, dass der Anfang des Zugriffs auf die Zeichenfolge erstellt wird, indem überprüft wird, ob die Eingabe gleich ist oder nicht'google'
. Wenn dies nicht der Fall ist, wird ein Anfangsindex von 1 erzeugt, und wir indizieren in der Regel in den String ... wenn MATLAB mit der Indizierung bei 1 beginnt. Wenn der Index gleich ist, wird 0 erzeugt und MATLAB gibt einen Indizierungsfehler aus, der besagt, dass index muss eine positive ganze Zahl sein. Das Extra+
soll sicherstellen, dass die Ausgabe der Gleichheitsprüfung numerisch und nicht boolesch istlogical
. Wenn Sie das weglassen,+
wird eine Warnung ausgegeben. Da die Spezifikationen dieser Herausforderung jedoch keine Warnungen zulassen,+
ist das erforderlich. Vervollständigen Sie den Code.Beispiel verwendet
Eine spaßigere Version,
8377767472 BytesVielen Dank an Tom Carpenter für das Abschneiden von 1 Byte!
Vielen Dank an Stewie Griffin für das Abschneiden von 2 Bytes!
Das oben Gesagte ist keine offizielle Einreichung, aber es macht ein bisschen mehr Spaß, es auszuführen. Wenn
eval
der Code in anonymen Funktionen missbraucht wird, wird geprüft, ob die Eingabezeichenfolge'google'
... entspricht. Wenn dies der Fall ist, wird der integrierte Webbrowser von MATLAB geöffnet und die 404-Fehlerseite von Google wird angezeigt, die versucht, auf die zuzugreifen Unterseite befindet sich bei,i
wenn das nicht existiert. Wenn nicht, zeigen wir die Länge der Zeichenkette normal an.Beispiel verwendet
Der letzte Anruf mit
'google'
gibt uns diesen Bildschirm:quelle
strcmp
anstelle von verwendenisequal
.strcmp
aber endete mitisequal
aus irgendeinem Grund .... danke!nnz
ist zwei Bytes kürzer alsnumel
. Sie hatten meine Stimme vor ein paar Jahren :-)JavaScript ES6,
342725 ZeichenLöst einen ReferenceError
Δ
für Google aus.Code-Snippet anzeigen
quelle
#
, es Fehler in JS afaikTI-BASIC, 15 Bytes
Heck, während wir gerade dabei sind , könnte genauso gut eine TI-BASIC-Antwort hier bekommen.
Eingabeformat ist
"string":prgmNAME
. Dank an Thomas Kwa , der es zuerst gefunden hat!(Anleitung: Fügen Sie 1 Byte für jeden Kleinbuchstaben hinzu und ersetzen Sie einen Großbuchstaben
s/GOOGLE/google/g => +6 bytes
.)ahhhhh Testfälle!
quelle
length(Ans)/(Ans≠"google
. Sie haben auch den Fall falsch; Wenn Großbuchstaben zulässig sind, sind es 14 Byte. Es ist übrigens zulässig, Argumente über Ans zu übergeben.AGOOGLE
sollte 7 geben, richtig? Und Sie sollten den Programmheader nicht in Ihrer Codegröße zählen, also subtrahieren Sie 10 Bytes.length(
ist zwei Bytes, das würde Ihre Zahlen 21 und 15 Bytes machen.APL (14)
Erläuterung:
⍴
: Länge÷
: geteilt durch'google∘≢
: Argument ist nicht gleich'google
'.⍴
gibt die Länge der Zeichenkette, die durch 1 , wenn die Zeichenkette nicht gleich geteilt istgoogle
, oder durch 0 (die die Länge unverändert zurück gibt) , wenn die Zeichenfolge nicht gleichgoogle
(einen Fehler gibt).quelle
⍴
durch≢
. Sie können es auch cooler machen, indem Sie die Operanden von tauschen∘
. Oh, vergessen Sie nicht, die Parens zu entfernen. Alles in allem:≢÷≢∘'google'
Python 3, 30 Bytes
Indiziert die 1-Element-Funktionsliste und gibt an,
IndexError
ob dasu=='google'
PrädikatTrue
(= 1) ist. So funktionell.Viele Varianten. Beeindruckend:
quelle
Haskell, 24 Bytes
g s|s/="google"=length s
Ausgabe:
quelle
CJam, 16 Zeichen
Dies teilt die Länge durch 1, wenn die Zeichenfolge nicht google ist, und durch 0, wenn dies nicht der Fall ist . Die Idee ist nicht neu, aber ich habe sie eigenständig entwickelt.
Probieren Sie es online aus.
Wie es funktioniert
quelle
q_,\"google"=!/
. Entwickelt, bevor Sie diesen Beitrag sehen. Beachten Sie, dass dies die gesamte Eingabe übernimmt (die Sie anscheinend sowieso als Funktionsargument verwenden). Leider können Sie es nicht verwenden, da dies nach einer Funktion fragt :(Oktave, 63 Bytes
Ich weiß, es ist länger als die Matlab-Lösung (die auch in Octave funktionieren würde), aber es ist besonders schlimm. Ich mache eine anonyme Funktion (böse) mit Zellarray (böse) Literalen (böse), die Funktionshandles enthalten, abhängig von einer Rückruffunktion (selbst, also rekursiv, böse), die per Argument übergeben werden muss. Dann erstelle ich ein anderes anonymes, das die Funktion im Grunde auf das Zeichenfolgenargument reduziert und das zweite Argument von
f
asf
(sehr böse) behebt . Jeder vernünftige Mensch würde dies niemals tun, da es fast so unlesbar ist wie Perl oder Regex (oder cjam / pyth / jeder andere Esolang).Wenn die Zeichenfolge nicht "google" ist, wird das zweite Argument des Zellenarrays aufgerufen, das die Länge der Zeichenfolge ausgibt. Andernfalls wird die erste Funktion aufgerufen, die als Rückruf übergeben wird (und sich selbst auch als Rückruf an sich selbst übergibt), die später die Funktion selbst ist. Der Fehler ist im Grunde ein maximaler Rekursionstiefenfehler.
quelle
eval
hier nur einige , um es wirklich böse zu machen :-)JavaScript, 25 Bytes
Schönes und einfaches JavaScript-Beispiel:
Wenn "google" eingegeben wird, passiert es a
ReferenceError
Beispiel
quelle
APL,
1917 BytesDies ist eine unbenannte monadische Funktion, die bei Eingabe einen Syntaxfehler ausgibt
google
. Dies wird erreicht, indem versucht wird, den natürlichen Logarithmus von nichts zu nehmen.Probieren Sie es online aus
Zwei Bytes gespart dank Dennis!
quelle
⍟
ist informell als "splat" bekannt. Ein sehr passender Name für diese Verwendung.R, 46 Bytes
Sofern ich nicht falsch verstanden habe, wurde im ursprünglichen Beitrag nie angegeben, dass der Code die richtige Syntax haben muss.
Beispiel:
Ich habe für den "no" -Parameter der ifelse-Anweisung nie etwas hinzugefügt, daher wird ein Fehler zurückgegeben, wenn dieser Parameter aufgerufen wird.
quelle
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 Bytes-2b dank manatwork
Verwendungszweck:
Wenn ich nicht mit einer Funktion, sondern mit einem Programm davonkommen könnte, wäre das Folgende mit nur 20 Bytes gültig (+1 Byte Befehlszeile)
Der Fehler ist eine Division durch Null.
Erläuterung:
y///c
Gibt die Länge zurück und gibt dann!/^google$/
0 zurück, wenn die Eingabe 'google' entspricht.Verwendungszweck:
quelle
sub{…}
. (Dann nennst du es wiesub{…}->("google")
.)$_!=google
anstelle von!/^google$/
!=
wird nicht funktionieren, um Zeichenfolge zu vergleichen ...Haskell - 30 Zeichen
quelle
x=x;g"google"=x;g s=length s
, aber aus irgendeinem Grund werden << loop >> -Ausnahmen nicht in ghci geworfen.g s|s/="google"=length s
vermeidet die Notwendigkeit fürerror
Python 3, 35 Bytes
quelle
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 BytesDer obige Code wird
ArithmeticException
zur Division durch Null und für alleString
anderen als ausgelöstgoogle
. Es ist zu beachten, dass der==
Vergleich Referenz und nicht fürString
Objekte funktionieren .Java 8: 29 Bytes
(Gestützt auf den Vorschlag im folgenden Kommentar)
quelle
s->(s.equals("google")?null:s).length();
==
in Java im Allgemeinen nicht funktioniert (es sei denn, Sie verlassen sich auf das Internieren von Zeichenfolgen, was sehr schlecht ist). Vielleicht haben Sie sich mit JavaScript verwechselt?C ++ 11, 54 (Code) + 14 (#include) = 68
Nun, Division durch Null ist nur undefiniertes Verhalten, das ich nicht als Fehler bezeichnen würde. Also mein Ansatz.
Verwendungszweck
quelle
size()
, um 2 Bytes zu speichern. In C ++ 14, könnten Sie auch generische lambdas verwenden und ersetzenstd::string
durchauto
. Sie müssten ein tatsächlichesstd::string
statt eines tatsächlichen übergebenconst char*
.std::string
hatsize()
Methode, danke dafür. Ich kenne generische Lambdas in C ++ 14, aber ich weiß nicht, wie es mir helfen würde, da es"string"
istconst char*
und nichtstd::string
.std::string
hatsize()
undlength()
weil es sowohl ein Container als auch ein String ist . Wie fürauto
, würden Sie das Lambda mit(std::string("google"))
anstelle von nennen("google")
. Die Frage lautet nur "akzeptiert 1 Zeichenfolge", ohne anzugeben, was eine "Zeichenfolge" ist."google"s
zu konstruierenstd::string
:)throw;
auslösenstd::terminate()
(da es hier keine aktuelle Ausnahme gibt).MUMPS, 28 Bytes
Verwendungszweck:
Warum? Nun, es
$S[ELECT]
handelt sich im Grunde genommen um eine kompakte If-else-Anweisung mit mehreren Klauseln - fast wie eine Musterübereinstimmung in einer Sprache wie Haskell oder Rust. Außer ... im Gegensatz zu Haskell oder Rust werden die Muster nicht auf Vollständigkeit überprüft, da der Begriff "Sicherheit beim Kompilieren" MUMPS völlig fremd ist. Wenn Ihre Eingabe also ein Muster ist, das Sie nicht berücksichtigt haben, wird ein hübscher Laufzeitfehler namens angezeigt<SELECT>
.quelle
Ruby,
34302726Unbekannt
t
löst eine Ausnahme aus.Edit: völlig lesbare und offensichtliche Version, die kürzer ist ...
Alt: Es scheint ziemlich ähnlich zu anderen Ideen zu sein. Wird erhöhen,
ArgumentError
wenn x 'google' ist.quelle
x=='google'?t: x.size
JavaScript, 47 Bytes
Schön und einfach.
Bearbeiten: Entspricht jetzt den Regeln
Testen
Fehler ausgelöst
Kein Fehler ausgelöst
quelle
undefined
.C
66,48Original:
Mit OSX gcc,
l("duck");
kehrt4
,l("google");
verursachtFloating point exception: 8
.Auf anderen Plattformen müssen die Konstanten möglicherweise für Endianness angepasst werden.
Kürzer :
Weniger trickreich, gleiche Ergebnisse.
quelle
0x656c676f6f67
=elgoog
). Ich denke, diese Antwort braucht eine Erklärung für diejenigen von uns, die diese Art von verrückten Sachen auf niedriger Ebene schätzen.int
, das sind 4 Zeichen.char *
mit Einheiten von8-bits
inlong *
Einheiten von umgewandelt wird64-bits
, ohne dass eine ordnungsgemäße Neuzuweisung erfolgt, werden die Daten in diesen 8 Byte des Heapspeichers beschädigt und als einzelne Zahl behandelt (8*8 = 64
). Deshalb bekommst du die ersten 6 Zeichen, + NUL + Müll. Das ist sehr schlau. Auch gefährlich. Frage mich, warum es nicht segfault. Das achte Müllbyte ist außerhalb der Grenzen, nicht wahr?Ruby, 29 Bytes
Ich hatte zuerst etwas Ähnliches wie @ Borsunhos ersten Versuch, aber meiner war etwas länger und er veröffentlichte seine, bevor ich fertig war. Kam damit auf, bevor seine 30 Bytes bearbeitet wurden :)
Anwendungsbeispiele:
Bearbeiten: Zwei Jahre und einige Ruby-Versionen später
Ruby , 25 Bytes
Ersetzt
String#size
durch das neue unäre Plus. Probieren Sie es online!quelle
^
zum Laufen bringen (ich hatte nicht die Idee, die Gruppe zu verlassen)..*
am Ende ist, was es funktioniert./\A(?!google\Z).*/m
behebt es (auf Kosten von drei Bytes, aber).^
und$
passen Sie den Anfang und das Ende von Zeilen an, während\A
und\Z
passen Sie den Anfang und das Ende der Zeichenfolge als Ganzes an.> <>, 55 Bytes
Dachte mir, ich würde es versuchen, aber nicht mein bester Golfversuch oder Algorithmus. Per se keine Funktion, aber ich denke, das sollte sich noch qualifizieren. Ich werde sehen, ob ich in einer besseren Version bearbeiten kann.
Wenn Sie die Länge und dann den Fehler drucken dürfen, ist hier eine 46-Byte-Lösung:
Bisherige 49-Byte-Lösung dieser Art:
Ich freue mich, eine Erklärung abzugeben, wenn Interesse besteht, und bitte lassen Sie mich wissen, wenn etwas mit meiner Antwort nicht stimmt oder wenn Sie Golfvorschläge haben.
quelle
Javascript ES6,
51 2725 BytesHallo, ich bin neu im Code-Golf, also kann man wahrscheinlich viel mehr Golf spielen, aber hier ist es:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
und ein Test:
Bearbeiten: Hinzugefügt? if ersetzen und Error durch ein undefiniertes Objekt ersetzen.Edit 2: Ich erkannte, dass meine Byteanzahl falsch war und entfernte das g =
quelle
GolfScript,
1416 ZeichenVergleicht wie viele andere einfach die Eingabe mit
'google'
und dividiert die Länge durch die Umkehrung des Ergebnisses.Beispielprogramme:
'bing'
(Ausgabe:4
)'google'
(Ausgabe: Fehler: Versuch, durch Null zu teilen. )quelle
Feststecken , 16 Bytes
Nach einer ähnlichen Methode wie bei den meisten anderen wird bei der Eingabe von "google" ein Fehler beim Teilen durch 0 verursacht.
quelle
Windows Batch, 118 Zeichen
Die Ausgabe ist% stringlength%.
Vollständiger Code:
Modifiziert von Joshua Honigs Antwort hier .
quelle