Wszyscy wiemy, że jeśli użyjesz słowa „google”, spowoduje to uszkodzenie internetu.
Twoim zadaniem jest utworzenie funkcji, która akceptuje jeden ciąg znaków i zwraca jego długość, używając jak najmniejszej liczby znaków Unicode.
Jeśli jednak podany ciąg znaków google
(małe litery) spowoduje błąd.
Na przykład g('bing')
wróci, 4
ale g('google')
spowoduje błąd.
Podaj przykład użycia i błąd, jeśli to możliwe.
Odpowiedzi:
Python 2, 29
Daje to
ZeroDivisionError
ON"google"
, a długość inaczej. Wykorzystuje to wartość logiczną Python równą0
i1
.źródło
g
swójlambda
lub nazwać go anonimowo z wprowadzonymi danymi .Infinity
do „google” zamiast rzucać błąd ...return
, gdybyś użyłdef
L/lbnb"google
13 bajtów.Excel, 23 znaki
Wklej to do komórki innej niż A1 i wpisz wyszukiwane hasło w A1.
Na przykład:
źródło
C #, 43 bajty
Poprawa w stosunku do odpowiedzi Salah Alami. Powraca, aby zgłosić wyjątek przepełnienia stosu po udostępnieniu „google”
źródło
StackOverflowException
. W rzeczywistości nigdy nie powróci (zachowuje się jakwhile(true){}
).Pyth,
1413 znakówDefiniuje nazwaną funkcję
y
.To dzieli długość przez 1, jeśli ciąg nie jest google, i przez 0 w przeciwnym razie. Pomysł nie jest nowy, ale wpadłem na to niezależnie.
Wypróbuj online.
Jak to działa
źródło
;
ale oczywiście nie możesz tutaj ...y
. ” Aley
w twoim kodzie nie ma !?L
nowo definiuje funkcjęy
.MATLAB,
6341403836 bajtówDzięki Tomowi Carpenterowi za zgolenie 1 bajta!
Dzięki Stewie Griffin za zgolenie 2 bajtów!
W przeciwieństwie do innych bardziej eleganckich rozwiązań, wykonanie operacji dzielenia przez zero w MATLAB-ie nie spowoduje błędu, a raczej
Inf
. To rozwiązanie znajduje długość ciągu wedługnnz
. Wytworzony ciąg znaków umożliwia indeksowanie od początku ciągu do końca, który jest w zasadzie kopią ciągu. Ważne jest jednak to, że początek miejsca dostępu do ciągu jest tworzony przez sprawdzenie, czy dane wejściowe są równe'google'
. Jeśli tak nie jest, daje to początkowy indeks 1, a my indeksujemy do łańcucha normalnie ... ponieważ MATLAB rozpoczyna indeksowanie od 1. Jeśli jest równy, wygenerowany indeks wynosi 0, a MATLAB zgłosi błąd indeksowania stwierdzający, że indeks musi być dodatnią liczbą całkowitą. Statysta+
ma zapewnić, że wynik kontroli równości jest liczbowy, a nie logiczny /logical
. Pominięcie+
spowoduje wygenerowanie ostrzeżenia, ale ponieważ specyfikacja tego wyzwania nie zezwala na ostrzeżenia,+
jest wymagana ... w ten sposób uzupełniając kod.Przykładowe zastosowania
Bardziej zabawna wersja,
8377767472 bajtówDzięki Tomowi Carpenterowi za zgolenie 1 bajta!
Dzięki Stewie Griffin za zgolenie 2 bajtów!
Powyższe nie jest oficjalnym oświadczeniem, ale jest czymś, co sprawia nieco więcej radości. Nadużywanie
eval
funkcji anonimowych polega na tym, że sprawdza, czy ciąg wejściowy jest równy'google'
... a jeśli tak, otworzy się wbudowana przeglądarka internetowa MATLAB i wyświetli stronę błędu 404 Google próbującą uzyskać dostęp do podstrona zlokalizowana,i
kiedy to nie istnieje. Jeśli nie, wyświetlamy długość łańcucha normalnie.Przykładowe zastosowania
Ostatnie użycie połączenia
'google'
daje nam ten ekran:źródło
strcmp
zamiastisequal
.strcmp
aleisequal
z jakiegoś powodu skończyłem używać .... dzięki!nnz
jest dwa bajty krótszy niżnumel
. Miałeś mój głos kilka lat temu :-)JavaScript ES6,
342725 znakówZgłasza błąd ReferenceError
Δ
dla google.Pokaż fragment kodu
źródło
#
, to błędy w JS afaikTI-BASIC, 15 bajtów
Heck, gdy już nad tym jesteśmy , równie dobrze może uzyskać odpowiedź TI-BASIC tutaj.
Format wejściowy to
"string":prgmNAME
. Kredyt dla Thomasa Kwa na znalezienie go pierwszy!(Przewodnik: dodaj 1 bajt na każdą małą literę, zastępując wielką literę. Tak
s/GOOGLE/google/g => +6 bytes
.)ahhhhh przypadki testowe!
źródło
length(Ans)/(Ans≠"google
. Sprawa również jest błędna; jeśli dozwolone są wielkie litery, to 14 bajtów. Nawiasem mówiąc, poprawne jest przekazywanie argumentów przez Ans.AGOOGLE
powinien dać 7, prawda? I nie powinieneś liczyć nagłówka programu w rozmiarze kodu, więc odejmij 10 bajtów.length(
to dwa bajty, dzięki którym Twoje liczby będą miały 21 i 15 bajtów.APL (14)
Wyjaśnienie:
⍴
: długość÷
: podzielony przez'google∘≢
: argument nie jest równy'google
”.⍴
podaje długość ciągu, która jest dzielona przez 1, jeśli ciąg nie jest równygoogle
(co daje powrót niezmienionej), lub przez 0, jeśli ciąg jest równygoogle
(dając błąd).źródło
⍴
z≢
. Możesz także sprawić, że będzie fajniejszy, zamieniając operandy∘
. Och, nie zapomnij usunąć skórek. Podsumowując:≢÷≢∘'google'
Python 3, 30 bajtów
Indeksuje 1-elementową listę funkcji, podnosząc wartość predykatu
IndexError
if (= 1). Taki funkcjonalny.u=='google'
True
Wiele wariantów. Łał:
źródło
Haskell, 24 bajty
g s|s/="google"=length s
Wynik:
źródło
CJam, 16 znaków
To dzieli długość przez 1, jeśli ciąg nie jest google, i przez 0 w przeciwnym razie. Pomysł nie jest nowy, ale wpadłem na to niezależnie.
Wypróbuj online.
Jak to działa
źródło
q_,\"google"=!/
. Opracowałem go przed obejrzeniem tego postu. Zauważ, że bierze to całe dane wejściowe (które i tak wydajesz się brać za argument funkcji). Niestety nie możesz go użyć, ponieważ wymaga on funkcji :(Oktawa, 63 bajty
Wiem, że jest on dłuższy niż rozwiązanie Matlab (które również działałoby w Octave), ale jest szczególnie zły. Robię anonimową funkcję (zło) za pomocą literałów macierzy komórek (zło) (zło) zawierających uchwyty funkcji zależne od funkcji wywołania zwrotnego (sama, a więc rekurencyjna, zło), którą należy przekazać argumentem. Następnie tworzę kolejny anonimowy, który zasadniczo redukuje funkcję do argumentu łańcuchowego i naprawia drugi argument
f
asf
(bardzo zły). Każdy rozsądny człowiek nigdy by tego nie zrobił, ponieważ jest prawie tak samo nieczytelny jak Perl lub regex (lub cjam / pyth / any esolang).Więc jeśli ciąg nie jest „google”, wywoływany jest drugi argument tablicy komórek, który wyświetla długość łańcucha. W przeciwnym razie zostanie wywołana pierwsza funkcja, która jest przekazywana jako oddzwanianie (i również sama się odsyła), która później jest samą funkcją. Błąd jest w zasadzie pewnym błędem maksymalnej głębokości rekurencji.
źródło
eval
, aby naprawdę ZŁO :-)JavaScript, 25 bajtów
Ładny i prosty przykład JavaScript:
Jeśli wprowadzono „google”, to przechodzi ono przez
ReferenceError
Przykład
źródło
APL,
1917 bajtówJest to nienazwana funkcja monadyczna, która zgłosi błąd składniowy, jeśli dane wejściowe to
google
. Dokonuje się tego poprzez próbę zabrania naturalnego logarytmu niczego.Wypróbuj online
Zaoszczędzono dwa bajty dzięki Dennisowi!
źródło
⍟
jest nieformalnie znany jako „ikona”. Bardzo odpowiednia nazwa dla tego zastosowania.R, 46 bajtów
O ile się nie mylę, oryginalny post nigdy nie określał, że kod musi mieć poprawną składnię.
Przykład:
Nigdy nie dodałem niczego do parametru „no” instrukcji ifelse, więc zwróci błąd, jeśli ten parametr zostanie wywołany.
źródło
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 bajtów-2b dzięki manatwork
Stosowanie:
Gdybym mógł uniknąć programu, a nie funkcji, poniższe byłyby poprawne z jedynie 20 bajtami (wiersz poleceń +1 bajt)
Błąd to dzielenie przez zero.
Wyjaśnienie:
y///c
zwraca długość, a następnie!/^google$/
zwraca 0 iff input pasuje do „google”.Stosowanie:
źródło
sub{…}
. (Następnie nazywacie to taksub{…}->("google")
.)$_!=google
zamiast!/^google$/
!=
że nie będę mógł porównywać strun ...Haskell - 30 znaków
źródło
x=x;g"google"=x;g s=length s
, ale z jakiegoś powodu wyjątki <<loop>> nie są wrzucane do ghci.g s|s/="google"=length s
Eliminuje to potrzebęerror
Python 3, 35 bajtów
źródło
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 bajtówPowyższy kod wyrzuci
ArithmeticException
do podziału przez zero i dla każdegoString
innego niżgoogle
. Warto zauważyć, że==
porównuje odniesienia i nie będzie działać dlaString
obiektów.Java 8: 29 bajtów
(Na podstawie sugestii podanej w komentarzu poniżej)
źródło
s->(s.equals("google")?null:s).length();
==
Javą zazwyczaj nie działa (chyba że polegasz na internalizacji łańcuchów, co jest, no cóż, złe). Być może pomyliłeś się z JavaScriptem?C ++ 11, 54 (kod) + 14 (#include) = 68
Cóż, dzielenie przez zero jest po prostu niezdefiniowanym zachowaniem, którego nie nazwałbym błędem. Więc moje podejście.
stosowanie
źródło
size()
aby zapisać 2 bajty. W C ++ 14 można również użyć ogólnych lambd i zastąpićstd::string
jeauto
. Trzeba by przekazaćstd::string
do niego rzeczywisty zamiastconst char*
.std::string
masize()
metodę, dzięki za to. Jestem świadomy ogólnych lambd w C ++ 14, ale nie wiem, jak to by mi pomogło, skoro"string"
jestconst char*
i nie jeststd::string
.std::string
masize()
ilength()
ponieważ jest zarówno kontenerem, jak i łańcuchem . Jeśli chodzi oauto
to, zadzwoniłbyś do lambda za pomocą(std::string("google"))
zamiast("google")
. Pytanie tylko mówi „akceptuje 1 ciąg” bez określania, co to jest „ciąg”."google"s
zbudowaćstd::string
:)throw;
uruchomićstd::terminate()
(ponieważ nie ma tutaj bieżącego wyjątku).MUMPS, 28 bajtów
Stosowanie:
Dlaczego? Cóż,
$S[ELECT]
jest w zasadzie zwartą , złożoną z wielu klauzul instrukcją if-else - prawie jak dopasowanie wzorca w języku takim jak Haskell lub Rust. Z wyjątkiem ... inaczej niż w przypadku Haskell czy Rust wzorce nie są sprawdzane pod kątem kompletności, ponieważ pojęcie „bezpieczeństwa podczas kompilacji” jest całkowicie obce MUMPS. Jeśli więc wprowadzono wzorzec, którego nie uwzględniono, wywoływany jest piękny błąd czasu wykonywania<SELECT>
.źródło
Ruby,
34302726Nieznany
t
podnosi wyjątek.Edycja: całkowicie czytelna i oczywista wersja, która jest krótsza ...
Stare: Wydaje się dość podobne do innych pomysłów. Podniesie,
ArgumentError
jeśli x to „google”.źródło
x=='google'?t: x.size
JavaScript, 47 bajtów
Ładne i proste.
Edycja: teraz jest zgodny z zasadami
Testowanie
Zgłoszony błąd
Błąd nie został zgłoszony
źródło
undefined
.C,
6648Oryginał:
Za pomocą gcc OSX
l("duck");
zwraca4
,l("google");
powodujeFloating point exception: 8
.Na innych platformach konieczne może być dostosowanie stałych pod kątem endianizmu.
Krótszy :
mniej podstępu, te same wyniki.
źródło
0x656c676f6f67
=elgoog
). Myślę, że ta odpowiedź wymaga wyjaśnienia dla tych z nas, którzy doceniają tego rodzaju szalone rzeczy niskiego poziomu.int
4 znaki.char *
z jednostkami8-bits
, zostanie rzutowany nalong *
, z jednostkami64-bits
, bez odpowiedniego przeniesienia, dane w tych 8 bajtach przestrzeni sterty zostaną uszkodzone i potraktowane jako pojedyncza liczba (8*8 = 64
). Dlatego dostajesz pierwsze 6 znaków, + NUL + śmieci. To bardzo sprytne. Niebezpieczne też. Zastanawiam się, dlaczego to nie działa. Ten ósmy bajt śmieci jest poza zakresem, nie?Rubinowy, 29 bajtów
Najpierw wymyśliłem coś bardzo podobnego do pierwszej próby @ Borsunho, ale moja była nieco dłuższa i opublikował ją, zanim skończyłem. Przyszło mi to do głowy przed jego edycją 30 bajtów :)
Przykłady użycia:
edycja: Dwa lata, a niektóre wersje Ruby później
Rubin , 25 bajtów
Zastąpiony
String#size
nowym unary plus. Wypróbuj online!źródło
^
poza grupę meczową)..*
na końcu jest to, co sprawia, że działa./\A(?!google\Z).*/m
to naprawia (jednak kosztem trzech bajtów).^
i$
dopasować początek i koniec linii, podczas gdy\A
i\Z
dopasować początek i koniec łańcucha jako całości.> <>, 55 bajtów
Pomyślałem, że spróbuję, a nie moja najlepsza próba golfa lub algorytm. Nie jest to funkcja sama w sobie, ale myślę, że nadal powinna się ona kwalifikować. Zobaczę, czy mogę edytować w lepszej wersji.
Jeśli możesz wydrukować długość, a następnie błąd, oto 46-bajtowe rozwiązanie:
49 bajtów poprzednie rozwiązanie tego rodzaju:
Z przyjemnością przedstawię wyjaśnienie, jeśli jest jakieś zainteresowanie, i daj mi znać, jeśli coś jest nie tak z moją odpowiedzią lub masz sugestie dotyczące gry w golfa.
źródło
JavaScript ES6,
51 2725 bajtówCześć, jestem nowy w kodowaniu golfa, więc prawdopodobnie można grać w golfa o wiele więcej, ale oto:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
i trochę testu:
Edycja: Dodano? zastąpić if i zastąpić błąd niezdefiniowanym obiektem.Edycja 2: Zorientowałem się, że moja liczba bajtów jest nieprawidłowa i usunąłem g =
źródło
GolfScript,
1416 znakówPodobnie jak wiele innych, po prostu porównuje dane wejściowe
'google'
i dzieli długość przez odwrotność wyniku.Przykładowe programy:
'bing'
(wyjście:4
)'google'
(wyjście: Błąd: Próbowano podzielić przez zero ).źródło
Utknął , 16 bajtów
Postępowanie podobne do większości osób spowoduje błąd dzielenia przez 0 przy wprowadzaniu „google”.
źródło
Pakiet Windows, 118 znaków
Dane wyjściowe to% stringlength%.
Pełny kod:
Modyfikowany odpowiedź Joshua Honig, w tutaj .
źródło