PowerShell, 154 , 152 , 99 , 86 bajtów
Dziękuję @ TimmyD za uratowanie mnie aż 47 bajtów (zapisałem również dodatkowe 6)
Dziękujemy @TessellatingHeckler za zapisanie dodatkowych 13 bajtów.
Najnowszy:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
Oryginalny:
param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''
Normalne formatowanie:
Najnowsze (moim zdaniem najlepiej jak dwie linie):
param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})
Wyjaśnienie:
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
Oryginalny:
param($a)
$x = 0
(($a[-1..-$a.length]) | %{
$_ = $_.tostring().tolower()
if([regex]::matches($a,"[A-Z]").index -contains $x){
$_.toupper()
}else{
$_
}
$x++
}
) -join ''
Pierwszy plakat tutaj był motywowany, ponieważ rzadko widzę PowerShell, ale przy 154 152 bajtach na tym ... Rozumiem dlaczego! Wszelkie sugestie mile widziane.
Nauczyłem się, że muszę całkowicie zmienić sposób myślenia na golfa w kodzie i jego zabawie!