En tant que golfeurs de code, nous ne sommes pas habitués à libérer ( sûrement ). Nous aurons besoin de quelques outils pour nous aider à le faire.
Bien entendu, pour aider à la commercialisation d'une nouvelle version, nous avons besoin d'une version agréable et brillante. Qui ne s'énerve pas quand ils entendent parler de la version 3.0.0?
Tâche
Votre tâche sera d'écrire un programme / routine / ... pour incrémenter un numéro de version.
Vous devez incrémenter le numéro de version et réinitialiser les versions "moins importantes" (c.-à-d. La version du correctif).
Vous obtenez deux arguments: la version actuelle (ex "1.0.3") sous forme de chaîne et un index pour savoir lequel mettre à jour (0 ou 1-indexé).
Exemple, indexé 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
La version est une chaîne, chaque partie est un nombre, séparé par un point. Il ne peut y avoir aucun point d’avant, aucun point de fuite ou aucun point consécutif (et rien en dehors des nombres / points). Il n'y a pas de limite à la taille de la chaîne de version.
^[1-9]\d*(\.[1-9]\d*)*$
Le cas d'erreur (les deux derniers exemples) est un comportement indéfini. Que se passe-t-il en cas de mauvaise saisie n’a aucune pertinence pour ce défi?
Comme d'habitude, les échappatoires standard sont interdites. Vous êtes autorisé à imprimer ou à retourner la chaîne.
Réponses:
Japt,
16 à11 octetsTestez-le en ligne! Le numéro d'entrée est 1 indexé.
Basé sur ma réponse JavaScript. Cela tire parti de l’une des fonctionnalités les plus utiles de Japt: fractionner une chaîne en une autre avant de mapper chaque élément, puis rejoindre cette chaîne après le mappage.
Ungolfed et explication
la source
Vim
2025 octetsJ'ai malheureusement réalisé que cela ne traitait pas le cas de la mise à jour du dernier numéro. J'ai donc dû ajouter des octets. Ceci est 1 indexé.
TryItOnline
Non imprimables:
Cela prend les arguments dans l'ordre inverse, sous forme de lignes séparées:
Explication:
la source
DJ@"t.<C-a>qq2wcw0<esc>@qq@q
ce qui est ramené à vingtDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
vousJavaScript (ES6),
44424037 octets3 octets sauvés grâce à @Neil
Le numéro d'entrée est 1 indexé.
Extrait de test
la source
n=>i&&+n+!--i
V ,
13, 12 octetsEssayez-le en ligne!
Ceci est 0 indexé.
Il y a un
ctrl-a
fichier (ASCII 0x01), donc voici une version lisible:Explication:
la source
Perl,
403734 + 1 = 35 octets-2 octets grâce à @Dada. -3 octets grâce à une idée que j'ai lue en lisant le code Japt de @ ETHproductions.
Courez avec le
-p
drapeau.Essayez-le en ligne!
Ventilation du code
la source
$&
au lieu d’$1
alors)Gelée ,
1917 octets1 indexé.
TryItOnline!
Comment?
la source
V€
:).MATLAB, 85 octets
Une base et une première tentative de golf!
la source
string
type en action :-)C #
116104 octetsExplication
Essayez-le ici
la source
string
etint
dans la signature de fonction anonymePython 2, 84 octets
Je pense que cela pourrait vraiment être plus court. Il faudrait peut-être un moyen d’avoir une option non énumérative.
Si nous pouvions prendre la version sous forme de liste de chaînes, il existe une solution de 75 octets:
De plus, si l'entrée et la sortie étaient toutes deux des listes de nombres, il existe une solution à 64 octets:
la source
V
1420 octetsEncore une fois, je devais ajouter du code pour le cas de l'incrémentation du dernier chiffre. (1 indexé)
TryItOnline
Non imprimables:
Cela prend les arguments dans l'ordre inverse, sous forme de lignes séparées:
la source
@a
(ou même plus courtÀ
), ce qui devrait vous faire économiser beaucoup d'octets.Lot, 119 octets
1 indexé.
la source
Perl 6, 67 octets, indexé par 0
Explication:
la source
PowerShell 3+,
7574 octetsUngolfed
Explication
Les paramètres sont acceptés à l'aide du
$args
tableau..
, puis pour chaque élément:$m
est prêt à être-not $b
. Au premier passage,$b
sera indéfini sur lequel sera fusionné$false
, donc$m
commencera comme$true
.$m
est destiné à être un multiplicateur qui est toujours0
ou1
et il sera utilisé plus tard.$m
doit être évalué ici parce que nous voulons qu'il soit basé sur la$b
valeur de la dernière itération .$b
est réglé sur lui-or
- même le résultat de la comparaison d'un itérateur$i
avec$args[1]
(le paramètre index). Cela signifie que cette option$b
sera définie$true
ici une fois que nous aurons défini l'élément à incrémenter. En outre, il le sera$true
à chaque itération ultérieure car le conditionnel est-or
'd avec sa valeur actuelle.$b
est converti en un nombre à l’aide de unary+
($false
=>0
,$true
=>1
), puis ajouté à l’élément de la version actuelle$_
qui est un[string]
, mais PowerShell essaie toujours de fusionner l’argument situé à droite du type à gauche; pas de concaténation de chaînes. Ensuite, cette valeur sera multipliée par$m
, ce qui est toujours,[bool]
mais sera implicitement fusionnée..
.Donc, la première itération où
$b
devient$true
,$b
aurait été$false
quand a$m
été évaluée, rendant$m
égal$true
, ce qui maintiendra le multiplicateur à1
.Au cours de cette course
$b
devient$true
et est ajouté à l'élément de version (comme1
), incrémenter ainsi, et puisque le multiplicateur est encore1
, ce sera le résultat final.Donc, à la prochaine itération,
$b
sera déjà$true
, rendant$m
égal$false
, ce qui fera le multiplicateur0
. Depuis$b
toujours$true
, le multiplicateur sera toujours0
, de sorte que chaque élément retourné le sera0
aussi.la source
R,
100959286 octetsExceptionnellement pour R, cela utilise l'indexation 0. Fonction anonyme avec deux arguments (une chaîne et un entier). Probablement peut être joué au golf un peu.
la source
05AB1E , 22 octets
Essayez-le en ligne!
Je ne sais pas comment faire si-sinon dans 05AB1E, donc c'est plus long que cela ne devrait être.
la source
1.0.0.0.3, 3
ne devrait1.0.0.1.0
pas produire1.0.0.1.3
.Café-script:
7767 octetsWoot! Temps pour le gâteau et le café pour la version bêta.
Grâce à @ven et @Cyoce, j'ai rasé 10 octets!
la source
.join '.'
ou.split '.'
)+
au lieu deparseInt
(utiliser~~
si vous avez besoin de lePython 3,
8986 octetsmanière très naïve de faire avancer les choses
Edit: réécrit le conditionnel en faisant référence à @kade
la source
PHP, 81 octets
terriblement long. Au moins: l'Elephpant bat toujours le Python.
boucle le premier argument divisé par des points:
"."[!$i]
est vide pour le premier et un point pour chaque autre élément;($i<=$n)
et($i==$n)
sont implicitement convertis en entier0
ou en1
arithmétiques entiers.la source
JavaScript (ES6),
5755 octetsExemples:
Ce n'est pas la meilleure implémentation de JS, mais elle est assez simple et suit la logique à laquelle vous vous attendez.
la source
Pyth - 21 octets
Suite de tests
la source
10.0
cas de test donne11.0.0
, c'est une partie de trop!Powershell,
801009592 octets5 octets enregistrés en utilisant un const pour le
-1..if
3 octets sauvegardés en utilisant
!$b
au lieu de$b-eq0
Explication:
Cas de test:
la source
r
au lieu derandom
random
, ce n’est pas un alias! C'est le résultat de l'évaluation des commandes de PowerShell. Comme il cherche à trouver une commande dans des alias, des fonctions, des applets de commande, des applications natives, etc., la dernière chose qu’il essaie de faire est d’ajouterGet-
du préfixe à ce qu’il soit. Donc, vous appelez en réalitéGet-Random
, mais techniquement pas comme un alias. Vous pouvez voir ce travail en cours d' exécutionservice
, ouchilditem
, ou l'ironie maximale,alias
.Objective-C 531 octets
compiler:
usage:
la source
0
place deNULL
et supprimer lereturn 0;
à la fin de la principale.NSString *s
peut probablement avoir l'espace supprimé.**argv
est 1 octet plus court que*argv[]
.@autoreleasepool{}
est probablement inutile.Javascript ES6: 60 octets
la source
}
à la fin. Sur le golf: l'une des fonctionnalités des fonctions fléchées est le retour implicite. Vous pouvez donc le remplacer(n,r)=>{return r>i?n=0:n}
par(n,r)=>r>i?n=0:n
une sauvegarde de quelques octets.R, 75 octets
L'indexation est basée sur 1. Vous pouvez jouer avec en ligne ici .
la source
APL (Dyalog) , 31 octets
Nécessite
⎕IO←0
( I ndex O rigin 0), qui est utilisé par défaut sur de nombreux systèmes. Corps du programme complet; invite à saisir du texte (version), puis une entrée numérique (index).Essayez-le en ligne!
⍞
invite pour la saisie de texte'.'⎕VFI
V erifier et F ix I nput utilisant période comme séparateur de champ (par les validités, les champs de champs de valeurs)⌽
reverse (pour mettre les valeurs devant)⊃
choisir le premier (les valeurs)⎕(
...)
applique la fonction tacite suivante à celle-ci, en utilisant l'entrée évaluée comme argument de gauche:Pour expliquer les équivalents non tacites de chaque application de fonction, nous allons maintenant utiliser
⍺
pour indiquer l’argument de gauche (l’index) et⍵
pour indiquer l’argument de droite (la liste des numéros individuels du numéro de version actuel initialement saisi).⊃
équivalent à(⍺⊃⍵)
utiliser⍺
pour choisir un élément de⍵
1+
ajouter un à cela↑,
équivalent à(⍺↑⍵),
pré-compter des⍺
numéros pris de⍵
⊢∘≢↑
équivalent à(⍺⊢∘≢⍵)↑
équivalent à(≢⍵)↑
prendre autant de nombres de cela qu'il y a des éléments dans⍵
, rembourrage avec des zéros si nécessaire⍕
format (chaîne avec un espace entre chaque nombre)' '⎕R'.'
PCRE R espaces avec des périodes EPlacezla source
Java 8, 130 octets
Explication:
Essayez ici.
la source
LiveScript,
5352 octets-1 octet grâce à @ ASCII uniquement!
Ancienne Explication:
Une autre réponse automatique ... Pas que quiconque golfe dans LiveScript de toute façon. : P
Je travaillais sur une autre version:
Mais
*
est trop surchargé pour être reconnu dans un index d'épissage,=0
tentera donc d'accéder0[0]
. Donc, vous devez écrire quelque chose comme..[b to ..length- b]=[0]*(..length-1-b)
et c'est plus long à la fin.la source
f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.
est malheureusement bien plus long :(if i<b then e else if i>b then 0 else+e+1
en ie[+e+1;0;e;e][i>b+(2*i<b)]
ou quelque chose du genre, peut-être même([+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;
par de l'espace. aussi ... on dirait que c'est aussi loin que ça va aller avec cette approcheHaskell ,
136129 octetsEssayez-le en ligne!
Original
la source