एक Brainf_ck प्रोग्राम बनाएं जो दी गई लंबाई के एक स्ट्रिंग को आउटपुट करता है


11

आपका दोस्त एक तिजोरी में तोड़ने की कोशिश कर रहा है जिसमें एक अजीब लॉकिंग सिस्टम है: इसके लिए एक विशेष स्थान पर एक निश्चित संख्या में कोमल नॉक की आवश्यकता होती है। आपके मित्र ने संख्या की खोज की (जो कि रेंज 1 ... 99999 में है) और एक गैजेट के पास है जो आवश्यक नॉक का उत्पादन करता है। हालाँकि, गैजेट एक ब्रेनफैक दुभाषिया है! तो आपके दोस्त को इसे ब्रेनफक प्रोग्राम खिलाने की ज़रूरत है, जो, जाहिर है, जितना संभव हो उतना कम होना चाहिए (गैजेट का आई / ओ धीमा है)।

आपका काम उसकी मदद करना है! किसी भी भाषा में एक प्रोग्राम या एक सबरूटीन लिखें, जो एक नंबर के इनपुट के रूप में स्वीकार करता है N, और एक ब्रेनफक प्रोग्राम को आउटपुट करता है, जो कोई इनपुट नहीं लेता है और मुद्रण योग्य ASCII वर्णों के एक स्ट्रिंग को आउटपुट करता है (अंतरिक्ष चरित्र को छोड़कर - सीमा 33 में कोड ...) लंबाई का 126) N

उदाहरण: इनपुट के लिए 10, आउटपुट हो सकता है

+++++++++++++++++++++++++++++++++..........

(लेकिन मुझे यकीन है कि इसे छोटा किया जा सकता है!)

आपका स्कोर निम्नलिखित मानों के लिए आपके आउटपुट की लंबाई का योग होगा N(वे यादृच्छिक संख्याएँ हैं):

55
68
15
28
841
838
522
846
4898
9004
9363
3810
13230
67175
37231
44701

ओह, और आप ट्विटर द्वारा अपने मित्र को अपना कोड (जनरेटर प्रोग्राम) प्रेषित करेंगे। तो सुनिश्चित करें कि यह 140 वर्ण या उससे कम का है!


PS ब्रेनफैक भाषा के कई प्रकार हैं। मान लें कि टेप दोनों दिशाओं (या "परिपत्र और बड़े पर्याप्त") में अनंत है, और कोशिकाओं में 32-बिट अंतर क्षमता (परिमित और 99999 तक संख्या रखने में सक्षम) है। इसके अलावा, कोई रैपिंग नहीं: जब एक सेल ओवरफ्लो होता है, तो मशीन स्वयं को नष्ट कर देती है!


2
"एन के निम्नलिखित मान (वे यादृच्छिक संख्याएँ हैं)" मुझे xkcd.com/221
cirpis

बस संदर्भ के लिए, अंतरिक्ष चरित्र (चरित्र कोड 32) आमतौर पर मुद्रण योग्य ASCII रेंज में शामिल होता है। यह वास्तव में चुनौती के लिए कोई फर्क नहीं पड़ता क्योंकि आपने स्पष्ट रूप से सीमा को परिभाषित किया है।
मार्टिन एंडर

3
क्या हम दिमाग की कोशिकाओं को मनमाना चौड़ाई पूर्णांक मान सकते हैं? यदि नहीं, तो वे कैसे और कब लपेटते हैं?
orlp

1
यह मानना ​​अच्छा होगा कि कम से कम 67175 + कुछ को शामिल करने में सक्षम होना चाहिए।
orlp

@anatolyg मुझे एहसास हुआ कि बाद में। माफ़ करना।
फल

जवाबों:


3

पायथन 2, स्कोर: 1021

मैंने अभी महसूस किया है कि यह प्रतियोगिता बहुत पुरानी है, लेकिन फिर भी, जब से मैं उन पोस्ट की तुलना में बेहतर समाधान के साथ आया, मैंने इसे भी पोस्ट किया।

यहाँ एक 102 बाइट अजगर स्क्रिप्ट है जो काम करती है:

n=input()
s='>'
while n:
    s+='>'+'+'*(n%5+1);n/=5
print s+'[->[-<+++++>]<<]<+++++++[>+++++<-]>>[-<.>]'

एन के लिए बेस 5 एनकोडिंग का उपयोग करने का विचार है (वर्तमान इनपुट के लिए सबसे अच्छा आधार, जो कि बहुत "यादृच्छिक" नहीं लगता है, ऐसा लगता है कि वे ओपी द्वारा मनमाने ढंग से चुने गए थे), और एक सामान्य ब्रेनफॉक एल्गोरिदम लिखने के लिए। मनमाने ढंग से लंबाई की एक संख्या को डिकोड करें (रूपांतरण के अंत का पता लगाने के लिए संख्या एक-एक अंक बढ़ा दी जाती है)। मैंने चरित्र 35 प्रिंट करने के लिए चुना #, चरित्र 36 $बराबर है।

स्कोर पाने के लिए आप निम्नलिखित बैश स्क्रिप्ट चला सकते हैं:

i=0
while read p; do
  i=$((i+`echo $p | python convert.py | wc -m`))
done
echo $i

अधिक उन्नत प्रोग्राम के साथ, जो छोटी संख्या के लिए गुणन के साथ एन्कोडिंग की जगह लेता है और प्रत्येक संख्या को एन्कोडिंग के लिए सबसे अच्छा आधार चुनता है, मैं 958 ब्रेनफॉक वर्णों तक पहुंच सकता हूं, लेकिन पायथन कहीं अधिक क्रिया है (और मैं एक बहुत बुरा / आलसी गोल्फर हूं) 144 बाइट्स में कनवर्टर पाने के लिए!


यह एक महान विचार है! हो सकता है कि मैं इस उत्तर को बेहतर बनाने के लिए एक बार इसका उपयोग करूं (950 से कम स्कोर पाने के लिए पायथन में एक स्क्रिप्ट लिखी थी, लेकिन मैं इसे कम करने के लिए किसी भी गोल्फिंग भाषा को नहीं जानता)।
अनातोली

8

ब्रेनएफ ***, स्कोर: 193,313

यह 140 वर्णों के अंतर्गत नहीं है (यह 147, इतना निकट !!) है, इसलिए यह जीत नहीं सकता, लेकिन मुझे लगा कि यह अच्छा था।

43 प्लस के संकेत प्रिंट करता है, फिर Nअवधि। बहुत इष्टतम नहीं है।

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

अगर कोई भी इसे छोटा करने में मदद कर सकता है तो मुझे अच्छा लगेगा।


मुझे लगता है कि ब्रेनफक के साथ यह "सबरूटीन" बनाने के लिए पर्याप्त होगा जो टेप पर अपना इनपुट प्राप्त करता है - "मानक इनपुट डिवाइस" से पढ़ने की आवश्यकता नहीं है।
अनातोलीग

@anatolyg जो इसे बहुत आसान बनाता है - शायद लगभग 80 या 90 अक्षर। क्या मुझे इसे बदलना चाहिए?
mdc32

5

जे, कुल स्कोर = 1481

(मेरी पिछली प्रविष्टि और स्पष्टीकरण के लिए संशोधन इतिहास की जाँच करें।)

f10=.('>++++++++++<';'')rplc~;@([:(<@('+++++[>+++++++<-]>>+',;@((<'[>++++++++++')#~#)),[<@(']',~'<-','<.>'#~],[,])"0 #-i.@# )10#.inv])

यह फ़ंक्शन इनपुट नंबर के बेस 10 अंकों के आधार पर नेस्टेड बीएफ लूप बनाता है। सभी उचित ठिकानों की जाँच करना और सबसे छोटा बीएफ कोड चुनना एक छोटी राशि के साथ स्कोर में सुधार करेगा।

परीक्षण सेट के लिए बीएफ कार्यक्रम:

   f10 every 55 68 15 28 841 838 522 846 4898 9004 9363 3810 13230 67175 37231 44701
+++++[>+++++++<-]>>+[>++++++++++[-<<.....>>]<-<.....>]                                                                                     
+++++[>+++++++<-]>>+[>++++++++++[-<<......>>]<-<........>]                                                                                 
+++++[>+++++++<-]>>+[>++++++++++[-<<.>>]<-<.....>]                                                                                         
+++++[>+++++++<-]>>+[>++++++++++[-<<..>>]<-<........>]                                                                                     
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[-<<<........>>>]<-<<....>>]<-<.>]                                                             
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[-<<<........>>>]<-<<...>>]<-<........>]                                                       
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[-<<<.....>>>]<-<<..>>]<-<..>]                                                                 
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[-<<<........>>>]<-<<....>>]<-<......>]                                                        
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[-<<<<....>>>>]<-<<<........>>>]<-<<.........>>]<-<........>]                      
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[-<<<<.........>>>>]<-<<<>>>]<-<<>>]<-<....>]                                      
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[-<<<<.........>>>>]<-<<<...>>>]<-<<......>>]<-<...>]                              
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[-<<<<...>>>>]<-<<<........>>>]<-<<.>>]<-<>]                                       
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[>++++++++++[-<<<<<.>>>>>]<-<<<<...>>>>]<-<<<..>>>]<-<<...>>]<-<>]                 
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[>++++++++++[-<<<<<......>>>>>]<-<<<<.......>>>>]<-<<<.>>>]<-<<.......>>]<-<.....>]
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[>++++++++++[-<<<<<...>>>>>]<-<<<<.......>>>>]<-<<<..>>>]<-<<...>>]<-<.>]          
+++++[>+++++++<-]>>+[>++++++++++[>++++++++++[>++++++++++[>++++++++++[-<<<<<....>>>>>]<-<<<<....>>>>]<-<<<.......>>>]<-<<>>]<-<.>]          

परीक्षण सेट पर कम्प्यूटिंग स्कोर:

   +/#@> f10 each 55 68 15 28 841 838 522 846 4898 9004 9363 3810 13230 67175 37231 44701
1481

3

पायथ, 1702

N + x के कारकों का उपयोग करके संख्याओं का पुनर्निर्माण करना।

+holN+]++">>"*"+"Q"<<"mjk(">>"j">"m*"+"kP+Qd"<[[->[->+>+<<]>>[-<<+>>]<<<]>[-]>[-<<+>>]<<<]>"*"-"d"<<")50"++++++[>++++++<-]>>[<.>-]"

इसके लिए 2आउटपुट ++। अब जो BF में कुछ भी प्रिंट नहीं करता है।
रैंडम

@randomra अच्छा पकड़, अद्यतन करते समय यह हुआ, मैं इसे ठीक कर दूंगा, मुझे कुछ दे दो।
orlp

@rrrrara तय होना चाहिए, स्कोर थोड़ा अधिक (निश्चित रूप से) बना दिया।
orlp

3

CJam, 52 74 108 बाइट्स, कुल = 1304 1244 1210

ri5b_,1>{(_3<{\(@5*+}*\+}*W%)\{T+_2>:T5*-_0>"-+"=\z*}%\T+'+*a+W%{"[->+++++<]>"\}*">x[>x<-]<[->>.<<]"'x/'+6**

एक परीक्षण स्क्रिप्ट (ऑनलाइन दुभाषिया में धीमी):

q~]
{
_[0:T;
5b_,1>{(_3<{\(@5*+}*\+}*W%)\{T+_2>:T5*-_0>"-+"=\z*}%\T+'+*a+W%{"[->+++++<]>"\}*">x[>x<-]<[->>.<<]"'x/'+6**
]s
_[L:RL@0\
"-+><.]"['('){+\_{)}0?@\}{@\+\_{)}0?}{R1$c+:R;}]:`"]a"{{_aa+1$4G#%{:~~1}{;0}?}g}`+a+er:~:~
];R,@=!"Error."N+*o
}%s,

मैंने आत्म-विनाश के बारे में भाग नहीं देखा। लेकिन यह कभी भी अतिप्रवाह नहीं होगा।
jimmy23013

यह कैसे काम करता है?
अनातोलीग

@anatolyg पहला संस्करण केवल आधार 5 में संख्या उत्पन्न करता है। बाद के संस्करणों ने पहले दो अंकों के लिए एक विशेष मामला जोड़ा और इसका उपयोग अपघटन भी किया।
jimmy23013

@ user23013 ओह, क्षमा करें, कल्पना परिवर्तन नहीं देखा है। (तदनुसार मेरा उत्तर अपडेट करें।)
यादृच्छिक

2

बेफुनेज -98, एन + 41, कुल = 193281

&>'+\:v
v^-1,\_
' >1-:v
>v^,+'_
,'    :
>ff3++^
>2f*+v
^>/9+:,
>'>,61v
, v*6+<
^/2,:<@
v >+2+,
>'<,']^

मुझे पता है कि यह बुरा है, लेकिन मुझे लगा कि आज कुछ बीफ्यूज लिखना है। Befunge का सबसे अच्छा हिस्सा यह है कि कार्यक्रम वास्तविक गोल्फ भाषाओं की तुलना में कम समझने योग्य हैं, खासकर जब वे कोड का पुन: उपयोग करते हैं: D

मार्टिन ब्यूटनर के सीजम उत्तर के समान एल्गोरिथ्म का उपयोग करता है :

(N +'s)>+++++++++++++++++++++++++++++++++<[->.<]


1

बेफुज -93 - 24 + एन, कुल = 193009

&>">>]-<]-<++++>[++++>[+++"v
v  ,,,,,,,,,,,,,,,,,,,,,,, <
>:v
,v_@
"1
.-
"
^<

यह +++[>++++[>++++<-]<-]>>24 अक्षरों के साथ पहले टेप इंडेक्स को '0' पर सेट करने के लिए एक उपसर्ग का उपयोग करता है । Befunge प्रोग्राम बहुत बुनियादी है और एन के साथ-साथ आउटपुट भी है। ' पात्र।


अब जब मैं यह देख रहा हूं तो मुझे नहीं पता कि मैं सोच रहा था कि मेरा लूप कोई बेहतर होगा ...
मार्टिन एंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.