Por favor me liberte!

34

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.

Ven
fonte
1
Podemos pedir para receber como entrada primeiro o índice e depois o número da versão?
Leo
@ Leo Sim, o pedido não é um problema.
Ven
Eu posso adicionar um caso de teste para incrementar o número final na string, ou um exemplo ou algo para testar.
precisa saber é o seguinte
@ nmjcman101 como é um caso especial?
Ven
3
Eu gostaria de poder fazer o mesmo desafio com a condição de vitória como "mais legível", para que alguém os escrevesse para eu usar no trabalho real. =)
jpmc26

Respostas:

12

Japonês, 16 11 bytes

¡V«´V+ÂX}'.

Teste 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

¡  V«  ´ V+Â X}'.
Um@V&&!--V+~~X}'.
                   Implicit: U = input string, V = input number
Um@           }'.  Split U at periods, then map each item X by this function:
   V&&               If V is 0, return V.
      !--V+~~X       Otherwise, decrement V and return X + !V (increments X iff V was 1).
               '.  Re-join the result with periods.
                   Implicit: output last expression
ETHproductions
fonte
2
Uma característica doce de fato!
Jonathan Allan
1
Bem drat, eu pensei que tinha na bolsa. Com licença, eu vou ficar obcecado com a minha resposta em V e espremer cada pequeno byte dela. : P
DJMcMayhem
11

Vim 20 25 bytes

Infelizmente, percebi que não tratava do caso de atualizar o último número, então tive que adicionar bytes. Isso é indexado em 1.

DJA.0@"t.qq2wcw0@qq@qx

TryItOnline

Não imprimíveis:

DJA.^[0@"t.^Aqq2wcw0^[@qq@qx

Isso leva os argumentos na ordem inversa, como linhas separadas:

3
1.2.3.4.5

Explicação:

DJ                           # Delete the input argument, and join lines
  A.^[0                      # Add a period to the end
       @"t.                  # Move to the "Copy register"th period
           ^A                # Increment the number under the cursor
             qq       @qq@q  # Until an error
               2w            # Move the cursor forward to the next number
                 cw0^[       # Change the number to 0
                           x # Delete the last '.'
nmjcman101
fonte
1
Agradável! Uma explicação seria útil
Kritixi Lithos
@KritixiLithos Adicionado. Infelizmente, tive que adicionar alguns bytes também para aumentar o número da versão final, mas isso acontece.
precisa saber é o seguinte
Eu acho que se você fosse indexado em 0, você poderia simplesmente fazer o DJ@"t.<C-a>qq2wcw0<esc>@qq@qque é reduzido a vinte
DJMcMayhem
@DJMcMayhem Eu não acho que eu posso fazer isso, porque então eu não seria capaz de diferenciar 0 e 1.
nmjcman101
1
Oh sim, bom ponto. Que tal DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem
11

JavaScript (ES6), 44 42 40 37 bytes

Guardado 3 bytes graças a @Neil

x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

O número da entrada é 1 indexado.

Snippet de teste

f = x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

console.log(f("1.0.3")(1))
console.log(f("1.2.3.4.5")(3))
console.log(f("10.0")(1))
console.log(f("1")(8))

ETHproductions
fonte
2
Riscado
1
@KritixiLithos O ​​que há de errado com o meu navegador? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues
n=>i&&+n+!--i
Neil
@ Neil Thanks! Eu simplesmente não conseguia descobrir como golfe que expressão mais longe ...
ETHproductions
10

V , 13 , 12 bytes

Àñf.ñò2wcw0

Experimente online!

Este é o índice 0.

Há um ctrl-a(ASCII 0x01) lá, então aqui está uma versão legível:

Àñf.ñ<C-a>ò2wcw0

Explicação:

À                   " 'arg1' times
 ñ  ñ               " Repeat the following:
  f.                "   Move to the next '.' character
     <C-a>          " Increment the next number
          ò         " Recursively:
           2w       "   Move two words forward
              cw    "   Change this word
                0   "   to a '0'
DJMcMayhem
fonte
7

Perl, 40 37 34 + 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 -pbandeira.

$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge

Experimente online!

Repartição do código

-p          #Wraps the program in a while(<>){ ... print$_} statement.
            #Input is read into the $_ variable
$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge
$a=<>;                              #Reads the version update into $a
      s/   /                   /ge  #Substitution regex:
                                g   #Repeats the substitution after first match
                                 e  #Interprets replacement as Perl code
       \d+                          #Matches 1 or more digits, and stores match in $&
                  ? :               #Ternary operation
            $a--<0                  #Checks if $a is negative and then decrements $a
                  ?0                #If negative, we've passed our match; print 0 instead
                    :$&+!($a+1)     #Otherwise, we're either printing $& + 0 (if $a was positive) or $& + 1 (if $a was 0).
#Since substitution implicitly modifies $_, and -p prints $_, it prints our answer
Gabriel Benamy
fonte
Remova todos os parênteses de ambos os lados! (e em $&vez de $1então)
Dada
Eu sabia que estava faltando alguma coisa! Obrigado!
Gabriel Benamy 08/12/19
O uso de números indexados em 1 pode economizar 4 bytes: Experimente online!
Xcali 11/04
5

Geléia , 19 17 bytes

ṣ”.V€‘⁹¦µJ’<⁹×j”.

1 indexado.

TryItOnline!

Quão?

ṣ”.V€‘⁹¦µJ’<⁹×j”. - Main link: currentVersion, theIndex
ṣ”.               - ṣplit left (currentVersion) at occurences of '.'
   V€             - eVal €ach (creates a list of integers)
      ⁹           - right argument (theIndex)
       ¦          - apply to given index(es)
     ‘            -    increment
        µ         - monadic chain separation (call the above result z)
         J        - range(length(z))  i.e. ([1,2,3,...,length])
          ’       - decrement         i.e. ([0,1,2,...,length-1])
            ⁹     - right argument (theIndex)
           <      - less than?        i.e. ([1,1,...,(1 at theIndex),0...,0,0,0]
             ×    - multiply by z (vectortises) - zeros out all of z after theIndex
              j”. - join with '.'
Jonathan Allan
fonte
3
Parabéns por 10k !!
Luis Mendo
Mal posso esperar pelo Jelly 2.0 para que você possa se livrar disso V€:).
Ven
@LuisMendo - thanks! Eu sou tão observador (Dennis percebeu meu marco de 1K antes de mim também).
Jonathan Allan
5

MATLAB, 85 bytes

function f(s,j);a=split(s,'.');a(j)=string(double(a(j))+1);a(j+1:end)='0';join(a,'.')

Um baseado, e primeira tentativa de golfe!

MattWH
fonte
Bem feito! Primeira vez que eu ver o novo stringtipo em ação :-)
Luis Mendo
5

C # 116 104 bytes

using System.Linq;(v,i)=>string.Join(".",v.Split('.').Select(int.Parse).Select((x,n)=>n==i?x+1:n>i?0:x));

Explicação

using System.Linq;(v,i)=>   //Anonymous function and mandatory using
    string.Join(".",                    //Recreate the version string with the new values
        v.Split('.')                    //Get individual pieces
            .Select(int.Parse)          //Convert to integers
                .Select(            
                    (x,n)=>             //Lambda with x being the part of the version and n being the index in the collection
                        n==i                    
                            ?x+1        //If n is the index to update increment x
                            :n>i        //Else if n is greater than index to update
                                ?0      //Set to zero
                                :x));   //Otherwise return x

Experimente aqui

JustinM - Restabelecer Monica
fonte
Você não precisa o stringe intna assinatura da função anônima
TheLethalCoder
@TheLethalCoder ahh sim, claro, obrigado.
JustinM - Restabelece Monica
4

Python 2, 84 bytes

Eu sinto que isso poderia ser realmente mais curto. Pode ser necessário ter uma opção não enumerada.

lambda s,n:'.'.join(str([-~int(x)*(i==n),x][i<n])for i,x in enumerate(s.split('.')))

Se pudéssemos usar a versão como uma lista de strings, há uma solução de 75 bytes:

g=lambda s,n:(str(-~int(s[0]))+'.0'*~-len(s))*(n<1)or s[0]+'.'+g(s[1:],n-1)

Além disso, se a entrada e a saída eram listas de números, há uma solução de 64 bytes:

g=lambda s,n:([-~s[0]]+[0]*~-len(s))*(n<1)or [s[0]]+g(s[1:],n-1)
Kade
fonte
4

V 14 20 bytes

Novamente, eu tive que adicionar código para a caixa de canto para aumentar o dígito final. (Indexado 1)

DJA.0@"t.ò2wcw0òx

TryItOnline

Não imprimíveis:

DJA.^[0@"t.^Aò2wcw0^[òx

Isso leva os argumentos na ordem inversa, como linhas separadas:

3
1.2.3.4.5
nmjcman101
fonte
1
Boa resposta! Fico sempre feliz em ver alguém usar o V! Só para você saber, se você colocar a primeira entrada em 'args', ela predefinirá o registro 'a' para esse número, para que você possa fazer @a(ou até mais curto À) o que deve economizar um monte de bytes.
DJMcMayhem
4

Lote, 119 bytes

@set s=%1
@set i=%2
@set t=
@for %%i in (%s:.=,%)do @set/an=!!i*(%%i+!(i-=!!i))&call set t=%%t%%.%%n%%
@echo %t:~1%

1 indexado.

Neil
fonte
4

Perl 6, 67 bytes, indexado em 0

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}

Explicação:

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}
->$v,$i {                                                         } # function taking version/index to increment
         $v.split('.')                                              # split by dot
                      .map({                          })            # for each version number
                            ++$>$i??                                # if an anonymous variable ($), incremented,
                                                                    #  is greater than $i (index to increment)
                                    ($++??       )                  # if it's not the first time we've been over $i
                                                                    # (using another anonymous value, which gets default-init'd to 0)
                                          0                         # then 0 (reset lower version numbers)
                                           !!$_+1                   # otherwise, increment the number at $i
                                                  !!$_              # otherwise return the number part
                                                        .join: '.'  # join with a dot
Ven
fonte
3
Apenas para sua informação, as respostas automáticas são totalmente elegíveis. Na verdade, eles estão mesmo encorajado
DJMcMayhem
@DJMcMayhem Eu sabia sobre isso, mas pensei que eles não eram elegíveis #
224
3

PowerShell 3 ou mais, 75 74 bytes

($args[0]-split'\.'|%{$m=!$b;$b=$b-or$args[1]-eq$i++;(+$b+$_)*$m})-join'.'

Ungolfed

(
    $args[0] -split '\.' | 
        ForEach-Object -Process {
            $m= -not $b
            $b = $b -or ($args[1] -eq $i++)
            (([int]$b) + $_) * $m
        }
) -join '.'

Explicação

Os parâmetros são aceitos usando o $args matriz.

  1. Divida a sequência da versão em . , seguida, para cada elemento:
    1. $mestá definido para ser -not $b. Na primeira corrida, $bserá indefinido o que será coalescido e $false, assim $m, começará como $true. $mpretende ser um multiplicador que é sempre 0ou 1será usado mais tarde.$mdeve ser avaliado aqui porque queremos que seja baseado no valor da última iteração $b.
    2. $bé definido como -oro resultado da comparação de um iterador $icom $args[1](o parâmetro index). Isso significa $bque será definido $trueaqui quando estivermos no elemento a ser incrementado. Além disso, ele estará $trueem todas as iterações subsequentes porque o condicional é -or'd com seu valor atual.
    3. $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.
  2. Junte novamente a matriz resultante com ..

Portanto, a primeira iteração onde $bse torna $true, $bteria sido $falsequando $mfoi avaliada, tornando $migual$true , o que manterá o multiplicador em 1.

Durante essa execução, $btorna-se$true - e é adicionado ao elemento de versão (as 1), incrementando-o e, como o multiplicador ainda é 1, esse será o resultado final.

Então, na próxima iteração, $bjá estará $true, tornando-se $migual $false, o que tornará o multiplicador 0. Como $bsempre será $trueagora, o multiplicador sempre será 0, então todos os elementos retornados também serão 0.

briantist
fonte
2

R, 100 95 92 86 bytes

Invulgarmente 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.

function(v,i)cat((x=scan(t=el(strsplit(v,"\\."))))+c(rep(0,i),1,-x[-(0:i+1)]),sep=".")
rturnbull
fonte
2

05AB1E , 22 bytes

'.¡vy²N‹i0*}²NQi>})'.ý

Experimente online!

Eu não sei como fazer se-mais em 05AB1E, então isso é mais longo do que deveria ser.

Urna de polvo mágico
fonte
1
Se não estou entendendo mal, não acho que isso funcione. A pergunta diz que você precisa zerar as versões secundárias, portanto não 1.0.0.0.3, 3deve produzir . 1.0.0.1.01.0.0.1.3
LambdaBeta
@LambdaBeta interpretado incorretamente.
Magic Octopus Urn
2

Script de café: 77 67 bytes

f=(p,i)->((z<i&&v||z==i&&~~v+1||0)for v,z in p.split '.').join '.'

Woot! Hora de bolo e café para a versão beta.

Graças a @ven e @Cyoce eu barbeei 10 bytes!

Lord Ratte
fonte
Agradável! Não tenho certeza se você precisa da análise aqui?
Ven
Btw você pode salvar dois bytes usando chamadas parenless (ie .join '.'ou .split '.')
Ven
Use em +vez de parseInt(use ~~se você precisar converter para inteiro)
Cyoce
2

Python 3, 89 86 bytes

lambda v,c:'.'.join((str((int(x)+1)*(i==c)),x)[i<c]for i,x in enumerate(v.split('.')))

maneira muito ingênua de fazer as coisas

Editar: reescreveu o condicional consultando @kade

Jeffrey04
fonte
2

PHP, 81 bytes

terrivelmente longo. Pelo menos: o Elephpant ainda vence o Python.

foreach(explode(".",$argv[1])as$i=>$v)echo"."[!$i],($i<=$n=$argv[2])*$v+($i==$n);

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 inteiros 0ou 1aritméticos inteiros.

Titus
fonte
2

JavaScript (ES6), 57 55 bytes

(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

Exemplos:

n=(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

console.log(n('1.0.3', 0))
console.log(n('1.2.3.4.5', 2))
console.log(n('10.0', 0))
console.log(n('3', 0))
console.log(n('1', 7))

Não é a melhor implementação de JS, mas é bastante simples e segue a lógica que você esperaria.

Florrie
fonte
Ok, isso não estava muito claro, obrigado.
Florrie
1

Pitão - 21 bytes

j\.++<Kcz\.Qhs@KQmZ>K

Suíte de teste

Maltysen
fonte
3
Não, isso não está correto. Seu 10.0caso de teste fornece 11.0.0, essa é uma parte demais!
Ven
1

Powershell, 80 100 95 92 Bytes

Salva 5 bytes usando uma const para o -1..if

Salva 3 bytes usando em !$bvez de$b-eq0

filter x($a,$b){[int[]]$y=$a.Split('.');-1..((-$b,-1)[!$b])|%{$y[$_]=0};$y[$b]++;$y-join'.'}

Explicação:

filter x($a,$b){
    [int[]]$y=$a.Split('.') #Split input into integer array
    $y[$b]++ #Increment 'major' version no. ($b) by one
    -1..((-$b,-1)[!$b])|%{$y[$_]=0} #Set all trailing numbers to 0, now also checks for $b=0 cases.
    $y-join'.' #Join back into '.' seperated Array
}

Casos de teste:

x "1.0.3" 0
x "1.2.3.4.5" 2
x "10.0" 0
x "1" 7
2.0.0
1.2.4.0.0
11.0
Index was outside the bounds of the array.
colsw
fonte
Agradável! Eu amo ver mais powerhell aqui.
Briantist
@ briantist, honestamente, uma versão leve e não compilada do C # que pode interagir com tudo é uma dádiva de Deus, eu lido com muitas coisas da Microsoft no trabalho e absolutamente amo isso.
colsw
Oh absolutamente; O PowerShell é a minha jam, mas muitas pessoas não pensam em usá-lo para jogar golfe. Tem alguns recursos que são ótimos para jogar golfe e outros que o tornam um saco, mas no geral é uma escolha sólida! Estou brincando com a idéia de fazer uma apresentação sobre golfe no PowerShell no meu próximo PSUG.
Brantist # 9/16
@briantist, os aliases padrão são bonitos, mas eu adoraria poder usar um conjunto predefinido de alguns comandos comuns como aliases de caracteres únicos f para golfe, se, por exemplo, competir com alguns idiomas de golfe reais, se pudéssemos usar rem vez derandom
colsw
Coisa engraçada sobre 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 é anexar Get-o que quer que seja. Então você está realmente ligando Get-Random, mas tecnicamente não como um alias. Você pode ver isso funcionando executando service, ou childitem, ou para máxima ironia alias,.
Brantist
1

Objective-C 531 bytes

#import<Foundation/Foundation.h>
int main(int argc,const char *argv[]){@autoreleasepool{NSString *s=[NSString stringWithUTF8String:argv[1]];NSInteger n=strtol(argv[2],NULL,0);NSArray *c=[s componentsSeparatedByString:@"."];if(c.count<=n)NSLog(@"ERROR");else{int i=0;NSMutableString *v=[[NSMutableString alloc]init];for(;i<n;++i)[v appendFormat:@"%@.",[c objectAtIndex:i]];[v appendFormat:@"%li", strtol(((NSString *)[c objectAtIndex:i++]).UTF8String,NULL,0)+1l];for(;i<c.count;++i)[v appendString:@".0"];NSLog(@"%@",v);}}return 0;}

compilar:

clang -fobjc-arc -Os main.m -o main

uso:

./main 1.2.3 1
Zhigang An
fonte
Bem-vindo ao CodeGolf. No título, você deve informar o tamanho do código-fonte, não o código de bytes. E a fonte deve, é claro, ser o mais curta possível (sem espaço em branco desnecessário, nome de variável de caractere único etc.). Boa sorte.
Titus
provavelmente pode usar em 0vez de NULLe remover o return 0;no final do principal. NSString *sprovavelmente pode ter o espaço removido. **argvé 1 byte menor que *argv[]. @autoreleasepool{}provavelmente é desnecessário.
Ven
1

Javascript ES6: 60 bytes

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}
Jack
fonte
2
Bem-vindo ao PPCG! Isso não parece ser válido, pois não recebe entrada de forma alguma, e há um extra }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:npara salvar alguns bytes.
ETHproductions
1

R, 75 bytes

f=function(a,b){n=scan(t=a,se=".");m=-n;m[b]=1;m[1:b-1]=0;cat(n+m,sep=".")}

A indexação é baseada em 1. Você pode jogar online aqui .

plannapus
fonte
1

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).

' 'R'.'⍕⎕(⊢∘≢↑↑,1+⊃)⊃⌽'.'VFI

Experimente online!

 solicitar entrada de texto

'.'⎕VFIV 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íodos

Adão
fonte
1

Java 8, 130 bytes

s->n->{String r="",a[]=s.split("\\.");for(int l=a.length,i=-1;++i<l;)r+=(i>n?0:new Long(a[i])+(i<n?0:1))+(i<l-1?".":"");return r;}

Explicação:

Experimente aqui.

s->n->{                 // Method with String and Integer parameters and String return-type
  String r="",          //  Result-String
  a[]=s.split("\\.");   //  String-array split by the dots
  for(int l=a.length,   //  Length of the array
      i=-1;++i<l;)      //  Loop from 0 to `l` (exclusive)
    r+=                 //   Append the result-String with:
       (i>n?            //    If index `i` is beyond input `n`:
        0               //     Append a zero
       :                //    Else:
        new Long(a[i])  //     Convert the current String to a number
        +(i<n?          //     If index `i` is before input `n`
           0            //      Leave the number the same by adding 0
          :             //     Else:
           1))          //      Add 1 to raise the version at index `n`
       +(i<l-1?         //    If we've haven't reached the last iteration yet:
          "."           //     Append a dot
         :              //    Else:
          ""            //     Append nothing
   );                   //  End of loop
   return r;            //  Return the result-String
}                       // End of method
Kevin Cruijssen
fonte
1

LiveScript, 53 52 bytes

->(for e,i in it/\.
 [+e+1;0;e][(i>&1)+2*(i<&1)])*\.

-1 byte graças a @ ASCII-only!

Explicação antiga:

(a,b)->x=a/\.;x[b]++;(x[to b] ++ [0]*(x.length-1-b))*\.
(a,b)->                                                 # a function taking a and b (version and index)
       x=a/\.;                                          # split a on dot, store in x
              x[b]++;                                   # increment at the given index
                     (x[to b]                           # slice be from 0 to the index
                              ++                        # concat (both spaces are necessary so it's not interpreted as an increment operator
                                 [0]*(x.length-1-b))    # with enough zeros to fill the array back to its original size (x's size)
                                                    *\. # join on dot

Outra resposta automática ... Não que alguém jogue no LiveScript de qualquer maneira. : P

Eu estava trabalhando em outra versão:

(a,b)->(a/\.=>..[b]++;..[b to *]=0)*\.

Mas *está sobrecarregado demais para ser reconhecido em um índice de emenda, portanto =0, tentará acessar 0[0]. Então você precisa escrever algo como ..[b to ..length- b]=[0]*(..length-1-b)e é mais longo no final.

Ven
fonte
1
infelizmente 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 :(
ASCII-only
@ Somente ASCII, eu acho que é possível comprimir if i<b then e else if i>b then 0 else+e+1ie [+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
Ven
(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\., 54
somente ASCII
Então vamos remover a assinatura: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.for 52
Ven
btw você pode substituir ;com espaço. também ... parece que é basicamente o mais baixo possível com essa abordagem
somente ASCII
1

Haskell , 136 129 bytes

import Data.List.Split
import Data.List
f s n|(x,z:y)<-splitAt n(splitOn "."s)=intercalate "."(x++[show$read z+1]++map(\_->"0")y)

Experimente online!


Original

insetos
fonte
128
somente ASCII