Lütfen beni bırak!


34

Code-golfçüler olarak, serbest bırakılmaya alışkın değiliz ( elbette ). Bunu yapmamıza yardımcı olacak birkaç araca ihtiyacımız olacak.

Elbette, yeni bir sürümün pazarlanmasına yardımcı olmak için, güzel ve parlak bir Sürüm Sürümü'ne ihtiyacımız var. 3.0.0 sürümünü duyduklarında kim heyecanlanmaz?

Görev

Göreviniz sürüm numarasını artırmak için bir program / rutin / ... yazmak olacaktır.

Sürüm numarasını artırmanız ve "daha az önemli" olanları sıfırlamanız gerekir (örneğin, düzeltme eki sürümü).

İki argüman alırsınız: bir dize olarak mevcut sürüm (örneğin "1.0.3") ve hangisinin güncelleneceğini bilen bir dizin (0 veya 1 dizine alınmış).

Örnek, 0 indeksli:

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

Sürüm bir dizedir, her bölüm bir noktayla ayrılmış bir sayıdır. Öncü, iz veya ardışık noktalar olmayabilir (ve sayıların / noktaların dışında hiçbir şey olamaz). Sürüm dizesinin boyutunda sınır yoktur.

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

Hata durumu (son iki örnek) tanımsız davranış. Yanlış girdi olması durumunda ne olacağı, bu zorlukla hiçbir ilgisi yoktur.

Her zaman olduğu gibi standart boşluklar yasaktır. Dizeyi yazdırmanıza veya geri vermenize izin verilir.


1
Önce indeksi sonra da sürüm numarasını girdi olarak alabilir miyiz?
Leo,

@Leo evet, sipariş sorun değil.
Ven

Dizedeki son sayıyı artırmak için bir test durumu veya bir örnek veya test edilecek bir şey ekleyebilirim.
nmjcman101

@ nmjcman101 nasıl özel bir durumdur?
Ven

3
Keşke kazanma koşulu ile “en okunaklı” olarak aynı mücadeleyi yapabilseydim, bu yüzden birisi bunları gerçek işlerde kullanmam için yazacaktı. =)
jpmc26

Yanıtlar:


12

Japt, 16 11 bayt

¡V«´V+ÂX}'.

Çevrimiçi test edin! Giriş numarası 1 indekslidir.

JavaScript cevabıma dayanarak. Bu, Japt'ın en yararlı özelliklerinden birini kullanmaktadır: her öğeyi eşleştirmeden önce bir dize diğerine bölmek, daha sonra eşleştirmeden sonra o dizeye tekrar katılmak.

Ungolfed ve açıklama

¡  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
Gerçekten tatlı bir özellik!
Jonathan Allan,

1
Drat, çantamda olduğunu sanıyordum. Affedersiniz, V cevabımı saplantılığa sokacağım ve her küçük baytı sıkacağım. : P
DJMcMayhem

11

Vim 20 25 bayt

Maalesef son sayının güncellenmesi durumunun işe yaramadığını anladım, bu yüzden bayt eklemek zorunda kaldım. Bu 1 indeksli.

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

TryItOnline

Unprintables:

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

Bu argümanları ters sırada, ayrı satırlar olarak alır:

3
1.2.3.4.5

Açıklama:

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
Güzel! Bir açıklama faydalı olacaktır
Kritixi Lithos

@KritixiLithos Eklendi. Maalesef, son sürüm numarasını artırmak için de bazı baytlar eklemek zorunda kaldım, ancak oluyor.
nmjcman101

Sanırım 0 indeksli olsaydın DJ@"t.<C-a>qq2wcw0<esc>@qq@q, yirmi
yaşına kadar olanları yapabilirsin

@DJMcMayhem Bunu yapabileceğimi sanmıyorum çünkü o zaman 0 ve 1'i
ayırt edemem

1
Evet, iyi nokta. Ne dersiniz DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem

11

JavaScript (ES6), 44 42 40 37 bayt

@Neil sayesinde 3 bayt kaydedildi

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

Giriş numarası 1 indekslidir.

Test pasajı

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
Geçti 44 hala 44
yaşında

1
@KritixiLithos Tarayıcımda yanlış olan ne? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues

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

@Neil Teşekkürler! Bu ifadeyi nasıl daha fazla golf
oynayabileceğimi bilemedim

10

V , 13 , 12 bayt

Àñf.ñò2wcw0

Çevrimiçi deneyin!

Bu 0 indeksli.

Orada bir ctrl-a(ASCII 0x01) var, işte okunabilir bir versiyon:

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

Açıklama:

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

@Dada sayesinde -2 bayt. @ ETHproductions'un Japt kodunu okumaktan aldığım bir fikir sayesinde -3 bayt.

-pBayrakla koş .

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

Çevrimiçi deneyin!

Kodun Dağılı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

Her iki taraftaki tüm parantezleri kaldırın! (ve o zaman $&yerine $1)
Dada

Bir şeyleri özlediğimi biliyordum! Teşekkürler!
Gabriel Benamy,

1 indeksli sayıları kullanmak 4 bayt tasarruf edebilir: Çevrimiçi deneyin!
Xcali

5

Jöle , 19 17 bayt

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

1 endeksli.

TryItOnline!

Nasıl?

ṣ”.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
10k için tebrikler !!
Luis Mendo

Jelly 2.0 için sabırsızlanıyorum bu yüzden ondan kurtulmak için V€:).
Ven

@LuisMendo - teşekkürler! Çok göze çarpmayan biriyim (Dennis de ondan önce 1K dönüm noktamı fark etmişti).
Jonathan Allan,

5

MATLAB, 85 bayt

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

Biri merkezli ve ilk golf denemesi!


Aferin! İlk seferinde yeni stringtürünü
çalışırken

5

C # 116 104 Bayt

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

açıklama

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

Burada dene


Anonim işlev imzasında stringve int
simgesine

@TheLethalCoder ahh elbette evet, teşekkürler.
JustinM - Monica

4

Python 2, 84 Bayt

Bunun gerçekten daha kısa olabileceğini düşünüyorum .. Numaralandırılmamış bir seçeneğe sahip olmak için bir yol gerekebilir.

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

Sürümü bir dizge listesi olarak alabilseydik, 75 baytlık bir çözüm var:

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

Ayrıca, hem giriş hem de çıkış sayılar listesi ise, 64 baytlık bir çözüm vardır:

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

4

V 14 20 bayt

Yine, son basamağın artırılmasının köşe durumuna kod eklemek zorunda kaldım. (1 endeksli)

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

TryItOnline

Unprintables:

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

Bu argümanları ters sırada, ayrı satırlar olarak alır:

3
1.2.3.4.5

1
Güzel cevap! Başka birinin V kullandığını görmek beni her zaman mutlu eder! Sadece, bildiğiniz gibi, eğer ilk girdiyi 'args' içine koyarsanız, 'a' sicilini bu numaraya önceden tanımlayacaktır , böylece bir demet bayt kurtaracak olan @a(ya da daha kısa À) yapabilirdiniz.
DJMcMayhem

4

Toplu, 119 bayt

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


4

Perl 6, 67 bayt, 0 dizinli

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

Açıklama:

->$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
Sadece dostum, öz cevaplar tamamen uygun. Aslında, onlar bile teşvik
ediliyor

@DJMcMayhem Bunu biliyordum ama uygun olmadıklarını düşündüm
Ven

3

PowerShell 3+, 75 74 bayt

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

açıklama

Parametreler $argsdizi kullanılarak kabul edilir .

  1. Sürüm dizesini açık olarak ., ardından her bir öğe için bölün :
    1. $molarak ayarlandı -not $b. İlk çalıştırmada, $btanımlanacak olan ve birleştirilecek olan $false, $molduğu gibi başlayacaktır $true. $mher zaman olan 0veya 1daha sonra kullanılacak olan bir çarpan olması amaçlanmıştır . $mBurada değerlendirilmeliyiz çünkü son yinelemenin $bdeğerine dayanmasını istiyoruz .
    2. $b-orBir yineleyiciyi (index parametresi) $iile karşılaştırmanın sonucu olarak ayarlanır $args[1]. Bu , arttırılacak olan elementin üzerine geldiğimizde buraya $bayarlanacak demektir $true. Ek olarak, $truekoşullu -ordeğer şu anki değeriyle olduğu için sonraki her yinede olacaktır .
    3. $btekli kullanarak bir sayıya dönüştürülür +( $false=> 0, $true=> 1), sonra güncel sürümü elemana eklenen $_bir olduğunu [string], yapılacak o kadar aritmetik ama PowerShell her zaman sol tarafta türüne sağdaki argüman coalesce etmeye çalışır, dize bitiştirme değil. Ardından bu değer $mhala çarpılacak [bool]ancak örtük olarak birleştirilecek olanla çarpılacaktır .
  2. Sonuçtaki diziyi ile yeniden birleştirin ..

Yani, ilk yineleme $bolur $true, $bolurdu $falsezaman $myapım değerlendirildi $meşit $trueolarak çarpanı tutacak olan 1.

Bu çalıştırma , sürüm elemanına (as ) $bdönüşür $trueve eklenir 1, böylece artırılır ve çarpan hala olduğundan 1, bu sonuç ortaya çıkar.

Böylece, bir sonraki yinelemede, $bzaten çarpan yapacak, eşit $trueyaparak olacak . Yana sonsuza olacak şimdi, çarpan her zaman olacaktır döndürülen her unsuru olacak, böylece de.$m$false0$b$true00


2

R, 100 95 92 86 bayt

Normalde R için bu 0 indeksleme kullanır. İki bağımsız değişken içeren bir anonim işlev (bir dize ve bir tam sayı). Muhtemelen biraz aşağı golf edilebilir.

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

2

05AB1E , 22 bayt

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

Çevrimiçi deneyin!

05AB1E'de if-else yapmalı bilmiyorum, bu yüzden olması gerekenden daha uzun.


1
Yanlış anlamadıysam, bunun işe yaradığını sanmıyorum. Soru 0 aşımı alt sürümleri, böylece Sizin diyor 1.0.0.0.3, 3üretmelidir 1.0.0.1.0değil 1.0.0.1.3.
LambdaBeta

@LambdaBeta yanlış okunuyor, düzeltildi.
Sihirli Ahtapot Urn

2

Kahve senaryosu: 77 67 Bayt

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

Woot! Beta sürümü için pasta ve kahve zamanı.

@Ven ve @Cyoce sayesinde 10 byte'ı tıraş ettim!


Güzel! Burada ayrıştırıcıya ihtiyacınız olduğundan emin değil misiniz?
Ven

Btw Eğer parenless çağrıları kullanarak (ie iki bayt kaydedebilir .join '.'ya .split '.')
Ven

+Bunun yerine kullanın parseInt( ~~tamsayıya dönüştürülmesi gerekiyorsa kullanın )
Cyoce

2

Python 3, 89 86 bayt

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

işleri halletmenin çok saf yolu

Düzenleme: Koşulları @kade yazarak yeniden yazıldı.


2

PHP, 81 bayt

çok uzun. En azından: Elephpant hala Python'u yeniyor.

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

noktalara bölünerek ilk argüman boyunca döngüler: "."[!$i]birincisi boş, diğer her öğe için bir nokta; ($i<=$n)ve ($i==$n)dolaylı olarak tamsayıya 0veya 1tamsayı aritmetik için kullanılır.


2

JavaScript (ES6), 57 55 bayt

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

Örnekler:

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

En iyi JS uygulaması değil, ancak oldukça basit ve beklediğiniz mantığı izler.


Tamam, bu çok net değildi, teşekkürler.
Florrie

1

Pyth - 21 bayt

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

Test odası


3
Hayır, bu doğru değil. Kişisel 10.0test durumu verir 11.0.0, bu bir çok parçası!
Ven

1

Powershell, 80 100 95 92 Bayt

Bir const kullanarak 5 byte kaydedildi -1..if

Kullanılarak 3 bayt Kaydedilen !$byerine$b-eq0

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

Açıklama:

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
}

Test Durumları:

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.

Güzel! Burada daha fazla powershell görmeyi seviyorum.
briantist

dürüst olmak gerekirse, briantist dürüst, her şeyle etkileşime girebilen C # basit bir derleme sürümü bir nimettir, işte bir sürü Microsoft işiyle uğraşıyorum ve kesinlikle seviyorum.
colsw

Ah kesinlikle; PowerShell benim reçelimdir, fakat pek çok insan bunu golf oynamak için kullanmayı düşünmez. Golf oynamak için harika, bazılarını golf oynamak için emen bazı özelliklere sahip, ancak genel olarak sağlam bir seçim! Bir sonraki PSUG'da PowerShell'de golf oynama hakkında bir sunum yapma fikriyle oynuyorum.
briantist

briantist, varsayılan takma adlar güzeldir, ancak bazı gerçek golf dilleriyle rekabet edebilecekse, golf oynamak için tek bir takma ad olarak önceden tanımlanmış birkaç komuttan birini kullanabilmeyi çok isterdim. ryerinerandom
colsw

Komik olan şey random, takma ad değil! PowerShell'in komut değerlendirmesinin bir sonucu. Diğer adlarda, işlevlerde, cmdlet'lerde, yerel uygulamalarda vb. Bir komut bulmak için göründüğü gibi, yapmaya çalıştığı en son şey Get-ne olursa olsun hazırlamaktır. Demek gerçekten arıyorsunGet-Random , ama teknik olarak bir takma isim değil. Bu çalışmayı çalıştırarak serviceveya childitemveya maksimum ironi için görebilirsiniz alias.
briantist

1

Amaç-C 531 Bayt

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

derlemek:

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

kullanımı:

./main 1.2.3 1

CodeGolf'a hoş geldiniz. Başlıkta, kaynak kodun boyutunu, bayt kodunu söylemelisiniz. Ve kaynak, elbette, mümkün olduğunca kısa olmalıdır (gereksiz boşluk, tek karakterli değişken adları vb.). İyi şanslar.
Titus,

Muhtemelen 0yerine sonunda kullanabilir ve ana sonunda NULLçıkarın return 0;. NSString *sMuhtemelen alan kaldırılmış olabilir. **argv1 bayttan daha kısa *argv[]. @autoreleasepool{}Muhtemelen gereksizdir.
Ven

1

Javascript ES6: 60 bayt

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

2
PPCG'ye Hoşgeldiniz! Bu herhangi bir şekilde girdi almadığı için geçerli görünmüyor }ve sonunda bir fazlalık var . Golf oynamakta: ok işlevlerinin özelliklerinden biri örtük iadedir, bu nedenle bazı baytları kaydetmek için (n,r)=>{return r>i?n=0:n}ile değiştirebilirsiniz (n,r)=>r>i?n=0:n.
ETHProductions

1

R, 75 bayt

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

Endeksleme 1 tabanlıdır. Burada çevrimiçi olarak oynayabilirsiniz .


1

APL (Dyalog) , 31 bayt

Birçok sistemde varsayılan olan gerektirir ⎕IO←0( I ndex O rigin 0). Tam program gövdesi; metin girişi (sürüm) ve ardından sayısal giriş (dizin) ister.

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

Çevrimiçi deneyin!

 metin girişi istemi

'.'⎕VFIV erify ve F ix I alan ayırıcı olarak kullanım süresini Temel giriş (alanlar geçerlilikleri, alanlar değerleri)

 geriye doğru (değerleri öne koymak için)

 ilkini seç (değerler)

⎕(...)  değerlendirilen girişi sol argüman olarak kullanarak, aşağıdaki tacit işlevini uygulayın:

Her bir fonksiyon uygulamasının örtüşmeyen eşdeğerlerini açıklamak için şimdi sol argümanı (indeks) ve doğru argümanı (başlangıçta girilen güncel sürüm numarasının tekil numaralarının listesi ) belirtmek için kullanacağız.

öğesinden birini seçmek  için (⍺⊃⍵) kullanılacak eşdeğer 

1+ buna bir tane ekle 

↑, eşdeğer  (⍺↑⍵), başa getirebilir alınan sayılar

⊢∘≢↑ İçerisinde  elemanların olduğu kadar sayının alınması için  (⍺⊢∘≢⍵)↑ eşdeğerde olması  , gerekirse sıfırların (≢⍵)↑doldurulması

 format (her sayı arasında bir boşluk bırakılarak)

' '⎕R'.' PCRE R dönemleri olan eplace uzayları


1

Java 8, 130 bayt

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

Açıklama:

Burada dene.

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 bayt

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

Sadece @ ASCII-1 sayesinde bayt!

Eski Açıklama:

(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

Başka bir kendi kendine cevap ... Kimse LiveScript'te golf oynamaz. : P

Başka bir sürüm üzerinde çalışıyordum:

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

Ancak *bir ekleme indeksinde tanınmayacak kadar aşırı yüklendiğinden, =0erişmeye çalışacaktır 0[0]. Öyleyse gibi bir şeyler yazmalısın ..[b to ..length- b]=[0]*(..length-1-b)ve sonunda daha uzun.


1
ne yazık ki f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.çok daha uzun :(
ASCII-sadece

@ ASCII-sadece if i<b then e else if i>b then 0 else+e+1, yani [+e+1;0;e;e][i>b+(2*i<b)]belki de hatta bu satırlar boyunca bir şey sıkıştırmak mümkün olduğunu düşünüyorum([+e;-1][i>b+(2*i<b)]||e-1)+1
Ven 11:08

(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\., 54
ASCII-sadece

O zaman imzayı kaldıralım: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.52
Ven

btw ;ile boşluk kullanabilirsiniz. Ayrıca ... temelde bu yaklaşıma kadar gideceği kadar basit görünüyor
ASCII-only

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.