Текст в мозг-Flak

13

Ваша задача состоит в том, чтобы превратить вводимый текст в код, который будет выводить текст.

Учебник взят здесь с разрешения здесь

Brain-Flak имеет два стека, известные как «левый» и «правый». Активный стек начинается слева. Если выгрузится пустой стек, он вернет 0. Вот и все. Других переменных нет. Когда программа запускается, каждый аргумент командной строки помещается в активный стек.

Единственными действительными символами в программе Brain-Flak являются ()[]{}<>, и они всегда должны быть сбалансированы. Есть два типа функций: Nilads и монады . Nilad это функция , которая принимает 0 аргументов. Вот все нилады:

  • () Оценивает до одного.
  • [] Оценивает высоту текущего стека.
  • {}Поп активный стек. Оценивает до совпавшего значения.
  • <>Переключить активный стек. Оценивает до нуля.

Они объединяются вместе, когда они оцениваются. Так что, если у нас есть «3» поверх активного стека, этот фрагмент:

()(){}

оценил бы, 1 + 1 + active.pop()что оценил бы до 5.

Монады берут один аргумент - кусок кода Brain-Flak. Вот все монады:

  • (n) Нажмите 'n' в активном стеке.
  • [n] Оценивается как отрицательное 'n'
  • {foo} Пока ноль не на вершине стека, сделайте foo.
  • <foo> Выполните foo, но оцените его как 0.

Эти функции также будут возвращать значение внутри них, поэтому

(()()())

Будет толкать 3 но

((()()()))

Буду нажимать 3 раза .

{}Будет оценивать на сумму всех прогонов. Так что, если бы у нас было 3 и 4 на вершине стека:

{{}}

оценил бы как 7.

Когда выполнение программы завершено, каждое значение, оставленное в активном стеке, печатается с новой строкой между. Значения в другом стеке игнорируются.

правила

  • Вы можете предположить, что Brain-Flak запускается с ascii out. ( -A)
  • Мозговой код не должен требовать ввода
  • Все стандартные правила применяются
  • Код должен выполняться в течение 1 минуты для любого ввода до 1024 байтов на TIO. (Если нет выхода TIO, предоставьте переводчика, и я запусту его на моей машине (моя машина должна быть в состоянии приблизиться к TIO)).
  • Вы должны поддерживать произвольную длину ввода.
  • Вы можете взять входные данные из файла.
  • Оптимизация для тестовых случаев не допускается
  • Требуется детерминированный вывод
  • Программы не должны быть чистыми в стеке

Контрольные примеры (попробуйте свой код на них, фактические тексты оценки будут опубликованы через 1-2 недели после публикации заявки)

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.

выигрыш

Чтобы выиграть, вы должны указать общую длину кода «мозгового штурма» для каждого из тестовых случаев, который будет опубликован через 1-2 недели после даты публикации. Наименьшая общая длина выигрывает.

НОТА!!!!!!:

Это не , длина вашего кода никак не повлияет на ваш окончательный счет. Создание чистого читаемого кода приветствуется. Благодарность!

Контрольные примеры

Вот

Кристофер
источник
Boxofsand
Кристофер
4
Мемы TNB - самые грязные мемы.
Волшебный Осьминог Урна
1
Хотел бы я удвоить +1, вместо этого я предложу награду, потому что хочу знать, как это должно было быть сделано. Первый ответ, который получает <your brain-flak code here>меньше 1000, присуждается за вознаграждение. Который я не могу отправить на другой день, упс; не заметил, как это было ново.
Волшебный Осьминог Урна
1
Кроме того, если диапазон ввода не ограничен печатаемым ASCII, то вы должны включить тестовые случаи, которые имеют каждое значение байта, включая байты NUL.
mbomb007
2
«Создание чистого, удобочитаемого кода приветствуется» в 05AB1E поспешно бросает вызов
Волшебная Осьминога Урна

Ответы:

13

Brain-Flak , 130 байт

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

Попробуйте онлайн!

Выход для <your brain-flak code here>: 5045 байт

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

Попробуйте онлайн!

HyperNeutrino
источник
1
Усиление мозгов усиливается
магическая урна осьминога
1
@MagicOctopusUrn metaflakking : D
HyperNeutrino
Тестовые случаи вышли
Кристофер
7

Python 3 , 17744 байта

Изменить: я добавил несколько вариантов, чтобы помочь гольфу в безопасных ситуациях стека.

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)

Попробуйте онлайн!

Простое рекурсивное решение , которое я буду продолжать дальнейшее совершенствование. Это делает очень хорошо с меньшими входами, но проигрывает Руби ответ MegaTom в течение более длительных входов.

Примечания:

  • Для работы требуется чистый стек, в противном случае улучшения []становятся бесполезными (хотя их можно отключить, закомментировав пару строк, и они улучшат его только примерно на 100 байт. ).
  • Поскольку это рекурсивный алгоритм, для символов с большими значениями это займет больше времени. Например, символ ÿ (значение 255) занимает 9 секунд для оценки, тогда как каждый тестовый пример занимает 1,6 секунды. Кеш реализован!
  • Идея проверки обратного бесстыдно позаимствована из ответа ГиперНейтрино , сэкономив 800 байт от общего количества.
  • Я изменил сумму всех тестовых случаев сразу на общую сумму каждого теста. Это экономит несколько байтов, добавляя больше применений для оператора длины стека ([] )
  • ~ 200 байтов от выбора минимума, предшествующего разнице между символами, или добавления их (опять же, это сохраняет байты с помощью оператора длины стека)
  • Реализовал кеш (который кеширует значения на основе длины стека), что позволило мне проверить больше возможных путей без превышения лимита времени. Это сэкономило 1500 байт от общего количества.
    • Кроме того, я переключил черту в тестовом примере Шекспира на нормальный -. Это сократило несколько байтов, и много времени, учитывая, что значение этой черты было 8212: o.
  • Вырежьте 1200 байтов из более длинных тестовых случаев, разрезав их на кусочки и проверив, было ли короче переключиться на другой стек, сконструировать его в обратном порядке и снова вернуть в первый стек. Далее, еще больше нарезки и экономия времени за счет оптимизации минимального диапазона нарезки.
  • Объединение функции генерации чисел с проверкой эффективности с предыдущей символьной частью в одну рекурсивную функцию. Здесь есть пара разделов, которые сохраняют несколько байтов, но немного расширяют время выполнения программы за пределы одной минуты.
    • Раскомментирование этих частей может сократить его до 11394 байт ... но это займет около 16 минут.

Пример выходов:

<your brain-flak code here> (312 байт):

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

Попробуйте онлайн!

Hello, World!( 142 байта [Примечание: текущий предыдущий лучший был 148 байтов , и теперь 136 байтов]):

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

Попробуйте онлайн!

Джо Кинг
источник
проверка обращения экономит 800 байт? o_O
HyperNeutrino
также вы должны кешировать результаты вашей рекурсивной функции; сэкономит столько времени
HyperNeutrino
@HyperNeutrino Кэширование означает, что я не могу использовать оператор длины стека, который действительно много экономит, особенно для более коротких входных данных
Джо Кинг,
1
@HyperNeutrino Я только что понял, что у меня может быть кеш, если я создаю отдельные кеши для каждой высоты стека
Джо Кинг,
1
Ваш мета-гольфист без ума от игры в гольф - лучший ответ для обычного гольфа? Какая.
Волшебная Осьминог Урна
5

Ruby , 17398 байт для всех (новых) тестов

# 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

Попробуйте онлайн!


<your brain-flak code here>, 362 358 байт

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

Попробуйте онлайн!

MegaTom
источник
Ваш код занимает более 1 минуты для всех тестовых случаев одновременно (~ 950 байт). Хорошо, что он генерирует довольно короткий код для более длинных отдельных тестовых случаев.
Джо Кинг
@ Шучу, хорошо, что на все случаи уходит больше времени: P
Кристофер
@Christopher Я имел в виду Must run under 1 minute for inputs up to 1024 bytesправило (хотя теперь оно намного быстрее)
Джо Кинг,
1
Хотя на самом деле это не имеет значения для выполнения кода, объект, который хранит данные для последующего использования, называется a cache, а не cash; p
Value Ink
Тестовые случаи вышли
Кристофер
4

Python 3 , 16222 байта

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))

Попробуйте онлайн!

Сначала ниже 1000 для <your brain-flak code here>: D

Brain-Flak , 448 байт

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

Попробуйте онлайн!

(первоначально 827 для <your brain-flak code here>)

HyperNeutrino
источник
Bounty inc, скоро.
Волшебная Осьминог Урна
@MagicOctopusUrn круто ты: D
HyperNeutrino
Теперь у вас всего 16222 байта
Джо Кинг,
Надеюсь 250 было круто.
Волшебная Осьминог Урна
@MagicOctopusUrn 250 великолепен: D tyvm
HyperNeutrino
3

05AB1E , слишком много байтов (мой первый BF что-нибудь)

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

Попробуйте онлайн!


Чрезвычайно простая попытка игры в гольф с использованием готового кода для умножения мозгов. Все, что он делает - находит пару делителей с наименьшей суммой для каждой кодовой точки ASCII, а затем переводит обе эти пары делителей в числа. Затем код Brainflak ({}<>)({<({}[()])><>({})<>}{}<><{}>)добавляется и выполняется в цикле, пока все значения не окажутся в альтернативном стеке.


Список людей, которых я благодарю:

  • DJMcMayhem за указание (()())(()()())= ((()())())( -252 bytes)
  • DJMcMayhem за то, что показал мне, как должны работать циклы ( -927 bytes).

Пример гольфа <your brain-flak code here>в 3470 3218 2291 байт:

Brain-Flak , 2291 байт

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

Попробуйте онлайн!


Каждый ряд представляет одного персонажа, которого играют в гольф, это превосходит базовое решение, которое я опубликовал, на 60% , и, зная буквально ничего о Brainflak, я чувствую, что это хорошая основа того, чего не следует делать. Я наберу ответ через некоторое время, в середине чего-то другого, и я уверен, что могу улучшить это. (Я включаю новые строки в подсчет байтов, потому что не ожидаю, что это победит).

Урна волшебного осьминога
источник
Вот несколько советов: 1) Если вы нажимаете два числа (скажем, 4 и 5, чтобы получить 20), то вы можете собрать их вместе, чтобы сохранить байты. Сравните (()()()())(()()()()())и ((()()()())())2) Умножение на константу может быть намного короче push(); multiply();. Например, чтобы удвоить число, вы можете сделать, (({}){})а не (()())({}<>)({<({}[()])><>({})<>}{}<><{}>). Но это не ужасная базовая линия. Если вы хотите больше информации, я всегда рад поболтать в третьем стэке
James
@DJMcMayhem Я честно хотел использовать дельты между числами, перезапускаясь после каждой отрицательной дельты. Но я также вижу идею различий ... Я включаю это сейчас ... есть и другие проблемы с этим, которые я исправляю. Кроме того, сам код 05AB1E не закрашен, не то чтобы это имело значение, но я хочу повторить это тоже.
Волшебный осьминог Урна
Случаи счета еще не вышли. Будет пинг через неделю или 2, когда я отправлю сообщение (избегайте решения по оптимизации тестового примера)
Кристофер
@DJMcMayhem Хорошо ли делители дельт?
Волшебная Осьминог Урна
Тестовые случаи вышли
Кристофер
2

Мозг-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
([]){({}[()]<({}<>)<>>)}{}<>

Попробуйте онлайн!

Выход для <your brain-flak code here>, 582 байта:

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
Пост Рок Гарф Хантер
источник