โปรดปล่อยฉัน!


34

ในฐานะนักกอล์ฟเราไม่คุ้นเคยกับการปล่อย ( แน่นอน ) เราจะต้องมีเครื่องมือสองสามอย่างเพื่อช่วยให้เราทำเช่นนั้น

แน่นอนว่าเพื่อช่วยทำการตลาดรุ่นใหม่เราจำเป็นต้องมีเวอร์ชั่นที่ดีและเป็นประกาย ใครไม่ตื่นเต้นเมื่อได้ยินเกี่ยวกับเวอร์ชัน 3.0.0

งาน

งานของคุณคือการเขียนโปรแกรม / กิจวัตร / ... เพื่อเพิ่มหมายเลขรุ่น

คุณต้องเพิ่มหมายเลขรุ่นและรีเซ็ต "สำคัญน้อยกว่า" (เช่นเวอร์ชันของโปรแกรมแก้ไข)

คุณจะได้รับสองอาร์กิวเมนต์: เวอร์ชันปัจจุบัน (เช่น "1.0.3") เป็นสตริงและดัชนีที่จะรู้ว่าจะอัปเดตใด (อัปเดต 0 หรือ 1 ดัชนี)

ตัวอย่างดัชนี 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

รุ่นนี้เป็นสตริงแต่ละส่วนเป็นตัวเลขคั่นด้วยจุด ต้องไม่มีการนำหน้าไม่มีการต่อท้ายหรือไม่มีจุดติดต่อกัน (และไม่มีสิ่งใดนอกเหนือจากตัวเลข / จุด) ไม่มีการ จำกัด ขนาดของสตริงรุ่น

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

กรณีข้อผิดพลาด (สองตัวอย่างสุดท้าย) คือพฤติกรรมที่ไม่ได้กำหนด จะเกิดอะไรขึ้นในกรณีที่ข้อมูลที่ป้อนผิดนั้นไม่มีความเกี่ยวข้องกับความท้าทายนี้

ตามปกติแล้วช่องโหว่มาตรฐานจะถูกห้าม คุณได้รับอนุญาตให้พิมพ์หรือส่งคืนสตริง


1
เราสามารถขอให้รับอินพุทเป็นดัชนีแรกแล้วตามด้วยหมายเลขเวอร์ชั่นได้หรือไม่?
ลีโอ

@ ใช่ใช่คำสั่งซื้อไม่เป็นปัญหา
Ven

ฉันอาจเพิ่มกรณีทดสอบสำหรับการเพิ่มจำนวนสุดท้ายในสตริงหรือตัวอย่างหรือสิ่งที่จะทดสอบ
nmjcman101

@ nmjcman101 เป็นกรณีพิเศษอย่างไร?
Ven

3
ฉันหวังว่าฉันจะสามารถทำสิ่งเดียวกันกับเงื่อนไขการชนะว่า "อ่านได้มากที่สุด" ดังนั้นใครบางคนจะเขียนสิ่งเหล่านี้เพื่อใช้ในการทำงานจริง =)
jpmc26

คำตอบ:


12

Japt, 16 11 ไบต์

¡V«´V+ÂX}'.

ทดสอบออนไลน์! หมายเลขอินพุตถูกทำดัชนี 1 ดัชนี

ตามคำตอบ JavaScript ของฉัน สิ่งนี้ใช้ประโยชน์จากหนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดของ Japtor: แยกสตริงหนึ่งต่อกันก่อนทำการแมปแต่ละไอเท็มจากนั้นเข้าร่วมกับสตริงนั้นอีกครั้งหลังจากทำแผนที่

Ungolfed และคำอธิบาย

¡  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
คุณสมบัติหวานแน่นอน!
Jonathan Allan

1
ฉันคิดว่าฉันมีมันอยู่ในกระเป๋า ขอโทษนะฉันจะไปครอบงำคำตอบ V ของฉันและบีบไบต์เล็ก ๆ น้อย ๆ ออกมา : P
DJMcMayhem

11

เป็นกลุ่ม20 25 ไบต์

ฉันโชคไม่ดีที่รู้ว่ามันไม่ได้จัดการกรณีของการอัปเดตตัวเลขล่าสุดดังนั้นฉันจึงต้องเพิ่มไบต์ นี่คือดัชนี 1

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

TryItOnline

Unprintables:

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

ใช้อาร์กิวเมนต์ในลำดับย้อนกลับเป็นบรรทัดแยก:

3
1.2.3.4.5

คำอธิบาย:

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
ดี! คำอธิบายจะเป็นประโยชน์
Kritixi Lithos

@KritixiLithos เพิ่มแล้ว น่าเสียดายที่ฉันต้องเพิ่มบางไบต์เพื่อจัดการกับการเพิ่มหมายเลขรุ่นสุดท้าย แต่มันเกิดขึ้น
nmjcman101

ฉันคิดว่าถ้าคุณทำดัชนี 0 คุณสามารถทำได้DJ@"t.<C-a>qq2wcw0<esc>@qq@qซึ่งกลับไปที่ยี่สิบ
DJMcMayhem

@DJMcMayhem ฉันไม่คิดว่าฉันจะทำอย่างนั้นเพราะแล้วฉันจะไม่สามารถแยกความแตกต่าง 0 และ 1
nmjcman101

1
โอ้ใช่แล้วจุดดี แล้วไงDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@qล่ะ
DJMcMayhem

11

JavaScript (ES6), 44 42 40 37 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @Neil

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

หมายเลขอินพุตถูกทำดัชนี 1 ดัชนี

ตัวอย่างการทดสอบ

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
ถูกตัดออก 44 ยังคงเป็น 44 :)
Kritixi Lithos

1
@KritixiLithos เบราว์เซอร์ของฉันเป็นอะไร cubeupload.com/im/ofJySU.png
Gustavo Rodrigues

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

@ Neil ขอบคุณ! ฉันไม่สามารถคิดออกว่าจะเล่นกอล์ฟว่าการแสดงออกใด ๆ ต่อไป ...
ETHproductions

10

V , 13 , 12 ไบต์

Àñf.ñò2wcw0

ลองออนไลน์!

นี่คือดัชนี 0

มีctrl-a(ASCII 0x01) อยู่ในนั้นดังนั้นนี่คือรุ่นที่อ่านได้:

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

คำอธิบาย:

À                   " '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 ไบต์

-2 ไบต์ขอบคุณ @Dada -3 ไบต์ขอบคุณความคิดที่ฉันได้รับจากการอ่านรหัส Japt ของ ETHproductions

วิ่งด้วย-pธง

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

ลองออนไลน์!

รายละเอียดของรหัส

-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

ลบวงเล็บเหล่านั้นทั้งสองข้างออก! (และ$&แทนที่จะเป็น$1ตอนนั้น)
Dada

ฉันรู้ว่าฉันพลาดบางสิ่ง! ขอบคุณ!
Gabriel Benamy

การใช้ตัวเลข 1 ดัชนีสามารถบันทึกได้ 4 ไบต์: ลองออนไลน์!
Xcali

5

เยลลี่ , 19 17 ไบต์

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

1 การจัดทำดัชนี

TryItOnline!

อย่างไร?

ṣ”.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 !!
Luis Mendo

อดใจรอ Jelly 2.0 ไม่ได้แล้วV€:)
Ven

@LuisMendo - ขอบคุณ! ฉันไม่ได้สังเกตเลย (เดนนิสสังเกตเห็นเหตุการณ์สำคัญ 1K ของฉันก่อนที่ฉันจะทำด้วย)
Jonathan Allan

5

MATLAB, 85 ไบต์

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

ความพยายามครั้งแรกและครั้งแรกที่กอล์ฟ!


ทำได้ดี! ครั้งแรกที่ฉันเห็นรูปแบบใหม่stringในการดำเนินการ :-)
Luis Mendo

5

C # 116 104 ไบต์

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

คำอธิบาย

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

ลองที่นี่


คุณไม่ต้องการstringและintในลายเซ็นของฟังก์ชั่นนิรนาม
TheLethalCoder

@TheLethalCoder อ่าใช่แน่นอนขอบคุณ
JustinM - Reinstate Monica

4

Python 2, 84 Bytes

ฉันรู้สึกว่าสิ่งนี้อาจสั้นกว่านี้จริง ๆ ... อาจต้องใช้วิธีที่มีตัวเลือกที่ไม่ระบุ

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

หากเราสามารถใช้เวอร์ชั่นเป็นรายการของสตริงมีวิธีแก้ปัญหา 75- ไบต์:

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

นอกจากนี้หากทั้งอินพุทและเอาท์พุทเป็นรายการตัวเลขก็จะมีวิธีแก้ปัญหาแบบ 64 ไบต์:

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

4

V 14 20 ไบต์

อีกครั้งฉันต้องเพิ่มรหัสสำหรับกรณีมุมของการเพิ่มหลักสุดท้าย (1 จัดทำดัชนี)

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

TryItOnline

Unprintables:

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

ใช้อาร์กิวเมนต์ในลำดับย้อนกลับเป็นบรรทัดแยก:

3
1.2.3.4.5

1
คำตอบที่ดี! ฉันมีความสุขเสมอที่เห็นคนอื่นใช้ V! เพียงแค่คุณรู้ว่าถ้าคุณใส่ข้อมูลแรกใน 'args' มันจะทำการลงทะเบียนล่วงหน้า 'a' ไปยังหมายเลขนั้นดังนั้นคุณสามารถทำได้@a(หรือสั้นกว่าÀ) ซึ่งจะช่วยให้คุณประหยัดได้ไม่น้อย
DJMcMayhem

4

แบตช์ 119 ไบต์

@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 การจัดทำดัชนี


4

Perl 6, 67 ไบต์, ดัชนี 0

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

คำอธิบาย:

->$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
เพียง FYI คำตอบด้วยตนเองทั้งหมดที่มีสิทธิ์ ในความเป็นจริงพวกเขายังได้รับการสนับสนุน
DJMcMayhem

@DJMcMayhem ผมรู้เกี่ยวกับเรื่องนี้ แต่ผมคิดว่าพวกเขาไม่ได้รับสิทธิ์
Ven

3

PowerShell 3+, 75 74 ไบต์

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

คำอธิบาย

พารามิเตอร์ได้รับการยอมรับโดยใช้$argsอาร์เรย์

  1. แยกสตริงเวอร์ชัน.ออกจากนั้นสำหรับแต่ละองค์ประกอบ:
    1. $m-not $bจะกำหนด ในการทำงานครั้งแรกที่$bจะได้รับการกำหนดซึ่งจะมีการรวมตัวกันไป$falseดังนั้นจะเริ่มต้น$m มีวัตถุประสงค์เพื่อเป็นตัวคูณที่เสมอหรือและจะใช้ในภายหลัง จะต้องได้รับการประเมินที่นี่เพราะเราต้องการที่จะอยู่บนพื้นฐานของการทำซ้ำที่ผ่านมาค่า$true$m01$m$b
    2. $bถูกตั้งค่า-orเป็นผลลัพธ์ของการเปรียบเทียบตัววนซ้ำ$iกับ$args[1](พารามิเตอร์ดัชนี) วิธีนี้$bจะถูกตั้งค่าไว้$trueที่นี่เมื่อเราอยู่ในองค์ประกอบที่จะเพิ่มขึ้น นอกจากนี้มันจะอยู่$trueในการวนซ้ำที่ตามมาทุกครั้งเนื่องจากเงื่อนไขคือ-or'd ที่มีค่าปัจจุบัน
    3. $bถูกแปลงเป็นตัวเลขโดยใช้ unary +( $false=> 0, $true=> 1) จากนั้นเพิ่มองค์ประกอบอิลิเมนต์ปัจจุบัน$_ซึ่งเป็น a [string]แต่ PowerShell พยายามรวมอาร์กิวเมนต์ทางด้านขวาให้เป็นประเภททางด้านซ้ายดังนั้นการคำนวณทางคณิตศาสตร์จะดำเนินการ ไม่ใช่การต่อสตริง จากนั้นค่านี้จะถูกคูณด้วย$mซึ่งยังคงอยู่[bool]แต่จะรวมเข้าด้วยกันโดยปริยาย
  2. เข้าร่วมอาร์เรย์ผลลัพธ์.อีกครั้งด้วย

ดังนั้นซ้ำแรกที่$bกลายเป็น$true, $bจะได้รับ$falseเมื่อ$mถูกประเมินทำให้$mเท่าเทียมกันซึ่งจะทำให้ตัวคูณที่$true1

ในระหว่างการรันนั้น$bจะ$trueถูกเพิ่มเข้าในองค์ประกอบเวอร์ชัน (ตาม1) ซึ่งจะเป็นการเพิ่มขึ้นและเนื่องจากตัวทวีคูณยังคง1เป็นผลลัพธ์สุดท้าย

ดังนั้นในการทำซ้ำต่อไป$bแล้วจะ$trueทำให้$mเท่าเทียมกันซึ่งจะทำให้ตัวคูณ$false 0เนื่องจาก$bจะเป็น$trueตอนนี้ตลอดไปตัวคูณจะเป็น0เช่นนี้เสมอดังนั้นองค์ประกอบทุกอย่างที่ส่งคืนจะเป็น0เช่นกัน


2

R, 100 95 92 86 ไบต์

สำหรับ R ที่ผิดปกติจะใช้การทำดัชนีแบบ 0 ฟังก์ชั่นไม่ระบุชื่อที่มีสองข้อโต้แย้ง (สตริงและจำนวนเต็ม) มีแนวโน้มที่จะสามารถเล่นกอล์ฟลงตาด

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

2

05AB1E , 22 ไบต์

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

ลองออนไลน์!

ฉันไม่รู้ว่าจะทำอย่างไรถ้าอย่างอื่นใน 05AB1E ดังนั้นนี่จึงนานเกินกว่าที่ควรจะเป็น


1
ถ้าฉันไม่เข้าใจผิดฉันไม่คิดว่ามันจะเป็นไปได้ คำถามที่ว่าคุณต้อง 0 ออกเล็กน้อยรุ่นดังนั้น1.0.0.0.3, 3ควรผลิตไม่ได้1.0.0.1.0 1.0.0.1.3
LambdaBeta

@LambdaBeta อ่านผิดแก้ไขแล้ว
Magic Octopus Urn

2

สคริปต์กาแฟ: 77 67 ไบต์

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

Woot! เวลาสำหรับเค้กและกาแฟสำหรับรุ่นเบต้า

ขอบคุณ @ven และ @Cyoce ฉันโกนได้ 10 ไบต์!


ดี! ไม่แน่ใจว่าคุณต้องการการแยกวิเคราะห์ที่นี่หรือไม่?
Ven

Btw คุณสามารถบันทึกไบต์ที่สองโดยใช้สาย parenless (เช่น.join '.'หรือ.split '.')
Ven

ใช้+แทนparseInt(ใช้~~ถ้าคุณต้องการให้แปลงเป็นจำนวนเต็ม)
Cyoce

2

Python 3, 89 86 ไบต์

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

วิธีที่ไร้เดียงสามากในการทำสิ่งต่าง ๆ

แก้ไข: เขียนเงื่อนไขใหม่โดยอ้างถึง @kade


2

PHP, 81 ไบต์

นานมาก อย่างน้อย: Elephpant ยังคงเต้น Python

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

วนซ้ำอาร์กิวเมนต์แรกที่แบ่งตามจุด: "."[!$i]ว่างเปล่าสำหรับจุดแรกและจุดสำหรับองค์ประกอบอื่น ๆ ($i<=$n)และ($i==$n)ถูกส่งไปยังค่าจำนวนเต็ม0หรือ1arithmetics จำนวนเต็มโดยปริยาย


2

JavaScript (ES6), 57 55 ไบต์

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

ตัวอย่าง:

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

ไม่ใช่การติดตั้ง JS ที่ดีที่สุด แต่ใช้งานง่ายและเป็นไปตามตรรกะที่คุณคาดหวัง


โอเคนั่นไม่ชัดเจนอย่างมากขอบคุณ
Florrie


1

Powershell, 80 100 95 92 ไบต์

บันทึก 5 ไบต์โดยใช้ const สำหรับ -1..if

บันทึก 3 ไบต์โดยใช้!$bแทน$b-eq0

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

คำอธิบาย:

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
}

กรณีทดสอบ:

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.

ดี! ฉันชอบที่จะเห็นพลังมากขึ้นที่นี่
นักเทศน์

@ Briantist รุ่น C # ที่ไม่มีน้ำหนักเบาอย่างแท้จริงซึ่งสามารถติดต่อกับทุกสิ่งได้เป็นสวรรค์ฉันจัดการกับ Microsoft หลายอย่างในที่ทำงานและรักมันอย่างแน่นอน
colsw

โอ้อย่างแน่นอน PowerShell เป็นรถแยมของฉัน แต่มีคนไม่มากที่คิดว่าจะใช้สำหรับเล่นกอล์ฟ มันมีคุณสมบัติบางอย่างที่ยอดเยี่ยมสำหรับการเล่นกอล์ฟและอื่น ๆ ที่ทำให้มันดูดสำหรับการเล่นกอล์ฟ แต่โดยรวมแล้วมันเป็นตัวเลือกที่ดี! ฉันเล่นด้วยความคิดในการนำเสนอเกี่ยวกับการเล่นกอล์ฟใน PowerShell ที่ PSUG ของฉันต่อไป
นักเทศน์

@ Briantist นามแฝงเริ่มต้นมีความสวยงาม แต่ฉันชอบที่จะสามารถใช้ชุดคำสั่งทั่วไปสองสามคำสั่งที่กำหนดไว้ล่วงหน้าเป็นชื่อแทนอักขระเดี่ยวสำหรับการเล่นกอล์ฟถ้าพูดว่ามันสามารถแข่งขันกับภาษากอล์ฟบางภาษาถ้าเราสามารถใช้rแทนrandom
colsw

สิ่งที่ตลกเกี่ยวกับrandomมันไม่ใช่นามแฝง! มันเป็นผลมาจากการประเมินคำสั่งของ PowerShell เนื่องจากดูเหมือนว่าจะพบคำสั่งในนามแฝง, ฟังก์ชั่น, cmdlets, แอปพลิเคชั่นพื้นเมือง ฯลฯ สิ่งสุดท้ายที่มันพยายามทำคือGet-การเติมสิ่งที่มันเป็น ดังนั้นคุณโทรGet-Randomมา แต่จริงๆแล้วไม่ใช่เทคนิคเป็นนามแฝง คุณสามารถดูการทำงานนี้โดยการวิ่งserviceหรือหรือประชดสูงสุดchilditem alias
นักเทศน์

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

รวบรวม:

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

การใช้งาน:

./main 1.2.3 1

ยินดีต้อนรับสู่ CodeGolf ในชื่อเรื่องคุณควรบอกขนาดของรหัสต้นฉบับไม่ใช่รหัสไบต์ และแน่นอนแหล่งที่มาควรสั้นที่สุดเท่าที่จะเป็นไปได้ (ไม่มีช่องว่างที่ไม่จำเป็นชื่อตัวแปรอักขระเดี่ยวเป็นต้น) โชคดี.
ติตัส

อาจใช้0แทนNULLและลบreturn 0;ส่วนท้ายของหลักได้ NSString *sอาจมีการลบพื้นที่ออก **argv1 *argv[]ไบต์สั้นกว่า @autoreleasepool{}อาจไม่จำเป็น
Ven

1

Javascript ES6: 60 ไบต์

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

2
ยินดีต้อนรับสู่ PPCG! สิ่งนี้ดูเหมือนจะไม่ถูกต้องเนื่องจากไม่มีการป้อนข้อมูล แต่อย่างใดและมีการเพิ่มพิเศษ}ในตอนท้าย ในการเล่นกอล์ฟ: หนึ่งในคุณสมบัติของฟังก์ชั่นลูกศรคือการส่งคืนโดยปริยายดังนั้นคุณสามารถแทนที่(n,r)=>{return r>i?n=0:n}ด้วย(n,r)=>r>i?n=0:nเพื่อบันทึกบางไบต์
ETHproductions

1

R, 75 ไบต์

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

การจัดทำดัชนีเป็นแบบ 1 คุณสามารถเล่นกับมันออนไลน์ที่นี่


1

APL (Dyalog) 31 ไบต์

ต้องการ⎕IO←0( I ndex O rigin 0) ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ ร่างกายโปรแกรมเต็ม แจ้งให้ป้อนข้อความ (เวอร์ชั่น) จากนั้นป้อนตัวเลข (ดัชนี)

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

ลองออนไลน์!

 พรอมต์สำหรับการป้อนข้อความ

'.'⎕VFIV erify และF ix I nput โดยใช้จุดเป็นตัวคั่นฟิลด์ (ความถูกต้องของฟิลด์, ค่าของฟิลด์)

 ย้อนกลับ (เพื่อใส่ค่าไว้ด้านหน้า)

 เลือกอันแรก (ค่า)

⎕(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้กับการใช้อินพุตที่ประเมินเป็นอาร์กิวเมนต์ซ้าย:

เพื่ออธิบายการเทียบเท่าแบบไม่มีนัยใด ๆ ของแต่ละแอปพลิเคชันฟังก์ชันตอนนี้เราจะใช้เพื่อระบุอาร์กิวเมนต์ซ้าย (ดัชนี) และเพื่อระบุอาร์กิวเมนต์ที่ถูกต้อง (รายการตัวเลขแต่ละตัวของหมายเลขรุ่นปัจจุบันที่ป้อนเข้ามาดั้งเดิม)

 เทียบเท่าเพื่อ  (⍺⊃⍵) ใช้เลือกองค์ประกอบจาก

1+ เพิ่มหนึ่งที่ 

↑, เทียบเท่ากับ  (⍺↑⍵), ย่อหน้าตัวเลขที่นำมาจาก

⊢∘≢↑ เท่ากับที่  (⍺⊢∘≢⍵)↑ จะ  (≢⍵)↑ ใช้เป็นจำนวนมากจากที่มีองค์ประกอบมาขยายด้วยศูนย์ถ้าจำเป็น

 รูปแบบ (stringify ที่มีช่องว่างระหว่างแต่ละหมายเลข)

' '⎕R'.' PCRE R eplace spaces กับจุด


1

Java 8, 130 ไบต์

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

คำอธิบาย:

ลองที่นี่

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 ไบต์

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

-1 ไบต์ต้องขอบคุณ @ ASCII เท่านั้น!

คำอธิบายเก่า:

(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

คำตอบด้วยตนเองอื่น ... ไม่ใช่ว่าทุกคนเล่นกอล์ฟใน LiveScript อยู่ดี : P

ฉันกำลังทำงานกับรุ่นอื่น:

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

แต่*มีมากเกินไปเกินไปที่จะได้รับการยอมรับในดัชนีประกบจึงจะพยายามที่จะเข้าถึง=0 0[0]ดังนั้นคุณต้องเขียนอะไรทำนองนี้..[b to ..length- b]=[0]*(..length-1-b)และมันก็จะจบลงในที่สุด


1
น่าเศร้าf=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.อีกต่อไป :(
ASCII- เท่านั้น

@ ASCII- เพียงฉันคิดว่าเป็นไปได้ที่จะบีบอัดif i<b then e else if i>b then 0 else+e+1เช่น[+e+1;0;e;e][i>b+(2*i<b)]หรือบางสิ่งบางอย่างตามเส้นเหล่านั้นอาจจะ([+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 เท่านั้นเท่านั้น

จากนั้นเราจะมาเอาลายเซ็น: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.52
Ven

btw คุณสามารถแทนที่;ด้วยช่องว่าง นอกจากนี้ ... ดูเหมือนว่าโดยทั่วไปจะไกลที่สุดเท่าที่จะเป็นไปได้ด้วยวิธีนี้
เฉพาะ ASCII เท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.