Teks ke Brain-Flak


13

Tantangan Anda adalah mengubah input teks ke kode brain-flak yang akan menampilkan teks.

Tutorial diambil dari sini dengan izin di sini

Brain-Flak memiliki dua tumpukan, yang dikenal sebagai 'kiri' dan 'kanan'. Tumpukan aktif dimulai dari kiri. Jika tumpukan kosong muncul, itu akan mengembalikan 0. Itu saja. Tidak ada variabel lain. Ketika program dimulai, setiap argumen baris perintah didorong ke tumpukan aktif.

Satu-satunya karakter yang valid dalam program Brain-Flak adalah ()[]{}<>, dan mereka harus selalu seimbang. Ada dua jenis fungsi: Nilads dan monad . Sebuah nilad adalah fungsi yang mengambil 0 argumen. Ini semua nilad:

  • () Mengevaluasi satu.
  • [] Mengevaluasi ketinggian tumpukan saat ini.
  • {}Pop stack aktif. Mengevaluasi nilai yang muncul.
  • <>Alihkan tumpukan aktif. Mengevaluasi ke nol.

Ini digabungkan bersama ketika mereka dievaluasi. Jadi jika kami memiliki '3' di atas tumpukan aktif, cuplikan ini:

()(){}

akan mengevaluasi 1 + 1 + active.pop()yang akan mengevaluasi ke 5.

Monad mengambil satu argumen, sepotong kode Brain-Flak. Ini semua monad:

  • (n) Tekan 'n' pada tumpukan aktif.
  • [n] Mengevaluasi ke negatif 'n'
  • {foo} Meskipun nol tidak ada di atas tumpukan, lakukan foo.
  • <foo> Jalankan foo, tetapi evaluasilah sebagai 0.

Fungsi-fungsi ini juga akan mengembalikan nilai di dalamnya, jadi

(()()())

Akan mendorong 3 tetapi

((()()()))

Akan mendorong 3 dua kali .

The {}akan mengevaluasi untuk jumlah semua berjalan. Jadi jika kita memiliki '3' dan '4' di bagian atas tumpukan:

{{}}

akan dievaluasi sebagai 7.

Ketika program selesai dieksekusi, setiap nilai yang tersisa di tumpukan aktif dicetak, dengan baris baru di antaranya. Nilai pada tumpukan lainnya diabaikan.

Aturan

  • Anda dapat mengasumsikan bahwa Brain-Flak dijalankan dengan ascii. ( -A)
  • Kode brain-flak TIDAK harus memerlukan input
  • Semua aturan standar berlaku
  • Kode harus dijalankan dalam 1 menit untuk setiap input hingga 1024 byte pada TIO. (Jika tidak ada output TIO tersedia, berikan juru bahasa dan saya akan menjalankannya di mesin saya (mesin saya seharusnya bisa mendekati TIO)).
  • Anda harus mendukung input panjang yang berubah-ubah.
  • Anda dapat mengambil input dari file.
  • Optimalisasi untuk uji kasus tidak diperbolehkan
  • Output deterministik diperlukan
  • Program tidak perlu stack clean

Uji kasus (coba kode Anda pada ini, teks skor aktual akan dirilis dalam 1-2 minggu setelah tantangan diposting)

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.

Kemenangan

Untuk menang, Anda harus memberikan total panjang kode kritik otak yang diberikan oleh masing-masing kasus uji yang akan dirilis 1-2 minggu setelah tanggal posting. Total panjang terpendek menang.

CATATAN!!!!!!:

Ini bukan , panjang kode Anda tidak akan mempengaruhi skor akhir Anda dengan cara apa pun. Membuat kode yang mudah dibaca bersih dihargai. Terima kasih!

Uji kasus

sini



4
Meme mem TNB adalah memk paling keren.
Magic Octopus Mm

1
Seandainya saya bisa menggandakan +1 ini, sebagai gantinya saya akan menawarkan hadiah karena saya ingin tahu bagaimana ini seharusnya dilakukan. Jawaban pertama yang mendapat di <your brain-flak code here>bawah 1000 diberikan hadiah. Yang saya tidak dapat memposting untuk hari lain, whoops; tidak menyadari betapa baru ini.
Magic Octopus Urn

1
Juga, jika rentang input tidak terbatas pada ASCII yang dapat dicetak, maka Anda harus menyertakan test case yang memiliki nilai setiap byte, termasuk NUL byte.
mbomb007

2
"Membuat kode yang bersih dan mudah dibaca dihargai" dengan tergesa-gesa melakukan tantangan di 05AB1E
Magic Octopus Mm

Jawaban:


13

Brain-Flak , 130 byte

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

Cobalah online!

Output untuk <your brain-flak code here>: 5045 byte

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

Cobalah online!


1
Brain-flakking mengintensifkan
Magic Gurita Guci

1
@MagicOctopusUrn metaflakking : D
HyperNeutrino

Test case tidak ada
Christopher

7

Python 3 , 17744 byte

Sunting: Saya telah menambahkan beberapa opsi untuk membantu golf dalam situasi yang aman.

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)

Cobalah online!

Sebuah sederhana solusi rekursif yang saya akan terus meningkatkan lebih lanjut. Ini sangat baik dengan input yang lebih kecil, tetapi kalah dari jawaban Ruby MegaTom untuk input yang lebih lama.

Catatan:

  • Ini membutuhkan setumpuk yang bersih untuk beroperasi, jika tidak, perbaikan dengan []menjadi tidak berguna (meskipun mereka dapat dinonaktifkan dengan mengomentari beberapa baris, dan mereka hanya memperbaikinya sekitar 100 byte cukup sedikit).
  • Karena ini adalah algoritma rekursif, itu akan memakan waktu lebih lama untuk karakter dengan nilai besar. Misalnya, karakter ÿ (nilai 255) membutuhkan 9 detik untuk mengevaluasi, di mana setiap uji sekaligus membutuhkan 1,6 detik. Cache diimplementasikan!
  • Gagasan memeriksa kebalikan yang dipinjam tanpa malu dari jawaban HyperNeutrino , menghemat 800 byte dari total.
  • Saya mengubah total dari semua kasus uji sekaligus ke total setiap kasus uji. Ini menghemat beberapa byte dengan menambahkan lebih banyak kegunaan untuk operator panjang tumpukan ( [])
  • ~ 200 byte dari memilih minimum untuk mengubah perbedaan antara karakter, atau menambahkannya (sekali lagi, ini menghemat byte melalui operator panjang tumpukan)
  • Menerapkan cache (yang menyimpan nilai berdasarkan panjang tumpukan), yang memungkinkan saya untuk memeriksa lebih banyak jalan yang mungkin tanpa melampaui batas waktu. Ini menghemat 1500 byte dari total.
    • Juga, saya mengganti em dasbor dalam test case Shakespeare ke normal -. Ini memotong beberapa byte, dan banyak waktu yang diberikan nilai dasbor em adalah 8212: o.
  • Potong 1.200 byte dari test case yang lebih panjang dengan memotongnya menjadi irisan dan memeriksa apakah lebih pendek untuk beralih ke stack lain, membangunnya secara terbalik, dan mendorongnya kembali ke stack pertama lagi. Selanjutnya, bahkan lebih banyak memotong, dan menghemat waktu dengan mengoptimalkan rentang pemotongan minimum.
  • Menggabungkan fungsi menghasilkan angka dengan memeriksa efisiensi dengan bagian karakter sebelumnya menjadi satu fungsi rekursif. Ada beberapa bagian di sini yang menyimpan beberapa byte, tetapi memperpanjang runtime program sedikit di luar batas satu menit.
    • Membatalkan komentar bagian-bagian itu dapat mengurangi hingga 11394 byte ... tetapi membutuhkan waktu sekitar 16 menit.

Output contoh:

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

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

Cobalah online!

Hello, World!( 142 byte [Catatan: Terbaik sebelumnya saat ini adalah 148 byte , dan sekarang 136 byte]):

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

Cobalah online!


memeriksa pembalikan menghemat 800 byte? o_O
HyperNeutrino

Anda juga harus menyimpan hasil fungsi rekursif Anda; akan menghemat banyak waktu
HyperNeutrino

@HyperNeutrino Caching berarti saya tidak bisa menggunakan operator panjang tumpukan, yang sebenarnya menghemat banyak, terutama untuk input yang lebih pendek
Jo King

1
@HyperNeutrino Saya baru sadar bahwa saya dapat memiliki cache, selama saya membuat cache terpisah untuk setiap tinggi stack
Jo King

1
Meta-pegolf brain-flak Anda keluar-golf jawaban terbaik untuk golf reguler brain-flak? Apa.
Magic Octopus Urn

5

Ruby , 17398 byte untuk semua kasus uji (baru)

# 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

Cobalah online!


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

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

Cobalah online!


Kode Anda membutuhkan lebih dari 1 menit untuk semua kasus uji sekaligus (~ 950 byte). Ada baiknya bahwa itu menghasilkan kode yang cukup singkat untuk kasus uji individu yang lebih lama.
Jo King

@JoKing tidak apa-apa bahwa dibutuhkan lebih lama untuk setiap kasus: P
Christopher

@Christopher saya mengacu pada Must run under 1 minute for inputs up to 1024 bytesaturan (meskipun jauh lebih cepat sekarang)
Jo King

1
Meskipun sebenarnya tidak masalah untuk eksekusi kode, sebuah objek yang menyimpan data untuk digunakan nanti disebut cache, tidak cash; p
Value Ink

Test case tidak ada
Christopher

4

Python 3 , 16222 byte

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

Cobalah online!

Pertama di bawah 1000 untuk <your brain-flak code here>: D

Brain-Flak , 448 byte

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

Cobalah online!

(awalnya 827 untuk <your brain-flak code here>)


Inc karunia, segera.
Magic Octopus Urn

@MagicOctopusUrn ty keren: D
HyperNeutrino

Anda sekarang berada di total 16222 byte
Jo King

Harapan 250 keren.
Magic Octopus Urn

@MagicOctopusUrn 250 hebat: D tyvm
HyperNeutrino

3

05AB1E , terlalu banyak byte (BF apa pun pertama saya)

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

Cobalah online!


Upaya yang sangat mendasar dalam bermain golf menggunakan kode "otak multiplikasi" premade. Yang dilakukan adalah menemukan pasangan pembagi dengan jumlah terkecil untuk setiap titik kode ASCII, lalu mendorong kedua pasangan pembagi tersebut sebagai angka. Kode Brainflak({}<>)({<({}[()])><>({})<>}{}<><{}>) kemudian ditambahkan dan dieksekusi dalam satu lingkaran sampai semua nilai berada di tumpukan alternatif.


Daftar orang yang saya ucapkan terima kasih:

  • DJMcMayhem untuk menunjukkan (()())(()()()) = ((()())())(-252 bytes )
  • DJMcMayhem untuk menunjukkan kepada saya bagaimana loop harus bekerja (-927 bytes ).

Contoh golf <your brain-flak code here>dengan 3470 3218 2291 byte:

Brain-Flak , 2291 byte

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

Cobalah online!


Setiap baris mewakili satu karakter yang sedang golf, ini mengalahkan solusi dasar saya diposting oleh 60% , dan pergi untuk mengetahui apa-apa tentang Brainflak saya merasa ini adalah dasar yang baik dari apa yang tidak boleh dilakukan. Saya akan memberi jawaban dalam beberapa saat, di tengah-tengah hal lain dan saya yakin saya bisa memperbaiki ini. (Saya memasukkan baris baru dalam byte-count karena saya tidak berharap ini menang).


Berikut adalah beberapa tips: 1) Jika Anda menekan dua angka (katakan 4 dan 5 untuk mendapatkan 20), maka Anda bisa mendorong mereka bersama untuk menghemat byte. Bandingkan (()()()())(()()()()())dan ((()()()())())2) Perkalian dengan konstanta bisa lebih pendek dari push(); multiply();. Misalnya, untuk menggandakan angka, Anda bisa melakukannya (({}){})daripada (()())({}<>)({<({}[()])><>({})<>}{}<><{}>). Tapi ini bukan garis dasar yang mengerikan. Jika Anda ingin lebih banyak input, saya selalu senang mengobrol di tumpukan ketiga
James

@DJMcMayhem Saya benar-benar ingin menggunakan delta di antara angka, memulai kembali setelah setiap delta negatif. Tapi saya melihat ide untuk perbedaan juga ... Saya menggabungkan itu sekarang ... ada beberapa masalah lain dengan ini yang saya perbaiki. Juga, kode 05AB1E itu sendiri tidak ungolfed, bukan itu penting, tapi saya ingin mengulanginya juga.
Magic Gurita Guci

Kasing skor belum keluar. Akan melakukan ping dalam satu atau dua minggu ketika saya memposting (hindari solusi optimasi test case)
Christopher

@DJMcMayhem Akankah pembagi delta baik?
Magic Octopus Urn

Uji kasus keluar
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
([]){({}[()]<({}<>)<>>)}{}<>

Cobalah online!

Output untuk <your brain-flak code here>, 582 byte:

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.