Como jogadores de código, não estamos acostumados a liberar (com certeza ). Vamos precisar de algumas ferramentas para nos ajudar a fazer isso.
Obviamente, para ajudar a comercializar um novo lançamento, precisamos de uma Versão de Lançamento agradável e brilhante. Quem não fica empolgado ao saber da versão 3.0.0?
Tarefa
Sua tarefa será escrever um programa / rotina / ... para incrementar um número de versão.
Você precisa incrementar o número da versão e redefinir os "menos importantes" (por exemplo, versão do patch).
Você obtém dois argumentos: a versão atual (ex "1.0.3") como uma string e um índice para saber qual atualizar (indexado 0 ou 1).
Exemplo, indexado em 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
A versão é uma string, cada parte é um número, separado por um ponto. Não pode haver pontos iniciais, finais ou consecutivos (e nada fora dos números / pontos). Não há limite para o tamanho da string de versão.
^[1-9]\d*(\.[1-9]\d*)*$
O caso de erro (dois últimos exemplos) é um comportamento indefinido. O que acontece em caso de insumos errados não tem relevância para esse desafio.
Como de costume, são proibidas brechas padrão. Você tem permissão para imprimir ou retornar a sequência.
Respostas:
Japonês,
1611 bytesTeste online! O número da entrada é 1 indexado.
Com base na minha resposta JavaScript. Isso tira proveito de um dos recursos mais úteis de Japt: dividir uma sequência de caracteres em outra antes de mapear cada item e, em seguida, ingressar nessa sequência novamente após o mapeamento.
Ungolfed e explicação
fonte
Vim
2025 bytesInfelizmente, percebi que não tratava do caso de atualizar o último número, então tive que adicionar bytes. Isso é indexado em 1.
TryItOnline
Não imprimíveis:
Isso leva os argumentos na ordem inversa, como linhas separadas:
Explicação:
fonte
DJ@"t.<C-a>qq2wcw0<esc>@qq@q
que é reduzido a vinteDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
?JavaScript (ES6),
44424037 bytesGuardado 3 bytes graças a @Neil
O número da entrada é 1 indexado.
Snippet de teste
fonte
n=>i&&+n+!--i
V ,
13, 12 bytesExperimente online!
Este é o índice 0.
Há um
ctrl-a
(ASCII 0x01) lá, então aqui está uma versão legível:Explicação:
fonte
Perl,
403734 + 1 = 35 bytes-2 bytes graças a @Dada. -3 bytes graças a uma idéia que tive ao ler o código Japt da @ ETHproductions.
Corra com a
-p
bandeira.Experimente online!
Repartição do código
fonte
$&
vez de$1
então)Geléia ,
1917 bytes1 indexado.
TryItOnline!
Quão?
fonte
V€
:).MATLAB, 85 bytes
Um baseado, e primeira tentativa de golfe!
fonte
string
tipo em ação :-)C #
116104 bytesExplicação
Experimente aqui
fonte
string
eint
na assinatura da função anônimaPython 2, 84 bytes
Eu sinto que isso poderia ser realmente mais curto. Pode ser necessário ter uma opção não enumerada.
Se pudéssemos usar a versão como uma lista de strings, há uma solução de 75 bytes:
Além disso, se a entrada e a saída eram listas de números, há uma solução de 64 bytes:
fonte
V
1420 bytesNovamente, eu tive que adicionar código para a caixa de canto para aumentar o dígito final. (Indexado 1)
TryItOnline
Não imprimíveis:
Isso leva os argumentos na ordem inversa, como linhas separadas:
fonte
@a
(ou até mais curtoÀ
) o que deve economizar um monte de bytes.Lote, 119 bytes
1 indexado.
fonte
Perl 6, 67 bytes, indexado em 0
Explicação:
fonte
PowerShell 3 ou mais,
7574 bytesUngolfed
Explicação
Os parâmetros são aceitos usando o
$args
matriz..
, seguida, para cada elemento:$m
está definido para ser-not $b
. Na primeira corrida,$b
será indefinido o que será coalescido e$false
, assim$m
, começará como$true
.$m
pretende ser um multiplicador que é sempre0
ou1
será usado mais tarde.$m
deve ser avaliado aqui porque queremos que seja baseado no valor da última iteração$b
.$b
é definido como-or
o resultado da comparação de um iterador$i
com$args[1]
(o parâmetro index). Isso significa$b
que será definido$true
aqui quando estivermos no elemento a ser incrementado. Além disso, ele estará$true
em todas as iterações subsequentes porque o condicional é-or
'd com seu valor atual.$b
é convertido em um número usando unário+
($false
=>0
,$true
=>1
) e, em seguida, adicionado ao elemento de versão atual$_
que é a[string]
, mas o PowerShell sempre tenta unir o argumento da direita ao tipo da esquerda, para que a aritmética seja executada, não concatenação de cadeias. Então esse valor será multiplicado por$m
, que ainda é,[bool]
mas será implicitamente coalescido..
.Portanto, a primeira iteração onde
$b
se torna$true
,$b
teria sido$false
quando$m
foi avaliada, tornando$m
igual$true
, o que manterá o multiplicador em1
.Durante essa execução,
$b
torna-se$true
- e é adicionado ao elemento de versão (as1
), incrementando-o e, como o multiplicador ainda é1
, esse será o resultado final.Então, na próxima iteração,
$b
já estará$true
, tornando-se$m
igual$false
, o que tornará o multiplicador0
. Como$b
sempre será$true
agora, o multiplicador sempre será0
, então todos os elementos retornados também serão0
.fonte
R,
100959286 bytesInvulgarmente para R, isso usa indexação 0. Função anônima com dois argumentos (uma sequência e um número inteiro). Provavelmente pode ser jogado um pouco.
fonte
05AB1E , 22 bytes
Experimente online!
Eu não sei como fazer se-mais em 05AB1E, então isso é mais longo do que deveria ser.
fonte
1.0.0.0.3, 3
deve produzir .1.0.0.1.0
1.0.0.1.3
Script de café:
7767 bytesWoot! Hora de bolo e café para a versão beta.
Graças a @ven e @Cyoce eu barbeei 10 bytes!
fonte
.join '.'
ou.split '.'
)+
vez deparseInt
(use~~
se você precisar converter para inteiro)Python 3,
8986 bytesmaneira muito ingênua de fazer as coisas
Editar: reescreveu o condicional consultando @kade
fonte
PHP, 81 bytes
terrivelmente longo. Pelo menos: o Elephpant ainda vence o Python.
percorre o primeiro argumento dividido por pontos:
"."[!$i]
está vazio para o primeiro e um ponto para todos os outros elementos;($i<=$n)
e($i==$n)
são implicitamente convertidos em números inteiros0
ou1
aritméticos inteiros.fonte
JavaScript (ES6),
5755 bytesExemplos:
Não é a melhor implementação de JS, mas é bastante simples e segue a lógica que você esperaria.
fonte
Pitão - 21 bytes
Suíte de teste
fonte
10.0
caso de teste fornece11.0.0
, essa é uma parte demais!Powershell,
801009592 BytesSalva 5 bytes usando uma const para o
-1..if
Salva 3 bytes usando em
!$b
vez de$b-eq0
Explicação:
Casos de teste:
fonte
r
em vez derandom
random
que não é um pseudônimo! É o resultado da avaliação de comandos do PowerShell. Como ele procura encontrar um comando em aliases, funções, cmdlets, aplicativos nativos etc., a última coisa que ele tenta fazer é anexarGet-
o que quer que seja. Então você está realmente ligandoGet-Random
, mas tecnicamente não como um alias. Você pode ver isso funcionando executandoservice
, ouchilditem
, ou para máxima ironiaalias
,.Objective-C 531 bytes
compilar:
uso:
fonte
0
vez deNULL
e remover oreturn 0;
no final do principal.NSString *s
provavelmente pode ter o espaço removido.**argv
é 1 byte menor que*argv[]
.@autoreleasepool{}
provavelmente é desnecessário.Javascript ES6: 60 bytes
fonte
}
no final. No golfe: um dos recursos das funções de seta é o retorno implícito, para que você possa substituir(n,r)=>{return r>i?n=0:n}
por(n,r)=>r>i?n=0:n
para salvar alguns bytes.R, 75 bytes
A indexação é baseada em 1. Você pode jogar online aqui .
fonte
APL (Dyalog) , 31 bytes
Requer
⎕IO←0
( I NDEX O Rigin 0), que é padrão em muitos sistemas. Corpo do programa completo; solicita a entrada de texto (versão) e, em seguida, a entrada numérica (índice).Experimente online!
⍞
solicitar entrada de texto'.'⎕VFI
V erify e F ix I ntrada usando período como separador de campo (validades, campos dos campos de valores)⌽
reverso (para colocar os valores na frente)⊃
escolha o primeiro (os valores)⎕(
...)
aplique a seguinte função tácita a isso, usando a entrada avaliada como argumento à esquerda:Para explicar os equivalentes não tácitos de cada aplicativo de função, usaremos agora
⍺
para indicar o argumento da esquerda (o índice) e⍵
o argumento da direita (a lista de números individuais do número da versão atual originalmente inserida).⊃
equivalente a(⍺⊃⍵)
usar⍺
para escolher um elemento⍵
1+
adicione um a isso↑,
equivalente a(⍺↑⍵),
preceder⍺
números retirados de⍵
⊢∘≢↑
equivalente a(⍺⊢∘≢⍵)↑
equivalente para(≢⍵)↑
tirar o maior número possível de elementos⍵
, preencher com zeros, se necessário⍕
formato (stringify com um espaço entre cada número)' '⎕R'.'
PCRE R espaços EColoque com períodosfonte
Java 8, 130 bytes
Explicação:
Experimente aqui.
fonte
LiveScript,
5352 bytes-1 byte graças a @ ASCII-only!
Explicação antiga:
Outra resposta automática ... Não que alguém jogue no LiveScript de qualquer maneira. : P
Eu estava trabalhando em outra versão:
Mas
*
está sobrecarregado demais para ser reconhecido em um índice de emenda, portanto=0
, tentará acessar0[0]
. Então você precisa escrever algo como..[b to ..length- b]=[0]*(..length-1-b)
e é mais longo no final.fonte
f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.
é muito mais longo :(if i<b then e else if i>b then 0 else+e+1
ie[+e+1;0;e;e][i>b+(2*i<b)]
ou algo nesse sentido, talvez até mesmo([+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)])*\.
for 52;
com espaço. também ... parece que é basicamente o mais baixo possível com essa abordagemHaskell ,
136129 bytesExperimente online!
Original
fonte