Metin-Beyin Flak


13

Zorluk, giriş metnini, metnin çıktısını alacak beyin flak koduna çevirmektir.

Alınan öğretici burada izni ile burada

Brain-Flak'ın 'sol' ve 'sağ' olarak bilinen iki yığını vardır. Aktif yığın soldan başlar. Boş bir yığın açılırsa 0 döndürür. İşte bu kadar. Başka değişken yok. Program başladığında, her komut satırı bağımsız değişkeni etkin yığına iletilir.

Brain-Flak programındaki tek geçerli karakterler ()[]{}<>ve her zaman dengelenmeleri gerekir. İki tür işlev vardır: Niladlar ve Monadlar . Bir nilad 0 argüman alan bir fonksiyondur. İşte tüm niladlar:

  • () Birini değerlendirir.
  • [] Geçerli yığının yüksekliğini değerlendirir.
  • {}Etkin yığını açın. Açılan değeri değerlendirir.
  • <>Etkin yığını aç / kapat. Sıfıra değerlendirir.

Bunlar değerlendirildiklerinde birleştirilirler. Aktif yığının üstünde bir '3' olsaydı, bu pasaj:

()(){}

için değerlendirirsiniz 1 + 1 + active.pop()5'e değerlendirmek hangi.

Monadlar bir argüman alır, bir beyin-Flak kodu. İşte tüm monadlar:

  • (n) Etkin yığın üzerinde 'n' tuşuna basın.
  • [n] Negatif 'n' değerini değerlendirir
  • {foo} Sıfır yığının üstünde olmasa da, foo yapın.
  • <foo> Foo'yu yürütün, ancak 0 olarak değerlendirin.

Bu işlevler ayrıca içindeki değeri de döndürür,

(()()())

3 itecek ama

((()()()))

3'ü iki kez itecek .

{}Bütün çalışmalarda toplamına değerlendirecektir. Eğer yığının üstünde '3' ve '4' varsa:

{{}}

7 olarak değerlendirir.

Program yürütüldüğünde, etkin yığın üzerinde kalan her bir değer, arasında bir satırsonu olacak şekilde yazdırılır. Diğer yığındaki değerler yok sayılır.

kurallar

  • Brain-Flak'ın ascii yokken çalıştırıldığını varsayabilirsiniz. ( -A)
  • Brain-flak kodu giriş gerektirmemelidir
  • Tüm standart kurallar geçerlidir
  • TIO'da 1024 bayta kadar herhangi bir giriş için kodun 1 dakika içinde çalışması gerekir. (TIO çıkışı yoksa bir tercüman sağlayın ve bunu makinemde çalıştıracağım (makinem TIO'ya yaklaşabilmelidir).
  • Keyfi uzunluk girişini desteklemelisiniz.
  • Bir dosyadan girdi alabilirsiniz.
  • Test senaryoları için optimizasyona izin verilmiyor
  • Deterministik çıktı gerekli
  • Programların yığın temiz olması gerekmez

Test senaryoları (kodunuzu deneyin, gerçek puanlama metinleri meydan okuma gönderildikten 1-2 hafta sonra yayınlanacaktır)

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.

Kazanan

Kazanmak için, her test vakası tarafından verilen beyin-flak kodunun toplam uzunluğunu, posta tarihinden 1-2 hafta sonra serbest bırakılmalıdır. En kısa toplam uzunluk kazanır.

NOT!!!!!!:

Bu değildir, uzunluğu hiçbir şekilde nihai puanınızı etkilemez. Temiz okunabilir kodların yapılması takdir edilmektedir. Teşekkürler!

Test senaryoları

buraya



4
TNB memleri memlerin en çılgınsıdır.
Sihirli Ahtapot Urn

1
Bunu + 1'leyebilseydim, bunun yerine bir ödül teklif edeceğim çünkü bunun nasıl yapılması gerektiğini bilmek istiyorum. <your brain-flak code here>1000'in altına düşen ilk cevap ödül olarak verilir. Hangi başka bir gün için gönderemiyorum, whoops; bunun ne kadar yeni olduğunu fark etmedi
Sihirli Ahtapot Urn

1
Ayrıca, giriş aralığı yazdırılabilir ASCII ile sınırlı değilse, NUL baytları da dahil olmak üzere her bayt değerine sahip test durumlarını dahil etmelisiniz.
mbomb007

2
05AB1E'de
Sihirli Ahtapot Urn

Yanıtlar:


13

Brain-Flak , 130 bayt

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

Çevrimiçi deneyin!

Çıktı <your brain-flak code here>: 5045 bayt

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

Çevrimiçi deneyin!


1
Beyin sıyrılması yoğunlaşıyor
Sihirli Ahtapot Urn

1
@MagicOctopusUrn metaflakking : D
HyperNeutrino

Test
Christopher

7

Python 3 , 17744 bayt

Düzenleme: Golf yığını güvenli durumlarda yardımcı olmak için birkaç seçenek ekledim.

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)

Çevrimiçi deneyin!

Daha da geliştirmeye devam edeceğim basit bir özyinelemeli çözüm. Bu, daha küçük girişlerle çok iyi sonuç verir , ancak daha uzun girişler için MegaTom'un Ruby yanıtını kaybeder .

Notlar:

  • Bunun çalışması için temiz bir yığın gerekir, aksi takdirde iyileştirmeler []işe yaramaz hale gelir (ancak birkaç satır yorum yaparak devre dışı bırakılabilirler ve yalnızca yaklaşık 100 bayt tarafından biraz geliştirilirler).
  • Bu özyinelemeli bir algoritma olduğundan, büyük değerlere sahip grafikler için daha uzun sürer. Örneğin, ÿ (değer 255) karakterinin değerlendirilmesi 9 saniye sürer, burada her test durumu aynı anda 1.6 saniye sürer. Önbellek uygulandı!
  • HyperNeutrino'nun cevabından utanmadan ödünç alınan tersi kontrol etme fikri , toplamdan 800 bayt tasarruf sağladı.
  • Tüm test senaryolarının toplamını aynı anda her test vakasının toplamına değiştirdim. Bu, yığın uzunluğu operatörü ( []) için daha fazla kullanım ekleyerek bazı baytları kaydeder
  • ~ 200 bayt, karakterler arasındaki farkı en aza indirmeyi veya onları eklemeyi seçerek (yine, baytları yığın uzunluğu operatörüne kaydeder)
  • Zaman sınırını aşmadan daha olası yolları kontrol etmeme izin veren bir önbellek uyguladı (değerleri yığın uzunluğuna göre önbelleğe alır). Bu toplamdan 1500 bayt tasarruf etti.
    • Ayrıca, Shakespeare test senaryosundaki em tireyi normale çevirdim -. Bu birkaç bayt kesti ve bu uzun çizginin değeri 8212: o olduğunda çok fazla zaman.
  • Daha uzun test durumlarından 1200 baytı dilimler halinde kesin ve diğer yığına geçmenin daha kısa olup olmadığını kontrol edin, tersine yapılandırın ve tekrar ilk yığına geri itin. Şimdi, minimum dilimleme aralığını optimize ederek daha fazla dilimleme ve zamandan tasarruf edin.
  • Sayı üretme işlevini, önceki karakter kısmı olan verimlilikleri tek bir özyinelemeli işlevde denetleme ile birleştirdi. Burada bazı baytları kurtaran, ancak programın çalışma süresini bir dakika sınırının biraz ötesine taşıyan birkaç bölüm var.
    • Bu parçaların açılması 11394 bayta düşebilir ... ancak yaklaşık 16 dakika sürer.

Örnek çıktılar:

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

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

Çevrimiçi deneyin!

Hello, World!( 142 bayt [Not: Şu anki en iyi en iyi 148 bayt idi ve şimdi 136 bayt]):

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

Çevrimiçi deneyin!


ters kontrol 800 bayt kaydeder? o_O
HyperNeutrino

ayrıca özyinelemeli işlevinizin sonuçlarını önbelleğe almalısınız; çok zaman kazandıracak
HyperNeutrino

@HyperNeutrino Önbellekleme, özellikle daha kısa girişler için çok fazla tasarruf sağlayan yığın uzunluk operatörünü kullanamayacağım anlamına gelir
Jo King

1
@HyperNeutrino Her yığın yüksekliği için ayrı önbellekler yaptığım sürece önbellek alabileceğimi fark ettim
Jo King

1
Beyin-flak meta-golfçü bir beyin-flak düzenli golf için en iyi cevap golf-out? Ne.
Sihirli Ahtapot Urn

5

Ruby , tüm (yeni) test senaryoları için 17398 bayt

# 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

Çevrimiçi deneyin!


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

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

Çevrimiçi deneyin!


Kodunuz tüm test senaryoları için aynı anda 1 dakikadan fazla sürer (~ 950 bayt). Yine de daha uzun bireysel test vakaları için oldukça kısa kod üretmesi iyidir.
Jo King

@JoKing, her vaka için daha uzun sürmesi iyidir: P
Christopher

@Christopher Kuraldan bahsediyordum Must run under 1 minute for inputs up to 1024 bytes(şimdi çok daha hızlı olmasına rağmen)
Jo King

1
Kod yürütme için gerçekten önemli olmasa da, daha sonra kullanmak üzere veri depolayan bir nesneye a denir cache, değil cash; p
Değer Mürekkebi

Test
Christopher

4

Python 3 , 16222 bayt

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

Çevrimiçi deneyin!

İlk 1000'in altında <your brain-flak code here>: D

Brain-Flak , 448 bayt

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

Çevrimiçi deneyin!

(aslında 827 için <your brain-flak code here>)


Ödül inc, yakında.
Sihirli Ahtapot Urn

@MagicOctopusUrn cool ty: D
HyperNeutrino

Şu anda 16222 byte toplamdasınız
Jo King

Umut 250 güzeldi.
Sihirli Ahtapot Urn

250 harika bir şey: D tyvm
HyperNeutrino

3

05AB1E , çok fazla bayt (İlk BF şeyim)

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

Çevrimiçi deneyin!


Önceden yapılmış bir "çarpma" Brain-flak kodu kullanarak golf son derece temel girişim. Bütün bunlar, her ASCII kod noktası için en küçük toplam bölen çiftini bulur, ardından her iki bölen çiftini de sayı olarak iter. Daha ({}<>)({<({}[()])><>({})<>}{}<><{}>)sonra Brainflak kodu , tüm değerler alternatif yığın üzerinde olana kadar bir döngüye eklenir ve yürütülür.


Teşekkür ettiğim insanların listesi:

  • İşaret etmek için DJMcMayhem (()())(()()())= ((()())())( -252 bytes)
  • DJMcMayhem bana döngülerin nasıl çalışması gerektiğini gösterdiğinden ( -927 bytes).

Örnek golf <your brain-flak code here>de 3470 3218 2291 bayt:

Brain-Flak , 2291 bayt

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

Çevrimiçi deneyin!


Her sıra golf oynayan bir karakteri temsil eder, bu da% 60 oranında gönderdiğim temel çözümü yener ve Brainflak hakkında tam anlamıyla hiçbir şey bilmeden, bunun ne yapılmaması gerektiğinin iyi bir temel olduğunu hissediyorum. Cevabı biraz sonra, başka bir şeyin ortasında alacağım ve eminim bu konuda iyileşebilirim. (Yeni satırları bayt sayısına dahil ediyorum çünkü bunun kazanmasını beklemiyorum).


İşte bazı ipuçları: 1) İki sayıyı itiyorsanız (20 almak için 4 ve 5 diyelim), o zaman bayt tasarrufu için bunları birleştirebilirsiniz. Karşılaştırma (()()()())(()()()()())ve ((()()()())())2) Bir sabit ile çarpma çok daha kısa olabilir push(); multiply();. Örneğin, bir sayıyı ikiye katlamak (({}){})yerine , bunu yapabilirsiniz (()())({}<>)({<({}[()])><>({})<>}{}<><{}>). Ama bu korkunç bir başlangıç ​​değil. Daha fazla girdi istiyorsanız , üçüncü yığında
James

@DJMcMayhem Dürüst olmak gerekirse, her negatif deltanın ardından yeniden başlayarak sayılar arasında delta kullanmak istiyordum. Ama farklılıklar fikrini de görüyorum ... Bunu şimdi dahil ediyorum ... bu konuda düzelttiğim başka problemler de var. Ayrıca, 05AB1E kodunun kendisi de önemsiz değil, önemli değil, ama bunu da tekrarlamak istiyorum.
Sihirli Ahtapot Urn

Skor davaları henüz bitmedi. Gönderdiğimde bir veya iki hafta içinde ping
Christopher

@DJMcMayhem Deltaların bölenleri iyi olur mu?
Sihirli Ahtapot Urn

Test
Christopher

3

Beyin 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
([]){({}[()]<({}<>)<>>)}{}<>

Çevrimiçi deneyin!

<your brain-flak code here>582 bayt için çıktı :

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.