PowerShell, 154 , 152 , 99 , 86 byte
Cảm ơn bạn @TimmyD vì đã tiết kiệm cho tôi một con số khổng lồ 47 byte (tôi cũng đã lưu thêm 6)
Cảm ơn bạn @TessellatingHeckler vì đã lưu thêm 13 byte.
Muộn nhất:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
Nguyên:
param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''
Định dạng bình thường:
Mới nhất (có vẻ tốt nhất là hai dòng theo ý kiến của tôi):
param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})
Giải trình:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
param($a)
# Sets the first passed parameter to variable $a
-join( )
# Converts a char array to a string
$a[$a.length..0]
# Reverses $a as a char array
|%{ }
# Shorthand pipe to foreach loop
("$_".ToLower(),"$_".ToUpper())
# Creates an array of the looped char in lower and upper cases
[$a[$i++]-in65..90]
# Resolves to 1 if the current index of $a is upper, which would output "$_".ToUpper() which is index 1 of the previous array
Nguyên:
param($a)
$x = 0
(($a[-1..-$a.length]) | %{
$_ = $_.tostring().tolower()
if([regex]::matches($a,"[A-Z]").index -contains $x){
$_.toupper()
}else{
$_
}
$x++
}
) -join ''
Áp phích lần đầu tiên ở đây, được thúc đẩy bởi vì tôi hiếm khi thấy PowerShell, nhưng ở 154 152 byte trên cái này ... tôi có thể hiểu tại sao! Bất kỳ đề nghị đánh giá cao.
Tôi đã học được rằng tôi phải thay đổi hoàn toàn cách suy nghĩ của mình đối với môn đánh gôn và sự thú vị của nó!