PowerShell, 154 , 152 , 99 , 86 byte
Terima kasih @TimmyD karena telah menyelamatkan saya 47 byte kekalahan (saya juga menyimpan 6 tambahan)
Terima kasih @TessellatingHeckler karena telah menyimpan 13 byte tambahan.
Terbaru:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
Asli:
param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''
Pemformatan normal:
Terbaru (terlihat sebagai dua baris menurut saya):
param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})
Penjelasan:
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
Asli:
param($a)
$x = 0
(($a[-1..-$a.length]) | %{
$_ = $_.tostring().tolower()
if([regex]::matches($a,"[A-Z]").index -contains $x){
$_.toupper()
}else{
$_
}
$x++
}
) -join ''
Poster pertama kali di sini, termotivasi karena saya jarang melihat PowerShell, tetapi pada 154 152 byte yang satu ini ... Saya bisa melihat mengapa!Ada saran yang dihargai.
Saya telah belajar bahwa saya harus benar-benar mengubah cara berpikir saya menjadi golf dalam kode dan kesenangannya!