У меня проблема на работе. Мне нужно сравнить два числа, которые приходят как строки из двух разных баз данных. Числа могут идти с ведущими нулями и / или начальными / конечными пробелами. Так что я могу иметь "0001 "
из одной базы данных и " 1 "
из другой.
Я решил проблему в C # с помощью следующего кода:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
Соревнование
Это действительно простая задача, подходящая для начинающих и любых эзотерических языков. Учитывая два числа в виде строк, которые могут идти с начальными нулями и / или начальными / конечными пробелами, напишите кратчайший код, который проверяет, представляют ли две строки один и тот же номер.
- Входные данные должны быть двумя строками или эквивалентными на вашем языке (массив символов в порядке), и они всегда будут представлять целочисленные значения больше нуля.
- Выходные данные должны быть любыми двумя последовательными значениями, которые представляют истинное значение и ложное значение.
Примеры
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Это код-гольф , поэтому победит самый короткий код для каждого языка!
Ответы:
Javascript , 11 байт
Немного нарушил правила кастинга в Javascript;
+a
принуждаютa
в числовой тип.-6 байт благодаря Шегги и Мартину Эндеру ♦
Также классный дубль от LiefdeWen :
источник
c=
, и карри также хорошо, так что вы можете использоватьa=>b=>...
вместо(a,b)=>
. Наконец, мой JavaScript немного ржавый, но я думаю, что-то вроде!(a-b)
бы тоже подойдет?a
приводите к числовому типу с одинарным+
.05AB1E , 1 байт
Попробуйте онлайн!
объяснение
Сравнение на равенство
Q
автоматически попытается оценить строки как целые, прежде чем сравнивать.источник
|0+Q
было достаточно коротким ...Язык сценариев работы Flashpoint , 33 байта
Звоните с:
Выход:
Альтернативная версия (41 байт):
Все еще на 5 байт короче, чем более простой
f={t=_this;call(t select 0)==call(t select 1)}
39 байтов:
count
(который возвращает размер массива) работает вместоforEach
, потому что вы можете дать ему «лямбду», которая используется в качестве условия для подсчета только тех элементов массива, которые удовлетворяют этому условию. «Условие», используемое в этом случае, не является допустимым условием, но здесь это не имеет значения, поскольку оно не вызывает ошибку и возвращаемое значениеcount
не требуется.источник
Такси , 488 байтов
Попробуйте онлайн!
Ungolfed:
Такси (относительно) хорошо подходит для этой задачи, потому что строки являются единственным допустимым типом ввода или вывода.
The Babelfishery
это то, что преобразует строки в число (и наоборот) и обрабатывает все пробелы и ведущие нули. Он также будет обрабатывать отрицательные числа, если-
непосредственно перед первой цифрой. После этогоEqual's Corner
проверяет два значения друг против друга иWriter's Depot
выдает выходные данные в строковом формате. Выход1
для правды и0
фальси.источник
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 байтов
С
-O0
(это настройка по умолчанию).Попробуйте онлайн!
C, 32 байта
Попробуйте онлайн!
источник
char
, и когда вы передаете массив функции, вы просто передаете указатель на первый элемент массива. Здесь указатели наchar
массивы неявно преобразуются в целые числа при передаче в функцию, а целые числа преобразуются обратно в указатели при вызовеatoi
.s=foo;
вместо тогоreturn foo;
, чтобы пометить это как «x86 gcc с отключенной оптимизацией», а не просто «C», потому что этот код не возвращает значение, кроме как в качестве артефакта реализации.s=retval;
вместо того, чтобыreturn retval;
фактически сломаться. Похоже, что внутренняя логика gcc (with-O0
only) фактически обрабатывает последнее выражение как возвращаемое значение, возможно, так же, как работает выражение-выражение GNU C. (Но это требуетs=
). На ARM32 он вычисляет==
результатr3
, а затем использует дополнительное значение,mov r0, r3
чтобы сделать это возвращаемое значение! Так что это не хак, специфичный для x86, этоgcc -O0
хак, который gcc, похоже, старается изо всех сил поддерживать.J , 4 байта
Сравните
=
после&
оценкиdo
. Также можно=&".
попробовать онлайн!источник
-10
), так и для негативов, так как J понимает их (например_10
) из-за способа-
работы монад .Сетчатка , 11 байт
Попробуйте онлайн!
Входные данные разделены переводом строки, но для удобства набор тестов использует разделение запятыми. Принты
1
на равенство и0
неравенство.объяснение
Перевести все строки в одинарные. Это игнорирует ведущие нули и пробелы.
Дедупликация: очистите вторую строку, если оба одинаковы.
Убедитесь, что строка теперь заканчивается переводом строки.
источник
Python 3 , 25 байт
Попробуйте онлайн!
источник
Brain-Flak , 22 байта
Попробуйте онлайн!
Сохранено 4 байта благодаря Джо Кингу .
источник
Треугольность , 17 байтов
Попробуйте онлайн!
Треугольность, на этот раз, конкурентоспособна!
Как это устроено
Треугольность требует, чтобы код имел треугольное распределение точек. То есть длина каждой строки должна быть равна числу строк, умноженному на 2 и уменьшенному, и каждая строка должна иметь (с каждой стороны) количество точек, равное ее позиции в программе (нижняя строка - строка 0, тот, что выше, это строка 1 и т. д.). Имея это в виду, давайте проанализируем, как работает код:
источник
Алиса , 7 байт
Попробуйте онлайн!
Любой нецифровый разделитель работает. Принты
1
на равенство и0
прочее.объяснение
источник
Japt , 3 байта
Попытайся
Преобразует второй вход в целое число и сравнивает равенство с первым.
источник
APL (Дьялог) , 4 байта
3 байта сохранены благодаря @ Adám
Попробуйте онлайн!
источник
=/⍎¨
JQ, 24 символа
2 строки передаются как элементы массива.
Образец прогона:
Попробуйте онлайн! ( Все тесты )
источник
Шелуха , 3 байта
Попробуйте онлайн!
объяснение
источник
Ër
тоже работает.PowerShell , 20 байт
Подобно ответу на JavaScript, только дольше, потому что PowerShell не имеет карри. Использует
+
приведение первой строки к целому числу, а затем-eq
автоматически преобразует вторую строку в целое число. Вывод True / False.Попробуйте онлайн!
источник
PowerShell , 19 байт
Попробуйте онлайн!
-join
Аргумент array ($args
) со строковым представлением оператора сравнения (-eq
) затем вычисляет выражение с помощьюInvoke-Expression
(iex
).источник
+
так как он выполняет проверку на равенство строк.00009
а077
затем результирующий код -00009 -eq077
это совершенно допустимый фрагмент кода. Вы имеете дело непосредственно со строкой во время выполнения, поэтому вы должны сначала ее привести, чтобы операция выполнялась в числовом формате.Q (Kdb +), 13 байтов
объяснение
(x; y): список двух входов.
«J» $: приведение каждого ввода к типу long (7j) из строки (10c), которая может правильно интерпретировать
пробел и начальные 0.
= /: проверяет равенство элементов в списке (каждая последующая пара).
Поскольку существует только одна пара, возвращает одиночное булианское значение 0b / 1b.
источник
{=/["J"$(x;y)]}
для 15 байтов ... Хотя для 8 байтов вы могли бы иметь это:(~/)"J"$
если вы просто используете REPL и передаете входные данные в виде списка строк .. или{(~/)"J"$x}
для 11 как функция.T-SQL, 35 байт
Согласно нашим стандартам , данные вводятся через существующую таблицу
t
сvarchar
полямиa
иb
.Возвращает,
1
если они совпадают,0
если они не .Несколько математических функции SQL ( в том числе
ABS
,FLOOR
иCEILING
) будет делать неявное преобразование к числовому если данному строковым параметрам, это меньше , чем явныйCAST(a AS INT)
илиCONVERT(INT,b)
, и работа в этом случае , так как мы знаем , что входные значения всегда положительны.IIF
специфичен для MS SQL 2012 и выше, поэтому нет никаких гарантий относительно других реализаций.источник
Excel VBA,
2716 байт-9 Благодаря @Nayrb и @TaylorScott
Где вы вводите значения в ячейки с
'string
.Гдеx
и гдеy
находятся входные строки иz
является логическим выходом.Если CInt (x) = CInt (y), то z = 1
Использование CIntисточник
?[Int(A1)=Int(B1)]
который принимает входной сигнал от диапазоновA1
иB1
выходов к немедленному окну VBER ,
2827 байтСчитывает числа в виде строк, преобразует их в двойные и проверяет, не равна ли их разность нулю.
Попробуйте онлайн!
-1 байт благодаря Джузеппе
источник
""
достаточноЛуа , 20 байт
Попробуйте онлайн!
источник
Haskell , 20 байтов
-11 байт благодаря Лайкони. -2 байта благодаря Zgarb.
Попробуйте онлайн!
источник
read
:a#b=0+read a==read b
Гема , 21 персонаж
Нет логического в Gema. В качестве функций
@get-switch{}
/@set-switch{}
используются 0 и 1 для представления состояний переключателей, также используются 0 и 1.2 строки передаются на отдельных входных строках.
Образец прогона:
источник
Perl 5, 9 + 1 (
-p
) = 10 байтпопробуйте это онлайн
источник
С накоплением , 8 байтов
Попробуйте онлайн!
объяснение
источник
Атташе , 11 байт
Попробуйте онлайн!
Это принимает массив строк, таких как
V["0001", "1 "]
. Проще говоря,Map&:N
это функция, которая отображаетN
свой аргумент иSame
проверяет, что массив содержит только равные члены. (Интересный факт: эта функция работает для более чем двух строковых аргументов.)источник
SNOBOL4 (CSNOBOL4) , 42 байта
Попробуйте онлайн!
Выходы 1 для правды, ничего для фальси. Поскольку
(пробел) является оператором конкатенации в SNOBOL,
EVAL
использование числа с начальными / конечными пробелами дает само число, и оно также аккуратно заботится о любых ведущих нулях.EQ
тесты на числовое равенство, условно устанавливающиеOUTPUT
на 1 поSuccess
.источник
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 токенов BASIC
Новое решение благодаря Нейлу (спасибо за подсказку).
Это решение требует ввода данных пользователем, поэтому введите две строки с пробелами и / или начальными нулями или введите две строки с неравным числовым значением;
0
ложно и1
имеет значение true, если в третьей строке сравнивается значение каждой введенной строки.Старое решение: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 байтов с токенами BASIC
Фактическая проверка выполняется в третьей строке, что составляет всего ~ 16 байтов BASIC; поэтому ввод каждой пары тестовых примеров в прямом режиме сэкономит ~ 30 байт из списка. Обратите внимание, что это число байтов не включает в себя
var stack
.источник
INPUT A$
иINPUT B$
? Также я не думаю, что вам нужно()
с.APL (NARS2000) , 7 байтов
Ну, да, я знаю, что NARS2000 не может конкурировать с Dyalog здесь, поскольку он использует Unicode, но я подумал, что лучше показать
⍥
( составление в NARS2000, хотя на самом деле это не связано с композицией функций), чего-то, чего не делает Dyalog есть как встроенный, и я никогда не видел здесь используется. В Dyalog это должно быть реализовано как{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. Он вызывает монадическую функцию правого операнда как для левого, так и правого аргумента, а затем вызывает двоичную функцию левого операнда для результатов.Здесь правый операнд
⍎
( Выполнить , т. Е. Eval), а левый операнд=
( Равен , то есть проверить, равны ли его аргументы).источник