Мы все знаем, что если вы Google Google слово «Google», это сломает Интернет.
Ваша задача - создать функцию, которая принимает одну строку и возвращает ее длину в наименьшем количестве символов Unicode.
Однако, если заданная строка google
(строчная), это приведет к ошибке.
Например, g('bing')
вернется, 4
но g('google')
вызовет ошибку.
Пожалуйста, предоставьте пример использования и ошибку, если это возможно.
Ответы:
Python 2, 29
Дает
ZeroDivisionError
на"google"
, а длина в противном случае. Это использует булево выравнивание Python0
и1
.источник
g
свойlambda
или анонимно позвонить с вводом, хотя.Infinity
для "google" вместо того, чтобыreturn
если бы ты использовалdef
L/lbnb"google
13 байтов.Excel, 23 символа
Вставьте это в ячейку, отличную от A1, и введите поисковый запрос в A1.
Например:
источник
C #, 43 байта
Улучшение по сравнению с ответом Салаха Алами. Рекурсивно выдавать исключение переполнения стека при предоставлении "Google"
источник
StackOverflowException
. На самом деле он никогда не вернется (ведет себя какwhile(true){}
).Pyth,
1413 символовОпределяет именованную функцию
y
.Это делит длину на 1, если строка не Google, и на 0 в противном случае. Идея не нова, но я придумал ее самостоятельно.
Попробуйте онлайн.
Как это устроено
источник
;
но, очевидно, вы не можете здесь ...y
. " Ноy
в вашем коде нет !?L
переопределяет функциюy
.MATLAB,
6341403836 байтСпасибо Тому Карпентеру за то, что он сбрил 1 байт!
Спасибо Stewie Griffin за то, что он сбрил 2 байта!
В отличие от других более элегантных решений, выполнение операции деления на ноль в MATLAB не приведет к ошибке, а скорее
Inf
. Это решение находит длину строки поnnz
. Строка, которая создается таким образом, что вы индексируете от начала строки до конца, который по сути является копией строки. Тем не менее, важно то, что начало доступа к строке производится путем проверки того, равен или нет вход'google'
. Если это не так, это создает начальный индекс 1, и мы обычно индексируем в строку ... так как MATLAB начинает индексировать с 1. Если он равен, создается индекс 0, и MATLAB выдаст ошибку индексации, утверждая, что Индекс должен быть положительным целым числом. Экстра+
чтобы убедиться, что выходные данные проверки равенства являются числовыми, а не логическими /logical
. Пропуск+
будет выдавать предупреждение, но поскольку спецификации этого вызова не допускают предупреждений,+
требуется ... таким образом, завершается код.Пример использования
Более веселая версия,
8377767472 байтаСпасибо Тому Карпентеру за то, что он сбрил 1 байт!
Спасибо Stewie Griffin за то, что он сбрил 2 байта!
Вышеуказанное не является официальным представлением, но в нем немного веселее. Злоупотребление
eval
внутри анонимных функций, код выполняет то, что проверяет, равна ли входная строка'google'
... и если это так, то это открывает встроенный веб-браузер MATLAB и показывает страницу ошибки Google 404, пытающуюся получить доступ к подстраница, расположенная там,i
где ее нет. Если нет, мы отображаем длину строки как обычно.Пример использования
Последнее использование вызова
'google'
дает нам этот экран:источник
strcmp
вместоisequal
.strcmp
но закончил тем, что использовалisequal
по некоторой причине .... спасибо!nnz
на два байта корочеnumel
. Вы проголосовали несколько лет назад :-)JavaScript ES6,
342725 символовВыдает ошибку ReferenceE
Δ
для Google.Показать фрагмент кода
источник
#
это ошибки в JS afaikTI-BASIC, 15 байтов
Черт возьми, пока мы на этом , с тем же успехом можно получить ответ TI-BASIC здесь.
Формат ввода есть
"string":prgmNAME
. Благодарим Томаса Ква за то, что он нашел его первым!(Руководство: добавьте 1 байт для каждой строчной буквы, заменяя заглавную. Итак
s/GOOGLE/google/g => +6 bytes
.)ааааа тестовые случаи!
источник
length(Ans)/(Ans≠"google
. Вы также ошиблись; если разрешен верхний регистр, это 14 байтов. Кстати, аргументы через Ans допустимы.AGOOGLE
должен дать 7, правильно? И вам не следует считать заголовок программы по размеру кода, поэтому вычтите 10 байтов.length(
- это два байта, которые сделают ваши числа 21 и 15 байтами.APL (14)
Объяснение:
⍴
: длина÷
: деленное на'google∘≢
: аргумент не равен'google
'.⍴
дает длину строки, которая делится на 1, если строка не равнаgoogle
(что дает длину обратно неизменной), или на 0, если строка не равнаgoogle
(что дает ошибку).источник
⍴
на≢
. Кроме того, вы можете сделать его круче, поменяв местами операнды∘
. О, не забудьте убрать паренсов. В целом:≢÷≢∘'google'
Python 3, 30 байт
Индексирует список функций из 1 элемента, вызывая предикат,
IndexError
еслиu=='google'
True
(= 1). Такой функционал.Много вариантов. Ух ты:
источник
Haskell, 24 байта
g s|s/="google"=length s
Выход:
источник
CJam, 16 символов
Это делит длину на 1, если строка не Google и на 0 в противном случае. Идея не нова, но я придумал ее самостоятельно.
Попробуйте онлайн.
Как это устроено
источник
q_,\"google"=!/
. Разрабатывал его до того, как увидел этот пост. Обратите внимание, что для этого требуется весь ввод (который вы в любом случае воспринимаете как аргумент функции). К сожалению, вы не можете использовать его, так как это требует функции :(Октава, 63 байта
Я знаю, что это дольше, чем решение Matlab (которое будет работать и в Octave), но это особенно плохо. Я делаю анонимную функцию (зло), используя литералы массива ячеек (зло), содержащие дескрипторы функций, зависящие от функции обратного вызова (сама по себе рекурсивная, зло), которая должна передаваться через аргумент. Затем я создаю еще один аноним, который в основном сводит функцию к строковому аргументу и фиксирует второй аргумент
f
какf
(очень злой). Любой здравомыслящий человек никогда бы этого не сделал, потому что он почти так же нечитаем, как Perl или regex (или cjam / pyth / любой другой esolang).Поэтому, если строка не является «google», будет вызван второй аргумент массива ячеек, который выводит длину строки. В противном случае будет вызвана первая функция, которая передается в качестве обратного вызова (и сама передается в качестве обратного вызова для себя), которая позже является самой функцией. Ошибка в основном является некоторой максимальной ошибкой глубины рекурсии.
источник
eval
здесь, чтобы сделать это действительно ЗЛОЙ :-)JavaScript, 25 байт
Хороший и простой пример JavaScript:
Если введен «Google», то он проходит
ReferenceError
пример
источник
APL,
1917 байтЭто безымянная монадическая функция, которая выдает синтаксическую ошибку, если введено значение
google
. Это достигается путем попытки взять натуральный логарифм ничего.Попробуйте онлайн
Сохранено два байта благодаря Денису!
источник
⍟
неофициально известен как "сплат". Очень подходящее название для этого использования.R, 46 байт
Если я не читаю, в оригинальном сообщении никогда не указывалось, что код должен быть правильным синтаксисом.
Пример:
Я никогда ничего не добавлял к параметру «no» оператора ifelse, поэтому он вызовет ошибку, если этот параметр вызывается.
источник
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 байт-2б благодаря манатворке
Использование:
Если бы я мог сойти с рук с помощью программы, а не функции, следующее было бы допустимо только с 20 байтами (+1 байт командной строки)
Ошибка деление на ноль.
Объяснение:
y///c
возвращает длину, а затем!/^google$/
вернет 0, если входные совпадения "Google".Использование:
источник
sub{…}
. (Тогда вы называете это какsub{…}->("google")
.)$_!=google
вместо!/^google$/
!=
, не сработает, чтобы сравнить строки ...Хаскель - 30 персонажей
источник
x=x;g"google"=x;g s=length s
, но по какой-то причине исключения << loop >> не генерируются в ghci.g s|s/="google"=length s
избегает необходимостиerror
Python 3, 35 байт
источник
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 байтаВыше код будет выбрасывать
ArithmeticException
для деления на ноль и для любого,String
кромеgoogle
. Стоит отметить, что==
сравнивает ссылку и не будет работать дляString
объектов.Java 8: 29 байт
(На основе предложения, приведенного в комментарии ниже)
источник
s->(s.equals("google")?null:s).length();
==
в Java обычно не работает (если только вы не полагаетесь на интернирование строк, что, впрочем, плохо). Возможно, вы перепутали с JavaScript?C ++ 11, 54 (код) + 14 (#include) = 68
Ну, деление на ноль - это просто неопределенное поведение, которое я бы не назвал ошибкой. Итак, мой подход.
использование
источник
size()
чтобы сохранить 2 байта. В C ++ 14 вы также можете использовать общие лямбды и заменитьstd::string
наauto
. Вам нужно передать фактическоеstd::string
вместо негоconst char*
.std::string
естьsize()
метод, спасибо за это. Мне известны общие лямбды в C ++ 14, но я не знаю, как это мне поможет, поскольку"string"
естьconst char*
и нетstd::string
.std::string
имеетsize()
иlength()
потому, что это и контейнер, и строка . Что касаетсяauto
, вы бы назвали лямбда с(std::string("google"))
вместо("google")
. Вопрос только говорит «принимает 1 строку» без указания, что такое «строка»."google"s
создатьstd::string
:)throw;
вызватьstd::terminate()
(потому что здесь нет текущего исключения).MUMPS, 28 байт
Использование:
Почему? Ну,
$S[ELECT]
по сути, это компактный оператор if-else с несколькими предложениями - почти как сопоставление с шаблоном в языке вроде Haskell или Rust. За исключением ... в отличие от Haskell или Rust, шаблоны не проверяются на полноту, потому что понятие "безопасность во время компиляции" совершенно чуждо MUMPS. Поэтому, если ваш ввод - это шаблон, который вы не учли, вы получите прекрасную ошибку времени выполнения<SELECT>
.источник
Рубин,
34302726Неизвестный
t
вызывает исключение.Редактировать: полностью читаемая и очевидная версия, которая короче ...
Старый: Довольно похоже на другие идеи, кажется. Поднимется,
ArgumentError
если х "Google".источник
x=='google'?t: x.size
JavaScript, 47 байт
Красиво и просто.
Изменить: теперь соответствует правилам
тестирование
Ошибка брошена
Ошибка не выдана
источник
undefined
.С,
6648Оригинал:
Использование OSX GCC,
l("duck");
возвращает4
,l("google");
вызываетFloating point exception: 8
.На других платформах константы, возможно, должны быть скорректированы с учетом порядка байтов.
Короче :
меньше хитрости, те же результаты.
источник
0x656c676f6f67
=elgoog
). Я думаю, что этот ответ нуждается в объяснении для тех из нас, кто ценит такие сумасшедшие вещи низкого уровня.int
4 символа.char *
с единицами8-bits
, приведенными кlong *
, с единицами64-bits
, без надлежащего перераспределения, данные в этих 8 байтах пространства кучи становятся поврежденными и обрабатываются как одно число (8*8 = 64
). Вот почему вы получаете первые 6 символов, + NUL + мусор. Это очень умно. Опасно тоже. Интересно, почему это не segfault. Этот 8-й мусорный байт выходит за пределы, нет?Рубин, 29 байт
Сначала я придумал что-то очень похожее на первую попытку @ Borsunho, но моя была немного длиннее, и он опубликовал свою, прежде чем я закончил. Придумал это до того, как его 30 байтов отредактировали :)
Примеры использования:
редактировать: два года и несколько версий Ruby спустя
Рубин , 25 байт
Заменил
String#size
на новый унарный плюс. Попробуйте онлайн!источник
^
за пределы спичечной группы)..*
в конце концов это то, что заставляет его работать./\A(?!google\Z).*/m
это исправляет (хотя за счет трех байтов).^
и$
соответствует началу и концу строк, а также\A
и\Z
соответствует началу и концу строки в целом.> <>, 55 байт
Полагаю, я бы попробовал, но не лучшую попытку или алгоритм игры в гольф. Сама по себе не функция, но я думаю, что это все равно должно быть квалифицировано. Я посмотрю, смогу ли я отредактировать в лучшую версию.
Если вам разрешено печатать длину, а затем ошибку, вот 46-байтовое решение:
49-байтовое предыдущее решение этой природы:
Я рад представить объяснение, если есть какой-либо интерес, и, пожалуйста, дайте мне знать, если что-то не так с моим ответом или если у вас есть предложения по игре в гольф.
источник
Javascript ES6,
51 2725 байтПривет, я новичок в коде гольф, так что это может быть гораздо больше, но здесь это идет:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
и немного теста:
Редактировать: Добавлено? заменить if и заменить Error неопределенным объектом.Редактировать 2: я понял, что мой счетчик байтов был неправильным, и удалил g =
источник
GolfScript,
1416 символовКак и многие другие, просто сравнивает входные данные
'google'
и делит длину на обратную величину результата.Примеры программ:
'bing'
(выход:4
)'google'
(выход: ошибка: попытка деления на ноль. )источник
Застрял , 16 байт
Следуя аналогичному методу для большинства людей, при вводе "google" возникнет ошибка деления на 0.
источник
Пакет Windows, 118 символов
Вывод% длины строки%.
Полный код:
Модифицировано из ответа Джошуа Хонига здесь .
источник