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.
Odpowiedzi:
Japt,
1611 bajtówPrzetestuj 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
źródło
Vim
2025 bajtówNiestety zdałem sobie sprawę, że nie obsługuje przypadku aktualizacji ostatniego numeru, więc musiałem dodać bajty. Jest to indeks 1.
TryItOnline
Materiały niedrukowalne:
To przyjmuje argumenty w odwrotnej kolejności, jako osobne linie:
Wyjaśnienie:
źródło
DJ@"t.<C-a>qq2wcw0<esc>@qq@q
co jest z powrotem do dwudziestuDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
?JavaScript (ES6),
44424037 bajtówZaoszczędź 3 bajty dzięki @Neil
Numer wejścia jest indeksowany 1.
Testowy fragment kodu
źródło
n=>i&&+n+!--i
V ,
13, 12 bajtówWypróbuj online!
To jest indeksowane na 0.
Jest tam
ctrl-a
(ASCII 0x01), więc oto czytelna wersja:Wyjaśnienie:
źródło
Perl,
403734 + 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
-p
flagą.Wypróbuj online!
Podział kodu
źródło
$&
zamiast$1
tego)Galaretka ,
1917 bajtów1-indeksowany.
TryItOnline!
W jaki sposób?
źródło
V€
:).MATLAB, 85 bajtów
Jedna oparta i pierwsza próba gry w golfa!
źródło
string
typ w akcji :-)C #
116104 bajtówWyjaśnienie
Wypróbuj tutaj
źródło
string
iint
w anonimowym podpisem funkcjiPython 2, 84 bajtów
Wydaje mi się, że to może być naprawdę krótsze. Może potrzebuję sposobu, aby mieć opcję niepoliczalną.
Gdybyśmy mogli wziąć wersję za listę ciągów, istnieje 75-bajtowe rozwiązanie:
Ponadto, jeśli zarówno dane wejściowe, jak i wyjściowe były listami liczb, istnieje 64-bajtowe rozwiązanie:
źródło
V
1420 bajtówZnowu musiałem dodać kod w przypadku narożnika zwiększania ostatniej cyfry. (1-indeksowany)
TryItOnline
Materiały niedrukowalne:
To przyjmuje argumenty w odwrotnej kolejności, jako osobne linie:
źródło
@a
(lub nawet krócejÀ
), co powinno zaoszczędzić ci sporo bajtów.Partia, 119 bajtów
1-indeksowany.
źródło
Perl 6, 67 bajtów, indeksowany 0
Wyjaśnienie:
źródło
PowerShell 3+,
7574 bajtówBez golfa
Wyjaśnienie
Parametry są akceptowane przy użyciu
$args
tablicy..
, a następnie dla każdego elementu:$m
ma być-not $b
. Przy pierwszym uruchomieniu$b
będzie niezdefiniowany, z którym zostanie połączony$false
, więc$m
zacznie się jako$true
.$m
ma być mnożnikiem, który zawsze jest0
lub1
będzie używany później.$m
należy to tutaj ocenić, ponieważ chcemy, aby opierało się ono na wartości ostatniej iteracji$b
.$b
jest ustawiany-or
na wynik porównania iteratora$i
z$args[1]
(parametr indeksu). Oznacza to,$b
że zostanie ustawiony$true
tutaj, gdy będziemy na elemencie, który ma zostać zwiększony. Dodatkowo będzie się$true
pojawiał w każdej kolejnej iteracji, ponieważ warunek to-or
d bieżącą wartością.$b
jest 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..
.Zatem pierwsza iteracja, w której
$b
się pojawia$true
,$b
byłaby$false
wtedy, gdy$m
została oceniona,$m
zrównanie$true
, co utrzyma mnożnik na poziomie1
.Podczas tego przebiegu
$b
staje się$true
i jest dodawane do elementu wersji (as1
), zwiększając go, a ponieważ mnożnik jest nadal1
, będzie to wynik końcowy.Tak więc przy następnej iteracji
$b
będzie już$true
,$m
wyrównywanie$false
, co spowoduje, że mnożnik0
. Ponieważ na$b
zawsze będzie$true
teraz, mnożnik zawsze będzie0
, więc każdy zwrócony element również będzie0
.źródło
R,
100959286 bajtówNiezwykle 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.
źródło
05AB1E , 22 bajty
Wypróbuj online!
Nie wiem, jak zrobić if-else w 05AB1E, więc jest to dłuższe niż powinno być.
źródło
1.0.0.0.3, 3
powinieneś produkować .1.0.0.1.0
1.0.0.1.3
Skrypt kawy:
7767 bajtówWoot! Czas na ciasto i kawę do wersji beta.
Dzięki @ven i @Cyoce ogoliłem 10 bajtów!
źródło
.join '.'
Lub.split '.'
)+
zamiastparseInt
(użyj,~~
jeśli chcesz rzucić na liczbę całkowitą)Python 3,
8986 bajtówbardzo naiwny sposób na załatwienie sprawy
Edycja: przepisałem warunek, odwołując się do @kade
źródło
PHP, 81 bajtów
okropnie długo. Przynajmniej: Słoń wciąż bije Pythona.
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ą0
lub1
dla arytmetyki liczb całkowitych.źródło
JavaScript (ES6),
5755 bajtówPrzykłady:
Nie jest to najlepsza implementacja JS, ale jest dość prosta i postępuje zgodnie z logiką, której można się spodziewać.
źródło
Pyth - 21 bajtów
Pakiet testowy
źródło
10.0
przypadek testowy daje11.0.0
, to o jedną za dużo!PowerShell,
801009592 bajtówZapisano 5 bajtów, używając stałej dla
-1..if
Zapisano 3 bajty, używając
!$b
zamiast$b-eq0
Wyjaśnienie:
Przypadki testowe:
źródło
r
zamiastrandom
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łączenieGet-
do tego, czym jest. Więc faktycznie dzwoniszGet-Random
, ale technicznie nie jest to alias. Można zobaczyć tę pracę uruchamiającservice
lubchilditem
lub maksymalną ironiialias
.Cel C 531 bajtów
skompilować:
stosowanie:
źródło
0
zamiastNULL
i usunąćreturn 0;
na końcu głównego.NSString *s
prawdopodobnie może usunąć to miejsce.**argv
jest o 1 bajt krótszy niż*argv[]
.@autoreleasepool{}
jest prawdopodobnie niepotrzebne.JavaScript ES6: 60 bajtów
źródło
}
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:n
zaoszczędzić kilka bajtów.R, 75 bajtów
Indeksowanie jest oparte na 1. Możesz grać z nim online tutaj .
źródło
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).Wypróbuj online!
⍞
monit o wprowadzenie tekstu'.'⎕VFI
V 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źródło
Java 8, 130 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło
LiveScript,
5352 bajty-1 bajt dzięki tylko @ ASCII!
Stare objaśnienie:
Kolejna odpowiedź na pytanie ... W każdym razie nikt nie gra w LiveScript. : P
Pracowałem nad inną wersją:
Ale
*
jest zbyt przeciążony, aby można go było rozpoznać w indeksie splicingu, dlatego=0
spróbuje uzyskać dostęp0[0]
. Musisz więc napisać coś takiego,..[b to ..length- b]=[0]*(..length-1-b)
a na końcu jest już dłużej.źródło
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 :(if i<b then e else if i>b then 0 else+e+1
ie[+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
(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)])*\.
dla 52;
spacją. także ... wygląda na to, że jest to tak daleko, jak to będzie możliwe przy takim podejściuHaskell ,
136129 bajtówWypróbuj online!
Oryginalny
źródło