Tekst do Brain-Flak


13

Wyzwanie polega na przekształceniu tekstu wejściowego w kod wyładowania mózgowego, który wyśle ​​tekst.

Samouczek wzięty stąd za zgodą tutaj

Brain-Flak ma dwa stosy, znane jako „lewy” i „prawy”. Aktywny stos zaczyna się od lewej. Jeśli pusty stos zostanie wyskakujący, zwróci 0. To wszystko. Żadnych innych zmiennych. Po uruchomieniu programu każdy argument wiersza poleceń jest przekazywany do aktywnego stosu.

Jedynymi poprawnymi znakami w programie Brain-Flak są ()[]{}<>i zawsze muszą być zrównoważone. Istnieją dwa rodzaje funkcji: Nilady i Monady . Nilad to funkcja, która zajmuje 0 argumenty. Oto wszystkie nilady:

  • () Ocenia jeden.
  • [] Ocenia wysokość obecnego stosu.
  • {}Pop aktywny stos. Ocenia wartość wyskakującą.
  • <>Przełącz aktywny stos. Ocenia zero.

Są one łączone razem podczas oceny. Gdybyśmy mieli „3” nad aktywnym stosem, ten fragment:

()(){}

oceniałby na, 1 + 1 + active.pop()co ocenia na 5.

Monady biorą jeden argument, kawałek kodu Brain-Flak. Oto wszystkie monady:

  • (n) Naciśnij 'n' na aktywnym stosie.
  • [n] Ocenia ujemne „n”
  • {foo} Podczas gdy zero nie znajduje się na szczycie stosu, zrób foo.
  • <foo> Wykonaj foo, ale oceń go na 0.

Funkcje te zwrócą również wartość w nich, więc

(()()())

Popchnie 3 ale

((()()()))

Popchnie 3 dwa razy .

{}Oceni do sumy wszystkich tras. Więc gdybyśmy mieli „3” i „4” na górze stosu:

{{}}

oceniłby jako 7.

Po zakończeniu wykonywania programu drukowana jest każda wartość pozostawiona na aktywnym stosie, z nową linią pomiędzy. Wartości na drugim stosie są ignorowane.

Zasady

  • Możesz założyć, że Brain-Flak działa bez ascii. ( -A)
  • Kod flakowania mózgu NIE może wymagać wprowadzania
  • Obowiązują wszystkie standardowe zasady
  • Kod musi zostać uruchomiony w ciągu 1 minuty dla dowolnego wejścia do 1024 bajtów w TIO. (Jeśli wyjście TIO nie jest dostępne, dostarcz tłumacza i uruchomię go na moim komputerze (mój komputer powinien być w stanie zbliżyć się do TIO)).
  • Musisz obsługiwać wprowadzanie dowolnej długości.
  • Możesz pobrać dane z pliku.
  • Optymalizacja przypadków testowych jest niedozwolona
  • Wymagana jest deterministyczna wydajność
  • Programy nie muszą być czyszczone w stosie

Przypadki testowe (wypróbuj na nich swój kod, faktyczne wyniki punktacji zostaną opublikowane w ciągu 1-2 tygodni po opublikowaniu wyzwania)

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.

Zwycięski

Aby wygrać, musisz podać całkowitą długość kodu ataku mózgowego podanego przez każdy z przypadków testowych, który zostanie wydany 1-2 tygodnie po dacie publikacji. Wygrywa najkrótsza długość całkowita.

UWAGA!!!!!!:

To nie jest , długość kodu nie wpłynie w żaden sposób na końcowy wynik. Docenione jest tworzenie czytelnego kodu. Dzięki!

Przypadki testowe

tutaj



4
Memy TNB są najdzikszymi memami.
Magic Octopus Urn

1
Chciałbym podwoić +1, zamiast tego zaoferuję nagrodę, ponieważ chcę wiedzieć, jak to miało być zrobione. Pierwsza odpowiedź, która nie przekroczy <your brain-flak code here>1000, jest nagradzana. Których nie mogę wysłać na inny dzień, ups; nie zauważyłem, jak to było nowe.
Magic Octopus Urn

1
Ponadto, jeśli zakres danych wejściowych nie jest ograniczony do drukowalnego kodu ASCII, należy uwzględnić przypadki testowe, które mają każdą wartość bajtu, w tym bajty NUL.
mbomb007

2
„Doceniamy tworzenie czystego, czytelnego kodu” pośpiesznie rzuca wyzwanie w 05AB1E
Magic Octopus Urn

Odpowiedzi:


13

Brain-Flak , 130 bajtów

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

Wypróbuj online!

Wyjście dla <your brain-flak code here>: 5045 bajtów

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

Wypróbuj online!


1
Flakking mózgu nasila się
Magiczna ośmiornica Urn

1
@MagicOctopusUrn metaflakking : D
HyperNeutrino 15.03.2018

Przypadki testowe są niedostępne
Christopher

7

Python 3 , 17744 bajty

Edycja: Dodałem kilka opcji, aby pomóc golfowi w bezpiecznych sytuacjach.

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)

Wypróbuj online!

Prosty rekurencyjny rozwiązanie, które będę kontynuować dalszej poprawy. Robi to bardzo dobrze przy mniejszych nakładach, ale przegrywa z odpowiedzią Ruby MegaTom na dłuższe nakłady.

Uwagi:

  • Wymaga to czystego stosu do działania, w przeciwnym razie ulepszenia []stają się bezużyteczne (choć można je wyłączyć, komentując kilka wierszy i poprawiając je tylko o około 100 bajtów ).
  • Ponieważ jest to algorytm rekurencyjny, będzie on trwał dłużej dla znaków o dużych wartościach. Na przykład znak ÿ (wartość 255) zajmuje 9 sekund, aby ocenić, przy czym każdy przypadek testowy jednocześnie zajmuje 1,6 sekundy. Wbudowana pamięć podręczna!
  • Pomysł sprawdzenia wstydu bezwstydnie zapożyczonego z odpowiedzi HyperNeutrino , oszczędzając w sumie 800 bajtów.
  • Zmieniłem sumę ze wszystkich przypadków testowych jednocześnie na sumę każdego przypadku testowego. Oszczędza to niektóre bajty, dodając więcej zastosowań dla operatora długości stosu ( [])
  • ~ 200 bajtów od wybrania minimum poprzedzającego różnicę między znakami lub dodania ich (ponownie, to oszczędza bajty dzięki operatorowi długości stosu)
  • Zaimplementowano pamięć podręczną (która buforuje wartości na podstawie długości stosu), co pozwoliło mi sprawdzić więcej możliwych dróg bez przekraczania limitu czasu. Pozwoliło to zaoszczędzić 1500 bajtów.
    • Ponadto zmieniłem myślnik em w przypadku testowym Szekspira na normalny -. To wycięło kilka bajtów i dużo czasu, biorąc pod uwagę wartość tego myślnika, wyniosło 8212: o.
  • Wytnij 1200 bajtów z dłuższych przypadków testowych, pocinając je na plasterki i sprawdzając, czy przejście do drugiego stosu było krótsze, skonstruuj w odwrotnej kolejności i ponownie wypchnij z powrotem do pierwszego stosu. Następnie jeszcze więcej krojenia i oszczędność czasu dzięki optymalizacji minimalnego zakresu krojenia.
  • Połączono funkcję generowania liczb z sprawdzaniem wydajności z poprzednią częścią znaku w jedną funkcję rekurencyjną. Jest tu kilka sekcji, które oszczędzają niektóre bajty, ale wydłużają czas działania programu nieco ponad limit jednej minuty.
    • Odkomentowanie tych części może zmniejszyć do 11394 bajtów ... ale zajmuje to około 16 minut.

Przykładowe wyniki:

<your brain-flak code here> (312 bajtów):

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

Wypróbuj online!

Hello, World!( 142 bajty [Uwaga: obecny poprzedni najlepszy wynosił 148 bajtów , a teraz 136 bajtów]):

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

Wypróbuj online!


sprawdzanie odwrócenia oszczędza 800 bajtów? o_O
HyperNeutrino

powinieneś także buforować wyniki swojej funkcji rekurencyjnej; zaoszczędziłoby tyle czasu
HyperNeutrino

@HyperNeutrino Buforowanie oznacza, że ​​nie mogę użyć operatora długości stosu, co tak naprawdę oszczędza dużo, szczególnie w przypadku krótszych danych wejściowych
Jo King

1
@HyperNeutrino Właśnie zdałem sobie sprawę, że mogę mieć pamięć podręczną, o ile tworzę osobne pamięci podręczne dla każdej wysokości stosu
Jo King

1
Twój meta-golfista, który uderzył mózg, wygrał w golfa najlepszą odpowiedzią na regularne gry w golfa? Co.
Magic Octopus Urn

5

Ruby , 17398 bajtów dla wszystkich (nowych) przypadków testowych

# 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

Wypróbuj online!


<your brain-flak code here>, 362 358 bajtów

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

Wypróbuj online!


Twój kod zajmuje więcej niż 1 minutę dla wszystkich przypadków testowych jednocześnie (~ 950 bajtów). Dobrze, że produkuje dość krótki kod dla dłuższych pojedynczych przypadków testowych.
Jo King

@JoKing, to w porządku, że trwa to dłużej w każdym przypadku: P
Christopher

@Christopher Miałem na myśli Must run under 1 minute for inputs up to 1024 byteszasadę (choć teraz jest znacznie szybsza)
Jo King

1
Chociaż w rzeczywistości nie ma to znaczenia dla wykonania kodu, obiekt, który przechowuje dane do późniejszego wykorzystania, nazywa się a cache, not cash; p
Value Ink

Przypadki testowe są niedostępne
Christopher

4

Python 3 , 16222 bajtów

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

Wypróbuj online!

Najpierw poniżej 1000 dla <your brain-flak code here>: D

Brain-Flak , 448 bajtów

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

Wypróbuj online!

(pierwotnie 827 dla <your brain-flak code here>)


Wkrótce Bounty inc.
Magic Octopus Urn

@MagicOctopusUrn cool ty: D
HyperNeutrino 13.03.2018

Łącznie masz teraz 16222 bajty
Jo King

Nadzieja 250 była fajna.
Magic Octopus Urn

@MagicOctopusUrn 250 jest świetny: D tyvm
HyperNeutrino 13.03.2018

3

05AB1E , za dużo bajtów (Moje pierwsze BF cokolwiek)

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

Wypróbuj online!


Niezwykle podstawowa próba gry w golfa przy użyciu gotowego kodu „mnożenia” Brain-flak. Wszystko to polega na znalezieniu pary dzielników o najmniejszej sumie dla każdego punktu kodowego ASCII, a następnie wypycha obie pary dzielników jako liczby. Kod Brainflak ({}<>)({<({}[()])><>({})<>}{}<><{}>)jest następnie dodawany i wykonywany w pętli, aż wszystkie wartości znajdą się na alternatywnym stosie.


Lista osób, którym dziękuję:

  • DJMcMayhem za wskazanie (()())(()()())= ((()())())( -252 bytes)
  • DJMcMayhem za pokazanie mi, jak powinny działać pętle ( -927 bytes).

Przykład golfowego z <your brain-flak code here>przy 3470 3218 2291 bajtów:

Brain-Flak , 2291 bajtów

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

Wypróbuj online!


Każdy rząd reprezentuje jedną postać, która gra w golfa, co jest o 60% lepsze niż podstawowe rozwiązanie, które napisałem , i idąc, wiedząc dosłownie nic o Brainflak, czuję, że jest to dobra podstawa tego, czego nie należy robić. Zaraz zdobędę odpowiedź, w środku czegoś innego i jestem pewien, że mogę to poprawić. (Uwzględniam nowe wiersze w liczbie bajtów, ponieważ nie oczekuję, że to wygra).


Oto kilka wskazówek: 1) Jeśli przesuwasz dwie liczby (powiedzmy 4 i 5, aby uzyskać 20), możesz je połączyć, aby zaoszczędzić bajty. Porównaj (()()()())(()()()()())i ((()()()())())2) Mnożenie przez stałą może być znacznie krótsze niż push(); multiply();. Na przykład, aby podwoić liczbę, możesz (({}){})zamiast tego zrobić (()())({}<>)({<({}[()])><>({})<>}{}<><{}>). Ale to nie jest okropny punkt odniesienia. Jeśli chcesz uzyskać więcej informacji, zawsze chętnie rozmawiam na trzecim stosie
James

@DJMcMayhem Szczerze chciałem użyć delty między liczbami, restartując się po każdej delcie ujemnej. Ale widzę też pomysł na różnice ... Teraz włączam to ... są też inne problemy z tym, które naprawiam. Ponadto sam kod 05AB1E jest nieoznaczony, nie ma to znaczenia, ale chcę to również powtórzyć.
Magic Octopus Urn

Liczba przypadków nie została jeszcze wydana. Będę pingować za tydzień lub 2, kiedy piszę (unikaj rozwiązania optymalizacji przypadków testowych)
Christopher

@DJMcMayhem Czy dzielniki delt byłyby dobre?
Magic Octopus Urn

Przypadki testowe są niedostępne
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
([]){({}[()]<({}<>)<>>)}{}<>

Wypróbuj online!

Dane wyjściowe dla <your brain-flak code here>582 bajtów:

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.