이것은 xkcd # 153을 기반으로 합니다.
2 개의 매개 변수를 갖는 프로그램 또는 명명 된 함수를 작성하십시오. 각 매개 변수는 문자열 또는 바이트 또는 문자의 목록 또는 배열입니다. 두 번째 매개 변수에는 문자 lrfu
(또는 동등한 ASCII 바이트) 만 사용됩니다. 첫 번째 매개 변수로 표시되는 비트 시퀀스에서 수행되는 일련의 명령으로 해석되어야합니다.
수행되는 처리는 다음과 같아야합니다.
- 첫 번째 매개 변수를 각 문자의 비트를 연결하여 형성된 단일 비트 열로 변환하십시오 (7 비트 ASCII, 8 비트 확장 ASCII 또는 표준 유니 코드 인코딩 중 하나로 해석 됨). 첫 번째 변수 인 경우 예
"AB"
다음이 중 하나가 될 것이다10000011000010
(7 비트)0100000101000010
(8 비트 또는 UTF-8)00000000010000010000000001000010
또는01000001000000000100001000000000
(UTF-16에서 두 endian을) 등 - 두 번째 매개 변수의 각 문자에 대해 해당 명령을 순서대로 실행하십시오.
l
비트 열을 왼쪽으로 회전합니다. 예를10000011000010
하게된다00000110000101
.r
비트 열을 오른쪽으로 회전합니다. 예를10000011000010
하게된다01000001100001
.f
비트 열의 각 비트를 뒤집거나 뒤집습니다. 예를10000011000010
하게된다01111100111101
.u
비트 스트링을 반대로합니다. 예를10000011000010
하게된다01000011000001
.
- 비트 열을 비트 당 하나의 문자를 사용하는 ASCII 문자열로 변환하십시오. 예 :
10000011000010
하게된다"10000011000010"
. 7/8 비트의 모든 세트에 문자가 할당되어 있지 않기 때문입니다.
예 (Python) :
>>> f("b", "rfu")
01110011
"b"
8 비트 ASCII 이진 표현 으로 바뀌고 01100010
오른쪽으로 회전합니다 (00110001
)하고 각 비트를 뒤집고 ) 뒤집 11001110
습니다 ( 01110011
).
적응성
문자 l
,, 대신 다른 문자를 사용할 수 있습니다 r
.f
,과 u
, 그러나 명확하게 문서화해야합니다.
스코어 보드
다음 코드 스 니펫을 생성 한 @Optimizer 에게 감사드립니다 . 사용하려면 "코드 스 니펫 표시"를 클릭하고 맨 아래로 스크롤 한 다음 "► 코드 스 니펫 실행"을 클릭하십시오.
"rrfrburb"
할까요? 또한 비트를 시프트하거나 반전시킬 때 각 개별 문자 또는 문자열 전체에 대해 비트를 수행합니까? 테스트 사례가 많을수록 더 명확 해집니다.