แปลง Fractran เป็น Brainfuck


18

พื้นหลัง

Fractranเป็นภาษาโปรแกรมภาษาทัวริงที่สมบูรณ์แบบที่คิดค้นโดย John Conway โปรแกรม Fractran ประกอบด้วยรายการเศษส่วนที่เรียงลำดับแล้ว โปรแกรมเริ่มต้นด้วยการใช้จำนวนเต็มเดียวเป็นอินพุต การวนซ้ำแต่ละครั้งของโปรแกรมจะค้นหารายการสำหรับเศษส่วนแรกเช่นการคูณจำนวนด้วยเศษส่วนนั้นจะสร้างจำนวนเต็มอีก จากนั้นจะทำซ้ำกระบวนการนี้ด้วยหมายเลขใหม่เริ่มต้นที่จุดเริ่มต้นของรายการ เมื่อไม่มีเศษส่วนในรายการที่สามารถคูณด้วยตัวเลขโปรแกรมจะหยุดและให้หมายเลขเป็นเอาท์พุท

เหตุผลที่ Fractran นั้นเป็นทัวริงสมบูรณ์เพราะมันจำลองเครื่องลงทะเบียน การแยกตัวประกอบเฉพาะของจำนวนเก็บเนื้อหาของรีจิสเตอร์ในขณะที่การหารและการคูณเป็นวิธีการบวกและลบจากรีจิสเตอร์แบบมีเงื่อนไข ฉันขอแนะนำให้อ่านบทความ Wikipedia (เชื่อมโยงกับด้านบน)

ความท้าทาย

งานของคุณคือการเขียนโปรแกรมที่สั้นที่สุดที่สามารถใช้โปรแกรม Fractran ที่ถูกต้องจาก STDIN เป็นเพียงอินพุตและสร้างโปรแกรม BF ที่ถูกต้องไปยัง STDOUT ที่จำลองโปรแกรม Fractran มีสองวิธีที่คุณสามารถจำลองโปรแกรม Fractran กับ BF

หมายเหตุ: คำตอบของคุณไม่ใช่โปรแกรม BF คำตอบของคุณคือรหัสที่สร้างโปรแกรม BF จากโปรแกรม Fractran ใด ๆ เป้าหมายคือการรับโปรแกรม BF ให้เทียบเท่ากับโปรแกรม Fractran (ในทางเทคนิคคุณสามารถแข่งขันใน BF ได้ แต่มันคงยาก)

ตัวเลือกที่ 1

โปรแกรมของคุณควรส่งออกโปรแกรม BF ที่ทำสิ่งต่อไปนี้:

  • ใช้ตัวเลข 1 หมายเลขจาก STDIN ในรูปแบบของอักขระ ASCII ที่สอดคล้องกัน (เนื่องจากวิธีการทำงานของอินพุต BF) ซึ่งเป็นอินพุตของโปรแกรม Fractran
  • พิมพ์จำนวน 1 ไปยัง STDOUT ในรูปแบบของอักขระ ASCII ที่สอดคล้องกันซึ่งเป็นผลลัพธ์จากโปรแกรม Fractran

ตัวเลือกนี้มีไว้เพื่อแสดงถึงอินพุตและเอาต์พุตที่แน่นอนจากเครื่องเสมือน Fractran

ตัวเลือก 2

รหัส BF ที่โปรแกรมของคุณควรทำมีดังต่อไปนี้:

  • รับอินพุตโดยให้การแยกตัวประกอบเฉพาะของหมายเลขที่เข้ารหัสในหน่วยความจำ (ก่อนที่จะเรียกใช้โปรแกรม) หากอินพุตเป็น 28 (2 * 2 * 7) ดังนั้นจะมีค่า 2 ในเซลล์ที่สองและค่า 1 ในเซลล์ที่เจ็ด (ตัวชี้เริ่มต้นที่เซลล์ 0) เซลล์อื่น ๆ ทั้งหมดจะเป็นศูนย์
  • ให้เอาต์พุตโดยมีการแยกตัวประกอบเฉพาะของเอาต์พุตที่เข้ารหัสในหน่วยความจำเมื่อโปรแกรมหยุดทำงาน หากเอาต์พุตคือ 10 จะต้องมีค่า 1 ในแต่ละเซลล์ 2 และ 5 เซลล์ที่มีหมายเลขหลักอื่นทั้งหมดต้องมีค่าเป็นศูนย์ เนื้อหาของเซลล์อื่นไม่สำคัญ

ตัวเลือกนี้แสดงถึงรูปแบบการคำนวณที่อยู่เบื้องหลังภาษา Fractran

กฎและข้อกำหนด

  1. อินพุต (บนโปรแกรมของคุณ) จะเป็นรายการของเศษส่วนใน STDIN จะมีหนึ่งเศษส่วนต่อบรรทัดโดยมีเครื่องหมายจุลภาคระหว่างตัวเศษและส่วน บรรทัดว่างแสดงถึงจุดสิ้นสุดของอินพุต เศษส่วนจะลดลงเป็นคำต่ำสุดเสมอ
  2. ผลลัพธ์ของโปรแกรมของคุณควรเป็นโปรแกรม BF แบบบรรทัดเดียวที่ถูกต้องถึง STDOUT โปรแกรมนี้ควรสามารถจำลองโปรแกรม Fractran นั้น ๆ ตามหนึ่งในสองตัวเลือก สำหรับอินพุตใด ๆ โปรแกรม BF ที่สร้างขึ้นควรจะสามารถสร้างเอาต์พุตเช่นเดียวกับโปรแกรม Fractran
  3. คุณต้องระบุตัวเลือกที่คุณเลือก
  4. คุณสามารถเลือกขอบเขตในหน่วยความจำ BF และเทปและไม่ว่าพวกเขาจะห่อ
  5. สนามกอล์ฟรหัส นอกจากนี้ขนาดของโปรแกรม BF outputted ไม่สำคัญเพียงขนาดของโปรแกรมที่ทำการแปลง
  6. โปรแกรมควรประกอบด้วย ASCII ที่พิมพ์ได้เท่านั้น

หากฉันคลุมเครือทุกที่อย่าลังเลที่จะถาม นี่เป็นความท้าทายที่ซับซ้อนในการอธิบาย

นอกจากนี้โปรดโพสต์รหัส BF ของโปรแกรมของคุณสำหรับอินพุตต่อไปนี้เพื่อให้เป็นวิธีที่ง่ายในการตรวจสอบว่าโปรแกรมของคุณทำงานหรือไม่:

33,20
5,11
13,10
1,5
2,3
10,7
7,2

โปรแกรมนี้คำนวณจำนวน 1s ในการขยายฐานสองของตัวเลข อย่างไรก็ตามอินพุทและเอาท์พุทนั้นมีการจัดรูปแบบที่แปลก (เช่นเดียวกับโปรแกรม Fractran ทั้งหมด) อินพุตมีรูปแบบ 2 ^ A ในขณะที่เอาต์พุตเป็นรูปแบบ 13 ^ B


โดยพื้นฐานแล้วคุณต้องการล่าม fractran ใน brainfuck ทุกสิ่งทุกอย่างนั้นค่อนข้างเล็กน้อย
captncraig

@CMP ฉันต้องการโปรแกรมที่ส่งออกเวอร์ชัน BF ของโปรแกรม Fractran รหัสที่ทำให้การแปลงนี้ไม่จำเป็นต้องอยู่ใน BF โปรแกรม BF นั้นมีจุดประสงค์เดียว
PhiNotPi

1
มีข้อ จำกัด สำหรับล่าม brainfuck ที่เราใช้หรือไม่? เราจะต้องใช้เซลล์ขนาดไบต์หรือเราจะใช้เซลล์ int? หน่วยความจำที่ถูกผูกไว้? หน่วยความจำห่อ? ห่อเซลล์หรือไม่ มีอะไรที่เราต้องการทำให้มันใช้ได้
captncraig

ทุกสิ่งที่คุณต้องการทำให้มันใช้งานได้ แต่โปรดระบุในคำตอบของคุณ
PhiNotPi

1
อาจเป็นไปได้ที่จะแก้ปัญหานี้ด้วย BF ...
mbomb007

คำตอบ:


7

Python 182 ตัวอักษร

ตัวเลือก 1 เซลล์มาตรฐานไบต์ มีอินพุตที่เป็นไปได้เพียง 255 รายการ (0 เป็นอินพุตไม่สมเหตุสมผลจริงๆ) ดังนั้นฉันจึงเรียกใช้ตัวแปล Fractran 255 ครั้งใน Python และสร้างโปรแกรมค้นหาตารางง่ายๆ Brainfuck เข้ารหัสผลลัพธ์

import sys
I=map(eval,sys.stdin)
P='+>,'
Q=''
for i in range(1,256):
 while i:j=i;i=([i*x/y for x,y in I if i%y==0]+[0])[0]
 r=j&255;P+='-[';Q=']<[-'+'+'*r+'.'+'-'*r+']>'+Q
print P+Q

เอาต์พุตสำหรับอินพุตตัวอย่าง (___ = 246 เงื่อนไขซ้อนกันมากขึ้นฉันไม่สามารถวางผลลัพธ์ทั้งหมดเนื่องจากมีขนาดใหญ่เกินไป):

+>,-[-[-[-[-[-[-[-[___]<[-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+.-]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+.-]>

1
@PhiNotPi: ความจริงผมอาจจะต้องตรวจสอบการวนลูปและกรณีพิเศษที่ ...
คี ธ แรนดัล

7
ที่จริงแล้วฉันคิดว่าการพิจารณาว่าโปรแกรม Fractran ที่กำหนดเป็นวงวนไม่สิ้นสุดหรือไม่เท่ากับปัญหาหยุดพัก ขอให้โชคดี :)
PhiNotPi

1
แนวทางที่น่าสนใจ ข้อบกพร่องเพียงอย่างเดียวอาจเกิดขึ้นได้หากข้อมูลจำเพาะของแฟรกแรนบอกว่าจำเป็นต้องจัดการกับผลลัพธ์ที่มากกว่า 255 ซึ่งฉันรู้ว่าหลาย ๆ โปรแกรมพึ่งพา
captncraig

1
@CMP คำถามระบุว่าอินพุตสำหรับตัวเลือก 1 ถูกนำมาจาก ascii
บูธโดย

1
@PhiNotPi พิจารณาว่าโปรแกรมหยุดทำงานหรือไม่นั้นแตกต่างจากความสามารถในการสร้างโปรแกรมอื่นในภาษาอื่นซึ่งจะหยุดหากโปรแกรมหยุดทำงานชั่วคราวเท่านั้น อดีตเป็นไปไม่ได้ในขณะที่หลังจะทำทุกวันโดยคอมไพเลอร์
Cruncher

3

Python 420 ตัวอักษร

วิธีนี้ใช้การผสมผสานของตัวเลือกที่ 1 และ 2: ถือว่ามีการใช้สมองกับจำนวนเต็มขนาดใหญ่ (ฉันใช้การใช้ Sage) ป้อนโปรแกรมเศษส่วนเช่น33/20,5/11,13/10,1/5,2/3,10/7,7/2. จากนั้นโหลดตัวเลขล่วงหน้า2^5ที่เคอร์เซอร์ จากนั้นรันเอาต์พุตของสคริปต์ python นี้ รอ 44 วินาที ผลลัพธ์จะ13^2อยู่ที่ที่เคอร์เซอร์เริ่มต้น ฉันไม่รอคำตอบ2^7ผมไม่รอคำตอบสำหรับ

s="[->>>+<<<]+["
for l in raw_input().split(','):
 a,b=map(int,l.split('/'))
 s+="[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>["+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]<"*(b-1)+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]<"+"[->+>+<<]>[-<+>]<"*a+"[-]>>[-<<+>>]<<<<<->>>>]<<]<<"
print s+">+<[->-<]>[-<+>]<]>>>[-<<<+>>>]"

นี่เป็นสคริปต์ brainfuck แรกของฉัน มันสามารถตีกอล์ฟต่อไปได้อย่างแน่นอน แต่ฉันมีสิ่งอื่นที่ต้องทำจนกระทั่งคืนนี้

แก้ไข: แทนที่จะเล่นกอล์ฟต่อไปฉันกำลังหาทางแก้ปัญหาสำหรับตัวเลือก 2 และนี่คือผลลัพธ์สำหรับโปรแกรมที่ขอ:

[->>>+<<<]+[[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<>+<[->-<]>[-<+>]<]>>>[-<<<+>>>]

นั่นเป็นสคริปต์ Brainfuck แรกที่ดี +1 คุณสามารถคำนวณ2^7กับล่าม Brainfuck ของฉันในเวลาไม่ถึง 5 วินาที นอกจากนี้มันไม่ควรจะเป็นraw_input()แทนraw_input(หรือเป็นเรื่องแปลกที่ฉันไม่รู้)
คัดลอก

@ คัดลอกขอบคุณ! คุณขวาraw_input()เป็นสิ่งที่จำเป็น ฉันไม่แปลกใจเลยที่ล่ามสมองที่มีความสามารถทำได้ดีกว่าการใช้ Sage ที่ไร้เดียงสาของฉัน
บูธโดย

2

Perl, 326 ตัวอักษร

ฉันจะตอบคำถามของฉันเองหวังว่าจะกระตุ้นคำตอบเพิ่มเติม แน่นอนว่าฉันไม่มีสิทธิ์ชนะ นี่คือตัวเลือก 2 ที่มีหน่วยความจำและเซลล์ที่ไม่ได้ จำกัด แม้ว่าจะใช้งานได้กับการห่อเซลล์ แต่ละส่วนจะถูกแปลงเป็นรหัสบล็อกเดียว บรรทัดใหม่มีไว้เพื่อให้สามารถอ่านได้

L:{$A=<>;
if($/eq$A){last L}
($B,$C)=eval$A;
$D=$E=$F=$G=$H=2;
while($C>1){
if($C%$H==0){
$C/=$H;
$R=">"x$H;
$L="<"x$H;
$D.=$R.'[-'.$L;
$E.=$R.'-'.$L;
if($H>2){$R.="+[->+<]]>[-<+>]<"}
else{$R.="+[-<+>]]<[->+<]>"}
$G=$R.$L.$G;
$H--}$H++}
$H=2;while($B>1){
if($B%$H==0){
$B/=$H;
$F.=">"x$H.'+'.'<'x$H;
$H--}$H++}
$I="+[-$I$D$E+$F$G]";
redo L}print$I

นี่คือตัวอย่างเอาต์พุต สิ่งนี้ใช้ประโยชน์จากความจริงที่ว่าอักขระอื่น ๆ ถูกมองว่าเป็นความคิดเห็น สิ่งนี้ดูเหมือนว่าจะเป็นเอาต์พุตที่สั้นมากเมื่อเทียบกับรายการอื่นแม้ว่าขนาดเอาต์พุตจะไม่สำคัญทางเทคนิค

+[-+[-+[-+[-+[-+[-+[-2>>[-<<>>[-<<>>>>>[-<<<<<2>>-<<>>-<<>>>>>-<<<<<+2>>>+<<<>>>>>>>>>>>+<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<>>+[-<+>]]<[->+<]><<2]2>>>>>>>>>>>[-<<<<<<<<<<<2>>>>>>>>>>>-<<<<<<<<<<<+2>>>>>+<<<<<>>>>>>>>>>>+[->+<]]>[-<+>]<<<<<<<<<<<<2]2>>[-<<>>>>>[-<<<<<2>>-<<>>>>>-<<<<<+2>>>>>>>>>>>>>+<<<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<2]2>>>>>[-<<<<<2>>>>>-<<<<<+2>>>>>+[->+<]]>[-<+>]<<<<<<2]2>>>[-<<<2>>>-<<<+2>>+<<>>>+[->+<]]>[-<+>]<<<<2]2>>>>>>>[-<<<<<<<2>>>>>>>-<<<<<<<+2>>+<<>>>>>+<<<<<>>>>>>>+[->+<]]>[-<+>]<<<<<<<<2]2>>[-<<2>>-<<+2>>>>>>>+<<<<<<<>>+[-<+>]]<[->+<]><<2]

1

ปราชญ์ 431 ตัวอักษร

นี่เป็นทางออกใหม่อย่างสมบูรณ์ ฉันคิดหาวิธีที่ดีกว่าในการทำสิ่งต่าง ๆ ใน brainfuck และนี่เป็นการดำเนินการอย่างถูกต้องตัวเลือกที่ 2 เพิ่มบรรทัดใหม่เพื่อความชัดเจน สิ่งนี้อาจจะสามารถเล่นกอล์ฟต่อไปได้ แต่มันเกี่ยวข้องกับการเขียน BF ใหม่เพื่อให้มีความลึกของวงรอบที่ต่ำกว่า

exec"f=factor;
J=''.join;
Q=L(a,b):Lz:a*z+b*-z;M=Q('<>');
C=Lj,k:(Ll:'[-%s+%s+%s]%s[-%s+%s]%s'%tuple(map(M,[-j,-k,l,-l,l,-l,k])))(j+k);
print '>+[>>>+'+J(map(L(n,m):reduce(Lr,(p,e):'[-%s%s%s[[-]<<+>>]%s<<%s]'%(M(4-p),C(6-p,2),'[-'*(e-1),']'*(e-1),r),f(m),'[-<<<->>>%s]'%J(map(L(p,e):M(4-p)+Q('+-')(e)+M(p-4),f(n/m))))+'<<<'+C(3,2),[map(QQ,x.split('/'))for x in raw_input().split(',')]))+'<<<<+>[-<->]<[->+<]>]'".replace('L','lambda ')

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

รับอินพุต 33/20,5/11,13/10,1/5,2/3,10/7,7/2

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