Fractran'ı Brainfuck'a Dönüştür


18

Arka fon

Fractran , John Conway tarafından icat edilen ezoterik bir Turing-complete programlama dilidir. Bir Fractran programı sıralı kesirler listesinden oluşur. Program giriş olarak tek bir tamsayı alınarak başlar. Programın her yinelemesi, ilk kesir için listeyi arar, böylece sayıyı bu kesirle çarpmak başka bir tamsayı üretir. Daha sonra bu işlemi listenin başından başlayarak yeni numarayla tekrarlar. Listede sayı ile çarpılabilecek kesir olmadığında, program sonlanır ve sayıyı çıktı olarak verir.

Fractran'ın Turing-complete olmasının nedeni, bir kayıt makinesini simüle etmesidir. Sayının birincil çarpanlarına ayırma işlemi, kayıtların içeriğini saklarken, bölme ve çarpma, kayıtlara koşullu olarak ekleme ve çıkarma işleminin bir yoludur. Wikipedia makalesini okumanızı tavsiye ederim (yukarı bağlantılı).

Meydan okuma

Göreviniz STDIN'den tek girişi olarak geçerli bir Fractran programını alabilecek ve Fractran programını simüle eden STDOUT için geçerli bir BF programı oluşturabilecek mümkün olan en kısa programı yazmaktır. BF ile bir Fractran programını simüle etmenin iki yolu vardır.

NOT: Cevabınız bir BF programı değildir. Cevabınız, herhangi bir Fractran programından BF programını oluşturan koddur. Amaç, BF programının Fractran programının eşdeğeri olmasını sağlamaktır. (teknik olarak BF'de yarışmayı yapabilirsiniz, ancak zor olurdu)

seçenek 1

Programınız aşağıdakileri yapan bir BF programı çıkarmalıdır:

  • Fractran programına giriş olan karşılık gelen ASCII karakteri (BF girişinin çalışma şekli nedeniyle) olarak STDIN'den tam olarak 1 sayı alır.
  • Fractran programından çıktı olarak gelen karşılık gelen ASCII karakteri biçiminde STDOUT'a tam olarak 1 sayı yazdırır.

Bu seçenek, bir Fractran sanal makinesinden kesin girdi ve çıktıyı temsil eder.

seçenek 2

Programınızın ürettiği BF kodu aşağıdakileri yapmalıdır:

  • Bellekte kodlanmış sayının asal çarpanlarına ayırmasını sağlayarak (programı çalıştırmadan önce) girdi alın. Giriş 28 ise (2 * 2 * 7), ikinci hücrede 2 değeri ve yedinci hücrede 1 değeri olacaktır (işaretçi 0 hücresinde başlar). Diğer tüm hücreler sıfır olacaktır.
  • Program sona erdiğinde bellekte kodlanmış çıktının birincil çarpanlarına ayırmasını sağlayarak çıktı verin. Çıktı 10 ise, 2 ve 5 hücrelerinin her birinde 1 değeri olmalıdır. Diğer tüm asal numaralı hücrelerin sıfır değeri olmalıdır. Diğer hücrelerin içeriği önemli değil.

Bu seçenek Fractran dilinin arkasındaki bilgi işlem modelini temsil eder.

Kurallar ve Gereksinimler

  1. Girdi (programınızın üstünde) STDIN'deki kesirlerin bir listesi olacaktır. Pay ve payda arasında virgül bulunan satır başına bir kesir olacaktır. Boş bir satır girişin sonunu temsil eder. Kesirler her zaman en düşük terimlere indirgenecektir.
  2. Programınızın çıktısı STDOUT için tek satırlık, geçerli bir BF programı olmalıdır. Bu program, bu Fractran programını iki seçenekten birine göre simüle edebilmelidir. Herhangi bir girdi için, oluşturulan BF programı, Fractran programıyla aynı çıktıyı üretebilmelidir.
  3. Hangi seçeneği seçtiğinizi belirtmeniz gerekir.
  4. BF belleği ve kasetindeki sınırları ve bunların sarılıp sarılmadığını seçebilirsiniz
  5. KOD GOLF. Ayrıca, çıkan BF programlarının boyutu önemli değil, sadece dönüştürme yapan programın boyutu.
  6. Programlar yalnızca yazdırılabilir ASCII'den oluşmalıdır

Eğer herhangi bir yerde muğlaksam, sormaktan çekinmeyin. Bu tarif edilmesi çok karmaşık bir zorluktur.

Ayrıca, programınızın çalışıp çalışmadığını kontrol etmenin kolay bir yolunu sağlamak için lütfen programınızın oluşturulan BF kodunu aşağıdaki giriş için gönderin:

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

Bu program, bir sayının ikili genişlemesinde 1s sayısını hesaplar. Ancak, giriş ve çıkış garip bir şekilde biçimlendirilir (tüm Fractran programlarında olduğu gibi). Girdi 2 ^ A biçimindeyken, çıktı 13 ^ B biçimindedir.


Yani temelde beyin lanetinde bir frakran yorumlayıcı istiyorsun. Diğer her şey oldukça önemsiz.
captncraig

@CMP Bir Fractran programının BF sürümünü çıkaran bir program istiyorum. Bu dönüşümü yapan kodun BF'de olması gerekmez. BF programının kendisi tek amaçlıdır.
PhiNotPi

1
Kullandığımız beyin fırtınası yorumlayıcısında sınırlar var mı? Bayt boyutlu hücreler mi kullanmalıyız yoksa int hücreleri kullanabilir miyiz? Sınırlı bellek? Hafıza sarılıyor mu? Hücre sarma? İstediğimiz bir şey var mı?
captncraig

Çalışmasını istediğiniz herhangi bir şey, ancak lütfen cevabınızda belirtin.
PhiNotPi

1
Muhtemelen bunu BF ile çözmek mümkündür ...
mbomb007

Yanıtlar:


7

Python, 182 karakter

Seçenek 1, standart bayt hücreleri. Sadece 255 olası giriş vardır (bir giriş gerçekten mantıklı değil gibi), bu yüzden sadece Python'da 255 kez bir Fractran yorumlayıcı çalıştırıyorum ve sonuçları kodlayan basit bir tablo arama Brainfuck programı oluşturuyorum.

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

Örnek giriş için çıktı ( ___= 246 daha iç içe koşullar, çok büyük olduğu için tüm sonucu yapıştıramıyorum):

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

1
@PhiNotPi: doğru, döngü ve özel bir durum tespit etmek gerekebilir ...
Keith Randall

7
Aslında, belirli bir Fractran programının sonsuz bir döngü olup olmadığını belirlemenin durma problemine eşdeğer olduğunu düşünüyorum. Bunda iyi şanslar. :)
PhiNotPi

1
İlginç bir yaklaşım. Sadece eksiklik, fractran spesifikasyonunun birçok programın güvendiğini bildiğim 255'ten daha büyük çıktıları işlemesi gerektiğini söylüyorsa, bu nedenle sonucun sadece LSB'sini almak biraz garip görünüyor.
captncraig

1
@CMP, soru özellikle seçenek 1 için girdinin ASCII'den alındığını belirtir.
boothby

1
@PhiNotPi, bir programın durup durmadığını belirlerken, başka bir dilde başka bir program oluşturabilmekten biraz farklıdır, böylece yalnızca orijinal durursa durur. Birincisi imkansız, ikincisi derleyiciler tarafından her gün yapılır.
Cruncher

3

Python, 420 karakter

Bu seçenek 1 ve 2'nin bir çeşit karışımını kullanır: Brainfuck'ın büyük tamsayılarla uygulandığını varsayar (Ben bir Adaçayı uygulaması kullanırım). Örneğin bir frakran programı girin 33/20,5/11,13/10,1/5,2/3,10/7,7/2. Ardından, örneğin 2^5imlece bir sayı önceden yükleyin . Ardından, bu python betiğinin çıktısını çalıştırın. 44 saniye bekleyin. Sonuç, 13^2imlecin başladığı yerde oturur. Cevabını beklemiyordum 2^7.

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

Bu benim ilk beyin lanet senaryom. Kesinlikle daha fazla golf olabilir, ama bu gece geç saatlere kadar yapacak başka işlerim var.

edit: golf daha bu daha, ben seçenek 2 için bir çözüm üzerinde çalışıyorum. Ayrıca, burada istenen program için çıktı:

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

Bu güzel bir ilk Brainfuck senaryosu, +1. Sen hesaplayabilir 2^7ile benim bu arada az 5 saniye içinde Brainfuck tercüman. Ayrıca, raw_input()bunun yerine olmamalı mı raw_input(yoksa bilmediğim bir tuhaflık mı?)
kopyalayın

@copy, teşekkürler! haklısın, raw_input()gerekli. Yetkili beyin fırtınası tercümanlarının korkunç saf Sage uygulamamdan daha iyi performans gösterdiğine şaşırmadım.
boothby

2

Perl, 326 karakter

Daha fazla cevap uyandırmak için kendi sorumu cevaplayacağım. Tabii ki kazanmaya uygun değilim. Bu, hücrelerin sarılması üzerinde çalışmasına rağmen, sınırsız bellek ve hücreler içeren seçenek 2'dir. Her kesir tek bir kod bloğuna dönüştürülür. Yeni satırlar okunabilirlik içindir.

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

İşte örnek çıktı. Bu, diğer karakterlerin yorum olarak yok sayılmasından yararlanır. Çıktı boyutu teknik olarak önemli olmasa da, bu diğer girdilere kıyasla çok kısa bir çıktı gibi görünmektedir.

+[-+[-+[-+[-+[-+[-+[-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

Adaçayı, 431 karakter

Bu tamamen yeni bir çözüm. Brainfuck'ta bir şeyler yapmanın daha iyi yollarını buldum ve bu Seçenek 2'yi düzgün bir şekilde uyguluyor. Netlik için yeni satırlar eklendi. Bu muhtemelen daha da golf edilebilir, ancak daha düşük bir döngü derinliğine sahip olmak için BF'nin yeniden yazılmasını içerir.

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

Örnek çıktı:

Girdi verildi 33/20,5/11,13/10,1/5,2/3,10/7,7/2

>+[>>>+[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[-[[-]<<+>>]]<<[-<<<->>><<-->><+>>-<>>>>>>>+<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>>>>>[-<<<<<+>>+>>>]<<<[->>>+<<<]<<[[-]<<+>>]<<[-<<<->>>>+<>>>>>>>-<<<<<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>-<>>>>>>>>>+<<<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<<->>>>-<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[[-]<<+>>]<<[-<<<->>><<+>><->]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>[-<+>>+<]>[-<+>]<<[[-]<<+>>]<<[-<<<->>><<+>>>+<>>>-<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>>>+<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<<<+>[-<->]<[->+<]>]
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.