Язык , который очень полезен в ограниченном источнике и других подобных проблемах является Унарным , Brainfuck производным , в котором программы записываются с использованием только один символом. Ваша работа состоит в том, чтобы написать программу для конвертации программ из brainfuck в унарные и программу для обратного - обе программы на одном языке. Ваша оценка будет суммой длин двух программ.
Как вы конвертируете из brainfuck в унарный?
- Сначала преобразуйте ваш код в формате brainfuck в двоичный код в соответствии с таблицей
- Теперь объедините код в одно гигантское двоичное число в порядке кода.
- Добавьте
1
к строке строку, чтобы обеспечить уникальное двоичное число. - Преобразовать из двоичного числа в одинарное число, используя любой символ.
- Пример:
+.
будет000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 нуля).
Brainfuck -> Унарные характеристики
- Поскольку результирующие программы будут невероятно огромными, выведите не саму программу, а только ее длину.
- Возьмите программу brainfuck как строку через stdin, функцию arg и т. Д. И выведите длину.
- Программа всегда будет действительной и в ней будут только эти 8 символов.
Унарный -> Brainfuck Specs
- Вам придется реализовать обратный алгоритм выше.
- Опять же, из-за огромных размеров, входными данными будет число, описывающее длину унарного кода.
- Те же правила ввода / вывода, что и всегда.
- Программа всегда будет действительной и в ней будут только эти 8 символов.
Тестовые случаи
- Hello World -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Фибоначчи -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
Это код-гольф, поэтому выигрывает самая низкая оценка в байтах!
Кто-нибудь ищет решение в Унарном? ;П
code-golf
brainfuck
base-conversion
compiler
Maltysen
источник
источник
10101010101010
, когда они должны быть1010010010010
Ответы:
Pyth, 17 + 17 = 34 байта
BF -> Unary, 17 байт
Унарный -> BF, 17 байт
источник
брейнфук ,
563 335 318 316296 +529 373 366336 = 632 байтаПоскольку это, очевидно, упускало решение на родственном языке, вот решение в Brainfuck и Golunar. Я не смог опубликовать ответ в унарном виде, потому что для этого потребовалось бы в несколько раз больше памяти, чем атомов во вселенной ^^
Процедура «назад» не проверяет, действителен ли голунарный / унарный код. Если число битов mod 3! = 1, то это приведет к бесконечному циклу печати большого количества символов «>».
Спасибо Nitrodon за то, что помог мне получить менее 300 символов для двоичного кода в унарный код
мозговой трах к одинарному
Попробуйте онлайн!
и назад
Попробуйте онлайн!
Голунар / одинарные цифры,
509 303 288 286268 +478 337 331304 = 572 байтамозговой трах к одинарному
и назад
Исходники
мозговой трах к одинарному
и назад
источник
Python 2,
80796355 +8664 = 119 байтСпасибо Sp3000 за его многочисленные предложения, экономящие много байтов.
Brainfuck to Unary,
78776153 + 2 = 55 байтДобавлены два байта для учета окружающих на входе.
Unary to Brainfuck,
8664 байтаПроверьте это на ideone здесь.
источник
CJam, 35 байт
Brainfuck to Unary, 17 байтов
Попробуйте онлайн.
Как это устроено
Унарный Брейнфак, 18 байт
Попробуйте онлайн.
Как это устроено
источник
Bash + coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Тестовый вывод:
источник
tr -dc 0-9
(и в коде гольф вы можете предположить, что?
это нормально, неJapt , 13 + 13 = 26 байт
Brainfuck в Унар
Попытайся!
Объяснение:
Унарный Брейнфак
Попытайся!
Объяснение:
Примечания
Я не могу найти мета-сообщение, но если моя память работает правильно, ответы могут ограничить ввод-вывод числами, которые может поддерживать их язык, при условии, что они реализуют алгоритм, который будет работать, если язык начнет поддерживать большие числа. В данном случае, способность Japt обрабатывать строку как «основание,
n
использующее этиn
символы для цифр» может использовать толькоnumber
тип данных на другой стороне операции, и, таким образом, тестовые примеры на самом деле не будут выполняться успешно; выход первой программы и ввод второй программы будут принуждать номер на тот , который может быть представлен в видеnumber
, а не с помощью фактического числа. Для чисел, которые могут быть прекрасно представлены в Яптnumber
Тип данных, эти программы будут работать по желанию, и еслиnumber
тип данных изменится для поддержки больших чисел, то эти программы также начнут поддерживать эти числа.источник
05AB1E , 33 (17 + 16) байтов
Brainfuck в одинарную длину:
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Одинарная длина для Brainfuck
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Дротик , 77 + 142 = 219 байт
Попробуйте онлайн!
источник
C (gcc) , 254 байта
Попробуйте онлайн!
Определяет, в каком направлении идти на основе input (
i
), сохраняет результат в переданном буфере (o
). Обратите внимание, что некоторые компиляторы позволяют сохранять 4 байта в зависимости от порядка реализации ++. В этих случаях предоставленное решение будет обрезать дополнительный символ от преобразования Unary-> BF, иo[1]
все они могут быть заменены на,*o
чтобы восстановить поведение.источник
#include <string.h>
нижний колонтитул вместо заголовка, чтобы показать, что он работает без этого импорта. Кроме того, не будет ли C ++ короче из-за перегрузки операторов? : Psi
наui
может быть*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str