Como golfistas de código, no estamos acostumbrados a lanzar ( seguramente ). Necesitaremos algunas herramientas para ayudarnos a hacer eso.
Por supuesto, para ayudar a comercializar un nuevo lanzamiento, necesitamos una versión de lanzamiento agradable y brillante. ¿Quién no se emociona cuando escuchan sobre la versión 3.0.0?
Tarea
Su tarea será escribir un programa / rutina / ... para incrementar un número de versión.
Debe incrementar el número de versión y restablecer los "menos importantes" (es decir, la versión del parche).
Obtiene dos argumentos: la versión actual (por ejemplo, "1.0.3") como una cadena, y un índice para saber cuál actualizar (indexado 0 o 1).
Ejemplo, 0 indexado:
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
La versión es una cadena, cada parte es un número, separado con un punto. No puede haber puntos iniciales, finales o no consecutivos (y nada fuera de números / puntos). No hay límite para el tamaño de la cadena de versión.
^[1-9]\d*(\.[1-9]\d*)*$
El caso de error (los dos últimos ejemplos) es un comportamiento indefinido. Lo que sucede en caso de entradas incorrectas no es relevante para este desafío.
Como de costumbre, las lagunas estándar están prohibidas. Se le permite imprimir o devolver la cadena.

Respuestas:
Japt,
1611 bytes¡Pruébelo en línea! El número de entrada está 1 indexado.
Basado en mi respuesta de JavaScript. Esto aprovecha una de las características más útiles de Japt: dividir una cadena en otra antes de asignar cada elemento, y luego volver a unir esa cadena después de la asignación.
Sin golfos y explicación
fuente
Empuje
2025 bytesDesafortunadamente, me di cuenta de que no manejaba el caso de actualizar el último número, así que tuve que agregar bytes. Esto es 1 indexado.
TryItOnline
No imprimibles
Esto toma los argumentos en orden inverso, como líneas separadas:
Explicación:
fuente
DJ@"t.<C-a>qq2wcw0<esc>@qq@qque está de vuelta a veinteDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?JavaScript (ES6),
44424037 bytesGuardado 3 bytes gracias a @Neil
El número de entrada está 1 indexado.
Fragmento de prueba
fuente
n=>i&&+n+!--iV ,
13, 12 bytesPruébalo en línea!
Esto está indexado a 0.
Hay un
ctrl-a(ASCII 0x01) allí, así que aquí hay una versión legible:Explicación:
fuente
Perl,
403734 + 1 = 35 bytes-2 bytes gracias a @Dada. -3 bytes gracias a una idea que obtuve al leer el código Japt de @ ETHproductions.
Corre con la
-pbandera.Pruébalo en línea!
Desglose del código
fuente
$&lugar de$1entonces)Jalea ,
1917 bytes1 indexado.
TryItOnline!
¿Cómo?
fuente
V€:).MATLAB, 85 bytes
¡Uno basado y primer intento de golf!
fuente
stringtipo en acción :-)C #
116104BytesExplicación
Pruébalo aquí
fuente
stringyinten la firma de la función anónimaPython 2, 84 bytes
Siento que esto realmente podría ser más corto. Podría necesitar una forma de tener una opción no enumerada.
Si pudiéramos tomar la versión como una lista de cadenas, hay una solución de 75 bytes:
Además, si tanto la entrada como la salida eran listas de números, hay una solución de 64 bytes:
fuente
V
1420 bytesNuevamente, tuve que agregar código para el caso de la esquina de incrementar el dígito final. (1 indexado)
TryItOnline
No imprimibles
Esto toma los argumentos en orden inverso, como líneas separadas:
fuente
@a(o incluso más cortoÀ) lo que te ahorrará un montón de bytes.Lote, 119 bytes
1 indexado.
fuente
Perl 6, 67 bytes, indexado 0
Explicación:
fuente
PowerShell 3+,
7574 bytesSin golf
Explicación
Los parámetros se aceptan utilizando la
$argsmatriz.., luego para cada elemento:$mestá configurado para ser-not $b. En la primera ejecución,$bserá indefinido, que se fusionará$false, por$mlo que comenzará como$true.$mestá destinado a ser un multiplicador que siempre es0o1y se usará más adelante.$mdebe evaluarse aquí porque queremos que se base en la última iteración$bvalor de .$bse establece en sí mismo-orel resultado de comparar un iterador$icon$args[1](el parámetro de índice). Esto significa$bque se establecerá$trueaquí una vez que estemos en el elemento que se va a incrementar. Además, estará$trueen cada iteración posterior porque el condicional es-or'd con su valor actual.$bse convierte en un número usando unario+($false=>0,$true=>1), luego se agrega al elemento de versión actual$_que es un[string], pero PowerShell siempre intenta fusionar el argumento de la derecha con el tipo de la izquierda, por lo que se realizará la aritmética, no concatenación de cadenas. Entonces este valor se multiplicará por$m, que todavía está[bool]pero se unirá implícitamente...Entonces, la primera iteración donde se
$bconvierte$true,$bhabría sido$falsecuando$mse evaluó, haciendo$migual$true, lo que mantendrá el multiplicador en1.Durante esa carrera se
$bconvierte$truey se agrega al elemento de versión (as1), incrementándolo, y dado que el multiplicador sigue1, ese será el resultado final.Entonces, en la próxima iteración,
$bya será$true, haciendo$migual$false, lo que hará que el multiplicador0. Como$bsiempre será$trueahora, el multiplicador siempre lo será0, por lo que todos los elementos devueltos también lo serán0.fuente
R,
100959286 bytesInusualmente para R, esto usa indexación 0. Función anónima con dos argumentos (una cadena y un entero). Probablemente se puede jugar golf un poco.
fuente
05AB1E , 22 bytes
Pruébalo en línea!
No sé cómo hacer if-else en 05AB1E, así que esto es más largo de lo que debería ser.
fuente
1.0.0.0.3, 3que1.0.0.1.0no debe producir1.0.0.1.3.Escritura de café:
7767 bytesWoot! Tiempo para pastel y café para la versión beta.
¡Gracias a @ven y @Cyoce me afeité 10 Bytes!
fuente
.join '.'o.split '.')+lugar deparseInt(usar~~si necesita que sePython 3,
8986 bytesforma muy ingenua de hacer las cosas
Editar: reescribió el condicional haciendo referencia a @kade
fuente
PHP, 81 bytes
terriblemente largo Al menos: el Elephpant todavía supera a Python.
recorre el primer argumento dividido por puntos:
"."[!$i]está vacío para el primero y un punto para cualquier otro elemento;($i<=$n)y($i==$n)se convierten implícitamente en enteros0o1para aritmética de enteros.fuente
JavaScript (ES6),
5755 bytesEjemplos:
No es la mejor implementación de JS, pero es bastante simple y sigue la lógica que esperarías.
fuente
Pyth - 21 bytes
Banco de pruebas
fuente
10.0caso de prueba da11.0.0, ¡esa es una parte demasiado!PowerShell,
801009592 BytesGuardado 5 bytes mediante el uso de una constante para
-1..ifGuardado 3 bytes usando en
!$blugar de$b-eq0Explicación:
Casos de prueba:
fuente
ren lugar derandomrandomes que no es un alias! Es el resultado de la evaluación de comandos de PowerShell. Mientras busca encontrar un comando en alias, funciones, cmdlets, aplicaciones nativas, etc., lo último que intenta hacer es anteponerGet-lo que sea. Entonces, en realidad estás llamandoGet-Random, pero técnicamente no como un alias. Esto se puede ver mediante la ejecución de trabajoservice, ochilditem, o para una máxima ironíaalias.Objetivo-C 531 Bytes
compilar:
uso:
fuente
0lugar deNULLy eliminarreturn 0;al final de la página principal.NSString *sprobablemente puede tener el espacio eliminado.**argves 1 byte más corto que*argv[].@autoreleasepool{}Probablemente sea innecesario.Javascript ES6: 60 bytes
fuente
}al final. En el golf: una de las características de las funciones de dirección es rendimiento implícito, para que pueda reemplazar(n,r)=>{return r>i?n=0:n}a(n,r)=>r>i?n=0:nsalvar algunos bytes.R, 75 bytes
La indexación se basa en 1. Puedes jugar en línea aquí .
fuente
APL (Dyalog) , 31 bytes
Requiere
⎕IO←0( I ndex O rigin 0), que es por defecto en muchos sistemas. Cuerpo completo del programa; solicita entrada de texto (versión) y luego entrada numérica (índice).Pruébalo en línea!
⍞solicitud de ingreso de texto'.'⎕VFIV erify y F Ix I nput usando período como separador de campo (validez de campos, valores de campos)⌽reversa (para poner los valores al frente)⊃elige el primero (los valores)⎕(...)aplique la siguiente función tácita a eso, utilizando la entrada evaluada como argumento izquierdo:Para explicar los equivalentes no tácitos de cada aplicación de función, usaremos ahora
⍺para indicar el argumento izquierdo (el índice) y⍵para indicar el argumento correcto (la lista de números individuales del número de versión actual ingresado originalmente).⊃equivalente a(⍺⊃⍵)utilizar⍺para elegir un elemento de⍵1+agrega uno a eso↑,equivalente a(⍺↑⍵),anteponer⍺números tomados de⍵⊢∘≢↑equivalente a(⍺⊢∘≢⍵)↑equivalente para(≢⍵)↑tomar tantos números de eso como elementos hay en⍵, rellenando con ceros si es necesario⍕formato (stringify con un espacio entre cada número)' '⎕R'.'PCRE R espacios EColoque con períodosfuente
Java 8, 130 bytes
Explicación:
Pruébalo aquí
fuente
LiveScript,
5352 bytes-1 byte gracias a @ ASCII-only!
Vieja explicación:
Otra respuesta propia ... No es que nadie juegue en LiveScript de todos modos. :PAGS
Estaba trabajando en otra versión:
Pero
*está demasiado sobrecargado para ser reconocido en un índice de empalme, por=0lo que intentará acceder0[0]. Entonces necesitas escribir algo así..[b to ..length- b]=[0]*(..length-1-b)y al final es más largo.fuente
f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.es mucho más tiempo :(if i<b then e else if i>b then 0 else+e+1es decir,[+e+1;0;e;e][i>b+(2*i<b)]o algo así, tal vez incluso([+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)])*\.por 52;con espacio. también ... parece que eso es básicamente lo más bajo posible con este enfoqueHaskell ,
136129 bytesPruébalo en línea!
Original
fuente