PowerShell, 154 , 152 , 99 , 86 bayt
Beni bir kuyruklu 47 byte'a kaydettiğin için teşekkür ederim @TimmyD (ayrıca 6 ekledim)
13 bayttan daha fazla tasarruf için @TessellatingHeckler teşekkür ederiz.
Son:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
Orijinal:
param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''
Normal biçimlendirme:
Son (bence en iyi iki satır gibi görünüyor):
param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})
Açıklama:
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
Orijinal:
param($a)
$x = 0
(($a[-1..-$a.length]) | %{
$_ = $_.tostring().tolower()
if([regex]::matches($a,"[A-Z]").index -contains $x){
$_.toupper()
}else{
$_
}
$x++
}
) -join ''
Buradaki ilk poster motive edildi çünkü PowerShell'i nadiren görüyorum, ancak bunun üzerine 154 152 baytta ... Nedenini görebiliyorum! Herhangi bir öneriniz takdir etti.
Kodlama ve eğlenceyle golf oynama biçimimi tamamen değiştirmem gerektiğini öğrendim!