Brainfuck, 78 바이트
개방형 현상금 : 누구나이 점수를 향상시킬 수 있으면 현상금 (+500)을 그들에게 전달합니다.
@KSab은 76 72 바이트 솔루션을찾았습니다!
--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.
온라인으로 사용해보십시오!
처음 28 바이트 --<-<<+[+[<+>--->->->-<<<]>]
는 다음과 같은 반복 관계로 테이프를 초기화합니다 (mod 256).
f n = 171 · (-f n-1 -f n-2 -f n-3 + 1) 로 f 0 = 57 , f 1 = 123 및 f 2 = 167 입니다.
(171)의 요인으로 인해 발생 3 -1 ≡ 171 MOD (256)를 . 현재 값이 변환 될 때 <+>---
마다 매번 3을 빼는 1 개의 셀 백 (비아 )이 효과적으로 값에 171을 곱합니다.
에서는 N = 220 번역되는 제로 값이고, 반복 정지한다. 중지 점 앞의 10 바이트는 다음과 같습니다.
[130, 7, 43, 111, 32, 109, 87, 95, 74, 0]
여기에는 Hello, World!
약간의 조정만으로 헌트 앤 페크 방식 으로 생산에 필요한 모든 구성 요소가 포함됩니다 .
또한 대체 78 바이트 솔루션을 찾았습니다.
-[++[<++>->+++>+++<<]---->+]<<<<.<<<<-.<..<<+.<<<<.>>.>>>-.<.+++.>>.>-.<<<<<+.
온라인으로 사용해보십시오!
나는 여러 가지 이유로 첫 번째보다 낫다고 생각합니다. 집에서 남은 셀을 적게 사용하고, 더 적은 셀을 수정하고, 더 빨리 종료합니다.
자세한 세부 사항
재발 관계는 놀랍게도 Brainfuck의 표현을 간직했습니다. 일반적인 레이아웃은 다음과 같습니다.
{...s3}<{s2}<{s1}[[<+>->{c1}>{c2}>{c3...}<<<]>{k}]
이는 다음을 나타냅니다.
f n = c 1 · f n-1 + c 2 · f n-2 + c 3 · f n-3 + ... + k
와
f 0 = s 1 , f 1 = s 2 + c 1 · f 0 + k , f 2 = s 3 + c 2 · f 0 + c 1 · f 1 + k 등
또한,는 <+>
정지 점에 영향을주지 않고 범위에 상수를 곱하도록 변경 될 수 있으며 >{k}
, 다시 정지 점에 영향을 미치지 않고 범위를 상수로 이동 시키기 위해 항이 추가 될 수있다 .
다른 예
피보나치 수열
+[[<+>->+>+<<]>]
N- 곤수
삼각수
+[[<+>->++>-<<]>+]
중도 F , N = 2 · f를 N-1 - F를 N-2 + 1 과 F 0 = 0 , F (1) = 1 .
제곱 숫자
+[[<+>->++>-<<]>++]
오각형 숫자
+[[<+>->++>-<<]>+++]
기타
BF 크런치
github 에서이 솔루션 중 일부를 찾는 데 사용한 코드를 게시했습니다 . .NET 4.0 이상이 필요합니다.
Usage: bfcrunch [--options] text [limit]
Arguments
------------------------------------------------------------
text The text to produce.
limit The maximum BF program length to search for. If zero, the length of the
shortest program found so far will be used (-r). Default = 0
Options
------------------------------------------------------------
-i, --max-init=# The maximum length of the initialization segment. If excluded, the
program will run indefinitely.
-I, --min-init=# The minimum length of the initialization segment. Default = 14
-t, --max-tape=# The maximum tape size to consider. Programs that utilize more tape than
this will be ignored. Default = 1250
-T, --min-tape=# The minimum tape size to consider. Programs that utilize less tape than
this will be ignored. Default = 1
-r, --rolling-limit
If set, the limit will be adjusted whenever a shorter program is found.
-?, --help Display this help text.
출력은 세 줄로 제공됩니다.
- 발견 된 프로그램의 전체 길이 및 초기화 세그먼트.
- 현재 테이프 포인터로 시작하는 경로입니다. 각 노드는 (포인터, 비용)으로 표시되는 하나의 출력 문자에 해당합니다.
- 사용 된 테이프 세그먼트.
예를 들어, 최종 결과 bfcrunch "hello world" 70 -r -i23
는 다음과 같습니다.
64: ++++[[<+>->+++++>+<<]>]
49, (45, 5), (44, 3), (45, 6), (45, 1), (45, 4), (42, 4), (43, 5), (45, 3), (45, 4), (46, 2), (44, 4)
32, 116, 100, 104, 108, 132, 0, 0, 132, 0
이것은 전체 프로그램에 해당합니다.
++++[[<+>->+++++>+<<]>]<<<<.<+.>++++..+++.<<<.>+++.>>.+++.>.<<-.
다른 기록들
안녕, 월드!
랩핑, 78 바이트 :
--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.
또는
-[++[<++>->+++>+++<<]---->+]<<<<.<<<<-.<..<<+.<<<<.>>.>>>-.<.+++.>>.>-.<<<<<+.
랩핑되지 않은 87 바이트 (이전 92 바이트 (mitchs) ) :
--->->->>+>+>>+[++++[>+++[>++++>-->+++<<<-]<-]<+++]>>>.>-->-.>..+>++++>+++.+>-->[>-.<<]
안녕, 세상!
랩핑, 80 바이트 :
++<-[[<+>->+>--->-<<<]>+++]>+.<<<<<<<++.>>>..>.<<--.<<<--.>>+.>>>.+++.<.<<<-.<+.
랩핑되지 않은 81 바이트 (이전 92 바이트 (히로세) ) :
+>---->->+++>++>->+[++++++++[>++++++++>>+++++<<<-]<]>>.>++>.>..+>>.+>-->--[>-.<<]
안녕, 세상!
랩핑, 74 바이트 :
-<++[[<+>->->+++>+<<<]->]<<.---.<..<<.<<<---.<<<<-.>>-.>>>>>.+++.>>.>-.<<.
랩핑되지 않은 84 바이트 :
---->+++>++>->->++[+++++++[>+++++[>++>>+<<<-]<-]++<]>>>>.---.>---..+>->.+>-->+>[-.<]
안녕하세요 세계! \ n
줄 바꿈, 76 바이트 :
+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.[<]>+.
이것은 집 왼쪽에 하나의 셀을 사용하므로 77로 간주됩니다.
랩핑되지 않은 83 바이트 :
->+>>>+>>---[++++++++++[>++++++>+++>+<<<-]-<+]>+>+.>.->--..>->-.>[>.<<]>[+>]<<.>++.
Rdebath가 승인되었습니다 . profilebf 출력 :
Hello World!
Program size 83
Final tape contents:
: 0 0 73 101 109 115 112 88 33 10 0
^
Tape pointer maximum 10
Hard wrapping would occur for unsigned cells.
Counts: +: 720 -: 79 >: 221 <: 212
Counts: [: 9 ]: 84 .: 13 ,: 0
Total: 1338
안녕하세요 세계!
랩핑, 70 바이트 (이전 78 1 ) :
+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.
랩핑되지 않은 77 바이트 (이전 89?) :
->+>>>+>>-[++++++[>+++++++++>+++++>+<<<-]<+]>>.>--.->++..>>+.>-[>.<<]>[>]<<+.
저자는 가장 짧은 손으로 코딩 한 "Hello World!" 89 바이트이지만 참조를 제공하지 않습니다. 본인도 이에 대한 기록을 주장합니다.
안녕 세상!
랩핑, 65 바이트 (이전 66 바이트) :
+++[>--[>]----[----<]>---]>>.---.->..>++>-----.<<<<--.+>>>>>-[.<]
이것은 실제로 수동으로 코딩됩니다 (크 런칭으로 찾을 수있는 최선은 68 바이트입니다 ). 첫 번째 셀은 259 (3)로 초기화되고 각 반복마다 7 씩 감소하여 37 회 반복됩니다. 다음 셀은 6 씩 감소하여 256-6 · 37 = 34가 됩니다. 나머지 셀은 매번 4 씩 감소하여 각 반복마다 하나의 셀을 추가하고 각 새 셀은 252 (-4)로 초기화됩니다. 결과는 다음과 같습니다.
[ 3, 0, 0, 0, 0, 0, 0, ...]
[252, 250, 248, 0, 0, 0, 0, ...]
[245, 244, 244, 248, 0, 0, 0, ...]
[238, 238, 240, 244, 248, 0, 0, ...]
[231, 232, 236, 240, 244, 248, 0, ...]
[224, 226, 232, 236, 240, 244, 248, ...]
...
[ 35, 64, 124, 128, 132, 136, 140, ...]
[ 28, 58, 120, 124, 128, 132, 136, ...]
[ 21, 52, 116, 120, 124, 128, 132, ...]
[ 14, 46, 112, 116, 120, 124, 128, ...]
[ 7, 40, 108, 112, 116, 120, 124, ...]
[ 0, 34, 104, 108, 112, 116, 120, ...]
1 주어진 솔루션 (79 바이트)을 1 씩 줄일 수 있습니다.
-[>>+>+[++>-<<]-<+<+]>---.<<<<++.<<----..+++.>------.<<++.>.+++.------.>>-.<+.