BrainFuck으로 'A'를 1000 번 인쇄하십시오


12

'A'를 1000 번 인쇄하는 가장 좋은 BrainFuck 코드 (코드 크기)는 무엇입니까?

내 접근 방식은 다음과 같습니다

  • 'A'를 p [0]으로 설정
  • 255를 p [1]로 설정하여 255 'A'를 3 회 표시
  • 235를 p [1]로 설정하여 235 'A'를 표시하십시오.

이것은 효과적이지 않지만 곱셈과 같이 견인 카운터를 동시에 사용하는 방법을 찾을 수 없습니다

곱셈보다 더 나은 접근법이 있습니까?

더 일반적인 질문 : 가능한 가장 작은 코드로 많은 수의 곱셈을 만드는 규칙이 있습니까?


4
이곳 은 시작하기에 좋은 곳입니다. 코드 골프에 오신 것을 환영합니다! :)
FryAmTheEggman 2016 년

3
중첩 루프를 사용하고 싶지만 BF를 잘 모르고 있습니다. Brainfuck 팁을 보셨습니까 ? 또한 Brainfuck 상수 의 esolangs 페이지는 여기서 유용한 리소스가 될 것입니다.
Jonathan Allan

4
최고의 BrainFuck 코드를 명확히해야한다고 생각합니다 . 가장 적은 양의 +문자를 사용하거나 가장 간결성을 사용하여 가장 읽기 쉽고 우아 하게 검색하고 있습니까?
Jonathan Frech 2016 년

@Jonathan Allan : 예, 이것이이 질문의 목적입니다 : 중첩 루프를 사용하는 방법. ASM과 가까운 매혹적인 언어이지만 일부 측면을 이해하지 못합니다
Nelson G.

BF에서이 변형을 사용할 수 있습니까
Shaun Bebbers

답변:


17

현재 사용중인 방법은 39 바이트입니다.

>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>](를 얻는 것을 포함하지 않음 A) ( 온라인 시도! )

(루프를 3 번 ​​반복 할 때마다 카운터를 255로 설정하고 여러 번 인쇄 한 다음 20을 빼고 1을 빼고 여러 번 인쇄)

그러나 250 번 반복하고 매번 4 번 인쇄하는 것이 훨씬 짧습니다 (원래 loop-4 loop-250 print-1 솔루션보다 이것을 최적화 한 jimmy23013 덕분에).

>------[<....>-] (16 바이트)

셀이 제한되지 않은 경우 (8 비트라고 가정하면 골프에 255를 사용하지 않을 것입니다).

>>++++++++++[<++++++++++[<..........>-]>-] (42 바이트).


이것은 8 비트 셀을 가정하는 것 같습니다 ...
John Dvorak

2
@ JohnDvorak : OP가 생각할 수있는 가장 효과적인 솔루션의 일부로 셀을 255로 설정하는 것이 문제였습니다. 그것은 8 비트 셀 랩핑을 사용하는 (ab)의 명확한 표시처럼 보입니다.
randomdude999

@JohnDvorak randomdude999의 말이지 만 셀이 바인딩되지 않은 경우 10x10x10을 사용하는 방법을 추가했습니다.
HyperNeutrino 2016 년

250 배 ....는 더 짧을 것입니다.
jimmy23013

@ jimmy23013 ... LOL을 수행하기 위해 여전히 10x10x10 솔루션을 최적화했다고 생각하지 못했습니다. 감사!
HyperNeutrino 2016 년

1

47 바이트 (언더 플로우 없음)

방금 47 바이 트로이 솔루션을 수행했습니다. 일반적으로 두 값 사이에서 카운터를 저글링하여 공간을 절약하려는 것과 다른 방식으로 시도했습니다. A가 p [4]에 사전로드되어 있다고 가정합니다.

+++++[>++++>+++++<<-]>[>[>+>.<<-]>[->.<<+>]<<-]

설명

Place 5 into p[0]
+++++
Loop 5 times to put p[1]=20, p[2]=25
[>++++>+++++<<-]>
Loop 20 times
[>
Move pointer to p[2] and loop 25 times.
Also move p[2] to p[3]

[
Increment p[3] from 0, effectively moving the value from p[2] to p[3]
>+
Print p[4]
>.
Decrement p[2]
<<-]
Shift over to p[3]
>
[
Decrement p[3]
->
Print p[4]
.<
Increment p[2]
<+>]
Move back to p[1] and decrement
<<-
Repeat until p[1] is 0
]

1

'A'의 숫자 65를 얻는 가장 짧은 방법은입니다 >+[+[<]>>+<+]>. 그리고 그 >------[<....>-]끝에 HyperNeutrino 's 를 추가 하면됩니다. 따라서 전체 코드는 >+[+[<]>>+<+]>>------[<....>-](30 바이트)가됩니다


그 방법이 가장 짧다는 것을 어떻게 알 수 있습니까? 확실히 더 짧지 만 아무도 더 짧은 것을 찾을 수 없다는 것을 알고 있습니까?
Ad Hoc Garf Hunter 12


@ SriotchilismO'Zaic 그래, 나는 그것이 그것이 가장 짧은 롤 이었다는 것을 의미하지는 않았다
궁수 자리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.