Google "google" etmeyin


158

Hepimiz biliyoruz ki "google" kelimesini google kelimesiyle google interneti kırarsanız.

Göreviniz bir dize kabul eden ve uzunluğunu döndüren, en az Unicode karakterli bir işlev oluşturmaktır.

Ancak, verilen dize google(küçük harf) ise, bir hataya neden olur.

Örneğin, g('bing')geri dönecek, 4ancak g('google')bir hataya neden olacaktır.

Lütfen bir kullanım örneği ve mümkünse hatayı sağlayın.


122
Ben google googled ve Google Google'ı bulundu. Efsane Baskın.
Geobits 28:15

86
@Geobits Bu Google’ı google’a alıp almayacağımı görmek için yapılan bir testtir. : D
rybo111

7
Fonksiyonun büyük / küçük harf duyarlı olması gerekiyor mu? 'GOOgle' verilen atmak mı?
AXMIM

2
Google’a (chrome’daki arama çubuğu) yazdığımda google’a gitmek isteyip istemediğimi soran bir mesaj geldi . (Şimdi bir tld olduğuna göre, bu mantıklı yani com.google işleri için uygun). Tıkladım ve bir dns arama hatası aldım. İnternet: kırık!
Craig

4
Bunu yeniden açmak için oy kullanıyorum. Bu meydan okuma için neyin yanlış oluşturduğu hakkında hiçbir soru görmedim ve zaten 154 tane cevabı var, bu yüzden özellikleri değiştirmenin adil olmadığını düşünüyorum. Bu iyi bir soru örneği olmayabilir, ancak yeterince açık. Eğer bir cevap gerçekten belirli bir çıktının bir hata olup olmadığına inerse, muhtemelen yine de bir o kadar fazla kazanamayacaktır.
Poke

Yanıtlar:


228

Python 2, 29

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

Aksi halde ZeroDivisionErroraçık "google"ve uzunluk verir . Bu, Python'un eşit 0ve eşit olan boolerlerinden yararlanır 1.


2
+1. Yine de, gkendinize ayarlamanız lambdaveya isimsiz olarak bir girişle aramanız gerekir.
Zach Gates,

4
Sadece eğlence için, bu tekniği JavaScript ES6 ile denedim. 25'te sona erdi, ancak Infinityhata yapmak yerine "google" için geri döndü ...
ETHproductions

18
@ZachGates Meta üzerindeki bir fikir birliği, özel olarak izin verilmedikçe isimsiz fonksiyonlara izin verildiği yönündedir . Soru, bunun gibi bir şeyi ima ettiği için (ama henüz açıkça reddetmediği için), OP hakkında sormalısınız.
FryAmTheEggman 28:15

3
@Kevin returnkullanılmış olsaydın bir ihtiyacın olurdudef
FryAmTheEggman 28:15

3
Eğlenceli, Pyth'a çevrilen bu, önceki en iyi Pyth çözümümden daha iyi. Bu L/lbnb"google, 13 bayttır.
isaacg

107

Excel, 23 karakter

Bunu A1 dışındaki bir hücreye yapıştırın ve arama sorgunuzu A1'e yazın.

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

Örneğin:

GoogleGoogle


9
Excel kullanımıyla ilgili genel fikir birliği nedir?
Beta Ayı

52
@BetaDecay. Yaratıcı, nadir, iş gibi görünüyor. Tüm CG bulmacalarına uygulanamayacak, ama işte burada!
kdbanman

119
Yöneticiler buna bayılıyor!
lkraider

18
Çok Verimli, CG Kullanıcıları Senden Nefret Edecek. Fakat bekle. B3 Hayatınızı Sonsuza Kadar Değiştirecek!
Sumurai8

8
Excel kullanmayla ilgili özel fikir birliği nedir?
GreenAsJade,

81

C #, 43 bayt

Salah Alami'nin cevabında bir gelişme. "Google" sağlama konusuna yığın taşması istisnası atma isteği

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

2
Evet, bunun bir istisna atmak için bazı karakterleri kurtarmanın çok akıllıca bir yolu olduğunu düşündüm. 4 karakterde, C # 'da bir istisna atmanın en küçük yolu olabilir, emin değilim.
DLeh

6
Bu akıllıca! Bununla birlikte, C # 'nın son sürümleri kuyruk özyineleme desteğine sahiptir, böylece bu işlev asla atılmaz StackOverflowException. Aslında asla geri dönmeyecek (gibi davranır while(true){}).
NightElfik

2
@DLeh Kuyruk özyineleme çağrıları biraz zor. X64 JIT’de ve hata ayıklayıcısız çalıştırmanız gerekir (ekli hata ayıklayıcı, kuyruk özyinelemesinin belirgin nedenlerle çalışmamasına neden olur). İşte benim bir kanıtı olarak benim program: imgur.com/ErNl8LJ ve kuyruk özyineleme hakkında biraz daha okuma: blogs.msdn.com/b/davbr/archive/2007/06/20/… ;)
NightElfik

12
Haha: gr (string) ... Ben ... kendimi göreceksiniz
gregsdennis

1
@DLeh oh bekle hayır 43 byte'ınızı eşleştirebilirim ama onu geçemem. :) int g (string s) => s! = "google"? s.Length: s [9];
Lee

57

Pyth, 14 13 karakter

L/lbnb"google

Adlandırılmış bir işlevi tanımlar y.

Bu dize google değilse ve aksi takdirde 0'a kadar uzunluğu 1'e böler . Fikir yeni değil, ama bağımsız olarak anladım.

Çevrimiçi deneyin.

Nasıl çalışır

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

Evet aslında bundan emin değilim, daha önce bir sicimle olduğunu sanmıyorum. Normalde kapatabilirsin ;ama belli ki burada
olamazsın

Son teklife ihtiyacınız yok.
Maltysen 28:15

48
" Adlandırılmış bir işlevi tanımlar y. " Ama ykodunuzda hiçbir şey yok !?
AL,

46
@ AL Bu doğru. Yerleşik Lfonksiyonunu yeniden tanımlayan y.
Dennis,

90
Emin değilim ama sanırım Pyth’tan nefret ediyorum.
Bay Lister,

40

MATLAB, 63 41 40 38 36 bayt

1 byte'ı tıraş ettiğin için Tom Carpenter'a teşekkürler!

Stewie Griffin'e 2 byte'ı tıraş ettiğin için teşekkürler!

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

Diğer daha zarif çözümlerin aksine, MATLAB'da sıfıra bölerek işlem yapmak hata vermeyecek, aksine Inf. Bu çözüm dizenin uzunluğunu bulur nnz. Üretilen dize, dizenin başından sonuna kadar indeksleyeceğiniz şekildedir, bu temel olarak dizenin bir kopyasıdır. Bununla birlikte, önemli olan, dizeye erişilecek yerin başlangıcının girdinin eşit olup olmadığını kontrol ederek üretilmesidir 'google'. Olmazsa, bu 1'in başlangıç ​​indeksini üretir ve normalde dizgiye indeksleriz ... MATLAB 1'de indekslemeye başlar. Eşit olursa, üretilen indeks 0'dır ve MATLAB indeksleme hatası atacağını belirtir. endeks pozitif bir tamsayı olmalıdır. Ekstra+eşitlik kontrolünün çıktısının Boolean / 'dan ziyade sayısal olmasını sağlamaktır logical. İsteği atlamak +bir uyarı üretecektir, ancak bu zorluğun özellikleri uyarılara izin vermediğinden +, gerekli olan ... kodun tamamlanması.

Örnek kullanımlar

>> 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))

Daha eğlenceli bir versiyon, 83 77 76 74 72 bytes

1 byte'ı tıraş ettiğin için Tom Carpenter'a teşekkürler!

Stewie Griffin'e 2 byte'ı tıraş ettiğin için teşekkürler!

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

Yukarıdakiler resmi bir sunum değil, fakat çalıştırılması biraz daha eğlenceli bir şey. evalAnonim işlevler kötüye kullanıldığında , kodun yaptığı şey, giriş dizesinin eşit olup olmadığını kontrol etmektir 'google'... ve öyleyse, bu MATLAB'ın yerleşik web tarayıcısını açar ve Google'ın 404 hata sayfasını erişmeye çalışırken gösterir ivar olmadığı zaman bulunan alt sayfa . Değilse, normal olarak dizenin uzunluğunu gösteririz.

Örnek kullanımlar

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

ans =

     4

>> f('google')
>> 

Son kullanılan çağrı 'google'bize şu ekranı verir:

görüntü tanımını buraya girin


3
Sen kullanarak bir bayt kurtarabilecek strcmpyerine isequal.
Tom Carpenter 5:

@ TomCarpenter - Komik. Aslında kendime kullanmamı söyledim strcmpama isequalnedense kullanmaya başladım .... teşekkürler!
rayryeng 29:15

1
nnziki bayttan daha kısa numel. Birkaç yıl önce benim oyumu aldınız :-)
Stewie Griffin

31

JavaScript ES6, 34 27 25 karakter

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

ΔGoogle için ReferenceError'ı fırlatır .


10
İki bayt kaydetmek için üçlü bir operatör kullanabilirsiniz.
Konrad Borowski

2
Yay, tam olarak sahip olduğum şey buydu. Süslü olmak istiyorsanız, bir global değişken olarak varolmayacağından emin olmak için insanların g yerine kullanmayacakları bir sembol kullanın. Δ iyi bir değişken adı yapar :)
Domino 17

1
Kullanabilirsiniz #, JS afaik hataları
alkış

7
Δ Google Illuminati onayladı
DynamiteReed

2
Ben sadece bunu burada bırakacağım github.com/Rabrennie/anything.js
sagiksp

26

TI-BASIC, 15 bayt

Heck, biz varken , burada bir TI-BASIC cevabı da alabiliriz.

Giriş formatı "string":prgmNAME. Kredi Thomas Kwa önce onu bulmak için!

length(Ans)+log(Ans≠"GOOGLE

(Kılavuz: bir büyük harf yerine, her küçük harf için 1 bayt ekleyin s/GOOGLE/google/g => +6 bytes.)

ahhhhh test durumları!

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

20 bayt: length(Ans)/(Ans≠"google. Ayrıca, davayı yanlış yaptınız; büyük harfe izin verilirse 14 bayttır. Bu arada, argümanları Ans üzerinden iletmek geçerlidir.
lirtosiast

AGOOGLE7 vermeli, doğru mu? Program başlığını kod boyutunuzda saymamalısınız, bu yüzden 10 bayt çıkarın.
lirtosiast 28:15

HATA: Ben substratlar düşünüyordum. Lütfen beni affet.
Conor O'Brien,

1
@ThomasKwa Kod ile görüşünüzü görmedim. Sadece bu şekilde olur, ikimiz de aynı çözüme rastladık. Ancak, krediyi hak ettiğinizi düşünüyorsanız, kredi sizin olacaktır. ^ _ ^ ( EDIT Kodu okursanız, aynı şey değildir.)
Conor O'Brien

@lirtosiast length(iki bayttır, bu sayılarınızı 21 ve 15 bayt yapar.
Timtech

23

APL (14)

(⍴÷'google'∘≢)

Açıklama:

  • : uzunluk
  • ÷: bölü
  • 'google∘≢: tartışma eşit değil 'google'.

dize eşit değil ise 1 ile bölünür dize uzunluğunu veren google(arka değişmeden uzunluğu verir), ya da 0 ile dize, etmez eşit google(bir hata verir).


11
Parekleri saymanıza gerek yok, çünkü onlarsız bir değişkene atanabilir.
jimmy23013

Tek karakterli argümanlarda tür başarısız. Değiştirerek Fix ile . Ayrıca, operandlarını değiştirerek daha güzel görünmesini sağlayabilirsiniz . Oh, parenleri çıkarmayı unutma. Hepsi-hepsi:≢÷≢∘'google'
Adám

21

Python 3, 30 bayt

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

1 elemanlı işlev listesini indeksler, IndexErroreğer bir şayet (= 1) ise bir u=='google'sayı atar True. Böyle işlevsel.

Çok değişkenler. Vay:

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

Eğer zorluk tersine çevrildiyse ( "google" olmayan her şeyde hata ) bir karakter kaydedebilir:

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

Ama zaten uzunluğu biliyorsunuz, bu yüzden sadece kodlayın.


python 2.7 için de çalışıyor
Noodle9

Nedense bu çözümü seviyorum.
16’da

19

Haskell, 24 bayt

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

Çıktı:

Main> g "google"

Program error: pattern match failure: g "google"

Main> g "bing"
4

15

CJam, 16 karakter

{_,\"google"=!/}

Bu dize google değilse ve aksi takdirde 0'a kadar uzunluğu 1'e böler . Fikir yeni değil, ama bağımsız olarak anladım.

Çevrimiçi deneyin.

Nasıl çalışır

_                 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.

İlginçtir ki, tam bir program daha kısa (15 bayt): q_,\"google"=!/. Bu yazıyı görmeden önce geliştirdim. Bunun, tüm girdiyi aldığına dikkat edin (yine de bir işlev argümanı olarak görüyorsunuz). Ne yazık ki, kullanamazsınız, çünkü bu bir işlev için sorar :(
Outgolfer Erik

15

Octave, 63 bayt

Matlab çözümünden daha uzun olduğunu biliyorum (ki bunlar da Octave'de işe yarayacaktı), ama özellikle de kötülük. Argümanla iletilmesi gereken bir geriçağırım işlevine (işlev, özyinelemeli, özyinelemeli, kötülük) bağlı olan işlev tutamaçlarını içeren hücre dizisi (kötülük) değişmezleri (kötülük) kullanarak adsız bir işlev (kötülük) yapıyorum. Sonra temel olarak işlevi string argümanına indirgeyen ve fas argümanını as f(çok kötü) olarak düzelten başka bir isimsiz isim oluşturuyorum . Aklı başında herhangi bir insan bunu asla yapmaz, çünkü neredeyse Perl veya regex (veya cjam / pyth / diğer esolang) kadar okunmazdır.

Dize 'google' değilse, dizinin uzunluğunu çıkaran hücre dizisinin ikinci argümanı çağrılır. Aksi halde, bir geri çağırma olarak geçen (ve kendisini de geri çağırma olarak da geçiren) ilk işlev çağrılır; bu, daha sonra işlevin kendisidir. Hata temelde bazı maksimum özyineleme derinliği hatasıdır.

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

2
Bu şeyler çoğu dilde kötü değildir. Ve bu ise kod golf, dünyanın en okunamayan kodun bazı buraya var :). Soğuk tutamak btw.
BAR

9
Ben sadece evalgerçekten EVIL yapmak için bazılarını burada özlüyorum :-)
Luis Mendo

12

JavaScript, 25 Bayt

Güzel ve basit JavaScript örneği:

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

"Google" girilirse, mesaj geçilir ReferenceError

Örnek

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


2
Vay canına, Javascript'te lamda işlevleri için bir steno olduğunu söylediğin için teşekkürler!
Tomáš Zato

3
@ TomášZato Caveat: ES2015'te yepyeni , bu yüzden destek hala değişiyor.
Anko,

11

APL, 19 17 bayt

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

Bu, eğer girdi ise, sözdizimi hatası atacak isimsiz bir monadik fonksiyondur google. Bu, hiçbir şeyin doğal logaritmasını almaya çalışmakla gerçekleştirilir.

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

Çevrimiçi deneyin

Dennis sayesinde iki bayt kurtarıldı!


gayri resmi olarak "uyarısı" olarak bilinir. Bu kullanım için çok uygun bir isim.
Adám

9

R, 46 bayt

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

Yanlış okuduğum sürece, orijinal yayın hiçbir zaman kodun doğru sözdizimi olması gerektiğini belirtmedi.

Örnek:

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

İfelse deyiminin "no" parametresi için hiçbir şey eklemedim, bu nedenle bu parametre uyarıldıysa bir hata döndürür.


10
İşte biraz daha kısa olanı:g=function(x)nchar(x)[[x!="google"]]
flodel

9

Perl, 31 29 bayt

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

-2b insan yapımı sayesinde

Kullanımı:

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

İşlev yerine bir programdan kurtulabilseydim, aşağıdakiler yalnızca 20 bayt (+1 bayt komut satırı) ile geçerli olur.

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

Hata sıfıra bölünür.

Açıklama:

y///cuzunluğu döndürür, sonra !/^google$/girdi "google" ile eşleşirse 0 değerini döndürür.

Kullanımı:

perl -p entry.pl input.txt

2
Sen o isimsiz işlev yapabilir: sub{…}. (Öyleyse buna benziyorsun sub{…}->("google").)
manatwork

$_!=googleBunun yerine 1 bayttan !/^google$/
tasarruf edin

@GabrielBenamy Korkarım !=dize karşılaştırmak için çalışmaz ...
Dada

7

Haskell - 30 karakter

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

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

6
Neden ünlem işareti yanılıyor? Boş bir dize de yapmaz mıydı?
Kritzefitz

1
Bunu değiştirmeyi önermek istedim x=x;g"google"=x;g s=length s, ancak bazı nedenlerden dolayı, <glo> içinde istisnalar bulunmuyor.
Kritzefitz

17
g s|s/="google"=length sİhtiyacı önlererror
chs

7

Python 3, 35 bayt

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

1
@ FryAmTheEggman aslında 16 bit daha kısa. XD
DiegoDD

1
@FryAmTheEggman: İyi numara ama id boş dizeyle çalışmıyor:(lambda n:len(n)*(n!='google')or d)('')
pabouk

@pabouk Oldukça doğru, bunu belirttiğiniz için teşekkürler.
FryAmTheEggman 29:15

7

Java 7: 53 52 Bayt

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

Yukarıdaki kod ArithmeticExceptionsıfıra ve Stringdiğerlerinden birine bölünmeye başlayacaktır google. Başvuruyu ==karşılaştırdığına ve StringNesneler için işe yaramayacağına dikkat etmeye değer .

Java 8: 29 Bayt

(Aşağıdaki yorumda verilen önerilere dayanarak)

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

1
Ayrıca Java 8'in lambda bildirimini de kullanabilirsiniz:s->(s.equals("google")?null:s).length();
hjk

3
"== referansı karşılaştırdığına ve String Nesneleri için işe yaramayacağına dikkat etmeye değer." Aslında, tüm dizeler nesnelerdir, bu nedenle dizeleri ==Java ile karşılaştırmak genellikle işe yaramaz (dize interning'e güvenmiyorsanız, ki bu kötü.). Belki de JavaScript’le karıştı?
gengkev

1
@gengkev Her ikisi de litteral ise, String havuzunda başvurulan aynı nesne olduğu için çalışır. Spec bir litteral verir ve burada bir litteral yani çalışacak.
Yassin Hajaj,

2
@YassinHajaj Spesifikasyonun edebi olarak verdiğine katılıyorum, ama bu sadece bir örnek. İşlev, aynı zamanda stdin'den girdi verilirse veya işlev ayrı ayrı derlenmiş başka bir sınıftan çağrılıyorsa aynı işlevi gerçekleştirmelidir. Her durumda, derleyici optimizasyonlarına (string interning) güvenmek, başlangıçta söylediğim gibi, kötü bir fikirdir.
gengkev

7

C ++ 11, 54 (kod) + 14 (#include) = 68

Eh, sıfıra bölmek sadece tanımsız bir davranış, bu bir hata demez. Yani benim yaklaşımım.

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

kullanım

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

1
size()2 bayt kaydetmek için arayabilirsiniz . C ++, 14, ayrıca genel lambdas kullanıp yerini alabilir std::stringtarafından auto. A std::stringyerine bir gerçek geçmesi gerekir const char*.
isanae

@isanae Bilmiyordum std::stringvardır size(), bunun için teşekkür yöntemi. Ben C ++ 14 jenerik lambdas farkındayım, ama beri, bana yardım edeceğini bilmiyorum "string"is const char*değil std::string.
Zereges

1
@Zereges std::stringvardır size()ve length()bunun nedeni bir kap ve bir dize hem . Gelince auto, lambda'yı (std::string("google"))bunun yerine arayacaktınız ("google"). Soru sadece bir "string" ne olduğunu belirtmeden "1 string" kabul ediyor diyor.
isanae

@isanae C ++ 14 aynı zamanda "google"sbir de std::string:) inşa etmeli
Quentin

@Zereges sadece throw;tetiklemek için yapabilirsiniz std::terminate()(çünkü burada geçerli bir istisna yoktur).
Quentin

6

MUMPS, 28 bayt

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

Kullanımı:

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

<SELECT>g^MYROUTINE

Neden? Eh, $S[ELECT]temelde kompakt bir çok-cümle if-else ifadesidir - neredeyse Haskell veya Rust gibi bir dilde örüntü eşleşmesi gibidir. Bunun dışında ... Haskell veya Rust'taki gibi, modeller "ayrıntılı derleme zamanı" kavramı NUMPS'a tamamen yabancı olduğundan, yorulma kontrolleri yapılmadı. Yani girişiniz hesaba katmadığınız bir kalıpsa, adında hoş bir çalışma zamanı hatası alırsınız <SELECT>.


6

Ruby, 34 30 27 26

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

Bilinmeyen tistisna yaratır.

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

Düzenleme: tamamen okunabilir ve daha kısa olan açık bir sürüm ...

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

Eski: Göründüğü gibi diğer fikirlere oldukça benzer. ArgumentErrorX 'google' ise yükseltecektir .


2
Neden bu parantez? x=='google'?t: x.size
Manatwork 28:15

6

JavaScript, 47 bayt

Güzel ve basit.

Düzenleme: Şimdi kurallara uyuyor

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

Test yapmak

Atılan hata

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

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

Hata atılmadı

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

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


Teknik olarak, bu OP'nin özelliklerini karşılamıyor. Bu işlev uzunluğu uyarır ancak geri döner undefined.
Bungle

@Bungle Şimdi nasıl?
Beta Ayı

1
@Bungle görüyorum.
Beta Bozum

1
ES6'nın ok fonksiyonlarını ve üçlü operatörünü (eğer yerine) kullanarak, biraz daha sıkıştırabilirsiniz :)
Carles Alcolea

1
@BetaDecay Özgünlük ilk; Buna saygı duyarım.
Carles Alcolea

6

C, 66 48

Orijinal:

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

OSX gcc kullanarak,
l("duck");döndürür 4,
l("google");neden olur Floating point exception: 8.

Diğer platformlarda sabitlerin endianness için ayarlanması gerekebilir.

Daha kısa :

daha az hünersizlik, aynı sonuçlar.

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

Vay, orada ilginç bir mantık var. Golf bölümünün doğru olduğunu anlarsam, bir şekilde ilk altı karakteri tek, dev bir sayıya (neredeyse bir karma gibi) sığacak şekilde değiştiriyorsunuz; geriye ( 0x656c676f6f67= elgoog). Bu cevabın, bu tür çılgın düşük seviyeli şeyleri takdir eden bizler için bir açıklamaya ihtiyacı olduğunu düşünüyorum.
Braden Best

Temelde sende var. Basitçe dizgiyi 64 bitlik bir numaraya depolayan hafızayı kopyalar. Endianness, bunu x86 mimarisinde 'geriye doğru' yaptı. Metin yalnızca 7 baytlık yer kaplar, bu yüzden maske sadece bellekte ne olabileceğini gizler. Eğlenceli bir hile, ama bence '!! strcmp ("google") aslında daha kısa.
AShelly

1
Neyse, +1. Kesinlikle. Ayrıca, int 4 karakteri kaldırarak onu kısaltabileceğinizi düşünüyorum .
Braden Best

Biraz yazdıktan sonra anladım! Eğer char *birimleriyle 8-bitsiçin döküm olduğu long *birimleriyle, 64-bitsuygun şekilde yeniden tahsis olmadan, yığın alanı kişilerce 8 bayt veri bozulursa, ve tek bir sayı olarak tedavi ( 8*8 = 64). Bu yüzden ilk 6 karaktere + NUL + çöp aldınız. Bu çok zekice. Ayrıca tehlikeli. Neden kırılmadığını merak ediyorum. 8. çöp baytı sınırların dışında, değil mi?
Braden Best

Analizine baktım. Haklısın, kayma 54 olmalı, 54 olmalıydı. Ayrıca, bozuk kelimeyi kullanmam. Hafıza aynı, bitler sadece farklı şekilde yorumlanıyor. Teknik olarak, çöp baytına erişme tanımsız bir davranıştır ve aslında farklılığa neden olabilir. Pratik olarak, bu bayt neredeyse kesinlikle dizginin geri kalanıyla aynı yasal bellek bloğunda bulunur ve genellikle bu bloklar (yığın, yığın, sabitler) en az kelime büyüklüğünde birimlerde tahsis edilir. Yani hafıza programa ait, sadece diziden başka bir şey içeriyor.
AShelly

6

Ruby, 29 bayt

İlk önce @ Borsunho'nun ilk girişimine çok benzeyen bir şey buldum, ancak benimki biraz daha uzundu ve ben yapmadan önce onu gönderdi. 30 baytlık düzenlemeden önce bununla geldi :)

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

Kullanım örnekleri:

$ 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>'

düzenleme: İki yıl ve daha sonra bazı Ruby sürümleri

Yakut , 25 bayt

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

String#sizeYeni unary plus ile değiştirildi . Çevrimiçi deneyin!


Düzgün, bunu işe alamadım ( ^kibrit grubunun dışına çıkma ile gelmedim).
Borsunho

@Borsunho İtiraf etmeliyim ki sadece istediğim sonucu elde edene kadar regex'i "kaba zorladım" :) .*Sonunda bunun çalışmasını sağlayan şey olduğunu düşünüyorum .
daniero

Giriş dizesinde birden fazla satır varsa ve kendi satırında google varsa, kırılır. Bence bunu /\A(?!google\Z).*/mdüzeltir (üç byte pahasına). ^ve $başlangıç ve satırların sonuna maç, süre \Ave \Zbir bütün olarak dize başlangıcını ve bitişini maç.
Histocrat

@histokrat ancak birden fazla satır içeren google dizeleri yapabileceğinizi sanmıyorum;)
daniero

4

> <>, 55 bayt

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

Yine de, en iyisi golf denememe ya da algoritmaya değil, buna bir şans vereceğimi düşündüm. Kendi başına bir işlev değil, ama bunun hala kalifiye olması gerektiğini düşünüyorum. Daha iyi bir versiyonda düzenleme yapıp yapamayacağımı göreceğim.

Uzunluğu ve ardından hatayı yazdırmanıza izin verilirse, 46 baytlık bir çözüm:

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

49 byte bu nitelikteki önceki çözüm:

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

Herhangi bir ilgi varsa bir açıklama yapmaktan mutluluk duyuyorum ve lütfen cevabımda yanlış bir şey varsa veya golf önerileri varsa lütfen bana bildirin.


4

Javascript ES6, 51 27 25 bayt

Merhaba, golf kodlaması yeniyim, bu yüzden muhtemelen daha fazla golf oynayabilirsin, ama işte burada:

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

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

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

ve bazı testler:

(_=>_=="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

Düzenleme: Eklendi? if'in yerini alır ve yerine tanımlanmamış bir nesneyle değiştirir.

Düzenleme 2: Bayt sayımın yanlış olduğunu anladım ve g = kaldırıldı


4

GolfScript, 14 16 Karakterler

{.,\'google'=!/}

Diğerleri gibi, girişi de karşılaştırır 'google've uzunluğu sonucun tersine böler.

Örnek programlar:


@Dennis Amacınızı anlıyorum. Orijinal haliyle tam olarak yeniden kullanılamazdı (kodu listeye uygulayın diyemezsiniz). Ayrıca, bunu göndermeden önce CJam'da neredeyse tamamen aynı bir cevap yazdığınızı bilmiyordum (aslında sadece şu ana kadar CJam'ı belli belirsiz bir şekilde biliyordum). Çözümünüz için de +1.
pswg

4

Sıkışmış , 16 Bayt

s_l1u"google"=-/

Çoğu kişi için benzer bir yöntem izleyerek, "google" girişi sırasında 0 hatası ile bölmeye neden olur.


4

Windows Toplu İş, 118 karakter

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

Çıktı% stringlength% 'dir.

Tam kod:

@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

Joshua Honig'in cevabından değiştirildi, burada .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.