Когда мы публикуем какое-то программное обеспечение, мы присваиваем ему номер версии. И пользователи могут захотеть обновить программное обеспечение до последней версии. Итак, пришло время узнать, какая версия должна быть новее.
вход
Введите два номера версии в виде строк.
В контексте этой задачи мы поддерживаем только номера версий, которые представляют собой несколько цифр, соединенных точками.
- Номер версии - это строка, которая может содержать только цифры (
0
~9
) и точки (.
). - Точки не будут первым / последним символом номера версии.
- Между точками должно быть несколько цифр. Никакие две точки не могут появляться непрерывно.
- Все числа в номере версии будут меньше чем 2 16 .
Выход
Сравните введенные номера версий и выведите, будет ли первый вариант больше / равен / меньше второго. Вам разрешено выбрать одну из следующих презентаций:
- Используйте положительное число / ноль / отрицательное число, в то время как ноль означает равный;
- Используйте три постоянных различных значения;
Сравнение
Вы не обязаны реализовывать алгоритм, описанный в этом разделе. Ваша заявка действительна до тех пор, пока это приводит к тому же результату с этим алгоритмом.
- Номера версий - это некоторые десятичные числа, соединенные точками. Сначала мы разбиваем два номера версий на массивы чисел;
- Заполнение концов массивов нулями, чтобы они имели одинаковую длину;
- Сравните с первого элемента до последнего:
- Если два элемента массива отличаются, большее число означает больший номер версии
- Если они совпадают, продолжайте сравнивать следующие элементы;
- Если все элементы в массиве равны, две версии равны.
Testcases
version1 version2 result
2 1 >
1.0.0 1 =
1.0 1.0.0 =
1.2.42 1.2.41 >
1.1.56789 1.2.0 <
1.10 1.2 >
1.20 1.150 <
18.04 18.4 =
7.010 7.8 >
1.0.0.1.0 1.00.00.2 <
00.00.01 0.0.0.1 >
0.0.1 0.1 <
42.0 4.2.0 >
999.999 999.999.1 <
2018.08.1 2018.08 >
Ответы:
Python 2 ,
847976 байтПопробуйте онлайн!
Выходы
-1,0,1
для<,=,>
источник
05AB1E (наследие) ,
151413 байтовВыходы
-1 [] 1
для< = >
соответственно.-1 байт благодаря @Emigna .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
0K
вместоʒĀ}
.R , 32 байта
Попробуйте онлайн!
Использование встроенного R
Выходы
1 2
,1.5 1.5
,2 1
для меньше, равно, больше.Лучше всего пока без встроенных:
R ,
151 142 125107 байтПопробуйте онлайн!
Развернутый код с объяснением:
Выходы
-1
,NULL
,1
для меньше, равно, больше.Оригинальная концепция, игра в гольф
sapply
,[<-
и%*%
:R , 129 байт
Попробуйте онлайн!
Теперь у вас есть список двух равных по длине векторов целых чисел. Рассчитайте попарные разности, используя
Reduce
и выведите первый ненулевой элемент, используя хитрую маленькуюw[!!w][1]
форму в конце.Выходы
-1
,NA
,1
для меньше, равно, больше.источник
scan
function(a,b,d=scan(t=a,se='.'),e=scan(t=b,se='.'),f=1:max(lengths(list(d,e))),g=d[f]-e[f])g[!!g][1]
(или 106, если вы хотите вернуть -1, NA, 1 не (отрицательный), NA, (положительный).0
Заполнение должно быть, а не (имплицитно)NA
. Я сделал ответ на вики сообщества, так что тот, кто сможет это исправить, может просто добавить его.Find(c,x)
. Я думаю, что это новый трюк.APL (Dyalog Unicode) ,
1817 байт1 байт сохранен благодаря @ Adám за использование
⍤1
вместо∘↑(...)¨
и путем изменения формата ввода с вложенного массива на матрицуПопробуйте онлайн!
Принимает входные данные как матрицу символов в качестве правильного аргумента, где каждая строка версии находится в отдельной строке. Выходы
¯1 1
,0 0
,1 ¯1
для<
,=
,>
соответственно.(⍎¨∊∘⎕D⊆⊢)⍤1
на каждом ряду∊∘⎕D⊆⊢
сгруппировать все вхождения цифр, то есть разбить на.
⍎¨
и преобразовать каждое из этих вхождений в число↑
преобразовать в матрицу, где первый вход находится в верхней строке, а второй - в нижней, добавляя,0
где необходимо, s(⍋-⍒)
а также-
вычитать⍒
индексы в строках, которые будут сортировать их в порядке убывания⍋
так же, как верх, но по возрастаниюисточник
Perl 6 ,
63 4722 байтаПопробуйте онлайн!
Оказывается, что Perl 6 имеет тип версии, который в значительной степени соответствует описанию. Это блок анонимного кода, который принимает список из двух строк версии и возвращает либо
More
,Same
либоLess
.Объяснение:
Или без встроенных типов для 47 байтов:
Попробуйте онлайн!
Блок анонимного кода, который принимает две строки и возвращает значение,
More
если второе больше,Less
если второе меньше иNil
если они равны.Объяснение:
источник
Брахилог ,
4940 байт... Это все еще довольно впечатляюще долго.
Ожидается список из двух строк. Использует
positive number / zero / negative number
как> / = / <
.Попробуйте онлайн!
объяснение
Разделение входов
Принимая во внимание , что вход не унифицировать с
[0, 0]
, например["1.02.0", "1.2.0.1.0"]
, ниже выходов сегментов, например,[[1, "02.0"], [1, "2.0.1.0"]]
.Сравнение входов
Учитывая, например
[[1, "02.0"], [1, "2.0.1.0"]]
, архивирует подсписки в[[1, 1], ["02.0", "2.0.1.0"]]
и сравнивает значения в заголовке ([1,1]
). Повторить на втором подсписке. Обратите внимание, что предикат zipz
циклически перебирает короткие списки, так что zip с[0,0]
равносильно ziping с[0]
, поэтому предыдущий шаг объединяется0
с0
дополнительными значениями.источник
JavaScript (ES6),
7368 байтСохранено 5 байт благодаря @redundancy
Принимает вход как0
(a)(b)
. Возвращает для равных , положительное целое число больше или отрицательное целое меньше .Попробуйте онлайн!
источник
replace
сfill
. Операнды для-
меняются местами, поскольку теперь оба должны быть приведены к числу. Попробуйте онлайн!a
конце концов циклов с помощью этих значений 0 , еслиb
содержит больше сегментов , чем числаa
. Бывает так, что самый короткий способb
убедиться, что это так, - это разделить строку длиной «». используя существующее разделение, примененное кa
.Java (JDK 10) ,
2019689 байтПопробуйте онлайн!
Возвращает отрицательное число, если первая версия меньше, чем вторая, положительное, если первая версия больше, чем вторая, и
0
если они равны.Да, это какая-то тяжелая работа, чтобы "просто" вызвать встроенный!
кредиты
источник
try-finally
так что проверка if может быть упрощена; попытался вернуться в цикл ift!=0
; пробовал использоватьInteger
иi.compare(i.valueOf(...),i.valueOf(...))
; попытался использовать дженерики, как это<T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}
; и т.д. Все на 2-6 байт длиннее. Если вы (или кто-то еще) найдете что-то еще, дайте мне знать, пожалуйста. Любопытно узнать что. :)2^16
». Короткие диапазоны от - (2 ^ 15) до 2 ^ 15-1.Python 2 , 87 байт
Попробуйте онлайн!
Выводит -1,0,1 для <, =,> соответственно.
источник
Сетчатка 0.8.2 , 54 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Использует значение разделителя в качестве выходного равенства, поэтому для удобства заголовок преобразует входной разделитель,
=
но это может быть что-то, чего нет[.\d]
. Объяснение:Преобразовать в одинарный.
Повторно удаляйте первый символ с каждой стороны, пока они не будут отличаться или не закончится одна сторона. Это намного быстрее, чем пытаться сопоставить префиксы, хотя, возможно, не в гольф. На этом этапе строки находятся в одной из нескольких форм, которые должны быть декодированы до результата сравнения.
1
то результат=
1
то результат>
1
то результат<
<
>
Другой способ думать об этом состоит в том, что если одна строка содержит a,
1
а другая не начинается с a,1
то эта строка больше, однако это оказывается на байт длиннее.Проверьте случай 3 или случай 4 без случая 1.
Если левая строка все еще содержит
1
в этой точке, то она больше.В противном случае удалите все оставшиеся над
.
s.Браузерная консоль Firefox REPL, 19 байт
Я считаю, что эта внутренняя функция выполняет необходимое сравнение. Возвращает -1, 0 или 1.
источник
Cu.import("resource://gre/modules/Services.jsm");
ли считать?PHP , 38 байт
Выходы
-1 → < | 0 → = | 1 → >
Попробуйте онлайн!
источник
1.0.0
1
C (gcc) ,
140134 байтаЭтот код выводит отрицательный,
0
или положительный<
,=
или>
соответственно.Попробуйте онлайн!
Редактирование:
источник
Рубин , 75 байтов
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
1058880 байт-17 байт из @redundancy. Вот Это Да!
-8 байт, удаляющих Math.sign. Спасибо @tsh
Возвращает отрицательное, нулевое или положительное значение
Попробуйте онлайн!
источник
exec
для разделения строк. Попробуйте онлайн!Japt ,
1611 байт-5 байт от @Shaggy
Выходы:
<
null
или0
) для=
>
Попробуйте онлайн!
источник
< = >
соответственно , но я не знаю , если входной сигнал можно рассматривать как массивЧисто ,
116111 байтПопробуйте онлайн!
Выводит отрицательное число, если первый аргумент меньше, чем второй, ноль, если они эквивалентны, и положительное число, если оно больше, чем второй.
источник
Swift 4 , 155 байт
Заголовок (не учитывается: код не рекурсивный):
Код
Попробуйте онлайн!
Пояснения
Возвращенные константы
источник
JavaScript 64 байта
Попробуйте онлайн!
С комментариями:
источник
Perl 5 , 55 байт
Попробуйте онлайн!
источник
Бурлеск - 17 байтов
Если вы хотите выводить в «> <=», добавьте
?i"<=>"j!!Q
.источник
Powershell, 88 байт
Возвращает
0
для равных,positive integer
для больше илиnegative integer
для меньше.Менее гольф тестовый скрипт:
Выход:
источник
Дротик ,
277231 байтПопробуйте онлайн!
источник
Swift 4 + Foundation ,
160 байт (142 + 18), 155 байт (142 + 13)Импорт (13 байт, в том числе
;
для отделения от кода):Это импортирует основание, но на 5 байт короче
import Foundation
.Заголовок (не учитывается: код не рекурсивный):
Код (142 байта):
Попробуйте онлайн!
Пояснения
Возвращенные константы
источник
import
утверждение, поэтому я опубликовал отдельный ответ , который не требуетFoundation
и с количеством байтов между 142 байтами (не считая импорт) и 160 байтами (считая импорт).Zsh , 54 байта
Попробуйте онлайн! Попробуйте набор тестов!
Это
eval
относится к следующим восьми утверждениям:Итак, три уникальных значения:
источник