「グーグル」をグーグルしないでください


158

「グーグル」という言葉をグーグルで検索すると、インターネットが切断されることは周知の事実です。

あなたの仕事は、1つの文字列を受け入れ、その長さを可能な限り少ないUnicode文字で返す関数を作成することです。

ただし、指定された文字列がgoogle(小文字)の場合、エラーが発生します。

たとえば、g('bing')返されます4が、g('google')エラーが発生します。

使用例と、可能であればエラーを提供してください。


122
はグーグルをグーグルで検索し、グーグルはグーグルでグーグルを見つけました。神話は破壊された。
ジオビット

86
@Geobitsこれは、GoogleをGoogleで検索するかどうかを確認するための単なるテストです。:D
rybo111

7
関数は大文字と小文字を区別する必要がありますか?与えられた「グーグル」を投げるべきですか?
AXMIM

2
google(chromeの検索バー)にgoogleと入力すると、googleに行きたいかどうかを尋ねるメッセージが表示されました。(これはtldであるため、これは理にかなっています。つまり、com.googleは動作します)クリックすると、DNSルックアップエラーが発生しました。インターネット:壊れた!
クレイグ

4
私はこれを再開することに投票しています。私はこのチャレンジのエラーを構成するものに関する質問を見ていませんし、すでに154の回答がありますので、仕様を変更することは公平ではないと思います。これは良い質問の例ではないかもしれませんが、十分に明確です。特定の出力がエラーであるかどうかに本当に答えが出た場合、おそらくとにかく多くの賛成票を得ることはないでしょう。
ポケ

回答:


228

Python 2、29

lambda x:len(x)/(x!='google')

ZeroDivisionErroronを与え、"google"そうでなければ長さを与えます。これは、とに等しいPythonのブール値を利用01ます。


2
+1。ただし、に設定gするlambdaか、入力を使用して匿名で呼び出す必要があります。
ザック・ゲイツ

4
楽しみのために、この手法をJavaScript ES6で試しました。最終的に25になりましたがInfinity、エラーをスローする代わりに「google」に戻ります
...-ETHproductions

18
@ZachGates メタに関するコンセンサスは、特に許可されない限り、匿名関数が許可されるということです。質問はこのようなことを暗示しているように見えます(ただし、まだ明示的に許可していません)ので、OPについて質問する必要があります。
FryAmTheEggman

3
@Kevinを使用する必要があるreturn場合def
-FryAmTheEggman

3
おもしろいことに、これはPythに変換され、以前の最高のPythソリューションよりも優れています。それはL/lbnb"google、13バイト。
isaacg

107

Excel、23文字

これをA1以外のセルに貼り付け、検索クエリをA1に入力します。

=LEN(A1)/(A1<>"google")

例えば:

GoogleGoogle


9
Excelの使用に関する一般的なコンセンサスは何ですか?
ベータ崩壊

52
@BetaDecay。創造的で、珍しい、うまくいくようです。すべてのCGパズルに適用できるわけではありませんが、ここにあります!
kdbanman

119
マネージャーはそれを愛しています!
lkraider

18
とても効率的なCGユーザーはあなたを嫌います。ちょっと待って。B3はあなたの人生を永遠に変えます!
サムライ

8
Excelの使用に関する具体的なコンセンサスは何ですか?
GreenAsJade

81

C#、43バイト

サラ・アラミの答えに対する改善。「google」の提供時にスタックオーバーフロー例外をスローする再帰

int g(string s)=>s!="google"?s.Length:g(s);

2
ええ、私はそれが例外を投げるためにいくつかのキャラクターを保存するかなり賢い方法だと思った。4文字では、C#で例外をスローする最小の方法かもしれません。
DLeh

6
これは賢いです!ただし、C#の最近のバージョンでは末尾再帰がサポートされているため、この関数はをスローしませんStackOverflowException。実際には、戻りません(として動作しますwhile(true){})。
NightElfik

2
@DLeh Tailの再帰呼び出しは少し注意が必要です。デバッガーなしでx64 JITで実行する必要があります(デバッガーが接続されていると、明らかな理由で末尾再帰が機能しなくなります)。ここに私のプログラムは、証拠として次のとおりです。imgur.com/ErNl8LJと末尾再帰についてもう少し読み: blogs.msdn.com/b/davbr/archive/2007/06/20/... ;)
NightElfik

12
ハハ:g(string)...私は自分自身を見るでしょう
...-gregsdennis

1
@DLehああ、待ってください。私はあなたの43バイトにマッチすることができますが、それを負かすことはできません。:) int g(string s)=> s!= "google"?s.Length:s [9];
リー

57

パイス、14 13文字

L/lbnb"google

名前付き関数を定義しますy

これは、文字列がgoogleでない場合は長さを1で除算し、そうでない場合は0で除算します。このアイデアは目新しいものではありませんが、私は独自に思いつきました。

オンラインでお試しください。

使い方

L                 Define y(b):
  lb                Compute len(b).
    nb"google       Compute (b != "google").
 /                  Set _ = len(b) / (b != "google").
                  Return _. (implicit)

ええ、私は実際にこれについては確信がありません、私はそれがストリングで以前に起こったとは思いません。通常はそれで閉じることができますが;、明らかにここに
はいられ

終了引用符は必要ありません。
マルティセン

48
名前付き関数を定義しますy」しかしy、あなたのコードにはありません!?
-AL

46
@ALそうですね。組み込みL関数は、関数を再定義しますy
デニス

90
よくわかりませんが、Pythが嫌いだと思います。
リスター氏

40

MATLAB、63 41 40 38 36バイト

1バイトを削ってくれたTom Carpenterに感謝します!

2バイトを削ってくれたStewie Griffinに感謝します!

@(x)nnz(x(+~strcmp('google',x):end))

他のよりエレガントなソリューションとは異なり、MATLABでゼロ除算を実行してもエラーは発生しませんが、むしろエラーが発生しますInf。このソリューションは、によって文字列の長さを見つけますnnz。生成される文字列は、文字列の最初から最後までインデックスを作成するような方法で作成されます。これは、基本的に文字列のコピーです。ただし、重要なのは、文字列にアクセスする場所の先頭が、入力がに等しいかどうかを確認することによって生成されること'google'です。等しくない場合、これは開始インデックス1を生成し、通常は文字列にインデックスを付けます。MATLABが1でインデックス付けを開始するため、等しい場合、生成されるインデックスは0であり、MATLABはインデックスは正の整数である必要があります。余分な+等価チェックの出力がブール値ではなく数値であることを確認することlogicalです。を+省略すると警告が生成されますが、このチャレンジの仕様では警告が許可されていないため、これ+が必要です...コードを完成させます。

使用例

>> f=@(x)nnz(x(+~strcmp('google',x):end)) %// Declare anonymous function

f = 

    @(x)nnz(x(+~strcmp('google',x):end))

>> f('bing')

ans =

     4

>> f('google')
Subscript indices must either be real positive integers or logicals.

Error in @(x)nnz(x(+~strcmp('google',x):end))

より楽しいバージョン、83 77 76 74 72バイト

1バイトを削ってくれたTom Carpenterに感謝します!

2バイトを削ってくれたStewie Griffinに感謝します!

@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');

上記は公式の提出物ではありませんが、実行するのが少し楽しいものです。eval匿名関数内での悪用、コードが行うことは、入力文字列が'google'...と等しいかどうかを確認することです。そうであれば、MATLABの組み込みWebブラウザーが開き、Googleの404エラーページが表示され、i存在しないサブページ。そうでない場合、通常は文字列の長さを表示します。

使用例

>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')

ans =

     4

>> f('google')
>> 

を使用した最後の呼び出し'google'により、次の画面が表示されます。

enter image description here


3
strcmp代わりにを使用してバイトを保存できますisequal
トムカーペンター

@TomCarpenter-おかしい。実際に使用するように指示strcmpしましたがisequal、何らかの理由で使用することになりました。
rayryeng

1
nnzは、より2バイト短いですnumel。数年前に私の投票がありました:
Stewie Griffin

31

JavaScriptのES6、34の 27 25文字

f=>f=='google'?Δ:f.length

Δgoogleに対してReferenceError をスローします。


10
三項演算子を使用して、2バイトを節約できます。
コンラッドボロウスキ

2
ええ、それはまさに私が得たものです。派手になりたい場合は、gの代わりに人々が決して使用しないシンボルを使用して、グローバル変数として存在しないようにします。Δは適切な変数名になります:)
ドミノ

1
あなたは#、JS afaikでエラーを使用することができます
クラップ

7
ΔGoogle Illuminatiが確認
DynamiteReed


26

TI-BASIC、15バイト

ヘック、私たちがそれをしている、ここでTI-BASICの答えを得るかもしれません。

入力形式は"string":prgmNAMEです。最初に見つけたのはThomas Kwaの功績です!

length(Ans)+log(Ans≠"GOOGLE

(ガイド:大文字を置き換えるために小文字ごとに1バイトを追加しますs/GOOGLE/google/g => +6 bytes

ああ、テストケース!

"GOGGLE":prgmG
               6
"BING":prgmG
               4
"GOOGLE":prgmG
           Error

20バイト:length(Ans)/(Ans≠"google。ケースも間違っています。大文字が許可されている場合、14バイトです。ところで、Ansを介して引数を渡すことは有効です。
リルトシアスト

AGOOGLE7、正しいはずですか?また、コードサイズでプログラムヘッダーをカウントするべきではないため、10バイトを減算します。
リルトシアスト

エラー:部分文字列を考えていました。ご容赦ください。
コナーオブライエン

1
@ThomasKwaコードに関するコメントはありませんでした。私たち二人が同じ解決策につまずいたのはまさにそのためです。ただし、クレジットに値すると信じる場合は、クレジットはあなたのものとします。^ _ ^(編集コードを読む場合、まったく同じものではありません。)
コナーオブライエン

@lirtosiast length(は2バイトです。これにより、数値は21バイトと15バイトになります。
ティムテック

23

APL(14)

(⍴÷'google'∘≢)

説明:

  • : 長さ
  • ÷: で割った
  • 'google∘≢:引数が'google' と等しくない。

文字列の長さを指定します。これは、文字列が等しくない場合は1で除算されgoogle(長さが変更されずに戻る)、文字列等しい場合は0で除算されgoogleます(エラーが発生します)。


11
括弧なしで変数に割り当てることができるので、括弧を数える必要はないと思います。
jimmy23013

単一文字の引数でKind-ofが失敗します。に置き換えて修正します。また、のオペランドを交換することで、見栄えを良くすることができます。ああ、かっこを削除することを忘れないでください。オールインオール:≢÷≢∘'google'
アダム

21

Python 3、30バイト

lambda u:[len][u=='google'](u)

1要素関数リストのインデックスを作成しIndexErroru=='google'述語がTrue(= 1)である場合に上げます。そのような機能。

多くのバリエーション。ワオ:

lambda u:[len(u)][u=='google']
lambda u:len([u][u=='google'])

チャレンジが反転した場合には(すべてのエラーをいない文字を救うことができる、「グーグル」):

lambda u:{'google':len}[u](u)

ただし、長さはすでにわかっているので、ハードコーディングするだけです。


Python 2.7でも動作します
Noodle9

何らかの理由で、私はこのソリューションが大好きです。
foslock

19

Haskell、24バイト

g s|s/="google"=length s

出力:

Main> g "google"

Program error: pattern match failure: g "google"

Main> g "bing"
4

15

CJam、16文字

{_,\"google"=!/}

これは、文字列がgoogleでない場合は長さを1で除算し、そうでない場合は0で除算します。このアイデアは目新しいものではありませんが、私は独自に思いつきました。

オンラインでお試しください。

使い方

_                 Push a copy of the string on the stack.
 ,                Compute the length of the copy.
  \               Swap the length and the original string.
   "google"=      Push 1 if the string is "google", 0 otherwise.
            !     Apply logical NOT. Maps 1 to 0 and 0 to 1.
             /    Divide the length by the Boolean.

興味深いことに、完全なプログラムは短くなります(15バイト)q_,\"google"=!/。この投稿を見る前にそれを開発しました。これは入力全体をとることに注意してください(とにかく関数の引数として受け取るようです)。残念ながら、これは関数を要求するため使用できません:(
Erik the Outgolfer

15

オクターブ、63バイト

Matlabソリューション(Octaveでも動作します)よりも長いことは知っていますが、特に悪です。引数を介して渡さなければならないコールバック関数(それ自体、したがって再帰的、悪)に依存する関数ハンドルを含むセル配列(悪)リテラル(悪)を使用して、匿名関数(悪)を作成しています。次に、基本的に関数を文字列引数に減らし、fasの2番目の引数を修正する別の匿名を作成しますf(非常に悪い)。健全な人間は、Perlや正規表現(またはcjam / pyth /その他のesolang)とほぼ同じくらい読みにくいため、これを行うことはありません。

したがって、文字列が「google」でない場合、セル配列の2番目の引数が呼び出され、文字列の長さが出力されます。それ以外の場合、最初の関数が呼び出され、それはコールバックとして渡されます(そして、それ自体もコールバックとして渡されます)。このエラーは、基本的には最大の再帰深度エラーです。

f=@(s,f){@()f(s,f),numel(s)}{2-strcmp(s,'google')}();@(s)f(s,f)

2
これらのことはほとんどの言語で悪ではありません。そして、これコードゴルフです、地球上で最も読めないコードのいくつかがここにあります:)。かっこいいハンドル。
BAR

9
私はeval本当にそれを邪魔するためにここにいくつか欠けています:
ルイスメンドー

12

JavaScript、25バイト

素敵でシンプルなJavaScriptの例:

e=>e!='google'?e.length:g

「google」を入力すると、 ReferenceError

alert((e=>e!='google'?e.length:g)('test'))


2
うわー、javascriptのlamda関数の省略形があると言ってくれてありがとう!
トマーシュザト

3
@TomášZatoCaveat:ES2015ではまったく新しいので、サポートはまだ異なります。
アンコ

11

APL、19 17バイト

{⍵≡'google':⍟⋄≢⍵}

これは、入力がの場合に構文エラーをスローする名前のないモナド関数ですgoogle。これは、何もない自然対数をとろうとすることで達成されます。

{
 ⍵≡'google':          ⍝ If the right argument is "google"...
            ⍟⋄        ⍝ Compute log(<nothing>), which brings only sadness
              ≢⍵      ⍝ Otherwise compute the length
}

オンラインで試す

デニスのおかげで2バイト節約できました!


非公式には「スプラット」として知られています。この用途に非常に適切な名前。
アダム

9

R、46バイト

g=function(x)ifelse(x!="google",nchar(x),)

私が誤解していない限り、元の投稿では、コードが正しい構文でなければならないことを指定していません。

例:

> g("bing")
[1] 4
> g("google")
Error in ifelse(x != "google", nchar(x), ) : 
  argument "no" is missing, with no default

ifelseステートメントの「no」パラメーターには何も追加しなかったため、このパラメーターが呼び出されるとエラーが返されます。


10
ここに少し短いものがあります:g=function(x)nchar(x)[[x!="google"]]
flodel

9

Perl、31 29バイト

sub{$_=pop;y///c/!/^google$/}

-2bマナトワークのおかげ

使用法:

sub{$_=pop;y///c/!/^google$/}->("google")

関数ではなくプログラムで逃げることができれば、20バイト(+1バイトのコマンドライン)で以下が有効になります。

$_=y///c/!/^google$/

エラーはゼロによる除算です。

説明:

y///c長さを返し、!/^google$/入力が「google」と一致する場合は0を返します。

使用法:

perl -p entry.pl input.txt

2
無名関数にすることができます:sub{…}。(それからあなたはそれのように呼びますsub{…}->("google")。)
manatwork

$_!=google代わりに!/^google$/
Gabriel Benamy

@GabrielBenamy私は!=文字列を比較するために動作しないのではないかと心配しています...
ダダ

7

Haskell-30文字

g"google"=error"!";g s=length s

>g "google"
 *Exception: !
>g "str"
 3

6
エラーの感嘆符が表示される理由 空の文字列もそうではないでしょうか?
クリッツフィッツ

1
に変更することを提案したかっx=x;g"google"=x;g s=length sたのですが、何らかの理由で、ghciで<< loop >>例外がスローされません。
クリッツフィッツ

17
g s|s/="google"=length sの必要性を回避error
-chs

7

Python 3、35バイト

lambda n:len(n)if n!='google'else d

1
@FryAmTheEggmanは実際には16ビット短くなっています。XD
DiegoDD

1
@FryAmTheEggman:良いトリックですが、idは空の文字列では機能しません:(lambda n:len(n)*(n!='google')or d)('')
pabouk

@paboukまったく正しい、それを指摘してくれてありがとう。
FryAmTheEggman

7

Java 7: 7:53 52バイト

int g(String _){return"google"==_?0/0:_.length();} 

上記のコードはArithmeticException、ゼロによる除算とStringそれ以外の場合にスローされますgoogle==参照を比較し、Stringオブジェクトでは機能しないことに注意してください。

Java 8:29バイト

(以下のコメントに示された提案に基づいて)

s->s=="google"?0/0:s.length()

1
Java 8のラムダ宣言を使用することもできますs->(s.equals("google")?null:s).length();
。– hjk

3
「==は参照を比較し、文字列オブジェクトでは機能しないことに注意する価値があります。」実際、すべての文字列はオブジェクトであるため==、Javaでの文字列の比較は一般に機能しません(文字列のインターンに頼っている場合を除き、それは悪いことです)。おそらくあなたはJavaScriptと混同されたのでしょうか?
ジェンケフ

1
@gengkev両方がリターラルの場合、文字列プールで参照されるのは同じオブジェクトであるため、機能します。スペックはリターラルを提供しますが、ここではリターラルなので、動作します。
ヤシンハジャイ

2
@YassinHajaj仕様ではリテラルとして指定されていることに同意しますが、これは単なる例です。関数は、stdinからの入力が与えられた場合、または関数が別々にコンパイルされた別のクラスから呼び出された場合、おそらく同じことを実行するはずです。いずれにせよ、コンパイラの最適化(文字列のインターン)に依存することは、私が最初に言ったことです。
ジェンケフ

7

C ++ 11、54(コード)+ 14(#include)= 68

さて、ゼロによる除算は未定義の動作であり、エラーとは呼びません。だから私のアプローチ。

#include<ios>
[](std::string s){return s!="google"?s.size():throw;};

使用法

[](std::string s){return s!="google"?s.size():throw;}("google");

1
size()2バイトを節約するために呼び出すことができます。C ++ 14では、あなたはまた、一般的なラムダを使用して置き換えることができますstd::stringによってauto。のstd::string代わりに実際に渡す必要がありconst char*ます。
-isanae

私は知りませんでした@isanaeはstd::string持っているsize()方法、そのためのおかげで。私はC ++ 14の汎用ラムダを知っていますが、"string"is const char*とnot であるため、どのように役立つかわかりませんstd::string
ゼレゲス

1
@Zeregesはstd::stringありsize()かつlength()それはだから、コンテナと文字列の両方。についてはauto、の(std::string("google"))代わりにlambdaを呼び出します("google")。質問は、「文字列」が何であるかを指定せずに、「1文字列を受け入れる」だけです。
-isanae

@isanae C ++ 14も:) "google"sを構築する必要がありstd::stringます
クエンティン

@Zeregesを単にthrow;トリガーすることができますstd::terminate()(現在の例外がないため)。
クエンティン

6

MUMPS、28バイト

g(s) q $S(s'="google":$L(s))

使用法:

>w $$g^MYROUTINE("bing")                                      
4
>w $$g^MYROUTINE("google")

<SELECT>g^MYROUTINE

どうして?まあ、$S[ELECT]ほとんどHaskellのか錆のような言語では、パターンマッチのような-基本的にコンパクトなマルチ節のif-else文です。ただし、HaskellやRustとは異なり、パターンの網羅性はチェックされません。「コンパイル時の安全性」という概念はMUMPSに完全に当てはまらないためです。入力があなたが説明しなかったパターンである場合、あなたはと呼ばれる素敵なランタイムエラーを取得します<SELECT>


6

ルビー、34 30 27 26

->x{x=='google'?t: x.size}

未知の tは例外を発生させます。

->x{x=='google'?fail():x.size}

編集:短い完全に読みやすい明白なバージョン...

->x{x[x=~/^(?!google$)/..-1].size}

古い:他のアイデアとかなり似ています。発生しますArgumentErrorx 'はGoogleのであれば。


2
なぜそれらの括弧ですか?x=='google'?t: x.size
マナトワーク

6

JavaScript、47バイト

素敵でシンプル。

編集:ルールに準拠するようになりました

function f(g){if(g=="google")a;return g.length}

テスト中

スローされたエラー

function f(g){if(g=="google")a;return g.length}

alert(f("Hello"))
alert(f("google"))
alert(f("hi"))

エラーはスローされません

function f(g){if(g=="google")a;return g.length}

alert(f("Hello"))
alert(f("bing"))
alert(f("hi"))


技術的には、これはOPの仕様を満たしていません。この関数は長さを警告しますが、を返しますundefined
バングル

@Bungle元気ですか?
ベータ崩壊

1
@Bungleなるほど。復帰が必要であることを忘れていた
ベータ崩壊

1
ES6の矢印関数と(ifではなく)三項演算子を使用すると、それをもう少し絞ることができます:)
カールズアルコレア

1
@BetaDecay Originality first; 私はそれを尊重します。
カールズアルコレア

6

C、66 48

元の:

int l(long*s){return strlen(s)/((*s&~(-1L<<56))!=0x656c676f6f67);}

OSX用のgccを使用して、
l("duck");リターンは4
l("google");原因となりますFloating point exception: 8

他のプラットフォームでは、エンディアンのために定数を調整する必要がある場合があります。

より短い

トリッキーさが少ない、同じ結果。

 l(int*s){return strlen(s)/!!strcmp(s,"Google");}

うわー、それはそこにいくつかの興味深いロジックです。私がゴルフの部分を正しく理解していれば、最初の6文字を単一の巨大な数字(ほとんどハッシュのように)に収まるように何らかの形でシフトしています。後方(0x656c676f6f67= elgoog)。この答えには、この種のクレイジーな低レベルのものに感謝する私たちの説明が必要だと思います。
ブレーデンベスト

あなたは基本的にそれを持っています。文字列を格納するメモリを64ビットの数値にキャストするだけです。エンディアンネスにより、x86アーキテクチャでは「後方」になります。テキストは7バイトしか占有しないため、マスクはメモリ内の次のものを隠すだけです。面白いトリックですが、「!! strcmp(s、 "google")」は実際にはもっと短いと思います。
AShelly

1
とにかく、+ 1。絶対に。また、int 4文字のを削除することで短縮できると思います。
ブレーデンベスト

いくつか入力した後、私はそれを見つけました!のchar *単位のが8-bits、の単位のにキャストされlong *64-bits適切に再割り当てされずに、これらの8バイトのヒープ領域のデータが破損し、単一の数値(8*8 = 64)として扱われます。これが、最初の6文字、+ NUL +ゴミを取得する理由です。それはとても賢いです。危険も。なぜセグメンテーション違反にならないのだろうか。その8番目のガベージバイトは範囲外ですよね?
ブレーデンベスト

私はあなたの分析を見ました。あなたは正しい、シフトは54ではなく56であるべきだった。また、私は破損した単語を使用しないだろう。メモリは同じで、ビットの解釈が異なるだけです。技術的には、ガベージバイトへのアクセスは未定義の動作であり、実際にセグメンテーション違反を起こす可能性があります。実際には、そのバイトはほぼ確実に残りの文字列と同じ正当なメモリブロックに存在し、一般にこれらのブロック(ヒープ、スタック、定数)は最小でワードサイズの単位で割り当てられます。そのため、メモリはプログラムに属し、文字列以外のものが含まれています。
AShelly

6

ルビー、29バイト

私は最初に@Borsunhoの最初の試みに非常に似たものを思いつきましたが、私のものは少し長かったので、彼は私が完了する前に彼を投稿しました。彼の30バイトの編集の前にこれに気づいた:)

->s{s[/^(?!google$).*/].size}

使用例:

$ irb
2.2.1 :001 > f = ->s{s[/^(?!google$).*/].size}
 => #<Proc:0x007fa0ea03eb60@(irb):1 (lambda)> 
2.2.1 :002 > f[""]
 => 0 
2.2.1 :003 > f["bing"]
 => 4 
2.2.1 :004 > f["google"]
NoMethodError: undefined method `size' for nil:NilClass
  from (irb):1:in `block in irb_binding'
  from (irb):4:in `[]'
  from (irb):4
  from /Users/daniel/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'

編集:2年後といくつかのRubyバージョン

ルビー、25バイト

->s{+s[/^(?!google$).*/]}

String#size新しい単項プラスに置き換えられます。オンラインでお試しください!


きちんと、私はこれを働かせることができませんでした(私は^マッチグループの外に出ることに思いつきませんでした)。
ボルスニョ

@Borsunho私は、私が望んだ結果が得られるまで、正規表現を「強引に強制」することを認めなければなりません:) .*最後にそれが機能するものだと思います。
daniero

入力文字列に複数の行があり、独自の行にgoogleが含まれている場合は中断します。/\A(?!google\Z).*/m修正すると思います(ただし、3バイトのコストがかかります)。^そして$、行の先頭と末尾に一致し、while \A\Z文字列全体の先頭と末尾に一致します。
-histocrat

@histocratが、複数行の文字列をグーグルで検索できるとは思わない;)
daniero

4

> <>、55バイト

i:0(?v
31&l~<v0"google"~~.?%2l
$v?(2l<S?*=2l=6:+={
&<;n

私はこれを試してみようと考えましたが、私の最高のゴルフの試みやアルゴリズムではありません。それ自体は機能ではありませんが、これはまだ資格があるはずだと思います。より良いバージョンで編集できるかどうかを確認します。

長さとエラーを出力できる場合は、46バイトのソリューションがあります。

i:0(?v
2lnl~<v0"google";?%
$;?(2l<S?*=2l=6:+={

この性質の49バイトの以前のソリューション:

i:0(?v
l0nl~<v;!?=7
:;?(2l<S?*=2l=6:+=@@g3
elgoog

興味があれば説明させていただきます。私の答えに何か問題がある場合や、ゴルフの提案がある場合はお知らせください。


4

Javascript ES6、51 27 25バイト

こんにちは、私はゴルフをコーディングするのは初めてなので、これはおそらくもっと多くのゴルフをすることができますが、ここにそれがあります:

_=>_=="google"?a:_.length

g=_=>_=="google"?a:_.length

g=_=>{if("google"==_)throw Error();return _.length}

そしていくつかのテスト:

(_=>_=="google"?a:_.length)("bing")//4
(_=>_=="google"?a:_.length)("google")// Error: a is not defined

g("bing")// returns 4
g("google")// Error: a is not defined

編集:追加?ifを置き換え、Errorを未定義のオブジェクトに置き換えます。

編集2:バイトカウントが間違っていることに気付き、g =を削除しました


4

GolfScript、14 16文字

{.,\'google'=!/}

他の多くの場合と同様に、単に入力を比較し'google'、結果の逆数で長さを除算します。

サンプルプログラム:

  • 'bing'(出力:4
  • With'google'(出力:エラー:ゼロで除算しようとしました。

@デニスあなたのポイントを参照してください。元の形式では、完全に再利用可能ではありませんでした(リストにコードを適用することはできませんでした)。また、これを投稿する前に、CJamで実質的に同じ答えを書いたことに気づきませんでした(実際、これまでCJamを言語として漠然としか認識していませんでした)。ソリューションにも+1。
pswg

4

スタック、16バイト

s_l1u"google"=-/

ほとんどの人と同様の方法に従って、「google」が入力されると0で割るエラーが発生します。


4

Windowsバッチ、118文字

IF /I "%string%"=="google" exit
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )

出力は%stringlength%です。

完全なコード:

@echo off
del string.txt
cls
echo Type your string
echo.
set /p string=String:
IF /I "%string%"=="google" goto err
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )
cls
echo %stringlength%
pause
del string.txt
:err
color c
echo There seems to be an error with your input...
pause>nul

ジョシュア・ホニグの回答を修正しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.