Проблема петлі Brainf * ck


19

У мене є проблема з кібер-клубом, який просить вас надрукувати:

ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!

Використання Brainf ** k у 29 байтах або менше без використання символу ','.

У мене працює робочий код:

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

Однак мій цикл занадто довгий, він надсилає мені 16 байт за ліміт.

Чи є більш ефективний спосіб встановити другу і третю клітинку на 58 і 90, щоб я міг запустити свою другу петлю? Або є кращий спосіб зробити це все разом, що я просто не бачу?


1
Що стосується вашого питання, хоча він зберігає лише чотири байти, насправді краще генерувати 59 та 90 та змінити значення -.на .-, скинувши на >.<.
Мартін Ендер

Я отримав +[--->++<]>++++[.-]19 байт, але він також роздруковує контрольні символи ...
Timtech

@MartinEnder Вибачте з цього приводу, я побачив ваш коментар на іншій публікації і виявив цю групу, яка здавалася набагато доречнішою, я видаляю її на ТАК, оскільки вона не дала багато відповідей.
Нік Род

2
Мені чесно цікаво, що це за "кібер-клуб", адже хлопчик, вони повинні мати справді хороших гольфістів!
Sp3000

Відповіді:


23

27 24 байти

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

Провів цілий день, в основному писав грубий форсерінг і спостерігав за тим, як результати приходять. Тепер я можу повернутися до виконання якоїсь фактичної роботи ... Ще один день жорстокого форсування згодом ...

Спробуйте в Інтернеті!

Компонент ++[<++[++<]>>>+]ініціалізує стрічку до

[130, 0, 0, 0, 91, 59, 0]
                       ^

що просто ідеально підходить для того, що нам потрібно!


8
Чарівність. (∩`-´) ⊃━ ☆ ゚. * ・。 ゚
primo

@primo Щоб бути справедливим, я не маю уявлення, що відбувається в першу половину структурно, і я вважаю, що факт, що ви можете придумати свої власні алгоритми / методи, є дивовижним :)
Sp3000

Стрічка в кінці кожного циклу: codepad.org/ZoJUlQ8M . Це зовсім не інтуїтивно зрозуміло, що воно закінчиться на значеннях, які він робить, або навіть зовсім;)
прим

1
Альтернатива 24:+[[>++<<]>->+>+]<[-<-.>]
примо

15

30 байт

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

Спробуйте в Інтернеті!

85 і 171 досить легко генерувати мозкові обриси (модульні звороти 3 і -3 ). 85 досить близько до 90 , а 171 - близько 177 ( 59 · 3 ), які тут використовуються. Маючи трохи хакерства, я можу натомість створити 88 та 176 .

І все-таки один байт коротший від цілі.

Інші пропозиції

Взагалі коротше переглядати список, помножуючи на постійний, а не інший спосіб. Особливо це стосується 3 і більше значень. Наприклад, це:

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

можна записати як:

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

Внутрішніх цінностей було лише дві, тож покращення в цьому випадку мало. Насправді просто рефакторинг на один байт коротший:

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

Множення 30 на 2 і 3 , а не 10 на 6 і 9 . За пропозицією Мартіна Бюттнера, це вже до 38 байт, без особливих змін до оригіналу:

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

Я ніколи б не замислювався над тим, щоб помножити 58 і повторити його на більшу кількість, це набагато ефективніше.
Нік Род

4

34 байти

Зберегли вас 11 байт, але все-таки 5 байт занадто довго ...

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

Я вже витратив години, сподіваюся, хтось може покращити це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.