ข้อความถึง Brain-Flak


13

ความท้าทายของคุณคือการเปลี่ยนข้อความที่ป้อนเป็นรหัสสมองที่จะส่งออกข้อความ

บทเรียนที่นำมาจากที่นี่ได้รับอนุญาตที่นี่

Brain-Flak มีสองกองเรียกว่า 'left' และ 'right' สแต็คที่ใช้งานเริ่มต้นที่ด้านซ้าย หากสแต็กเปล่าถูกเปิดใช้งานมันจะคืนค่า 0 นั่นคือมัน ไม่มีตัวแปรอื่น ๆ เมื่อโปรแกรมเริ่มขึ้นอาร์กิวเมนต์บรรทัดคำสั่งแต่ละรายการจะถูกส่งไปยังสแต็กที่ใช้งานอยู่

อักขระที่ใช้ได้เฉพาะในโปรแกรม Brain-Flak คือ()[]{}<>และต้องมีความสมดุลเสมอ : มีสองประเภทของฟังก์ชั่นNiladsและMonads niladเป็นฟังก์ชั่นที่ใช้เวลา 0 ขัดแย้ง นี่คือทั้งหมดของ nilads:

  • () หาค่าเป็นหนึ่ง
  • [] หาค่าสูงสุดของสแต็กปัจจุบัน
  • {}ป็อปสแต็คที่ใช้งานอยู่ หาค่า popped
  • <>สลับสแตกที่ใช้งานอยู่ หาค่าเป็นศูนย์

สิ่งเหล่านี้จะถูกรวมเข้าด้วยกันเมื่อถูกประเมิน ดังนั้นหากเรามี '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 สัปดาห์หลังจากวันที่โพสต์ ความยาวรวมที่สั้นที่สุดชนะ

บันทึก!!!!!!:

นี่ไม่ใช่ความยาวของโค้ดจะไม่ส่งผลกระทบต่อคะแนนสุดท้ายของคุณ แต่อย่างใด การทำโค้ดที่อ่านง่ายสะอาดเป็นที่นิยม ขอบคุณ!

กรณีทดสอบ

ที่นี่



4
TNB memes เป็น dankest of memes
Magic Octopus Urn

1
หวังว่าฉันจะสามารถ +1 สิ่งนี้แทนฉันจะเสนอรางวัลเพราะฉันอยากรู้ว่ามันควรจะทำอย่างไร คำตอบแรกที่ได้รับ<your brain-flak code here>ต่ำกว่า 1,000 จะได้รับรางวัล ซึ่งฉันไม่สามารถโพสต์สำหรับวันอื่นอ๊ะ ไม่ได้สังเกตว่ามันใหม่ขนาดไหน
Magic Octopus Urn

1
นอกจากนี้หากช่วงของอินพุตไม่ จำกัด เฉพาะ ASCII ที่พิมพ์ได้คุณควรรวมกรณีทดสอบที่มีค่าทุกไบต์รวมถึง NUL ไบต์
mbomb007

2
"การทำความสะอาดโค้ดที่สามารถอ่านได้นั้นเป็นสิ่งที่น่าชื่นชม" เป็นการท้าทายใน 05AB1E
Magic Octopus Urn

คำตอบ:


13

Brain-Flakขนาด 130 ไบต์

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

ลองออนไลน์!

เอาต์พุตสำหรับ<your brain-flak code here>: 5045 ไบต์

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

ลองออนไลน์!


1
การแตกของสมอง ทวีความรุนแรงมากขึ้น
Magic Octopus Urn

1
@MagicOctopusUrn metaflakking : D
HyperNeutrino

กรณีทดสอบหมด
Christopher

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)

ลองออนไลน์!

ง่ายแก้ปัญหา recursive ซึ่งผมจะยังคงปรับปรุงเพิ่มเติม สิ่งนี้ทำได้ดีมากกับอินพุตที่เล็กกว่า แต่แพ้คำตอบ Ruby ของ MegaTomสำหรับอินพุตที่ยาวกว่า

หมายเหตุ:

  • สิ่งนี้ต้องการสแต็กที่สะอาดเพื่อใช้งานไม่เช่นนั้นการปรับปรุง[]จะไร้ประโยชน์ (แม้ว่าพวกเขาจะสามารถปิดใช้งานได้โดยการแสดงความคิดเห็นสองบรรทัดและพวกเขาปรับปรุงมันเพียงประมาณ 100 ไบต์เลยทีเดียว)
  • เนื่องจากนี่เป็นอัลกอริทึมแบบเรียกซ้ำจึงใช้เวลานานขึ้นสำหรับตัวอักษรที่มีค่ามาก ตัวอย่างเช่นอักขระÿ (ค่า 255) ใช้เวลา 9 วินาทีในการประเมินซึ่งทุกกรณีทดสอบในครั้งเดียวใช้เวลา 1.6 วินาที ใช้แคชแล้ว!
  • แนวคิดในการตรวจสอบย้อนกลับยืมมาจากคำตอบของ HyperNeutrino อย่างไร้ยางอายช่วยประหยัด 800 ไบต์จากทั้งหมด
  • ฉันเปลี่ยนผลรวมจากกรณีทดสอบทั้งหมดในคราวเดียวเป็นผลรวมของแต่ละกรณีทดสอบ วิธีนี้ช่วยประหยัดบางไบต์ด้วยการเพิ่มการใช้งานเพิ่มเติมสำหรับตัวดำเนินการความยาวสแต็ก ( [])
  • ~ 200 ไบต์จากการเลือกขั้นต่ำของการเตรียมความแตกต่างระหว่างอักขระหรือต่อท้าย (อีกครั้งซึ่งจะช่วยประหยัดไบต์ผ่านโอเปอเรเตอร์ความยาวสแต็ก)
  • ติดตั้งแคช (ซึ่งเก็บค่าตามความยาวของสแต็ก) ซึ่งอนุญาตให้ฉันตรวจสอบลู่ทางที่เป็นไปได้มากขึ้นโดยไม่ต้องเกินเวลาที่กำหนด สิ่งนี้บันทึก 1500 ไบต์จากผลรวม
    • นอกจากนี้ผมเปลี่ยนรีบ em -ในกรณีทดสอบเพื่อเช็คสเปียร์ปกติ สิ่งนี้ตัดออกไปสองสามไบต์และใช้เวลานานมากในการกำหนดค่าของเส้นประ em นั่นคือ 8212: o
  • ตัด 1200 ไบต์จากกรณีทดสอบที่ยาวกว่าโดยตัดเป็นชิ้น ๆ แล้วตรวจสอบว่าสั้นกว่าหรือไม่เพื่อสลับไปที่สแต็กอื่นสร้างแบบย้อนกลับและดันกลับไปที่สแต็กแรกอีกครั้ง ถัดไปขึ้นไปอีกการแบ่งส่วนและประหยัดเวลาโดยปรับช่วงการตัดให้น้อยที่สุด
  • รวมฟังก์ชั่นการสร้างตัวเลขเข้ากับการตรวจสอบประสิทธิภาพด้วยส่วนอักขระก่อนหน้าในการทำงานแบบเรียกซ้ำ มีบางส่วนในที่นี่ที่บันทึกบางไบต์ แต่ขยายรันไทม์ของโปรแกรมเล็กน้อยเกินขีด จำกัด หนึ่งนาที
    • การไม่ใส่ความคิดเห็นชิ้นส่วนเหล่านั้นสามารถลดขนาดลงเหลือ 11,394 ไบต์ ... แต่ใช้เวลาประมาณ 16 นาที

ตัวอย่างผลลัพธ์:

<your brain-flak code here> (312 ไบต์):

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

ลองออนไลน์!

Hello, World!( 142 ไบต์ [หมายเหตุ: ปัจจุบันที่ดีที่สุดก่อนหน้านี้คือ148 ไบต์และตอนนี้ 136 ไบต์]):

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

ลองออนไลน์!


ตรวจสอบกลับรายการบันทึก 800 ไบต์? o_O
HyperNeutrino

นอกจากนี้คุณควรแคชผลลัพธ์ของฟังก์ชันเวียนเกิดซ้ำ; จะประหยัดเวลาได้มาก
HyperNeutrino

@HyperNeutrino Caching หมายความว่าฉันไม่สามารถใช้โอเปอเรเตอร์ความยาวสแต็คได้ซึ่งจริง ๆ แล้วประหยัดได้มากโดยเฉพาะอย่างยิ่งสำหรับอินพุตที่สั้นกว่า
Jo King

1
@HyperNeutrino ฉันเพิ่งรู้ว่าฉันสามารถมีแคชได้ตราบใดที่ฉันแยกแคชสำหรับแต่ละความสูงของสแต็ค
Jo King

1
meta-golfer ที่สะบัดออกจากสมองของคุณออกไปเล่นกอล์ฟคำตอบที่ดีที่สุดสำหรับสนามกอล์ฟสะเก็ดสมองปกติหรือไม่? อะไร.
Magic Octopus Urn

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 ไบต์

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

ลองออนไลน์!


รหัสของคุณใช้เวลามากกว่า 1 นาทีสำหรับกรณีทดสอบทั้งหมดในครั้งเดียว (~ 950 ไบต์) เป็นเรื่องดีที่มันจะสร้างรหัสสั้น ๆ สำหรับกรณีทดสอบที่ยาวขึ้น
Jo King

@ โจกิ้งเป็นเรื่องปกติที่จะใช้เวลานานขึ้นสำหรับทุกกรณี: P
Christopher

@ คริสโตเฟอร์ฉันหมายถึงMust run under 1 minute for inputs up to 1024 bytesกฎ (แม้ว่าตอนนี้มันจะเร็วกว่ามาก)
โจคิง

1
แม้ว่ามันจะไม่สำคัญสำหรับการเรียกใช้โค้ด แต่วัตถุที่เก็บข้อมูลเพื่อใช้ในภายหลังเรียกว่า a cache, not cash; p
Value Ink

กรณีทดสอบหมด
Christopher

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

ลองออนไลน์!

ครั้งแรกต่ำกว่า 1,000 สำหรับ<your brain-flak code here>: D

Brain-Flakขนาด 448 ไบต์

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

ลองออนไลน์!

(827 เดิมสำหรับ<your brain-flak code here>)


รับรางวัล inc เร็ว ๆ นี้
Magic Octopus Urn

@MagicOctopusUrn cool ty: D
HyperNeutrino

ตอนนี้คุณอยู่ที่ 16222 ไบต์ทั้งหมด
Jo King

ความหวัง 250 ช่างยอดเยี่ยม
Magic Octopus Urn

@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 นั้นไม่ได้รับการอัปเดตไม่ใช่เป็นเรื่องสำคัญ แต่ฉันต้องการทำซ้ำเช่นกัน
Magic Octopus Urn

กรณีคะแนนยังไม่ออก จะ ping ในหนึ่งสัปดาห์หรือ 2 เมื่อฉันโพสต์ (หลีกเลี่ยงโซลูชันการปรับให้เหมาะสมของกรณีทดสอบ)
Christopher

@DJMcMayhem ตัวหารของเดลตาจะดีไหม
Magic Octopus Urn

กรณีทดสอบหมด
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
([]){({}[()]<({}<>)<>>)}{}<>

ลองออนไลน์!

เอาต์พุตสำหรับ<your brain-flak code here>582 ไบต์:

([()((()(()(()()()){}){}){}){}]((()(()()){}){}([(()()()){}](()(()){}((()(((()(()()){}){}){}){}){}([(()((((()()){}){}){}){}){}]([(((()()){}){}){}](()(((()()){}){}){}([((()()){}){}]([()(()()){}](()(((((()()){}){}){}){}){}([()(((()(()()()){}){}){}){}]([(()()()){}](()(()(()()){}){}([(()(()()){}){}](()(()((()((()()){}){}){}){}){}([()(()((((()()){}){}){}){}){}]([((()()()){}){}](()(()(()()){}){}([()](()((()(((()()){}){}){}){}){}([(((()((()()){}){}){}){}){}](()(()){}([()((()()()){}){}](()((()()()){}){}(()(()(()((()()){}){}){}){}((()(()(()(()()()){}){}){}){})))))))))))))))))))))))))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.