Uma linguagem que é muito útil em fontes restritas e outros desafios é o Unary , um derivado do cérebro em que os programas são escritos com apenas um caractere. Seu trabalho é escrever um programa para converter programas de inconsciente para unário e um programa para fazer o oposto, ambos os programas no mesmo idioma. Sua pontuação será a soma dos comprimentos dos dois programas.
Como você converte de brainfuck para unário?
- Primeiro, converta seu código brainfuck em binário, de acordo com esta tabela:
- Agora concatene o código em um número binário gigante na ordem do código.
- Coloque um prefixo
1
a na sequência para garantir um número binário exclusivo. - Converta de um número binário para um número unário usando qualquer caractere.
- Ex:
+.
seria000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 zeros).
Brainfuck -> Especificações Unárias
- Como os programas resultantes serão impossivelmente grandes, imprima não o programa real, mas apenas a duração do programa resultante.
- Pegue o programa brainfuck como uma string através de stdin, function arg, etc e produza o comprimento.
- O programa sempre será válido e terá apenas esses 8 caracteres.
Unário -> Especificações Brainfuck
- Você terá que implementar o inverso do algoritmo acima.
- Novamente, devido aos grandes tamanhos em questão, a entrada será um número que descreve o comprimento do código Unário.
- As mesmas regras de E / S de sempre.
- O programa sempre será válido e terá apenas esses 8 caracteres.
Casos de teste
- Olá Mundo -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Fibonacci -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
Isso é código-golfe, e a pontuação mais baixa em bytes ganha!
Alguém quer uma solução em Unary? ; P
code-golf
brainfuck
base-conversion
compiler
Maltysen
fonte
fonte
10101010101010
, quando deveriam estar1010010010010
Respostas:
Pitão, 17 + 17 = 34 bytes
BF -> Unário, 17 bytes
Unário -> BF, 17 bytes
fonte
cérebro ,
563 335 318 316296 +529 373 366336 = 632 bytesComo obviamente faltava uma solução em um idioma relacionado, aqui está a solução no brainfuck e no Golunar. Não consegui postar uma resposta em unário, porque isso precisaria de alguns fantásticos bilhões de vezes mais memória do que existem átomos no universo ^^
A rotina "back" não verifica se o código Golunar / Unário é válido. Se a contagem de bits mod 3! = 1, ocorrerá um loop sem fim imprimindo muitos ">" s.
Agradeço ao Nitrodon por me ajudar a obter abaixo de 300 caracteres para o código unificado do bf
brainfuck para unário
Experimente online!
e volta
Experimente online!
Golunar / unárias-dígitos,
509 303 288 286268 +478 337 331304 = 572 bytesbrainfuck para unário
e volta
Códigos-fonte
brainfuck para unário
e volta
fonte
Python 2,
80796355 +8664 = 119 bytesAgradeço ao Sp3000 por suas inúmeras sugestões, economizando muitos bytes.
Brainfuck para Unário,
78776153 + 2 = 55 bytesAdicionado dois bytes para contabilizar "s" circundantes na entrada.
Unário para Brainfuck,
8664 bytesConfira em ideone aqui.
fonte
CJam, 35 bytes
Brainfuck para Unário, 17 bytes
Experimente online.
Como funciona
Unário para Brainfuck, 18 bytes
Experimente online.
Como funciona
fonte
Bash + coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Saída de teste:
fonte
tr -dc 0-9
(e no golfe código que você pode assumir que?
é bom unescaped)Japt , 13 + 13 = 26 bytes
Brainfuck Faz Unário
Tente!
Explicação:
Unário para Brainfuck
Tente!
Explicação:
Notas
Não consigo encontrar a meta post, mas se minha memória servir corretamente, as respostas poderão limitar a E / S a números que seu idioma possa suportar, desde que eles implementem um algoritmo que funcionaria se o idioma começar a suportar números maiores. Esse é o caso aqui, a capacidade de Japt de tratar uma string como "base
n
usando essesn
caracteres para os dígitos" pode usar apenas onumber
tipo de dados do outro lado da operação e, portanto, os casos de teste não serão executados com êxito; a saída do primeiro programa e o tipo de dados de entrada do segundo programa coagirão o número a um que pode ser representado como a , em vez de usar o número real. Para números que podem ser perfeitamente representados pelos números de Japt desses programas funcionará conforme desejado e, se o tipo de dados for alterado para suportar números maiores, esses programas também começarão a suportar esses números.number
number
number
fonte
05AB1E , 33 (17 + 16) bytes
Brainfuck para Unary-length:
Experimente online ou verifique todos os casos de teste .
Explicação:
Comprimento unário para Brainfuck
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Dardo , 77 + 142 = 219 bytes
Experimente online!
fonte
C (gcc) , 254 bytes
Experimente online!
Determina qual direção seguir com base em input (
i
), armazena o resultado no buffer passado (o
). Observe que alguns compiladores permitem salvar 4 bytes com base na ordem definida pelo implementação do o ++. Nesses casos, a solução fornecida truncará um caractere extra da conversão Unary-> BF e oso[1]
todos poderão ser substituídos por*o
para recuperar o comportamento.fonte
#include <string.h>
o rodapé em vez do cabeçalho para mostrar que funciona sem essa importação. C ++ também não seria mais curto devido à sobrecarga do operador? : Psi
paraui
talvez*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str