Bitte lass mich frei!

34

Als Code-Golfer sind wir es ( sicher ) nicht gewohnt, etwas zu veröffentlichen . Wir brauchen ein paar Tools, die uns dabei helfen.

Um ein neues Release zu vermarkten, benötigen wir natürlich eine schöne und glänzende Release-Version. Wer wird nicht aufgeregt, wenn er von Version 3.0.0 erfährt?

Aufgabe

Ihre Aufgabe wird es sein, ein Programm / eine Routine / ... zu schreiben, um eine Versionsnummer zu erhöhen.

Sie müssen die Versionsnummer erhöhen und die "weniger wichtigen" (dh die Patch-Version) zurücksetzen.

Sie erhalten zwei Argumente: die aktuelle Version (z. B. "1.0.3") als Zeichenfolge und einen Index, um zu wissen, welcher zu aktualisieren ist (0 oder 1-indiziert).

Beispiel 0-indiziert:

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

Die Version ist eine Zeichenfolge, jeder Teil ist eine Zahl, die durch einen Punkt getrennt ist. Es darf keine führenden, keine nachgestellten oder keine aufeinanderfolgenden Punkte geben (und nichts außerhalb von Zahlen / Punkten). Die Größe der Versionszeichenfolge ist unbegrenzt.

^[1-9]\d*(\.[1-9]\d*)*$

Der Fehlerfall (die letzten beiden Beispiele) ist undefiniertes Verhalten. Was bei Fehleingaben passiert, ist für diese Herausforderung nicht relevant.

Standardlücken sind wie üblich verboten. Sie dürfen den String ausdrucken oder zurücksenden.

Ven
quelle
1
Können wir zuerst den Index und dann die Versionsnummer als Eingabe anfordern?
Leo
@Leo ja, die Bestellung ist kein Problem.
Ven
Ich könnte einen Testfall hinzufügen, um die endgültige Zahl in der Zeichenfolge zu erhöhen, oder ein Beispiel oder etwas, auf das getestet werden soll.
nmjcman101
@ nmjcman101 wie ist es ein Sonderfall?
Ven
3
Ich wünschte, ich könnte die gleiche Herausforderung mit der Gewinnbedingung als "am besten lesbar" stellen, damit jemand diese für mich zur Verwendung in der realen Arbeit schreibt. =)
jpmc26

Antworten:

12

Japt, 16 11 Bytes

¡V«´V+ÂX}'.

Testen Sie es online! Die Eingangsnummer ist 1-indiziert.

Basierend auf meiner JavaScript-Antwort. Dies nutzt eine der hilfreichsten Funktionen von Japt: Aufteilen einer Zeichenfolge auf eine andere, bevor die einzelnen Elemente zugeordnet werden, und erneutes Verknüpfen dieser Zeichenfolge nach der Zuordnung.

Ungolfed und Erklärung

¡  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
quelle
2
Ein süßer Zug!
Jonathan Allan
1
Nun, ich dachte, ich hätte es in der Tasche. Entschuldigung, ich werde über meine V-Antwort besessen sein und jedes letzte kleine Byte herauspressen. : P
DJMcMayhem
11

Vim 20 25 Bytes

Ich bemerkte leider, dass es den Fall der Aktualisierung der letzten Nummer nicht handhabte, also musste ich Bytes hinzufügen. Dies ist 1-indiziert.

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

TryItOnline

Unbedruckbares:

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

Dies nimmt die Argumente in umgekehrter Reihenfolge als separate Zeilen:

3
1.2.3.4.5

Erläuterung:

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
quelle
1
Nett! Eine Erklärung wäre hilfreich
Kritixi Lithos
@KritixiLithos Hinzugefügt. Leider musste ich auch ein paar Bytes hinzufügen, um die endgültige Versionsnummer zu erhöhen, aber es passiert.
Nmjcman101
Ich denke, wenn Sie 0-indexiert wären, könnten Sie einfach tun, DJ@"t.<C-a>qq2wcw0<esc>@qq@qwas wieder zwanzig ist
DJMcMayhem
@DJMcMayhem Ich glaube nicht, dass ich das kann, weil ich dann nicht in der Lage wäre, 0 und 1 zu unterscheiden.
nmjcman101
1
Oh ja, guter Punkt. Wie wäre es DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem
11

JavaScript (ES6), 44 42 40 37 Byte

3 Bytes dank @Neil gespart

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

Die Eingangsnummer ist 1-indiziert.

Testschnipsel

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
quelle
2
Durchgestrichen
1
@KritixiLithos Was ist mit meinem Browser falsch? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues
n=>i&&+n+!--i
Neil
@ Neil Danke! Ich konnte einfach nicht herausfinden, wie ich diesen Ausdruck weiter spielen kann ...
ETHproductions
10

V , 13 , 12 Bytes

Àñf.ñò2wcw0

Probieren Sie es online!

Dies ist 0-indiziert.

Es gibt dort eine ctrl-a(ASCII 0x01), also hier ist eine lesbare Version:

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

Erläuterung:

À                   " '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
quelle
7

Perl, 40 37 34 + 1 = 35 Bytes

-2 Bytes dank @Dada. -3 Bytes dank einer Idee, die ich beim Lesen des Japt-Codes von @ ETHproductions erhalten habe.

Laufen Sie mit der -pFlagge.

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

Probieren Sie es online!

Aufschlüsselung des Codes

-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
quelle
Entfernen Sie alle Klammern auf beiden Seiten! (und $&stattdessen $1)
Dada
Ich wusste, dass mir etwas fehlt! Vielen Dank!
Gabriel Benamy
Durch die Verwendung von 1-indizierten Zahlen können 4 Bytes gespart werden: Probieren Sie es online aus!
Xcali
5

Jelly , 19 17 Bytes

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

1-indiziert.

TryItOnline!

Wie?

ṣ”.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
quelle
3
Herzlichen Glückwunsch zu 10k !!
Luis Mendo
Ich kann es kaum erwarten, bis Jelly 2.0 fertig ist V€:).
Ven
@ LuisMendo - danke! Ich bin so unaufmerksam (Dennis hat meinen 1K-Meilenstein bemerkt, bevor ich es auch tat).
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,'.')

One based und erster Golfversuch!

MattWH
quelle
Gut gemacht! Zum ersten Mal sehe ich den neuen stringTyp in Aktion :-)
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));

Erläuterung

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

Probieren Sie es hier aus

JustinM - Setzen Sie Monica wieder ein
quelle
Sie brauchen nicht die stringund intin der anonymen Funktion Signatur
TheLethalCoder
@TheLethalCoder ahh ja natürlich danke.
JustinM - Wiedereinsetzung von Monica
4

Python 2, 84 Bytes

Ich habe das Gefühl, dass dies wirklich kürzer sein könnte. Möglicherweise ist eine Möglichkeit erforderlich, eine nicht aufzählbare Option zu haben.

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

Wenn wir die Version als Liste von Zeichenfolgen verwenden könnten, gäbe es eine 75-Byte-Lösung:

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

Wenn sowohl die Eingabe als auch die Ausgabe Listen von Zahlen waren, gibt es außerdem eine 64-Byte-Lösung:

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

V 14 20 Bytes

Wieder musste ich Code für den Eckfall des Inkrementierens der letzten Ziffer hinzufügen. (1-indiziert)

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

TryItOnline

Unbedruckbares:

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

Dies nimmt die Argumente in umgekehrter Reihenfolge als separate Zeilen:

3
1.2.3.4.5
nmjcman101
quelle
1
Gute Antwort! Ich freue mich immer, wenn jemand anderes V benutzt! Nur damit Sie wissen, dass, wenn Sie die erste Eingabe in 'args' eingeben, das Register 'a' für diese Zahl vordefiniert wird, können Sie @a(oder noch kürzer À) eine Reihe von Bytes einsparen.
DJMcMayhem
4

Batch, 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-indiziert.

Neil
quelle
4

Perl 6, 67 Bytes, 0-indiziert

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

Erläuterung:

->$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
quelle
3
Nur zu Ihrer Information, Selbstantworten sind absolut förderfähig. Tatsächlich werden sie sogar ermutigt
DJMcMayhem
@DJMcMayhem Ich wusste darüber, aber ich dachte , sie nicht berechtigt waren
Ven
3

PowerShell 3+, 75 bis 74 Byte

($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 '.'

Erläuterung

Parameter werden über das $argsArray akzeptiert .

  1. Teilen Sie die Versionszeichenfolge .für jedes Element auf:
    1. $mwird gesetzt, um zu sein -not $b. Beim ersten Durchlauf $bwird undefiniert, woraufhin zusammengeführt wird $falseund so wie $mfolgt gestartet wird $true. $msoll ein Multiplikator sein, der immer 0oder ist 1und später verwendet wird. $mmuss hier ausgewertet werden, da wir wollen, dass es auf dem $bWert der letzten Iteration basiert .
    2. $bwird auf sich selbst gesetzt, -orwenn ein Iterator $imit $args[1](dem Indexparameter) verglichen wird . Dies bedeutet $b, dass hier gesetzt wird, $truesobald wir uns auf dem Element befinden, das inkrementiert werden soll. Darüber hinaus wird es $truein jeder nachfolgenden Iteration verwendet, da die Bedingung -orden aktuellen Wert hat.
    3. $bumgewandelt wird einstellige auf eine Zahl mit +( $false=> 0, $true=> 1), dann auf die aktuelle Version Element hinzugefügt , $_das eine ist [string], aber Powershell immer versucht , das Argument auf der rechten Seite auf den Typ auf der linken Seite zu vereinigen, werden so Arithmetik durchgeführt, keine String-Verkettung. Dann wird dieser Wert mit multipliziert $m, der noch vorhanden ist, [bool]aber implizit verschmolzen wird.
  2. Verbinden Sie das resultierende Array erneut mit ..

Die erste Iteration, $bzu der es kommt $true, $bwäre gewesen, $falsewenn sie $mausgewertet worden wäre, wobei sie $mgleich gemacht worden wäre $true, was den Multiplikator aufrechterhalten würde 1.

Während dieses Laufs $bwird $trueund wird das Versionselement (as 1) hinzugefügt , wodurch es inkrementiert wird, und da der Multiplikator noch 1ist, ist dies das Endergebnis.

So bei der nächsten Iteration, $bwird schon sein $true, was $mgleich $false, was den Multiplikator machen 0. Da dies $bfür immer der Fall sein wird $true, wird der Multiplikator immer derselbe sein 0, und jedes zurückgegebene Element wird es 0auch sein.

Briantist
quelle
2

R 100 95 92 86 Bytes

Ungewöhnlich für R verwendet dies die 0-Indizierung. Anonyme Funktion mit zwei Argumenten (einer Zeichenfolge und einer Ganzzahl). Wahrscheinlich kann ein bisschen Golf gespielt werden.

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

05AB1E , 22 Bytes

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

Probieren Sie es online!

Ich weiß nicht, wie ich if-else in 05AB1E machen soll, das ist also länger als es sein sollte.

Magische Kraken-Urne
quelle
1
Wenn ich nicht falsch verstehe, denke ich nicht, dass dies funktioniert. Die Frage besagt, man muss die Nebenversionen ausgleichen, 1.0.0.0.3, 3sollte also 1.0.0.1.0nicht produzieren 1.0.0.1.3.
LambdaBeta
@ LambdaBeta falsch gelesen, behoben.
Magic Octopus Urn
2

Kaffeeskript: 77 67 Bytes

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

Woot! Zeit für Kuchen und Kaffee für die Beta-Version.

Dank @ven und @Cyoce habe ich 10 Bytes rasiert!

Lord Ratte
quelle
Nett! Sind Sie sich nicht sicher, ob Sie das parseInt hier brauchen?
Ven
Übrigens können Sie zwei Bytes sparen, indem Sie parenless Anrufe (dh .join '.'oder .split '.')
Ven
Verwenden Sie +anstelle von parseInt(verwenden ~~Sie, wenn Sie es in eine Ganzzahl
umwandeln müssen
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('.')))

sehr naive Art, Dinge zu erledigen

Bearbeiten: Die Bedingung wurde unter Bezugnahme auf @kade umgeschrieben

Jeffrey04
quelle
2

PHP, 81 Bytes

furchtbar lang. Zumindest: Der Elefant schlägt immer noch die Python.

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

durchläuft das erste Argument, das durch Punkte geteilt ist: "."[!$i]ist für das erste leer und für jedes andere Element ein Punkt; ($i<=$n)und ($i==$n)werden implizit in Ganzzahl 0oder 1für Ganzzahlarithmetik umgewandelt.

Titus
quelle
2

JavaScript (ES6), 57-55 Byte

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

Beispiele:

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

Nicht die beste JS-Implementierung, aber sie ist recht einfach und folgt der erwarteten Logik.

Florrie
quelle
Okay, das war nicht ganz klar, danke.
Florrie
1

Pyth - 21 Bytes

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

Test Suite

Maltysen
quelle
3
Nein, das ist nicht ganz richtig. Dein 10.0Testfall gibt 11.0.0, das ist ein Teil zu viel!
Ven
1

Powershell, 80 100 95 92 Bytes

5 Bytes mit einer Konstante für die gespeichert -1..if

3 Bytes mit !$banstelle von gespeichert$b-eq0

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

Erläuterung:

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
}

Testfälle:

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
quelle
Nett! Ich liebe es, hier mehr Powershell zu sehen.
Briantist
@briantist ehrlich gesagt ist eine leichte, nicht kompilierte Version von C #, die mit allem kompatibel ist, ein Glücksfall. Ich beschäftige mich mit vielen Microsoft-Dingen bei der Arbeit und liebe sie absolut.
Colsw
Oh, absolut. PowerShell ist meine Marmelade, aber nicht viele Leute denken, dass sie zum Golfen verwendet werden kann. Es hat einige Eigenschaften, die sich hervorragend zum Golfen eignen, und andere, die es zum Golfen lutschen lassen, aber insgesamt ist es eine solide Wahl! Ich spiele mit der Idee, bei meinem nächsten PSUG eine Präsentation über das Golfen in PowerShell zu halten.
Briantist
@briantist die standard-aliasnamen sind schön, aber ich würde gerne einen vordefinierten satz von ein paar gebräuchlichen befehlen als einzelne char-aliasnamen zum golfspielen verwenden können, wenn wir sagen würden, dass es mit einigen tatsächlichen golfsprachen konkurrieren könnte, wenn wir könnten rstattrandom
colsw
Lustige Sache random, es ist kein Alias! Dies ist ein Ergebnis der Befehlsauswertung von PowerShell. Da ein Befehl in Aliasen, Funktionen, Cmdlets, systemeigenen Anwendungen usw. gesucht wird, versucht er als letztes, dem, was er ist, das Voranstellen Get-. Sie rufen also tatsächlich an Get-Random, aber technisch gesehen nicht als Alias. Sie können sehen, dass dies funktioniert, indem Sie laufen serviceoder childitemoder für maximale Ironie alias.
Briantist
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;}

kompilieren:

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

Verwendung:

./main 1.2.3 1
Zhigang An
quelle
Willkommen bei CodeGolf. Im Titel sollten Sie die Größe des Quellcodes angeben, nicht den Byte-Code. Und die Quelle sollte natürlich so kurz wie möglich sein (kein unnötiges Leerzeichen, einzelne Zeichen, Variablennamen usw.). Viel Glück.
Titus
kann das wohl 0anstelle von verwenden NULLund return 0;am ende des main entfernen . NSString *skann wahrscheinlich den Raum entfernt haben. **argvist 1 Byte kürzer als *argv[]. @autoreleasepool{}ist wahrscheinlich unnötig.
Ven
1

Javascript ES6: 60 Bytes

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}
Jack
quelle
2
Willkommen bei PPCG! Dies scheint nicht gültig zu sein, da es in keiner Weise Eingaben nimmt und es }am Ende ein Extra gibt . Am Golf: eines der Merkmale des Pfeils Funktionen implizit Rückkehr, so dass Sie ersetzen können (n,r)=>{return r>i?n=0:n}mit (n,r)=>r>i?n=0:nbis einige Bytes zu speichern.
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=".")}

Die Indizierung basiert auf 1. Sie können hier online damit spielen .

Plannapus
quelle
1

APL (Dyalog) , 31 Bytes

Benötigt ⎕IO←0( I ndex O rigin 0), was auf vielen Systemen Standard ist. Vollständiger Programmteil; fordert zur Texteingabe (Version) und dann zur numerischen Eingabe (Index) auf.

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

Probieren Sie es online!

 Eingabeaufforderung für Texteingabe

'.'⎕VFIV erify und F ix I nput mit Punkt als Feldtrennzeichen (Feldgültigkeiten, Feldwerte)

 umkehren (um die Werte in den Vordergrund zu stellen)

 wähle den ersten (die Werte)

⎕(... ) wende die folgende implizite Funktion an, wobei die ausgewertete Eingabe als linkes Argument verwendet wird:

Um die nicht stillschweigenden Entsprechungen jeder Funktionsanwendung zu erläutern , geben wir nun das linke Argument (den Index) und das rechte Argument (die Liste der einzelnen Nummern der ursprünglich eingegebenen aktuellen Versionsnummer) an.

 äquivalent zu  (⍺⊃⍵) verwenden , ein Element zur Auswahl

1+ füge eins hinzu 

↑, Entspricht den  (⍺↑⍵), vorangestellten Nummern von

⊢∘≢↑ äquivalent zu  (⍺⊢∘≢⍵)↑ äquivalent, (≢⍵)↑ um so viele Zahlen davon zu  nehmen, wie Elemente enthalten sind , und erforderlichenfalls mit Nullen aufzufüllen

 Format (mit einem Leerzeichen zwischen jeder Zahl versehen)

' '⎕R'.' PCRE R ePlace Räume mit Perioden

Adam
quelle
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;}

Erläuterung:

Probieren Sie es hier aus.

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
quelle
1

LiveScript, 53 52 Bytes

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

-1 Byte dank nur @ ASCII!

Alte Erklärung:

(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

Noch eine Selbstantwort ... Nicht, dass irgendjemand in LiveScript Golf spielt. : P

Ich habe an einer anderen Version gearbeitet:

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

Ist *aber zu überlastet, um in einem Spleißindex erkannt zu werden, so =0wird versucht, darauf zuzugreifen 0[0]. Also musst du so etwas schreiben ..[b to ..length- b]=[0]*(..length-1-b)und es ist am Ende länger.

Ven
quelle
1
Leider f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.ist es viel länger :(
Nur ASCII
@ ASCII-nur denke ich , es zu komprimieren möglich ist , if i<b then e else if i>b then 0 else+e+1in dh [+e+1;0;e;e][i>b+(2*i<b)]oder etwas in diese Richtung, vielleicht sogar([+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
Nur ASCII
Dann lassen Sie sich die Signatur entfernen: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.52
Ven
Übrigens können Sie durch ;Leerzeichen ersetzen . auch ... sieht so aus, als ob das im Grunde genommen so weit unten ist, wie es mit diesem Ansatz gehen wird
ASCII