Как игроки в кодекс, мы не привыкли к выпуску ( конечно ). Нам понадобятся несколько инструментов, чтобы помочь нам сделать это.
Конечно, чтобы помочь в маркетинге нового выпуска, нам нужна красивая и блестящая версия выпуска. Кто не возбуждается, когда слышит о версии 3.0.0?
задача
Ваша задача будет написать программу / рутина / ... для увеличения номера версии.
Вам нужно увеличить номер версии и сбросить «менее важные» (например, версию патча).
Вы получаете два аргумента: текущую версию (например, «1.0.3») в виде строки и индекс, чтобы узнать, какой из них обновить (0 или 1-индексированный).
Пример с 0 индексами:
next-version("1.0.3", 0) # 2.0.0
next-version("1.2.3.4.5", 2) # 1.2.4.0.0
next-version("10.0", 0) # 11.0
next-version("3", 0) # 4
next-version("1", 7) # ERROR
next-version("01", 0) # ERROR
Версия представляет собой строку, каждая часть представляет собой число, разделенное точкой. Не может быть ни начальных, ни конечных, ни последовательных точек (и ничего кроме чисел / точек). Нет ограничений на размер строки версии.
^[1-9]\d*(\.[1-9]\d*)*$
Случай ошибки (последние два примера) - неопределенное поведение. То, что происходит в случае неправильного ввода, не имеет отношения к этой проблеме.
Как обычно, стандартные лазейки запрещены. Вы можете распечатать или вернуть строку.
Ответы:
Japt,
1611 байтПроверьте это онлайн! Входной номер индексируется 1.
Основано на моем ответе JavaScript. Это использует одну из самых полезных функций Japt: разделение одной строки на другую перед сопоставлением каждого элемента, а затем присоединение к этой строке снова после сопоставления.
Неуправляемый и объяснение
источник
Vim
2025 байтК сожалению, я понял, что это не относится к случаю обновления последнего номера, поэтому мне пришлось добавить байты. Это 1-индексированный.
TryItOnline
непечатные:
Это принимает аргументы в обратном порядке, в виде отдельных строк:
Объяснение:
источник
DJ@"t.<C-a>qq2wcw0<esc>@qq@q
DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
?JavaScript (ES6),
44424037 байтСохранено 3 байта благодаря @Neil
Входной номер индексируется 1.
Тестовый фрагмент
источник
n=>i&&+n+!--i
V ,
13, 12 байтовПопробуйте онлайн!
Это 0-индексированный.
Там есть
ctrl-a
(ASCII 0x01), так что здесь читаемая версия:Объяснение:
источник
Perl,
403734 + 1 = 35 байт-2 байта благодаря @Dada. -3 байта благодаря идее, которую я получил от чтения кода Japt @ ETHproductions.
Беги с
-p
флагом.Попробуйте онлайн!
Разбивка кода
источник
$&
вместо$1
этого)Желе ,
1917 байт1-индексироваться.
TryItOnline!
Как?
источник
V€
:).MATLAB, 85 байт
Одна основанная и первая попытка игры в гольф!
источник
string
тип в действии :-)C #
116104 байтаобъяснение
Попробуй здесь
источник
string
иint
в анонимной функции подписиPython 2, 84 байта
Я чувствую, что это действительно может быть короче. Может быть, нужен вариант без перечисления.
Если бы мы смогли взять версию в виде списка строк, есть 75-байтовое решение:
Кроме того, если и вход, и выход были списками чисел, существует 64-байтовое решение:
источник
V
1420 байтовСнова, я должен был добавить код для углового случая увеличения последней цифры. (1-индексированных)
TryItOnline
непечатные:
Это принимает аргументы в обратном порядке, в виде отдельных строк:
источник
@a
(или даже сократитьÀ
), что должно сэкономить вам кучу байтов.Пакет, 119 байт
1-индексироваться.
источник
Perl 6, 67 байт, 0 проиндексирован
Объяснение:
источник
PowerShell 3+,
7574 байтаUngolfed
объяснение
Параметры принимаются с использованием
$args
массива..
, затем для каждого элемента:$m
установлено быть-not $b
. При первом запуске$b
будет неопределенным, который будет объединен$false
, поэтому$m
начнется как$true
.$m
Предполагается, что это множитель, который всегда0
или1
будет использоваться позже.$m
должен быть оценен здесь, потому что мы хотим, чтобы он был основан на$b
значении последней итерации .$b
устанавливает для себя-or
результат сравнения итератора$i
с$args[1]
(параметр index). Это значение$b
будет установлено$true
здесь, как только мы находимся на элементе, который должен быть увеличен. Кроме того, это будет происходить$true
на каждой последующей итерации, потому что условие имеет-or
текущее значение.$b
преобразуется в число с помощью унарного+
($false
=>0
,$true
=>1
), затем добавляется к элементу текущей версии,$_
который является a[string]
, но PowerShell всегда пытается объединить аргумент справа с типом слева, поэтому будет выполнена арифметика, не конкатенация строк. Тогда это значение будет умножено на$m
, которое все еще,[bool]
но будет неявно объединено..
.Таким образом, первая итерация, где
$b
становится$true
,$b
была бы,$false
когда$m
была оценена,$m
равняется$true
, что будет держать множитель в1
.Во время этого запуска
$b
становится$true
и добавляется к элементу версии (как1
), увеличивая его, и, так как множитель все еще1
, это будет конечным результатом.Так что на следующей итерации,
$b
уже будет$true
, делая$m
равным$false
, что сделает множитель0
. Так$b
как$true
теперь это будет всегда, множитель всегда будет0
, поэтому каждый возвращенный элемент будет0
тоже.источник
R,
100959286 байтНеобычно для R, это использует 0-индексацию. Анонимная функция с двумя аргументами (строка и целое число). Скорее всего, можно играть в гольф немного.
источник
05AB1E , 22 байта
Попробуйте онлайн!
Я не знаю, как это сделать if-else в 05AB1E, так что это длиннее, чем должно быть.
источник
1.0.0.0.3, 3
следует производить1.0.0.1.0
не1.0.0.1.3
.Coffee-script:
7767 байтWoot! Время для торта и кофе для бета-версии.
Благодаря @ven и @Cyoce я побрил 10 байтов!
источник
.join '.'
или.split '.'
)+
вместоparseInt
(используйте,~~
если вам нужно, чтобы оно было приведено к целому числу)Python 3,
8986 байточень наивный способ добиться цели
Изменить: переписать условное, ссылаясь на @kade
источник
PHP, 81 байт
ужасно долго По крайней мере: Слон все еще бьет Питона.
перебирает первый аргумент, разделенный точками:
"."[!$i]
пуст для первого и точка для любого другого элемента;($i<=$n)
и($i==$n)
неявно приводятся к целочисленной0
или1
целочисленной арифметике.источник
JavaScript (ES6),
5755 байтПримеры:
Не лучшая реализация JS, но она довольно проста и соответствует логике, которую вы ожидаете.
источник
Pyth - 21 байт
Тестирование
источник
10.0
тестовый пример дает11.0.0
, это слишком много!Powershell,
801009592 байтСохранено 5 байтов с помощью const для
-1..if
Сохранено 3 байта при использовании
!$b
вместо$b-eq0
Объяснение:
Тестовые случаи:
источник
r
вместоrandom
random
, это не псевдоним! Это результат оценки команд PowerShell. Поскольку он ищет команду в псевдонимах, функциях, командлетах, собственных приложениях и т. Д., Самое последнее, что он пытается сделать, - это предвосхититьGet-
что бы то ни было. Таким образом, вы на самом деле звонитеGet-Random
, но технически не как псевдоним. Вы можете увидеть эту работу, запустивservice
, илиchilditem
, или для максимальной иронииalias
.Objective-C 531 байт
компиляции:
использование:
источник
0
вместоNULL
и удалитьreturn 0;
в конце основного.NSString *s
возможно, удалит пространство.**argv
на 1 байт короче*argv[]
.@autoreleasepool{}
вероятно, не нужно.Javascript ES6: 60 байт
источник
}
в конце есть дополнительная информация . На гольфе: одна из особенностей функций стрелки подразумевается возвращение, так что вы можете заменить(n,r)=>{return r>i?n=0:n}
с ,(n,r)=>r>i?n=0:n
чтобы сэкономить несколько байт.R 75 байт
Индексирование основано на 1. Вы можете поиграть с ним онлайн здесь .
источник
APL (Dyalog) , 31 байт
Требуется
⎕IO←0
( I ndex O rigin 0), который используется по умолчанию во многих системах. Полное тело программы; запрашивает ввод текста (версия), а затем ввод чисел (индекс).Попробуйте онлайн!
⍞
запрос на ввод текста'.'⎕VFI
V erify и F ix I nput с использованием точки в качестве разделителя полей (валидность полей, значения полей)⌽
обратный (поставить значения перед)⊃
выбрать первое (значения)⎕(
...)
примените к нему следующую молчаливую функцию, используя оцененный ввод в качестве левого аргумента:Чтобы объяснить неявные эквиваленты каждого приложения функции, мы теперь будем использовать,
⍺
чтобы указать левый аргумент (индекс) и⍵
указать правый аргумент (список отдельных номеров первоначально введенного номера текущей версии).⊃
эквивалентно(⍺⊃⍵)
использованию⍺
для выбора элемента из⍵
1+
добавить один к этому↑,
эквивалентно(⍺↑⍵),
предварительным⍺
числам, взятым из⍵
⊢∘≢↑
эквивалентно(⍺⊢∘≢⍵)↑
эквивалентному, чтобы(≢⍵)↑
взять из этого числа столько же, сколько есть элементов⍵
, при необходимости добавляя нули⍕
формат (строка с одним пробелом между каждым числом)' '⎕R'.'
PCRE R заменить пространства с периодамиисточник
Java 8, 130 байт
Объяснение:
Попробуй это здесь.
источник
LiveScript,
5352 байта-1 байт благодаря @ ASCII-only!
Старое объяснение:
Еще один ответ самому себе ... Не то, чтобы кто-нибудь играл в LiveScript в любом случае. :П
Я работал над другой версией:
Но
*
он слишком перегружен для распознавания в индексе сплайсинга, поэтому=0
попытается получить доступ0[0]
. Таким образом, вам нужно написать что-то вроде,..[b to ..length- b]=[0]*(..length-1-b)
и это больше в конце.источник
f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.
это намного дольше :(if i<b then e else if i>b then 0 else+e+1
то есть[+e+1;0;e;e][i>b+(2*i<b)]
или что-то в том же духе, может быть, даже([+e;-1][i>b+(2*i<b)]||e-1)+1
(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\.
, 54->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.
для 52;
с пробелом. Кроме того ... похоже, что это в основном так далеко, как это будет с этим подходомHaskell ,
136129 байтПопробуйте онлайн!
оригинал
источник