Puść mnie!

34

Jako golfiarze nie jesteśmy przyzwyczajeni do wydawania (na pewno ). Będziemy potrzebować kilku narzędzi, które nam w tym pomogą.

Oczywiście, aby pomóc w marketingu nowego wydania, potrzebujemy ładnej i błyszczącej wersji wydania. Kto nie jest podekscytowany, gdy słyszy o wersji 3.0.0?

Zadanie

Twoim zadaniem będzie napisanie programu / procedury / ... w celu zwiększenia numeru wersji.

Musisz zwiększyć numer wersji i zresetować te „mniej ważne” (tj. Wersję poprawki).

Otrzymasz dwa argumenty: bieżącą wersję (np. „1.0.3”) jako ciąg oraz indeks, aby dowiedzieć się, który z nich zaktualizować (0 lub 1-indeksowany).

Przykład, indeksowany 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

Wersja jest ciągiem znaków, każda część jest liczbą oddzieloną kropką. Nie może być żadnych wiodących, końcowych ani kolejnych kropek (i nic poza liczbami / kropkami). Nie ma ograniczeń co do wielkości ciągu wersji.

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

Przypadek błędu (dwa ostatnie przykłady) jest niezdefiniowanym zachowaniem. To, co dzieje się w przypadku nieprawidłowych danych wejściowych, nie ma znaczenia dla tego wyzwania.

Jak zwykle standardowe luki są zabronione. Możesz wydrukować lub zwrócić ciąg.

Ven
źródło
1
Czy możemy poprosić o podanie jako danych wejściowych najpierw indeksu, a następnie numeru wersji?
Leo
@Leo tak, zamówienie nie stanowi problemu.
Ven
Mogę dodać przypadek testowy do zwiększenia końcowej liczby w ciągu lub przykład lub coś do przetestowania.
nmjcman101
@ nmjcman101 jak to jest szczególny przypadek?
Ven
3
Chciałbym móc podjąć takie samo wyzwanie z warunkiem wygranej jak „najbardziej czytelny”, aby ktoś napisał je dla mnie w prawdziwej pracy. =)
jpmc26

Odpowiedzi:

12

Japt, 16 11 bajtów

¡V«´V+ÂX}'.

Przetestuj online! Numer wejścia jest indeksowany 1.

Na podstawie mojej odpowiedzi JavaScript. Wykorzystuje to jedną z najbardziej pomocnych funkcji Japt: dzielenie jednego łańcucha na drugi przed mapowaniem każdego elementu, a następnie ponowne łączenie tego łańcucha po mapowaniu.

Bez golfa i wyjaśnienia

¡  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
ETHprodukcje
źródło
2
Rzeczywiście słodka funkcja!
Jonathan Allan,
1
Dobrze, pomyślałem, że mam to w torbie. Przepraszam, mam obsesję na punkcie mojej odpowiedzi V i wyciskam z niej każdy mały bajt. : P
DJMcMayhem
11

Vim 20 25 bajtów

Niestety zdałem sobie sprawę, że nie obsługuje przypadku aktualizacji ostatniego numeru, więc musiałem dodać bajty. Jest to indeks 1.

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

TryItOnline

Materiały niedrukowalne:

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

To przyjmuje argumenty w odwrotnej kolejności, jako osobne linie:

3
1.2.3.4.5

Wyjaśnienie:

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
źródło
1
Miły! Pomocne byłoby wyjaśnienie
Kritixi Lithos
@KritixiLithos Dodano. Niestety musiałem dodać kilka bajtów, aby obsłużyć zwiększanie ostatecznego numeru wersji, ale tak się dzieje.
nmjcman101
Myślę, że gdybyś poszedł na 0 indeksów, możesz po prostu zrobić, DJ@"t.<C-a>qq2wcw0<esc>@qq@qco jest z powrotem do dwudziestu
DJMcMayhem
@DJMcMayhem Nie sądzę, żebym mógł to zrobić, ponieważ wtedy nie byłbym w stanie rozróżnić 0 i 1.
nmjcman101
1
O tak, dobra uwaga. Jak o DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem
11

JavaScript (ES6), 44 42 40 37 bajtów

Zaoszczędź 3 bajty dzięki @Neil

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

Numer wejścia jest indeksowany 1.

Testowy fragment kodu

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

ETHprodukcje
źródło
2
Przekreślone 44 to wciąż 44 :)
Kritixi Lithos
1
@KritixiLithos Co jest nie tak z moją przeglądarką? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues
n=>i&&+n+!--i
Neil,
@Neil Thanks! Po prostu nie mogłem wymyślić, jak
zagrać w
10

V , 13 , 12 bajtów

Àñf.ñò2wcw0

Wypróbuj online!

To jest indeksowane na 0.

Jest tam ctrl-a(ASCII 0x01), więc oto czytelna wersja:

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

Wyjaśnienie:

À                   " '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
źródło
7

Perl, 40 37 34 + 1 = 35 bajtów

-2 bajty dzięki @Dada. -3 bajty dzięki pomysłowi, który otrzymałem po przeczytaniu kodu Japt @ ETHproductions.

Uruchom z -pflagą.

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

Wypróbuj online!

Podział kodu

-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
źródło
Usuń wszystkie nawiasy po obu stronach! (i $&zamiast $1tego)
Dada,
Wiedziałem, że czegoś mi brakuje! Dzięki!
Gabriel Benamy,
Korzystanie z liczb indeksowanych 1 pozwala zaoszczędzić 4 bajty: Wypróbuj online!
Xcali
5

Galaretka , 19 17 bajtów

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

1-indeksowany.

TryItOnline!

W jaki sposób?

ṣ”.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
źródło
3
Gratulacje na 10k !!
Luis Mendo
Nie mogę się doczekać Jelly 2.0, więc możesz się tego pozbyć V€:).
Ven
@LuisMendo - dzięki! Jestem tak nieobserwowalny (Dennis zauważył mój kamień milowy 1K, zanim to zrobiłem).
Jonathan Allan
5

MATLAB, 85 bajtów

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

Jedna oparta i pierwsza próba gry w golfa!

MattWH
źródło
Dobra robota! Pierwszy raz widzę nowy stringtyp w akcji :-)
Luis Mendo,
5

C # 116 104 bajtów

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

Wyjaśnienie

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

Wypróbuj tutaj

JustinM - Przywróć Monikę
źródło
Nie potrzebne stringi intw anonimowym podpisem funkcji
TheLethalCoder
@TheLethalCoder ahh tak oczywiście, dziękuję.
JustinM - Przywróć Monikę
4

Python 2, 84 bajtów

Wydaje mi się, że to może być naprawdę krótsze. Może potrzebuję sposobu, aby mieć opcję niepoliczalną.

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

Gdybyśmy mogli wziąć wersję za listę ciągów, istnieje 75-bajtowe rozwiązanie:

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

Ponadto, jeśli zarówno dane wejściowe, jak i wyjściowe były listami liczb, istnieje 64-bajtowe rozwiązanie:

g=lambda s,n:([-~s[0]]+[0]*~-len(s))*(n<1)or [s[0]]+g(s[1:],n-1)
Kade
źródło
4

V 14 20 bajtów

Znowu musiałem dodać kod w przypadku narożnika zwiększania ostatniej cyfry. (1-indeksowany)

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

TryItOnline

Materiały niedrukowalne:

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

To przyjmuje argumenty w odwrotnej kolejności, jako osobne linie:

3
1.2.3.4.5
nmjcman101
źródło
1
Niezła odpowiedź! Zawsze cieszę się, że ktoś inny używa V! Właśnie dlatego wiesz, że jeśli umieścisz pierwsze wejście w args, to z góry zdefiniuje rejestr „a” pod tym numerem, abyś mógł zrobić @a(lub nawet krócej À), co powinno zaoszczędzić ci sporo bajtów.
DJMcMayhem
4

Partia, 119 bajtów

@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-indeksowany.

Neil
źródło
4

Perl 6, 67 bajtów, indeksowany 0

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

Wyjaśnienie:

->$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
źródło
3
Po prostu, odpowiedzi własne są całkowicie kwalifikowalne. W rzeczywistości są nawet zachęcani
DJMcMayhem
@DJMcMayhem Wiedziałem o tym, ale myślałem, że nie kwalifikują się
Ven
3

PowerShell 3+, 75 74 bajtów

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

Bez golfa

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

Wyjaśnienie

Parametry są akceptowane przy użyciu $argstablicy.

  1. Podziel ciąg wersji na ., a następnie dla każdego elementu:
    1. $mma być -not $b. Przy pierwszym uruchomieniu $bbędzie niezdefiniowany, z którym zostanie połączony $false, więc $mzacznie się jako $true. $mma być mnożnikiem, który zawsze jest 0lub 1będzie używany później. $mnależy to tutaj ocenić, ponieważ chcemy, aby opierało się ono na wartości ostatniej iteracji $b.
    2. $bjest ustawiany -orna wynik porównania iteratora $iz $args[1](parametr indeksu). Oznacza to, $bże zostanie ustawiony $truetutaj, gdy będziemy na elemencie, który ma zostać zwiększony. Dodatkowo będzie się $truepojawiał w każdej kolejnej iteracji, ponieważ warunek to -ord bieżącą wartością.
    3. $bjest konwertowany na liczbę za pomocą unary +( $false=> 0, $true=> 1), a następnie dodawany do elementu bieżącej wersji, $_który jest [string], ale PowerShell zawsze próbuje połączyć argument po prawej stronie z typem po lewej, więc zostanie wykonana arytmetyka, nie łączenie łańcuchów. Następnie wartość ta zostanie pomnożona przez $m, co jest nadal, [bool]ale niejawnie się połączy.
  2. Połącz ponownie wynikową tablicę za pomocą ..

Zatem pierwsza iteracja, w której $bsię pojawia $true, $bbyłaby $falsewtedy, gdy $mzostała oceniona, $mzrównanie $true, co utrzyma mnożnik na poziomie 1.

Podczas tego przebiegu $bstaje się $truei jest dodawane do elementu wersji (as 1), zwiększając go, a ponieważ mnożnik jest nadal 1, będzie to wynik końcowy.

Tak więc przy następnej iteracji $bbędzie już $true, $mwyrównywanie $false, co spowoduje, że mnożnik 0. Ponieważ na $bzawsze będzie $trueteraz, mnożnik zawsze będzie 0, więc każdy zwrócony element również będzie 0.

briantist
źródło
2

R, 100 95 92 86 bajtów

Niezwykle w przypadku R wykorzystuje to indeksowanie 0. Funkcja anonimowa z dwoma argumentami (ciągiem i liczbą całkowitą). Prawdopodobnie można trochę pograć w golfa.

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

05AB1E , 22 bajty

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

Wypróbuj online!

Nie wiem, jak zrobić if-else w 05AB1E, więc jest to dłuższe niż powinno być.

Urna Magicznej Ośmiornicy
źródło
1
Jeśli się nie mylę, to chyba nie działa. Pytanie mówi, że musisz zrezygnować z mniejszych wersji, więc nie 1.0.0.0.3, 3powinieneś produkować . 1.0.0.1.01.0.0.1.3
LambdaBeta
@LambdaBeta niepoprawnie odczytany, naprawiony.
Magic Octopus Urn
2

Skrypt kawy: 77 67 bajtów

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

Woot! Czas na ciasto i kawę do wersji beta.

Dzięki @ven i @Cyoce ogoliłem 10 bajtów!

Lord Ratte
źródło
Miły! Nie jesteś pewien, czy potrzebujesz tutaj analizy?
Ven
Przy okazji możesz zaoszczędzić dwa bajty, używając połączeń bezparenkowych (tj. .join '.'Lub .split '.')
Ven
Użyj +zamiast parseInt(użyj, ~~jeśli chcesz rzucić na liczbę całkowitą)
Cyoce
2

Python 3, 89 86 bajtów

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

bardzo naiwny sposób na załatwienie sprawy

Edycja: przepisałem warunek, odwołując się do @kade

Jeffrey04
źródło
2

PHP, 81 bajtów

okropnie długo. Przynajmniej: Słoń wciąż bije Pythona.

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

zapętla pierwszy argument podzielony przez kropki: "."[!$i]jest pusty dla pierwszego i kropka dla każdego innego elementu; ($i<=$n)i ($i==$n)są domyślnie rzutowane na liczbę całkowitą 0lub 1dla arytmetyki liczb całkowitych.

Tytus
źródło
2

JavaScript (ES6), 57 55 bajtów

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

Przykłady:

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

Nie jest to najlepsza implementacja JS, ale jest dość prosta i postępuje zgodnie z logiką, której można się spodziewać.

Florrie
źródło
Okej, to nie było strasznie jasne, dzięki.
Florrie,
1

Pyth - 21 bajtów

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

Pakiet testowy

Maltysen
źródło
3
Nie, to nie jest całkiem poprawne. Twój 10.0przypadek testowy daje 11.0.0, to o jedną za dużo!
Ven
1

PowerShell, 80 100 95 92 bajtów

Zapisano 5 bajtów, używając stałej dla -1..if

Zapisano 3 bajty, używając !$bzamiast$b-eq0

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

Wyjaśnienie:

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
}

Przypadki testowe:

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
źródło
Miły! Uwielbiam widzieć tutaj więcej PowerShell.
briantist
@ briantist szczerze mówiąc lekka nieskompilowana wersja C #, która może współpracować ze wszystkim, jest darem niebios, mam do czynienia z wieloma rzeczami Microsoftu w pracy i absolutnie to uwielbiam.
colsw
Och, absolutnie; PowerShell jest moim zacięciem, ale niewiele osób uważa, że ​​można go używać do gry w golfa. Ma kilka funkcji, które świetnie nadają się do gry w golfa, i inne, które sprawiają, że jest do bani, ale ogólnie jest to solidny wybór! Zabawiam się pomysłem robienia prezentacji na temat gry w golfa w PowerShell na następnym PSUG.
briantist
@ briantist domyślne aliasy są piękne, ale chciałbym móc użyć wcześniej zdefiniowanego zestawu kilku popularnych poleceń jako pojedynczych aliasów znaków dla gry w golfa, jeśli powiedzmy, że mogłyby konkurować z niektórymi rzeczywistymi językami golfa, gdybyśmy mogli użyć rzamiastrandom
colsw
Zabawne random, że to nie jest alias! Jest to wynik oceny poleceń programu PowerShell. Gdy szuka się polecenia w aliasach, funkcjach, poleceniach cmdlet, aplikacjach natywnych itp., Ostatnią rzeczą, którą próbuje zrobić, jest dołączenie Get-do tego, czym jest. Więc faktycznie dzwonisz Get-Random, ale technicznie nie jest to alias. Można zobaczyć tę pracę uruchamiając servicelub childitemlub maksymalną ironii alias.
briantist
1

Cel C 531 bajtów

#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;}

skompilować:

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

stosowanie:

./main 1.2.3 1
Zhigang An
źródło
Witamy w CodeGolf. W tytule powinieneś podać rozmiar kodu źródłowego, a nie kodu bajtowego. Źródło powinno oczywiście być tak krótkie, jak to możliwe (bez zbędnych białych znaków, nazw zmiennych pojedynczych znaków itp.). Powodzenia.
Tytus,
prawdopodobnie może użyć 0zamiast NULLi usunąć return 0;na końcu głównego. NSString *sprawdopodobnie może usunąć to miejsce. **argvjest o 1 bajt krótszy niż *argv[]. @autoreleasepool{}jest prawdopodobnie niepotrzebne.
Ven
1

JavaScript ES6: 60 bajtów

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}
Jacek
źródło
2
Witamy w PPCG! Nie wydaje się to poprawne, ponieważ nie pobiera danych w żaden sposób, a }na końcu jest dodatkowy . Na golfa: jedna z cech funkcji strzałek jest niejawna powrotny, więc można wymienić (n,r)=>{return r>i?n=0:n}się (n,r)=>r>i?n=0:nzaoszczędzić kilka bajtów.
ETHproductions
1

R, 75 bajtów

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

Indeksowanie jest oparte na 1. Możesz grać z nim online tutaj .

plannapus
źródło
1

APL (Dyalog) , 31 bajtów

Wymaga ⎕IO←0( I ndex O rigin 0), co jest domyślne w wielu systemach. Pełna treść programu; monituje o wprowadzenie tekstu (wersja), a następnie wprowadzenie numeryczne (indeks).

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

Wypróbuj online!

 monit o wprowadzenie tekstu

'.'⎕VFIV erify i F ix I nPrzenieś stosując okres jako separator (gdzie poprawne wartości, pola wartości pola)

 do tyłu (aby umieścić wartości na początku)

 wybierz pierwszy (wartości)

⎕(... ) zastosuj do tego następującą funkcję ukrytą, używając wartościowania jako lewego argumentu:

Aby wyjaśnić niejawne odpowiedniki każdej aplikacji funkcji, użyjemy teraz do wskazania lewego argumentu (indeksu) i wskazania prawego argumentu (listy indywidualnych numerów pierwotnie wprowadzonego bieżącego numeru wersji).

 równoważne do  (⍺⊃⍵) użycia, aby wybrać element z

1+ dodaj jeden do tego 

↑, odpowiednik  liczb (⍺↑⍵), poprzedzających pobranych z

⊢∘≢↑ ekwiwalent  (⍺⊢∘≢⍵)↑ ekwiwalentu, aby  (≢⍵)↑ pobrać tyle liczb, ile jest elementów , w razie potrzeby dopełniając zerami

 format (łańcuch z jedną spacją między każdą liczbą)

' '⎕R'.' PCRE R przestrzenie EUmieãæ z okresami

Adám
źródło
1

Java 8, 130 bajtów

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

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
1

LiveScript, 53 52 bajty

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

-1 bajt dzięki tylko @ ASCII!

Stare objaśnienie:

(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

Kolejna odpowiedź na pytanie ... W każdym razie nikt nie gra w LiveScript. : P

Pracowałem nad inną wersją:

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

Ale *jest zbyt przeciążony, aby można go było rozpoznać w indeksie splicingu, dlatego =0spróbuje uzyskać dostęp 0[0]. Musisz więc napisać coś takiego, ..[b to ..length- b]=[0]*(..length-1-b)a na końcu jest już dłużej.

Ven
źródło
1
niestety f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.jest znacznie dłuższy :(
tylko ASCII
@ Tylko ASCII Myślę, że można skompresować if i<b then e else if i>b then 0 else+e+1ie [+e+1;0;e;e][i>b+(2*i<b)]lub coś w tym stylu, może nawet([+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
Tylko ASCII
Następnie usuńmy podpis: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.dla 52
Ven
btw możesz zastąpić ;spacją. także ... wygląda na to, że jest to tak daleko, jak to będzie możliwe przy takim podejściu
tylko ASCII