समझदार नंबर बनाएं


18

समझदार एक सरल बिटवाइज़ भाषा है जिसे मैंने कुछ समय पहले डिज़ाइन किया था। यह पायथन के बिटवाइज ऑपरेशन के आसपास आधारित है । इसके कई ऑपरेशन हैं इनमें से अधिकांश पायथन में समान प्रतीक के समान या बहुत समान हैं।

  • : ढेर के ऊपर डुप्लिकेट

  • ? स्टैक के शीर्ष को नीचे तक घुमाएं

  • ! स्टैक के निचले हिस्से को ऊपर की ओर घुमाएं

  • [ ] लूप जबकि स्टैक के शीर्ष शून्य नहीं है

  • ~ढेर के ऊपर नहीं ( -(n+1))

  • -ढेर के ऊपर नकारात्मक ( -n)

  • >स्टैक के शीर्ष को दाईं ओर एक बार ( n//2)

  • <बाईं ओर एक बार स्टैक के शीर्ष पर बिटशिफ्ट करें ( n*2)

  • ^स्टैक के शीर्ष दो आइटम xor ( पायथन के समान )

  • |या स्टैक के शीर्ष दो आइटम ( वही पायथन के रूप में )

  • &और स्टैक के शीर्ष दो आइटम ( वही पायथन के रूप में )


समझदार में पूर्णांक बनाना बहुत सरल है आप इसे शून्य बना सकते हैं ::^और इसे बढ़ा सकते हैं, ~-इसलिए आप शून्य बनाते हैं और इसे बढ़ाते हैं। हालाँकि अगर हम -चीजों को हटा दें तो कुछ और दिलचस्प हो जाएगा।

हम शेष संचालन का उपयोग करके अभी भी हर संख्या बना सकते हैं। उदाहरण के लिए यहाँ 3 है

~<<~

TIO

यह काम करता है क्योंकि बिट्स ~, एक अनंत स्ट्रिंग ऑफ 0बिट्स, एक नेगेटिव, बिट्स की एक अनंत स्ट्रिंग में 1, प्रत्येक छोर पर थोड़ा सा <संलग्न होता है 0, जब हम काम करते हैं तो हम करते हैं ~जो प्रत्येक को एस के एक स्ट्रिंग में बदल देता है और 0उसके बाद दो 1एस होता है। , या जैसा कि ज्यादातर लोग इसे 3 कहते हैं।


कार्य

एक प्रोग्राम लिखें जो एक सकारात्मक पूर्णांक दिए जाने पर एक समझदार प्रोग्राम का उत्पादन करेगा जो अपने स्रोत (आउटपुट के स्रोत, आप अपने स्वयं के स्रोत में उपयोग कर सकते हैं ) के nबिना संख्या बनाएंगे । आप मान सकते हैं कि स्टैक के शीर्ष पर पहले से ही एक शून्य है।--

यह नहीं इसलिए आपको उत्पादन स्रोत कोड को कम करने का लक्ष्य नहीं होना चाहिए , जरूरी नहीं कि आउटपुट।

उदाहरण आउटपुट

यह सूची संपूर्ण नहीं है कि वे केवल संभावित आउटपुट हैं

1  -> ~<~
2  -> ~<~<
3  -> ~<<~
4  -> ~<~<<
5  -> ~<~:<<|
6  -> ~<<~<
7  -> ~<<<~
8  -> ~<~<<<
9  -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<

में 0 शामिल हैpositive integers
18

4
नहीं, 0 सकारात्मक पूर्णांकों में शामिल नहीं है।
जचारि

स्पष्ट :रूप से एक खाली ढेर पर लागू किया जाता है एक धक्का 0। मुझे लगता है कि इसे निर्दिष्ट किया जाना चाहिए, क्योंकि यह स्पष्ट नहीं है कि एक खाली स्टैक से नकल करना चाहिए0
लुइस मेंडो

क्या अन्य वर्ण वाक्यविन्यास त्रुटियां हैं, या उन्हें अनदेखा किया जाता है?
xnor

@Luismendo आप स्टैक की सामग्री को इसके अलावा नहीं जानते, भले ही वह स्टैक शून्य हो
पोस्ट रॉक गार्फ हंटर

जवाबों:


8

जाप , 10 बाइट्स

¤d0'<1"~<~

इसे ऑनलाइन आज़माएं!

मूल विचार: संख्या का द्विआधारी निरूपण, और मैप 0टू <एंड 1टू ~<~। 1-10 के लिए आउटपुट:

 1: ~<~
 2: ~<~<
 3: ~<~~<~
 4: ~<~<<
 5: ~<~<~<~
 6: ~<~~<~<
 7: ~<~~<~~<~
 8: ~<~<<<
 9: ~<~<<~<~
10: ~<~<~<~<

Metagolfing यह आसान भी होगा। स्ट्रिप जोड़ो की जोड़ी~~
Draco18s को अब SE

7

जावास्क्रिप्ट (ईएस 6), 34 33 बाइट्स

f=n=>n?f(n&1?~n:n/2)+'<~'[n&1]:''
<input type=number oninput=o.textContent=f(this.value)><pre id=o>

किसी भी 32-बिट पूर्णांक के लिए काम करता है।


ठीक है मैं यह पता लगा। ठंडा! अच्छी नौकरी।
पोस्ट रॉक गार्फ हंटर

7

हास्केल , 38 बाइट्स

मुझे लगता है कि पीपीसीजी वास्तव में मेरे हास्केल में सुधार कर रही है। सफेद बिल्ली को मारता है।

f n=mapM(["<","~<~"]<$f)[1..n]!!n>>=id

fएक लेता है Intऔर एक रिटर्न देता है String

इसे ऑनलाइन आज़माएं!

(मैं उस तरह से जिक्र कर रहा हूं <$f। यह एक चरित्र को बचाता है \_->।)

में Functorके लिए उदाहरण (->) a(प्रकार से काम करता है a), हमने: x <$ f = fmap (const x) f = const x . f = const x। केवल सीमा यह है कि fअंतिम और const xसमान स्रोत प्रकार का उपयोग करना चाहिए a। उदाहरण पूरी तरह से आलसी है इसलिए यह कभी भी मूल्यांकन नहीं करता है f

वैकल्पिक रूप से, समान लंबाई लेकिन कम बुराई ( (l!!)एक अनाम कार्य है):

(l!!)
l=(++)<$>"":tail l<*>["<","~<~"]

इसे ऑनलाइन आज़माएं!

ये दोनों एक ही प्रतिनिधित्व का उपयोग @ETHproductions के Japt उत्तर के रूप में करते हैं, हालाँकि विशेष रूप से पहला <शुरुआत में कुछ निरर्थक हो सकता है ।

पहले एक n "<"और "~<~"तार के सभी संयोजनों की गणना करता है, फिर परिणामी सूची में अनुक्रमित करता है।

दूसरा एक पुनरावर्ती रूप से पहले से सूची में शामिल प्रत्येक तत्व को ""जोड़कर "<"और "~<~"तार द्वारा नए तत्वों का निर्माण करके एक अनंत सूची की गणना करता है (वास्तव में यह थोड़ा छोटा भी था कि ""इसे चालू होने दें "<"।)


1
पृथ्वी पर कैसे <$fकाम करता है ? कुछ अजीब फनकार उदाहरण?
xnor

@xnor Mwahahaha मुझे लगता है कि मुझे एक स्पष्टीकरण जोड़ना चाहिए।
अर्जन जोहान्सन

3

रूबी , 118 116 109 107 105 91 बाइट्स

2 बाइट्स को बचाने के लिए धन्यवाद!

->n{o={0=>""}
o.dup.map{|c,k|["~~c","<c*2"].map{|t|o[eval t[1..9]]=k+t[0]}}until o[n]
o[n]}

इसे ऑनलाइन आज़माएं!

यह एक ऐसा फंक्शन है जो पूर्णांक को इनपुट के रूप में लेता है और उस पूर्णांक को वाइज में प्रस्तुत करने वाले स्ट्रिंग को लौटाता है। आप यहां एक अनगुल्ड संस्करण पा सकते हैं , जो 1 से सभी पूर्णांकों पर इस कार्यक्रम का परीक्षण करता है।

मूल विचार स्थिरांक का एक "पूल" रिकॉर्ड करना है। फिर, प्रत्येक "चरण" के साथ, प्रत्येक संभावित फ़ंक्शन के लिए स्थिरांक को पूल में जोड़ा जाता है। मैं कार्यों को चुना है ~, <और >है, जो मेरा मानना है कि हर संख्या का प्रतिनिधित्व करने के लिए पर्याप्त हैं। (कम से कम, 10,000 के तहत हर संख्या।)


आप iirc के dupबजायclone
Cyoce

क्या आपको भी चाहिए dup? mapअपने रिसीवर को संशोधित नहीं करता है।
साइओस

@ मुझे लगता है कि यह करता है
कॉनर ओ'ब्रायन

ओह अब मैं देख रहा हूं। रूबी को पुनरावृति करते समय संशोधित करना पसंद नहीं है।
साइओस

3

पायथन 2, 54 52 51 बाइट्स।

lambda x:'<'.join('>~<~'*int(i)for i in bin(x)[2:])

2 बाइट बचाने के लिए गेहूं जादूगर के लिए धन्यवाद, और एक बाइट के लिए अर्जन जोहानसन! यह ETHproduction के Japt उत्तर के समान विचार का उपयोग करता है, लेकिन विभिन्न प्रतिस्थापन स्ट्रिंग्स (यानी बाइनरी प्रतिनिधित्व का उपयोग करके) के साथ


आप की जरूरत नहीं है [ ]के जनरेटर के अंदर चारों ओर joinjoinअपने तर्क के रूप में एक जनरेटर ले सकते हैं।
पोस्ट रॉक गार्फ हंटर

मुझे लगता है कि '>~<~'*int(i)आप एक बाइट बचा सकते हैं।
अर्जन जोहान्सन

मेरा मानना ​​है कि स्वचालित स्कोरबोर्ड स्निपेट्स और इस तरह के लाभ के लिए नवीनतम स्कोर को अंतिम रूप से सूचीबद्ध किया जाना चाहिए।
अर्जन जोहान्सन

वहां उस पर देर होने का अफसोस है।
जकार्ही

2

05AB1E , 11 बाइट्स

bS'<…~<~‚èJ

इसे ऑनलाइन आज़माएं!

ETHproductions के Japt उत्तर के समान।

@ अदनान को धन्यवाद, 4 बाइट्स बचाए!


अरे अच्छा! आपको वास्तव में संख्याओं को स्ट्रिंग में बदलने की आवश्यकता नहीं है क्योंकि वे 05AB1E में समान 'प्रकार' हैं। संख्या शाब्दिक के लिए समान (आप बिना कर सकते हैं ')। आप अनुक्रमण का भी उपयोग कर सकते हैं, जो आपको 11 बाइट्स देना चाहिए :)।
अदनान

@ अदनान आपका बहुत बहुत धन्यवाद!
कॉमरेड स्पार्कलेपनी

@ अदनान बस एक त्वरित सवाल है, यहाँ कैसे काम करता है?
कॉमरेड स्पार्कलेपनी

सबसे पहले, यह तर्कों को स्वैप करता है क्योंकि यह सामान्य रूप से मूल्यांकन किया गया था तो यह एक अपवाद में चलेगा। स्वैप करने के बाद, यह 0शून्य तत्व और 1पहले तत्व के लिए मैप करता है (क्योंकि यह स्वचालित रूप से वेक्टर होता है)। यहाँ एक और अधिक स्पष्ट उदाहरण है कि यह कैसे काम करता है।
अदनान

1

पायथन 2 , 123 110 बाइट्स

def w(x):a=map(int,bin(x)[2:]);return x%2*("~<~:<"+"<".join(":"*e for e in a[-2::-1])+"|"*sum(a))or w(x/2)+"<"

इसे ऑनलाइन आज़माएं!

इसके अलावा ए lambda

w=lambda x:x%2*("~<~:<"+"<".join(":"*int(e)for e in bin(x)[-2:2:-1])+"|"*sum(map(int,bin(x)[2:])))or w(x/2)+"<"

इसे ऑनलाइन आज़माएं!

छोटा हो सकता है लेकिन यहाँ मेरा समाधान है। यह बाइनरी प्रतिनिधित्व लेता है और इसे कोड में बदल देता है।



0

जेली, 11 10 बाइट्स

Bị“~<~“<”F

यह ETHproductions के Japt उत्तर का एक पोर्ट किया गया संस्करण है। ETHproductions की बात करें तो उन्होंने मुझे एक बाइट बचाई!


क्या आप स्ट्रैप को स्वैप कर सकते हैं और इंडेक्सिंग का दिखावा 0-आधारित है?
ETHproductions

क्या मतलब? मैं इस तथ्य का उल्लेख कर रहा हूं कि मुझे प्रयोग करने योग्य अनुक्रमणिका प्राप्त करने के लिए संख्या के द्विआधारी प्रतिनिधित्व को बढ़ाना होगा।
ज़ाचारि


काम नहीं करता है, 1 पैदा करता है <, जो समझदार 0 में उत्पादन करता है
Zacharý

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.