Xin vui lòng thả tôi!


34

Là người chơi gôn, chúng tôi không quen phát hành ( chắc chắn ). Chúng tôi sẽ cần một vài công cụ để giúp chúng tôi làm điều đó.

Tất nhiên, để giúp tiếp thị một bản phát hành mới, chúng tôi cần một Phiên bản phát hành đẹp và sáng bóng. Ai không cảm thấy phấn khích khi nghe về phiên bản 3.0.0?

Bài tập

Nhiệm vụ của bạn sẽ là viết một chương trình / thói quen / ... để tăng số phiên bản.

Bạn cần tăng số phiên bản và đặt lại những cái "ít quan trọng hơn" (tức là phiên bản vá).

Bạn nhận được hai đối số: phiên bản hiện tại (ví dụ "1.0.3") dưới dạng chuỗi và chỉ mục để biết nên cập nhật đối số nào (0 hoặc 1 được lập chỉ mục).

Ví dụ: 0 được lập chỉ mục:

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

Phiên bản là một chuỗi, mỗi phần là một số, được phân tách bằng dấu chấm. Không thể có dấu đầu, không có dấu hoặc không có dấu chấm liên tiếp (và không có gì ngoài số / dấu chấm). Không có giới hạn về kích thước của chuỗi phiên bản.

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

Trường hợp lỗi (hai ví dụ cuối) là hành vi không xác định. Điều gì xảy ra trong trường hợp đầu vào sai không liên quan đến thách thức này.

Như thường lệ, sơ hở tiêu chuẩn bị cấm. Bạn được phép in hoặc trả lại chuỗi.


1
Chúng tôi có thể yêu cầu nhận làm đầu vào đầu tiên chỉ mục và sau đó là số phiên bản không?
Leo

@Leo vâng, thứ tự không phải là vấn đề.
Ven

Tôi có thể thêm một trường hợp thử nghiệm để tăng số cuối cùng trong chuỗi hoặc một ví dụ hoặc thứ gì đó để kiểm tra.
nmjcman101

@ nmjcman101 là một trường hợp đặc biệt như thế nào?
Ven

3
Tôi ước tôi có thể thực hiện thử thách tương tự với điều kiện giành chiến thắng là "dễ đọc nhất" để ai đó sẽ viết những điều này cho tôi sử dụng trong công việc thực tế. =)
jpmc26

Câu trả lời:


12

Japt, 16 11 byte

¡V«´V+ÂX}'.

Kiểm tra nó trực tuyến! Số đầu vào là 1 chỉ mục.

Dựa trên câu trả lời JavaScript của tôi. Điều này tận dụng một trong những tính năng hữu ích nhất của Japt: tách một chuỗi trên chuỗi khác trước khi ánh xạ từng mục, sau đó nối lại chuỗi đó sau khi ánh xạ.

Ung dung và giải thích

¡  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

2
Một tính năng ngọt ngào thực sự!
Jonathan Allan

1
Vâng, tôi nghĩ rằng tôi đã có nó trong túi. Xin lỗi, tôi sẽ bị ám ảnh bởi câu trả lời V của mình và vắt kiệt từng byte nhỏ cuối cùng. : P
DJMcMayhem

11

Vim 20 25 byte

Tôi không may nhận ra rằng nó không xử lý trường hợp cập nhật số cuối cùng, vì vậy tôi phải thêm byte. Đây là 1 chỉ mục.

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

Dùng thử

Không thể in

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

Điều này nhận các đối số theo thứ tự ngược lại, như là các dòng riêng biệt:

3
1.2.3.4.5

Giải trình:

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

1
Tốt đẹp! Một lời giải thích sẽ hữu ích
Kritixi Lithos

@KritixiLithos Đã thêm. Thật không may, tôi đã phải thêm một số byte để xử lý tăng số phiên bản cuối cùng, nhưng nó đã xảy ra.
nmjcman101

Tôi nghĩ rằng nếu bạn đã đi 0 chỉ mục, bạn có thể làm điều DJ@"t.<C-a>qq2wcw0<esc>@qq@qđó trở lại xuống hai mươi
DJMcMayhem

@DJMcMayhem Tôi không nghĩ mình có thể làm điều đó bởi vì sau đó tôi sẽ không thể phân biệt 0 và 1.
nmjcman101 8/12/2016

1
Ồ vâng, điểm tốt. Thế còn DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem

11

JavaScript (ES6), 44 42 40 37 byte

Đã lưu 3 byte nhờ @Neil

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

Số đầu vào là 1 chỉ mục.

Kiểm tra đoạn

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


2
Vượt qua 44 vẫn là 44 :)
Kritixi Lithos

1
@KritixiLithos Có gì sai với trình duyệt của tôi? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues

n=>i&&+n+!--i
Neil

@Neil Cảm ơn! Tôi chỉ không thể tìm ra làm thế nào để chơi golf biểu hiện thêm nữa ...
ETHproductions 8/12/2016

10

V , 13 , 12 byte

Àñf.ñò2wcw0

Hãy thử trực tuyến!

Đây là 0 chỉ mục.

Có một ctrl-a(ASCII 0x01) trong đó, vì vậy đây là phiên bản có thể đọc được:

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

Giải trình:

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

7

Perl, 40 37 34 + 1 = 35 byte

-2 byte nhờ @Dada. -3 byte nhờ vào một ý tưởng tôi có được từ việc đọc mã Japt của @ ETHproductions.

Chạy với -pcờ.

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

Hãy thử trực tuyến!

Sự cố mã

-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

Loại bỏ tất cả các dấu ngoặc đơn ở cả hai bên! (và $&thay vì $1sau đó)
Dada

Tôi biết tôi đang thiếu một cái gì đó! Cảm ơn!
Gabriel Benamy

Sử dụng các số có 1 chỉ mục có thể tiết kiệm 4 byte: Hãy thử trực tuyến!
Xcali

5

Thạch , 19 17 byte

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

1 chỉ mục.

Dùng thử trực tuyến!

Làm sao?

ṣ”.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 '.'

3
Chúc mừng 10k !!
Luis Mendo

Không thể đợi Jelly 2.0 để bạn có thể thoát khỏi điều đó V€:).
Ven

@LuisMendo - cảm ơn! Tôi không quan tâm lắm (Dennis nhận thấy cột mốc 1K của tôi trước khi tôi cũng vậy).
Jonathan Allan

5

MATLAB, 85 byte

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

Một dựa trên, và nỗ lực đầu tiên tại golf!


Làm tốt! Lần đầu tiên tôi thấy stringloại hành động mới :-)
Luis Mendo

5

C # 116 104 byte

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

Giải trình

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

Hãy thử nó ở đây


Bạn không cần stringinttrong chữ ký hàm ẩn danh
TheLethalCoder

@TheLethalCoder ahh tất nhiên, cảm ơn.
JustinM - Phục hồi Monica

4

Python 2, 84 byte

Tôi cảm thấy như thế này thực sự có thể ngắn hơn .. Có thể cần một cách để có một lựa chọn không liệt kê.

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

Nếu chúng ta có thể lấy phiên bản làm danh sách các chuỗi, có một giải pháp 75 byte:

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

Hơn nữa, nếu cả đầu vào và đầu ra là danh sách các số, có một giải pháp 64 byte:

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

4

V 14 20 byte

Một lần nữa, tôi đã phải thêm mã cho trường hợp góc tăng chữ số cuối cùng. (1 chỉ mục)

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

Dùng thử

Không thể in

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

Điều này nhận các đối số theo thứ tự ngược lại, như là các dòng riêng biệt:

3
1.2.3.4.5

1
Câu trả lời tốt đẹp! Tôi luôn vui khi thấy người khác sử dụng V! Để bạn biết, nếu bạn đặt đầu vào đầu tiên vào 'args', nó sẽ xác định trước đăng ký 'a' cho số đó, do đó bạn có thể làm @a(hoặc thậm chí ngắn hơn À) để tiết kiệm cho bạn một loạt byte.
DJMcMayhem

4

Mẻ, 119 byte

@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 chỉ mục.


4

Perl 6, 67 byte, 0-index

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

Giải trình:

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

3
Chỉ cần fyi, tự trả lời là hoàn toàn đủ điều kiện. Trên thực tế, họ thậm chí còn được khuyến khích
DJMcMayhem

@DJMcMayhem Tôi biết về điều này, nhưng tôi nghĩ họ không đủ điều kiện
Ven

3

PowerShell 3+, 75 74 byte

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

Bị đánh cắp

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

Giải trình

Các tham số được chấp nhận bằng cách sử dụng $args mảng.

  1. Tách chuỗi phiên bản trên . , sau đó cho từng thành phần:
    1. $mđược thiết lập để được -not $b. Trong lần chạy đầu tiên, $bsẽ không được xác định sẽ được kết hợp lại $false, vì vậy $msẽ bắt đầu như $true. $mđược dự định là một số nhân luôn luôn 0hoặc 1nó sẽ được sử dụng sau này.$mphải được đánh giá ở đây vì chúng tôi muốn nó được dựa trên $bgiá trị lặp lại cuối cùng .
    2. $bđược đặt thành chính -orkết quả của việc so sánh một trình vòng lặp $ivới $args[1](tham số chỉ mục). Điều này có nghĩa là $bsẽ được đặt $trueở đây một khi chúng ta đang ở trên phần tử sẽ được tăng lên. Ngoài ra, nó sẽ là$true trong mỗi lần lặp tiếp theo vì điều kiện là -or'd với giá trị hiện tại của nó.
    3. $bđược chuyển đổi thành một số bằng cách sử dụng unary +( $false=> 0, $true=> 1), sau đó được thêm vào phần tử phiên bản hiện tại $_là một [string], nhưng PowerShell luôn cố gắng kết hợp đối số ở bên phải sang loại bên trái, do đó số học sẽ được thực hiện, không nối chuỗi. Sau đó, giá trị này sẽ được nhân với $m, vẫn còn [bool]nhưng sẽ được kết hợp ngầm.
  2. Tham gia lại mảng kết quả với ..

Vì vậy, lần lặp đầu tiên $btrở thành $true, $bsẽ là $falsekhi $mđược đánh giá, làm cho $mbằng nhau $true, sẽ giữ cho số nhân ở 1.

Trong quá trình chạy đó $btrở thành $truevà được thêm vào phần tử phiên bản (như 1), do đó tăng nó và vì số nhân vẫn còn 1, đó sẽ là kết quả cuối cùng.

Vì vậy, ở lần lặp tiếp theo, $bsẽ là $true, làm cho $mbằng nhau $false, sẽ làm cho số nhân 0. Vì $bsẽ mãi mãi là $truebây giờ, số nhân sẽ luôn 0như vậy, vì vậy mọi yếu tố được trả về cũng sẽ như 0vậy.


2

R, 100 95 92 86 byte

Bất thường đối với R, điều này sử dụng lập chỉ mục 0. Hàm ẩn danh với hai đối số (một chuỗi và một số nguyên). Có khả năng có thể được đánh golf xuống một chút.

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

2

05AB1E , 22 byte

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

Hãy thử trực tuyến!

Tôi không biết làm thế nào nếu khác trong 05AB1E, vì vậy thời gian này dài hơn mức cần thiết.


1
Nếu tôi không hiểu lầm, tôi không nghĩ rằng nó hoạt động. Câu hỏi đặt ra cho biết bạn phải 0-ra phiên bản nhỏ, vì vậy 1.0.0.0.3, 3nên sản xuất 1.0.0.1.0không 1.0.0.1.3.
LambdaBeta

@LambdaBeta đọc sai, đã sửa.
Bạch tuộc ma thuật Urn

2

Cà phê-script: 77 67 Byte

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

Khốn nạn! Thời gian cho bánh và cà phê cho phiên bản beta.

Cảm ơn @ven và @Cyoce, tôi đã cạo được 10 byte!


Tốt đẹp! Không chắc chắn bạn cần parseInt ở đây?
Ven

Btw bạn có thể lưu hai byte bằng cách sử dụng các cuộc gọi vô nghĩa (tức là .join '.'hoặc .split '.')
Ven

Sử dụng +thay vì parseInt(sử dụng ~~nếu bạn cần chuyển thành số nguyên)
Cyoce

2

Python 3, 89 86 byte

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

cách rất ngây thơ để hoàn thành công việc

Chỉnh sửa: viết lại điều kiện bằng cách tham khảo @kade


2

PHP, 81 byte

dài khủng khiếp Ít nhất: Voi vẫn đánh bại Python.

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

các vòng lặp thông qua đối số đầu tiên được phân chia bởi các dấu chấm: "."[!$i]trống cho đầu tiên và một dấu chấm cho mọi phần tử khác; ($i<=$n)($i==$n)được mặc định chuyển thành số nguyên 0hoặc 1cho số học số nguyên.


2

JavaScript (ES6), 57 55 byte

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

Ví dụ:

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

Không phải là triển khai JS tốt nhất nhưng nó khá đơn giản và tuân theo logic bạn mong đợi.


Được rồi, điều đó không rõ ràng khủng khiếp, cảm ơn.
Florrie

1

Pyth - 21 byte

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

Phòng thử nghiệm


3
Không, điều này không hoàn toàn chính xác. 10.0Trường hợp thử nghiệm của bạn cho 11.0.0, đó là một phần quá nhiều!
Ven

1

Powershell, 80 100 95 92 Byte

Đã lưu 5 byte bằng cách sử dụng const cho -1..if

Đã lưu 3 byte bằng cách sử dụng !$bthay vì$b-eq0

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

Giải trình:

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
}

Các trường hợp thử nghiệm:

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.

Tốt đẹp! Tôi thích nhìn thấy nhiều quyền hạn hơn ở đây.
briantist

@briantist thực sự là một phiên bản C # không biên dịch nhẹ có thể giao tiếp với mọi thứ là một ơn trời, tôi xử lý rất nhiều thứ của Microsoft tại nơi làm việc và hoàn toàn thích nó.
colsw

Oh hoàn toàn; PowerShell là mứt của tôi, nhưng không nhiều người nghĩ sử dụng nó để chơi gôn. Nó có một số tính năng tuyệt vời để chơi gôn và những tính năng khác khiến nó trở nên hấp dẫn khi chơi golf, nhưng nhìn chung đó là một lựa chọn vững chắc! Tôi đang chơi với ý tưởng làm một bài thuyết trình về việc chơi golf trong PowerShell tại PSUG tiếp theo của tôi.
briantist

@briantist các bí danh mặc định rất đẹp, nhưng tôi rất thích có thể sử dụng một tập hợp các lệnh phổ biến được xác định trước như một bí danh char đơn lẻ để chơi golf, nếu nói nó có thể cạnh tranh với một số ngôn ngữ chơi golf thực tế nếu chúng ta có thể sử dụng rthay vìrandom
colsw

Điều thú vị về random, nó không phải là bí danh! Đó là kết quả của việc đánh giá lệnh của PowerShell. Vì có vẻ như tìm thấy một lệnh trong bí danh, hàm, lệnh ghép ngắn, ứng dụng gốc, v.v., điều cuối cùng mà nó cố gắng làm là chuẩn bị Get-cho bất cứ điều gì. Vì vậy, bạn thực sự đang gọi Get-Random, nhưng về mặt kỹ thuật không phải là bí danh. Bạn có thể thấy điều này hoạt động bằng cách chạy service, hoặc childitem, hoặc trớ trêu tối đa , alias.
briantist

1

Mục tiêu-C 531 byte

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

biên dịch:

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

sử dụng:

./main 1.2.3 1

Chào mừng đến với CodeGolf. Trong tiêu đề, Bạn nên cho biết kích thước của mã nguồn, không phải mã byte. Và tất nhiên, nguồn nên càng ngắn càng tốt (không có khoảng trắng không cần thiết, tên biến ký tự đơn, v.v.). Chúc may mắn.
Tít

có thể có thể sử dụng 0thay vì NULLvà loại bỏ return 0;ở cuối của chính. NSString *scó thể có không gian được loại bỏ. **argvngắn hơn 1 byte so với *argv[]. @autoreleasepool{}có lẽ là không cần thiết
Ven

1

Javascript ES6: 60 byte

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}

2
Chào mừng đến với PPCG! Điều này dường như không hợp lệ, vì nó không nhận đầu vào theo bất kỳ cách nào và có thêm một }phần cuối. Khi chơi gôn: một trong những tính năng của các hàm mũi tên là trả về ngầm, vì vậy bạn có thể thay thế (n,r)=>{return r>i?n=0:n}bằng (n,r)=>r>i?n=0:nđể lưu một số byte.
Sản phẩm ETH

1

R, 75 byte

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

Lập chỉ mục là 1 dựa trên. Bạn có thể chơi với nó trực tuyến ở đây .


1

APL (Dyalog) , 31 byte

Yêu cầu ⎕IO←0( I ndex O rigin 0), được mặc định trên nhiều hệ thống. Chương trình toàn thân; lời nhắc cho nhập văn bản (phiên bản) và sau đó nhập số (chỉ mục).

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

Hãy thử trực tuyến!

 nhắc nhập văn bản

'.'⎕VFIV erify và F ix I nput sử dụng dấu chấm làm dấu tách trường (giá trị của trường, giá trị của trường)

 đảo ngược (để đặt các giá trị ở phía trước)

 chọn đầu tiên (các giá trị)

⎕(... ) áp dụng hàm ngầm định sau cho điều đó, sử dụng đầu vào được đánh giá làm đối số bên trái:

Để giải thích các tương đương không ngầm của mỗi ứng dụng hàm, bây giờ chúng ta sẽ sử dụng để chỉ ra đối số bên trái (chỉ mục) và để chỉ ra đối số bên phải (danh sách các số riêng lẻ của số phiên bản hiện tại được nhập ban đầu).

 tương đương với việc  (⍺⊃⍵) sử dụng để chọn một yếu tố từ

1+ thêm một vào đó 

↑, tương đương với  số lượng trả (⍺↑⍵), trước lấy từ

⊢∘≢↑ tương đương với  (⍺⊢∘≢⍵)↑ tương đương để  (≢⍵)↑ lấy bao nhiêu số từ đó vì có các phần tử trong , đệm bằng số không nếu cần thiết

 định dạng (xâu chuỗi với một khoảng trắng giữa mỗi số)

' '⎕R'.' PCRE R không gian nơi có dấu chấm


1

Java 8, 130 byte

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

Giải trình:

Hãy thử nó ở đây.

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

1

LiveScript, 53 52 byte

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

-1 byte chỉ nhờ @ ASCII!

Giải thích cũ:

(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

Một câu trả lời khác ... Không phải ai cũng chơi golf trong LiveScript. : P

Tôi đã làm việc trên một phiên bản khác:

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

Nhưng *quá tải để được nhận ra trong một chỉ mục nối, do đó =0sẽ cố gắng truy cập 0[0]. Vì vậy, bạn cần phải viết một cái gì đó như thế ..[b to ..length- b]=[0]*(..length-1-b)và cuối cùng nó dài hơn.


1
thật đáng buồn f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.là còn lâu hơn :(
ASCII - chỉ

Chỉ có ASCII Tôi nghĩ rằng có thể nén if i<b then e else if i>b then 0 else+e+1theo nghĩa là [+e+1;0;e;e][i>b+(2*i<b)]hoặc một cái gì đó dọc theo các dòng đó, thậm chí có thể([+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
ASCII - chỉ

Sau đó, hãy xóa chữ ký: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.cho 52
Ven

btw bạn có thể thay thế ;bằng không gian. cũng ... có vẻ như về cơ bản là đi xa như nó sẽ đi theo cách tiếp cận này
ASCII - chỉ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.