PowerShell, 154 , 152 , 99 , 86 байт
Дякую @TimmyD за те, що врятував мені колосальних 47 байт (я також врятував додаткові 6)
Дякуємо @TessellatingHeckler за збереження додаткових 13 байт.
Останні:
param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
Оригінал:
param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''
Нормальне форматування:
Останній (найкраще виглядає як два рядки на мою думку):
param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})
Пояснення:
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
Оригінал:
param($a)
$x = 0
(($a[-1..-$a.length]) | %{
$_ = $_.tostring().tolower()
if([regex]::matches($a,"[A-Z]").index -contains $x){
$_.toupper()
}else{
$_
}
$x++
}
) -join ''
Вперше плакат тут був мотивований, тому що я рідко бачу PowerShell, але на 154 152 байти на цьому ... Я можу зрозуміти, чому! Будь-які пропозиції були вдячні.
Я дізнався, що я повинен повністю змінити свій спосіб мислення на гольф у коді та його задоволенні!