입증 된 최적!
((([()][()][()])))
온라인으로 사용해보십시오!
설명
Brain-Flak, Brain-Flueue, Miniflak 및 Fλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
이것은 다음을 인쇄합니다.
-3
-3
-3
(후행 줄 바꿈이 있습니다)
브레인-플락 클래식
Brain-Flak Classic은 Brain-Flak의 최초 버전이며 현대 Brain-Flak과는 몇 가지 중요한 차이점이 있습니다. BFC에서는 [...]
내용을 부정하지 않고 인쇄합니다.
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
실행이 끝나면 스택 ( 3 3 3
) 의 내용 이 인쇄됩니다.
이것은 다음을 인쇄합니다.
1
1
1
3
3
3
(후행 줄 바꿈이 있습니다)
Flakcats
Flakcats는 다른 4 가지 Flaks와는 상당히 다르며 Flakcats에서 작동한다는 사실에 놀랐습니다. 여기의 세 연산자는 Brain-Flak이 사용하는 연산자와 거의 동일합니다.
Flakcats 간의이 특정 프로그램의 주요 차이점은 Flakcats의 Brain-Flak (...)
과 동등한 연산자입니다 ([{}]...)
. 그러나 이것은 0을 선택하여 Brain-Flak과 같은 방식으로 작동하기 때문에 우리에게 차이가 없습니다.
다음은 Brian-Flak으로 컴파일 된 프로그램입니다.
([{}]([{}]([{}][()][()][()])))
이것은 다음을 인쇄합니다.
-3
-3
-3
(후행 줄 바꿈이 있습니다)
이것은 공식적인 증거가 아니라보다 엄격한 것으로 확장되어야하는 비공식적 인 증거입니다.
Brain-Flak 프로그램이 균형 잡힌 문자열이어야하고 프로그램 길이가 3의 배수 여야한다는 제한 때문에 유효한 제출의 길이는 6의 배수 여야합니다. 즉, 18보다 작은 솔루션은 길이 12 여야합니다.
줄 바꿈에 뒤따른 출력 때문에 스택의 최종 높이는 3의 배수 여야합니다. 그렇지 않으면 출력에 대한 제한을 위반합니다.
길이가 12 인 유효한 제출에는 2 가지 유형의 중괄호가 있어야합니다 (각각의 문자 수에 대한 제한을 줄이면 12 자 이상을 의미합니다). 프로그램이 출력을 생성하므로 푸시가 있어야합니다.
이를 통해 다른 가새 세트를 선택할 수 있습니다. 옵션은 다음과 같습니다.
<...>/<>
0이 아닌 다른 숫자를 만들려면 "값"을 생성해야하기 때문에 실패합니다. a ()
를 두 번 이상 밀어 낼 수 없게 만드는 숫자를 포기해야합니다 .
[...]/[]
마지막 실패와 같은 이유로 실패합니다. 대괄호는 실제로 가치를 창출하는 데 좋지 않습니다. []
모나드는 수 가치를 창출하지만 우리는 첫 번째 숫자를 밀어 필요가 있고 우리는 충분히 괄호가 세 번 밀어 남은 필요가 없습니다.
{...}/{}
이것은 유망합니다. 우리는 루프를 만들고 하나 ()
를 사용 하여 여러 번 밀어 넣을 수는 있지만 불가능합니다.
루프를 끝내려면 어떤 시점에서 스택에 0이 있어야하고 올바른 출력을 얻으려면 프로그램 끝에서 스택에 0 이외의 것이 있어야합니다. 루프 끝의 0 []
도 스택의 맨 아래부터 암시 적 0 이 아니 어야합니다 . 이것은 루프가 스택에 새로운 숫자를 추가 할 수 없다는 것을 의미합니다.<>
중괄호를 선택할 수있는 길이가 12 인 프로그램을 만들 수 없으므로 존재하지 않습니다.
Miniflak는 Brain-Flak의 하위 집합이기 때문에 더 짧은 Miniflak 프로그램은 더 짧은 Brain-Flak 프로그램이되기 때문에 존재하지 않습니다.
뇌-유체 에 대한 최적의 증거
Brain-Flueue는 Brain-Flak을 기반으로 한 농담 언어입니다. 두 사람은 너무 비슷해서 통역사는 어디에서나 두 줄로 동일합니다. 이 둘의 차이점은 이름에서 알 수 있듯이 Brain-Flueue는 데이터를 대기열에 저장하고 Brain-Flak은 데이터를 스택에 저장합니다.
시작하려면 Brain-Flak이 만든 프로그램 크기에 대해 동일한 제한이 있으므로 크기가 12 인 프로그램을 찾고 있습니다. 또한 (...)
출력과 다른 쌍을 만들려면가 필요합니다 . <>
와 []
쌍은 뇌 - 플랙에서 작동하지 않습니다 동일한 이유로 뇌 - Flueue에서 작동하지 않습니다.
이제 우리는 프로그램이 문자로 구성되어야한다는 것을 알고 ((())){{{}}}
있습니다.
이전 증명에서 사용 된 동일한 방법을 통해 최종 프로그램에 루프가 있어야 함을 보여줄 수 있습니다.
Brain-Flueue는 스택이 아닌 대기열에서 작동하기 때문에 프로그램은 대기열에 값이있는 루프를 종료 할 수 있습니다.
루프를 종료하려면 대기열에 0이 필요합니다 (또는 빈 대기열이지만 대기열이 비어 있으면 Brain-Flak과 동일한 문제가 발생 ({})
합니다). 제로. 필요한 수의 항목을 대기열로 푸시하려면 루프 내부를 푸시해야합니다. 또한 루프 앞에 0이 아닌 숫자를 입력해야 루프에 들어갈 수 있습니다. 이것은 최소한의 비용이들 것 (())
입니다. 우리는 이제 우리보다 더 많은 양을 사용했습니다.
따라서 12 바이트 인 작업을 수행 할 수있는 Brain-Flueue 프로그램이 없으며 프로그램도 최적입니다.
다음 솔루션은 Flakcats 및 Brain-Flak Classic에서 최적입니다.
((([][][])))
설명
[][][] -3
((( ))) push 3 times
대체 24 바이트 Brain-Flak 솔루션
(<((<((<(())>)())>)())>)
온라인으로 사용해보십시오!
((<((<((<>)())>)())>)())
온라인으로 사용해보십시오!
((((((()()()){}){}){})))
온라인으로 사용해보십시오!