Text to Brain-Flak

13

Seu desafio é transformar o texto de entrada no código de quebra-cérebro que produzirá o texto.

Tutorial tirado daqui com permissão aqui

Brain-Flak tem duas pilhas, conhecidas como 'esquerda' e 'direita'. A pilha ativa começa na esquerda. Se uma pilha vazia for exibida, ele retornará 0. É isso. Sem outras variáveis. Quando o programa é iniciado, cada argumento da linha de comando é enviado para a pilha ativa.

Os únicos caracteres válidos em um programa Brain-Flak são ()[]{}<>e sempre devem ser equilibrados. Existem dois tipos de funções: Nilads e Mônadas . Um nilad é uma função que recebe 0 argumentos. Aqui estão todas as niladas:

  • () Avalia para um.
  • [] Avalia a altura da pilha atual.
  • {}Pop a pilha ativa. Avalia para o valor popped.
  • <>Alterne a pilha ativa. Avalia para zero.

Eles são concatenados juntos quando são avaliados. Portanto, se tivéssemos um '3' no topo da pilha ativa, este trecho:

()(){}

avaliaria para 1 + 1 + active.pop()qual avaliaria para 5.

As mônadas têm um argumento, um pedaço do código Brain-Flak. Aqui estão todas as mônadas:

  • (n) Pressione 'n' na pilha ativa.
  • [n] Avalia como negativo 'n'
  • {foo} Embora zero não esteja no topo da pilha, foo.
  • <foo> Execute foo, mas avalie-o como 0.

Essas funções também retornarão o valor dentro delas, portanto

(()()())

Vai empurrar 3, mas

((()()()))

Empurrará 3 duas vezes .

O {}irá avaliar a soma de todas as execuções. Então, se tivéssemos '3' e '4' no topo da pilha:

{{}}

avaliaria como 7.

Quando o programa é executado, cada valor restante na pilha ativa é impresso, com uma nova linha entre. Os valores na outra pilha são ignorados.

Regras

  • Você pode assumir que o Brain-Flak está sendo executado com ascii out. ( -A)
  • O código de falha cerebral NÃO deve exigir entrada
  • Todas as regras padrão se aplicam
  • O código deve ser executado dentro de 1 minuto para qualquer entrada de até 1024 bytes no TIO. (Se nenhuma saída TIO estiver disponível, forneça um intérprete e eu o executarei na minha máquina (minha máquina poderá chegar perto do TIO)).
  • Você deve suportar entrada arbitrária de comprimento.
  • Você pode receber informações de um arquivo.
  • Otimização para casos de teste não é permitida
  • Saída determinística é necessária
  • Os programas não precisam ser limpos com pilha

Casos de teste (tente seu código com eles, os textos de pontuação reais serão liberados em uma a duas semanas após o lançamento do desafio)

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

The meaning of brain-flak is to flak your brain with pain.

`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?

To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die

<your brain-flak code here>

The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot



This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.

Ganhando

Para ganhar, você deve fornecer o comprimento total do código de falha cerebral fornecido por cada um dos casos de teste, que será lançado 1-2 semanas após a data de postagem. O menor comprimento total vence.

NOTA!!!!!!:

Isso não é , o comprimento do seu código não afetará sua pontuação final de forma alguma. Tornar o código legível limpo é apreciado. Obrigado!

Casos de teste

aqui

Christopher
fonte
Boxofsand
Christopher
4
Os memes da TNB são os mais engraçados.
Magic Octopus Urn
1
Gostaria de poder dobrar +1, em vez disso, vou oferecer uma recompensa porque quero saber como isso deveria ser feito. A primeira resposta <your brain-flak code here>abaixo de 1000 recebe a recompensa. Que não posso postar por outro dia, gritos; não percebeu como isso era novo.
Magic Octopus Urn
1
Além disso, se o intervalo de entrada não estiver limitado ao ASCII imprimível, inclua casos de teste com todos os valores de bytes, incluindo NUL bytes.
mbomb007
2
"Tornar o código limpo e legível é apreciado" apressadamente desafia em 05AB1E
Magic Octopus Urn

Respostas:

13

Flak cerebral , 130 bytes

{({}<>)<>}<>{((((()()()()()){}){}){}<>)<>{(((((()()()()()){}){}){}<>)())<>({}[()])}<>((((()()()()()){}){}){}())<>{}}<>{({}<>)<>}<>

Experimente online!

Saída para <your brain-flak code here>: 5045 bytes

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())

Experimente online!

HyperNeutrino
fonte
1
Intensificação
Urna de polvo mágico
1
@MagicOctopusUrn metaflakking : D
HyperNeutrino
Os casos de teste estão esgotados
Christopher
7

Python 3 , 17744 bytes

Edit: eu adicionei algumas opções para ajudar o golfe em situações seguras de stack.

import sys
sys.setrecursionlimit(1000000)
import time

def copy(n, code):
	if n == 1: return code
	for x in range(2, n):
		if n%x == 0: return '('*(x-1) + copy(n//x, code) + ')'*(x-1) + '{}'*(x-1)
	return '('*(n-1) + code + ')'*(n-1) + '{}'*(n-1)

letterCache = {}
def letterGen(n, stackLen, prev=0, enclosed=0):
	if (n, stackLen, prev, enclosed) in letterCache: return letterCache[(n, stackLen, prev, enclosed)]
	if n == 0: return ''
	if n == 1: return '()'
	if n == stackLen: return '[]'
	f = []
	if n < 0:
		f.append('[%s]'%letterGen(-n, stackLen, prev, enclosed))
	else:
		if prev != 0:
			diff = n-prev
			#Saves ~200 bytes but 20x longer
			#for x in range(min(diff, 0)-stackLen, max(diff, 0)+stackLen+1):
				#f.append(letterGen(x, stackLen - enclosed) + 's' + letterGen(diff - x, stackLen))

			f.append('s' + letterGen(diff, stackLen))
			f.append(letterGen(diff, stackLen - enclosed) + 's')
		x = 2
		while x*x < n:
			f.append(copy(x, letterGen(n//x, stackLen, prev, enclosed)) + letterGen(n%x, stackLen, prev, enclosed))
			x += 1
		f.append(letterGen(n-1, stackLen, prev, enclosed)+'()')
		if abs(n-stackLen) < n and stackLen > 1: f.append(letterGen(n-stackLen, stackLen, prev, enclosed) + '[]')
	letterCache[(n, stackLen, prev, enclosed)] = min(f, key=len)
	return letterCache[(n, stackLen, prev, enclosed)]

def s2BrainFlak(c, checkReverse = True):
	g = []
	c = c[::-1]
	stack = []
	out = []
	enclosed = 0

	if checkReverse:
		g.append(''.join(out) + s2BrainFlak(c, False) + '{({}<>)<>}<>')
		#for x in range(1,11): g.append(s2BrainFlak(list(c)+[chr(0)]*x, False) + '{({}<>)<>}<>')
	#if c and c[0] == chr(0):
	#	out.append('<>')
	#	while c[0] == chr(0):
	#		stack.append(0)
	#		out[0] = '(' + out[0] + ')'
	#		c = c[1:]


	for letter in range(len(c)):
		char = ord(c[letter])
		x = '(%s)'%letterGen(char, len(stack), stack[-1] if stack else 0, enclosed)

		if 's' in x:
			out[-1] = x.replace('s', out[-1])
			enclosed += 1
		else:
			out.append(x)
			enclosed = 1
		if checkReverse and c[letter+1:]:
			g.append(''.join(out) + '<>' + s2BrainFlak(c[letter+1:], False) + '{({}<>)<>}<>')
			m = min(list(map(ord, c[letter+1:])))-1
			#for i in range(1,m): g.append(''.join(out) + '<>' + s2BrainFlak(list(map(lambda x: chr(ord(x)-i), c[letter+1:])), False) + "{({}%s<>)<>}<>"%letterGen(i, 0))
			g.append(''.join(out) + '<>' + s2BrainFlak(list(map(lambda x: chr(ord(x)-m), c[letter+1:])), False) + "{({}%s<>)<>}<>"%letterGen(m, 0))
			#for x in range(1,11): g.append(''.join(out) + s2BrainFlak(list(c)+[chr(0)]*x, False) + '{({}<>)<>}<>')
		stack.append(char)
	g.append(''.join(out))
	return min(g, key=len)

Experimente online!

Uma solução recursiva simples que continuarei a melhorar ainda mais. Isso funciona muito bem com entradas menores, mas perde para a resposta Ruby da MegaTom por entradas mais longas.

Notas:

  • Isso precisa de uma pilha limpa para funcionar, caso contrário, as melhorias []se tornam inúteis (embora possam ser desativadas comentando algumas linhas, e elas apenas melhoram em cerca de 100 bytes um pouco).
  • Como esse é um algoritmo recursivo, levará mais tempo para caracteres com valores grandes. Por exemplo, o caractere ÿ (valor 255) leva 9 segundos para avaliar, onde cada caso de teste ao mesmo tempo leva 1,6 segundos. Cache implementado!
  • Idéia de verificar o inverso descaradamente emprestado da resposta do HyperNeutrino , economizando 800 bytes do total.
  • Alterei o total de todos os casos de teste de uma só vez para o total de cada caso de teste. Isso economiza alguns bytes adicionando mais usos ao operador de comprimento de pilha ( [])
  • ~ 200 bytes, escolhendo o mínimo de acrescentar a diferença entre os caracteres ou acrescentando-os (novamente, isso economiza bytes através do operador de comprimento da pilha)
  • Implementou um cache (que armazena em cache valores com base no tamanho da pilha), o que me permitiu verificar mais avenidas possíveis sem ultrapassar o limite de tempo. Isso salvou 1500 bytes do total.
    • Além disso, mudei o traço em no caso de teste de Shakespeare para um normal -. Isso cortou alguns bytes e muito tempo, dado o valor desse traço, foi de 8212: o.
  • Recorte 1200 bytes dos casos de teste mais longos, cortando-os em fatias e verificando se era mais curto alternar para a outra pilha, construa-a ao contrário e empurre-a novamente para a primeira pilha. A seguir, fatie ainda mais e economize tempo otimizando o intervalo mínimo de fatiamento.
  • Combinou a função de geração de número com a verificação de eficiências com a parte de caractere anterior em uma função recursiva. Há algumas seções aqui que economizam alguns bytes, mas estendem o tempo de execução do programa um pouco além do limite de um minuto.
    • Descomentar essas partes pode reduzir para 11394 bytes ... mas leva cerca de 16 minutos.

Exemplo de saídas:

<your brain-flak code here> (312 bytes):

(()(((((((((()()()){}()){}()){}){})){}())[(()[][]){}])[][])[[]])([]((((([]((()[][][]){})[][]){})(()[]){})[()[][]])[()][]))([()][]([[]]((((([][]){}())){}[])(()()()){})))([()()()][]((((((()()[[][]]([()()()()][]((([][])[]){}()))[])())[((()()[])){}{}])[()()][]){})[()()()]))(([][]){}())((()()()()()[]){}){({}<>)<>}<>

Experimente online!

Hello, World!( 142 bytes [Nota: o melhor atual anterior era 148 bytes e agora é 136 bytes]):

((()(((((((((()()()()){}){}){}()))){}{}())([][]){})[][])[[]])[((()[]){}){}])([()[]](((()(()[]([][]((()[][]){}[]))){}[])[()()()])))(([][][]){})

Experimente online!

Brincadeira
fonte
verificação de reversão economiza 800 bytes? o_O
HyperNeutrino 10/0318
Além disso, você deve armazenar em cache os resultados de sua função recursiva; economizaria muito tempo
HyperNeutrino 10/0318
@HyperNeutrino Caching significa que não posso usar o operador de tamanho de pilha, que realmente faz economizar muito, especialmente para entradas mais curtas
Jo rei
1
@HyperNeutrino Eu só percebi que pode ter um cache, enquanto eu fazer caches separados para cada altura da pilha
Jo rei
1
O seu meta-jogador de golfe com cérebros ineficazes superou a melhor resposta para um golfe regular com ataques de cérebros? O que.
Urna Mágica do Polvo
5

Ruby , 17398 bytes para todos os (novos) casos de teste

# cache for holding shortest push results
$p_cache = {} 

# Get code to push a number "a" to the stack,
#  given top of stack "b" and stack height "h"
def push a,b=nil,h=0
  return $p_cache[[a,b,h]] if $p_cache[[a,b,h]]
  arr = []
  if b
    arr.push "(({})#{add(a-b,h)})"
  end
  arr.push "(#{add a,h}  )"
  arr.push "([]#{add a-h,h}  )"
  i=2
  while i*i<=a && i<4
    arr.push "#{'('*(i-1)}#{push a/i,b,h}#{')'*(i-2)+'{}'*(i-1)}#{add(a%i,h)})"
    i+=1
  end
  $p_cache[[a,b,h]] = arr.min_by(&:length)
end


$cache = {}

# Get code to add a number "n" to the 3rd stack
#  given stack height "h" 

def add n,h=0
  return $cache[[n,h]] if $cache[[n,h]]
  arr = []
  if n > 0
    arr.push("()"*n)
  elsif n == 0
    return ""
  else
    if h > 0
      1.upto(-n/h){|i|
        arr.push "[#{'[]'*i}]#{add(h*i+n,h)}"
      }
    end
    arr.push "[#{add(-n,h)}]"
    return ($cache[[n,h]] = arr.min_by &:length)
  end
  
  if h > 0
    if n > h
      arr.push "[]#{add n-h,h}"
    else
      arr.push "[]#{add n-h}"
    end
  end
  
  i=2
  while i*i<=n && i<4
    arr.push "#{'('*(i-1)}#{add n/i,h}#{')'*(i-1)+'{}'*(i-1)}#{add(n%i,h)}"
    x=n-h-i+1
    if x > 0
      arr.push "#{'('*(i-1)}#{add x/i,h}#{')'*(i-1)}[]#{'{}'*(i-1)}#{add(x%i)}"
    end
    i+=1
  end
  $cache[[n,h]] = arr.min_by &:length
end

def push_arr(arr)
  i=0
  code = push(arr[0]) + "\n" + 
  arr.each_cons(2).map{|r|
    i+=1;push r[1],r[0],i
  }.join(?\n)
  
  while code =~ /^\((.*)\)\n(\(*)\{\}/
    code.gsub!(/^\((.*)\)\n(\(*)\{\}/, '\2\1')
  end
  
  code.split(/\n| /).join
end

# push a string to the stack
def push_string(text)
  push_arr text.chars.map(&:ord)
end

$str_cache = {}
# Push a string in reverse order
def push_string_r(text)
  return $str_cache[text] if $str_cache[text]
  a = [push_string(text)+"{({}<>)<>}<>", push_string(text.reverse)]
  
  min = text.bytes.min-1
  a.push push_arr(text.bytes.map{|x|x-min}) + "{({}<>#{add min})<>}<>"

  # Try cutting it into bits
  3.upto([text.length/20, 10].min)do|x|
    spl = x*9
    a.push push_string_r(text[spl..-1]) + "<>" + 
      push_string(text[0...spl]) + "{({}<>)<>}<>"
    spl = x*10
    a.push push_string_r(text[spl..-1]) + "<>" + 
      push_string(text[0...spl]) + "{({}<>)<>}<>"
  end
  
  a.map!{|code|code.gsub("<><>","")}

  $str_cache[text] = a.min_by &:length
end

Experimente online!


<your brain-flak code here>, 362 358 bytes

((((((((((()()()){}()){}()){}){})){}())[[][][][][]])[][])[()()()])((((((((([][][]()){}))){}{}()())[][]()())[[][]()])[][()])()()()()())([][][][]())(((([]([]())[]{}){})(()()()){})[[][()()()]])([]([][][]()){})((([][])[]){}())([]([][]())[]{})((([][]()())[]{})())((((((()()()()())[]{})[][()()]){})[()()()])((()()()){}){}())([][][][]())(((()())[]{}){}){({}<>)<>}<>

Experimente online!

MegaTom
fonte
Seu código leva mais de um minuto para todos os casos de teste de uma só vez (~ 950 bytes). É bom que ele produza um código bastante curto para os casos de teste individuais mais longos.
Jo rei
@JoKing, é bom que demore mais tempo para todos os casos: P
Christopher
@Christopher eu estava referindo-se à Must run under 1 minute for inputs up to 1024 bytesregra (embora seja muito mais rápido agora)
Jo rei
1
Embora ele realmente não importa para a execução de código, um objeto que armazena dados para uso posterior é chamado cache, não cash; p
Valor Ink
Os casos de teste estão esgotados
Christopher
4

Python 3 , 16222 bytes

cache = {}

def generate_number(num, height, level = 0, output = False): # Idea to use Stack Height inspired by Jo King
	if output: print(" " * level + str(num) + " " + str(height))
	if (num, height) in cache: return cache[(num, height)]
	if num == 0: return ""
	if num < 0: return "[" + generate_number(-num, height, level + 1, output) + "]"
	if num == height: return "[]"
	value = min((["[]" + generate_number(num - height, height, level + 1, output)] if height > num * 2 and abs(num - height) < num else []) + ["()" + generate_number(num - 1, height, level + 1, output)] + ["(%s)%s{}" % (generate_number(num // i, height, level + 1, output), "({})" * (i - 2)) for i in range(2, num) if num % i == 0], key = len)
	cache[(num, height)] = value
	return value

generate_number(256, 0, 0, False)

def generate_string(array):
	string = ""
	last = 0
	for height, num in enumerate(array):
		string = min("(" + string + generate_number(num - last, height) + ")", "<" + string + ">" + "(" + generate_number(num, height) + ")", key = len)
		last = num
	return string

a = lambda s: generate_string(list(map(ord, s)))

i = sys.stdin.read()
j = i[::-1]

print(min(a(j), a(i) + "{({}<>)<>}<>", key = len))

Experimente online!

Primeiro abaixo de 1000 para <your brain-flak code here>: D

Brain-Flak , 448 bytes

<((((((<(((<((((<((((<((((((()(()(()(()()()){}){}){}){})(()((()()[]){}){})({}){})()((()[]){}){})[()(([]){}){}])()()())>((()([])({}){}){})()((()(()()[]){}){}){})[()])()()()[])[()()()[]])>(()()([])({}){})(()(()[]){})({}){})[(()()()()()){}])()(()()()()()){})[(()()()){}])>(([])({}){})()(([]){}){})[()()()()()])[(()()()()){}])>((([])({}){}){})[((()()()()){}){}])[(()[])({}){}])()(()()()()()[])({}){})()()())[(()()()){}])(()()()()()){})>((()()()()[]){})

Experimente online!

(originalmente 827 para <your brain-flak code here>)

HyperNeutrino
fonte
Bounty inc, em breve.
Urna Mágica de Polvo
@MagicOctopusUrn cool ty: D
HyperNeutrino 13/03
Agora você tem 16222 bytes no total
Jo King
Espero 250 foi legal.
Magic Octopus Urn
@MagicOctopusUrn 250 é ótimo: D tyvm
HyperNeutrino 13/03
3

05AB1E , muitos bytes (meu primeiro BF)

ÇεDÑDg;<èUX÷VX"()"×"(ÿ)"YX-"()"׫"(ÿ)"}»"{({}<>)({<({}[()])><>({})<>}{}<><{}><>)<>}<>"«

Experimente online!


Tentativa extremamente básica de jogar golfe usando um código pré-fabricado de "multiplicação" do Brain-flak. Tudo o que isso faz é encontrar o par de divisores de soma menor para cada ponto de código ASCII e, em seguida, envia os dois pares de divisores como números. O código Brainflak ({}<>)({<({}[()])><>({})<>}{}<><{}>)é então anexado e executado em um loop até que todos os valores estejam na pilha alternativa.


Lista de pessoas que estou agradecendo:

  • DJMcMayhem por apontar (()())(()()())= ((()())())( -252 bytes)
  • DJMcMayhem por me mostrar como os loops devem funcionar ( -927 bytes).

Exemplo de golfe de <your brain-flak code here>em 3470 3218 2291 bytes:

Flak cerebral , 2291 bytes

((()()()()()())()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()()()()()()())()()()())
((()()()()()())()()()()()()()()()()()()())
((()()()())()()()())
((()()()()()()())()()()()()()())
((()()()()()())()()()()()()()()()()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()()()()())()()()()()()()())
((()()()()()()()()()())())
((()()()()())()()()())
((()()()()()())()()()()()()()()()()())
((()()()()()()()()())()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()())()()()())
((()()()()()()()()())()())
((()()())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()()())()()()()()()()()()()()()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()())()()()())
((()()()()()()()())()()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()()()()()())()()()()()()()()()()()()())
((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())
((()())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()){({}<>)({<({}[()])><>({})<>}{}<><{}><>)<>}<>

Experimente online!


Cada linha representa um personagem sendo jogado no golfe, superando a solução básica que eu postei em 60% , e, sabendo literalmente nada sobre Brainflak, sinto que essa é uma boa base do que não fazer. Marcarei a resposta daqui a pouco, no meio de outra coisa e tenho certeza de que posso melhorar isso. (Estou incluindo as novas linhas na contagem de bytes, porque não espero que isso aconteça).

Urna de polvo mágico
fonte
Aqui estão algumas dicas: 1) Se você estiver pressionando dois números (digamos 4 e 5 para obter 20), poderá juntá-los para salvar bytes. Compare (()()()())(()()()()())e ((()()()())())2) A multiplicação por uma constante pode ser muito menor que push(); multiply();. Por exemplo, para dobrar um número, você pode fazer em (({}){})vez de (()())({}<>)({<({}[()])><>({})<>}{}<><{}>). Mas essa não é uma linha de base terrível. Se você quiser mais de entrada, eu estou sempre feliz para conversar na terceira pilha
James
@DJMcMayhem Eu estava sinceramente procurando usar deltas entre números, reiniciando após cada delta negativo. Mas também vejo a idéia de diferenças ... Estou incorporando isso agora ... há outros problemas com isso também que estou corrigindo. Além disso, o código 05AB1E em si é puro, não que isso importe, mas eu quero refazer isso também.
Urna Mágica do Polvo 8/0318
Os casos de pontuação ainda não foram divulgados. Vai pingar em uma semana ou duas, quando eu posto (solução de teste caso otimização evitar)
Christopher
@DJMcMayhem Divisores de deltas seriam bons?
Urna de polvo mágico
Os casos de teste estão esgotados
Christopher
2

Brain-Flak

For each character (main loop)
(([])<{({}[()]<

Get the difference between the top two characters
(({}<>)<>[({})]<><({}<>)>)

Push an open paren on the other stack
<>(((((()()){}()){}){}){})

Retrieve difference
(<>{}<>)

Greater than zero
([(({})[(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

If
{{}

While non-zero
({

Add value if not 1
<(({})[()])>{()(<{}>)}{}

<

Divmod 2
({}(())(<()>)){({}[()]<({}([{}]()))>)}{}({}[({})])

Hold the div
({}<

Push the mod part
{({}[()]<
((((((()()){}()){}){}){})())
>)}{}

Put div down
>)

Open paren if div non-zero
(({}))
{(<({}<{}
(((((()()){}()){}){}){})
>)>)}{}

Less than 4
([([({})[()()()()](())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

If
{{}

Make that many 1s
{({}[()]<
((((((()()){}()){}){}){})())
>)}{}

End if
((<()>))}{}

End loop puting number of times run on the stack
>}{})

For each close push and pop
{({}[()]<
((((()()()()()){}){}){}())(((((((()()()()()){}){}){}())){}{})()())
>)}{}

End if
((<()>))}{}

Less than zero
([([({})(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

If
{{}

([{}]<

Push open bracket
((((((()()){}()){}()){}){}()){}())

>)

While non-zero
({

Add value if not 1
<(({})[()])>{()(<{}>)}{}

<

Divmod 2
({}(())(<()>)){({}[()]<({}([{}]()))>)}{}({}[({})])

Hold the div
({}<

Push the mod part
{({}[()]<
((((((()()){}()){}){}){})())
>)}{}

Put div down
>)

Open paren if div non-zero
(({}))
{(<({}<{}
(((((()()){}()){}){}){})
>)>)}{}

Less than 4
([([({})[()()()()](())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

If
{{}

Make that many 1s
{({}[()]<
((((((()()){}()){}){}){})())
>)}{}

End if
((<()>))}{}

End loop puting number of times run on the stack
>}{})

For each close push and pop
{({}[()]<
((((()()()()()){}){}){}())(((((((()()()()()){}){}){}())){}{})()())
>)}{}

Push close bracket
((((((()()){}()){}()){}()){}){}())

Endif
((<()>))}{}{}

Remove top character
<>{}

End of main loop
>)}{}{}

Close the open parens
<>>){({}[()]<(((((()()){}()){}){}){}())>)}{}

Reverse code
([]){({}[()]<({}<>)<>>)}{}<>

Experimente online!

Saída para <your brain-flak code here>, 582 bytes:

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
Post Rock Garf Hunter
fonte