브레인 퍽 , 474 176 154 151 149 137 바이트
의 입력 문자열 소요 팔을 0
하고 1
처음 포함 0
소수점에 대한합니다.
(포스트에서 표의 두 번째 열에서와 같이)
0에서 9까지의 숫자를 출력합니다.
,>,>,>,,,>,>,>+[[->]<++<<<<<<]>[>[>[>[->[>++++++<-<]>[--<]<]>>.>>]<[>
>[>->++<<-]>-[+>++++<]>+.>]]>[>>>+<<<-]>[>>+++.>]]>[>>>[>+++<-]>-.>]
온라인으로 사용해보십시오!
연산
특정 세그먼트의 상태를 관찰하여 가능한 숫자 세트를 더 작은 서브 세트로 분할 할 수 있습니다. 아래는 내 코드에서 사용되는 정적 이진 검색 트리입니다. 왼쪽 서브 트리는 세그먼트 ON 상태에 해당하고 오른쪽은 세그먼트 OFF 상태에 해당합니다.
0,1,2,3,4,5,6,7,8,9
|
/-------[A]-------------------------\
0,2,3,5,6,7,8,9 1,4
| |
/-------------[B]----------------\ /----[G]----\
0,2,3,7,8,9 5,6 4 1
| |
/--------[E]--------\ /----[E]----\
0,2,8 3,7,9 6 5
| |
/----[F]----\ /----[F]----\
0,8 2 9 3,7
| |
/----[G]----\ /----[G]----\
8 0 3 7
골프에 유용한 몇 가지 관찰
- 비트 C와 D는 중복되어 무시할 수 있습니다.
- 선행 제로 (소수점 비트)는 값 48로 사용될 수 있으며, 입력 구문 분석 및 출력 준비에 중요합니다.
- 잎에 도달하고 숫자가 인쇄되면 모든 추가 조건을 건너 뛰면됩니다. 데이터 포인터를 0의 영역으로 충분히 멀리 이동하면 다시 올 수 없습니다.
- 호환성을 위해 일부 BF 구현은 음수 데이터 포인터를 지원하지 않기 때문에 오른쪽에 0을 사용하는 것이 좋습니다.
- 따라서 가장 오른쪽 셀에 출력 값을 저장하는 것이 좋으므로 오른쪽으로 0의 영역에 쉽게 도달 할 수 있습니다.
- 따라서 왼쪽에서 오른쪽으로 A, B, E, F, G 비트를 확인하는 것이 좋습니다. 따라서 출력 셀에 쉽게 도달 할 수 있습니다.
- 다른 숫자는 출력 코드를 공유 할 수 있습니다. 예를 들어 5와 6은 동일한 하위 트리에 있습니다. 우리는
+++++
두 가지 가치 모두에 +
대해 6 가지에 대해서만 할 수 있습니다.
+
출력 값에 2를 미리 더하면 명령 수를 줄일 수 있습니다. 이 경우 우리는 그것을 감소해야 0
하고 1
단지 다른 숫자에 대한 이점을 얻을.