매쓰, 173 (169) 155 바이트
f=0>1;t=!f;c=Characters;u=ToUpperCase;StringJoin/@MapThread[#@#2&,{Reverse[{LetterQ@#,#==(u@#)}&/@c@#/.{{f,_}->(#&),{t,t}->u,{t,f}->ToLowerCase}&/@#],c/@#},2]&
예를 들어 두 문자열의 배열을 가져 와서 두 문자열 {"Foo","bAR"}
의 배열을 출력하는 함수 입니다. 반응식 재기록 그 선택을 취소 공간적 압축 f@x
로서 f[x]
표기 약어 (확장이 나타나는 곳을 f=0>1
일명 False
, t=!f
일명 True
, c=Characters
및 u=ToUpperCaseQ
), 및 비 - 교환과 UpperCaseQ [#]을 #==u@#
(이 글자가 대문자로 버전과 동일)가있다 :
StringJoin /@ MapThread[#[#2] &, {
Reverse[
{ LetterQ[#], UpperCaseQ[#] } & /@ Characters[#] /.
{ {False, _} -> (# &), {True, True} -> ToUpperCase,
{True, False} -> ToLowerCase } & /@ #
],
Characters /@ #
}, 2] &
인터페이스 : 후행 &
은 이것을 기능으로 만듭니다. 인수는의 두 인스턴스에서 "#"으로 삽입됩니다 /@ #
. 예를 들어 f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
출력을 생성{AaABbb111,CC2dd3Ee4}
.
처리 : 순서대로 외부에서 판매 :
- 의 출력은
MapThread[...]
두 문자 목록의 목록입니다. StringJoin은이 두 문자 목록 각각에 적용되어 출력 인 두 문자열 목록을 생성합니다.
MapThread[#[#2]&, ... , 2]
두 개의 2xn 요소 목록의 배열에 작용합니다. 첫 번째 목록은 2xn 함수 배열입니다. 두 번째 목록은 2xn 문자 배열이며 Characters /@ #
두 입력 문자열의 문자 목록입니다. 깊이 2, 즉 기능과 개별 문자에서 작동합니다.
Reverse[...]
MapThread가 두 번째 문자열의 함수를 첫 번째 문자열에 적용하거나 그 반대로 적용하도록 함수의 두 하위 목록을 교체합니다.
{ ... } &
두 입력 문자열 각각에 적용되는 익명 함수입니다.
{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
문자열을 문자 목록으로 분할 한 다음 각 문자를 두 요소 목록으로 바꿉니다. 이 두 요소 목록에서 첫 번째 요소는 True
문자가 문자 인 False
경우와 유사하게 두 번째 요소는 문자가 대문자인지 여부를 나타냅니다. UpperCaseQ[]
문자를받지 못하면 true를 반환 할 수 없습니다.
/. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
이 두 요소 목록을 함수로 바꿉니다. (약어의 확장 t
및 f
일치를 시도하기 전에 발생합니다.) 두 요소 목록이 False
첫 번째 요소 인 경우 (# &)
identity 함수 라는 함수로 대체됩니다 . (괄호 달리 앰퍼샌드보다 단단히 결속 화살표 필요하다.)와 그렇지 않은 두 요소리스트 시작 True
, 문자는 글자, 그리고 우리 출력 기능 ToUpperCase
과 ToLowerCase
케이스에 대응. (마지막 False
으로 이것을 점검하는 것은 불필요하며, 실제로 {_,_}->ToLowerCase
교체되지 않은 것을 잡을 수는 있지만 더 짧고 모호하지는 않습니다.)
유일한 도전은 함수의 2 차원 배열을 인수 배열에 압축하는 간결한 방법을 찾는 것이 었습니다.
편집 : 잡기위한 @Martin 있음 Büttner 덕분에 "도움"컷 / LINEBREAK의 백 슬래시를 붙여 넣 1>0
및1<0
약어 약어를 가져 와서 문자가 아닌 바이트 단위의 길이를 계산하는 지침에 대해 (-:))
Edit2 : @Martin Büttner에게 글로벌 네임 스페이스를 오염시키는 것이 허용 가능한 골프임을 지적하고 하나의 문자 함수 응용 프로그램을 상기 시키며 두 개의 대문자 함수를 하나의 약어로 바꾸고 다른 하나를 에뮬레이트하기 위해 하나의 약어를 사용하도록 제안하는 것에 감사드립니다 (저장 네 문자). (나는 그가 전에 이것을 한 것 같아요. :-))