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@q
que 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+!--i
V ,
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
-p
bandera.Pruébalo en línea!
Desglose del código
fuente
$&
lugar de$1
entonces)Jalea ,
1917 bytes1 indexado.
TryItOnline!
¿Cómo?
fuente
V€
:).MATLAB, 85 bytes
¡Uno basado y primer intento de golf!
fuente
string
tipo en acción :-)C #
116104BytesExplicación
Pruébalo aquí
fuente
string
yint
en 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
$args
matriz..
, luego para cada elemento:$m
está configurado para ser-not $b
. En la primera ejecución,$b
será indefinido, que se fusionará$false
, por$m
lo que comenzará como$true
.$m
está destinado a ser un multiplicador que siempre es0
o1
y se usará más adelante.$m
debe evaluarse aquí porque queremos que se base en la última iteración$b
valor de .$b
se establece en sí mismo-or
el resultado de comparar un iterador$i
con$args[1]
(el parámetro de índice). Esto significa$b
que se establecerá$true
aquí una vez que estemos en el elemento que se va a incrementar. Además, estará$true
en cada iteración posterior porque el condicional es-or
'd con su valor actual.$b
se 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
$b
convierte$true
,$b
habría sido$false
cuando$m
se evaluó, haciendo$m
igual$true
, lo que mantendrá el multiplicador en1
.Durante esa carrera se
$b
convierte$true
y 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,
$b
ya será$true
, haciendo$m
igual$false
, lo que hará que el multiplicador0
. Como$b
siempre será$true
ahora, 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, 3
que1.0.0.1.0
no 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 enteros0
o1
para 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.0
caso de prueba da11.0.0
, ¡esa es una parte demasiado!PowerShell,
801009592 BytesGuardado 5 bytes mediante el uso de una constante para
-1..if
Guardado 3 bytes usando en
!$b
lugar de$b-eq0
Explicación:
Casos de prueba:
fuente
r
en lugar derandom
random
es 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
0
lugar deNULL
y eliminarreturn 0;
al final de la página principal.NSString *s
probablemente puede tener el espacio eliminado.**argv
es 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:n
salvar 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'.'⎕VFI
V 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=0
lo 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+1
es 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