2 इनपुट और 1 आउटपुट के साथ सभी 16 लॉजिक गेट्स को गोल्फ करें!


63

उदाहरण के लिए, गेट A and B2 इनपुट और 1 आउटपुट के साथ एक लॉजिक गेट है।

उनमें से ठीक 16 हैं, क्योंकि:

  • प्रत्येक लॉजिक गेट में दो इनपुट होते हैं, जो सत्य या गलत हो सकते हैं, जिससे हमें 4 संभावित इनपुट मिलते हैं
  • 4 संभावित इनपुट्स में से प्रत्येक में सत्य और असत्य का आउटपुट हो सकता है
  • इसलिए, 2 ^ 4 संभावित तर्क द्वार हैं, जो 16 है।

आपका कार्य 16 कार्यक्रमों / कार्यों को लिखना है जो सभी को अलग-अलग लागू करते हैं।

आपके कार्य / कार्यक्रम स्वतंत्र होने चाहिए

वे वे उत्पादन truthy / falsey मूल्यों के रूप में लंबे समय के रूप में मान्य हैं, जिसका अर्थ है कि आप लागू कर सकते हैं A or Bके रूप में अजगर में lambda a,b:a+b, भले ही 2के लिए उत्पादन किया जाता है A=Trueऔर B=True

स्कोर कुल बाइट्स है जो प्रत्येक फ़ंक्शन / प्रोग्राम के लिए उपयोग किया जाता है।

तर्क द्वारों की सूची

  1. 0,0,0,0 ( false)
  2. 0,0,0,1 ( and)
  3. 0,0,1,0 ( A and not B)
  4. 0,0,1,1 ( A)
  5. 0,1,0,0 ( not A and B)
  6. 0,1,0,1 ( B)
  7. 0,1,1,0 ( xor)
  8. 0,1,1,1 ( or)
  9. 1,0,0,0 ( nor)
  10. 1,0,0,1 ( xnor)
  11. 1,0,1,0 ( not B)
  12. 1,0,1,1 ( B implies A)
  13. 1,1,0,0 ( not A)
  14. 1,1,0,1 ( A implies B)
  15. 1,1,1,0 ( nand)
  16. 1,1,1,1 ( true)

जहां पहली संख्या के लिए आउटपुट है A=false, B=false, दूसरी संख्या के लिए आउटपुट है A=false, B=true, तीसरे नंबर के लिए आउटपुट है A=true, B=false, चौथे नंबर के लिए आउटपुट है A=true, B=true

लीडरबोर्ड


2
आपके कार्य / कार्यक्रम कोड साझा कर सकते हैं। इसका क्या मतलब है? इसके अलावा, कार्यक्रम विभिन्न भाषाओं में हो सकते हैं?
लिन

2
मैं इस स्पष्टीकरण को भ्रमित करता हूं: "4 संभावित इनपुट में प्रत्येक में सत्य और मिथ्या का उत्पादन हो सकता है"। क्या यह 8 (4 * 2) राज्य नहीं है?
डेविड

4
आपके द्वारा गायब किए गए नाम AND-NOT gates (A और NOT B और B और NOT A) हैं।
मेगो

14
तो यह फिर से हुआ। 18 उत्तर हैं, ज्यादातर सरल और सही हैं, फिर कहीं से भी यह सवाल "अस्पष्ट हो गया है कि आप क्या पूछ रहे हैं"। मुझे लगता है कि आप एक चुनौती पसंद नहीं करते हैं, आगे बढ़ें, एक और लें, इसे बंद न करें!
edc65

4
@dorukayhan देखें: खाली सच
Sp3000

जवाबों:


110

डोमिनोज़ , 122,000 बाइट्स या 72 टाइलें

बाइट काउंट सहेजी गई फ़ाइल का आकार है जो है 0.122 MB

डोमिनोज़ कंप्यूटिंग प्रेरणा थी। मैंने इन सभी को समरूपता (और परे!) तक एक आभासी-वास्तविकता स्टीम गेम के माध्यम से टैब्लेट सिम्युलेटर कहा जाता है ।

विवरण

  • आई / ओ
    • प्रारंभ - यह स्पष्टता के लिए शामिल है (कुल की ओर नहीं गिना जाता है) और यह 'कॉल' या फ़ंक्शन को 'निष्पादित' करता है। इनपुट [येलो] दिए जाने के बाद 'दबाया' जाना चाहिए ।
    • इनपुट A - यह स्पष्टता के लिए शामिल है (कुल की ओर गिना नहीं गया है) और संकेतित करने के लिए 'दबाया' जाता है 1और अन्यथा [ग्रीन] अप्रकाशित है ।
    • इनपुट बी - यह स्पष्टता के लिए शामिल है (कुल की ओर गिना नहीं गया है) और संकेतित 1और अप्रभावित अन्यथा ' ब्लू ' के लिए 'दबाया' जाता है ।
    • आउटपुट - यह कुल की ओर गिना जाता है। यह डोमिनो है जो लॉजिक गेट [ब्लैक] का परिणाम घोषित करता है ।
  • टी / एफ
    • एक गिर आउटपुट डोमिनो Trueया के परिणाम का प्रतिनिधित्व करता है1
    • एक स्टैंडिंग आउटपुट डोमिनो Falseया के परिणाम को दर्शाता है0
  • दबाना
    • इनपुट देने या श्रृंखला शुरू करने के लिए, धातु संगमरमर को स्पॉन करें
    • करने के लिए लिफ्ट ताकत सेट करें 100%
    • वांछित डोमिनोज़ के ऊपर संगमरमर को उठाएं
    • संगमरमर गिरा दो

यहाँ छवि विवरण दर्ज करें

गेट्स

  • गलत, १
    • यहाँ छवि विवरण दर्ज करें
  • और, 6 4
    • यहाँ छवि विवरण दर्ज करें
  • ए और बी नहीं, 4 3
    • यहाँ छवि विवरण दर्ज करें
  • ए, १
    • यहाँ छवि विवरण दर्ज करें
  • ए और बी नहीं, 4 3
    • यहाँ छवि विवरण दर्ज करें
  • बी, १
    • यहाँ छवि विवरण दर्ज करें
  • xor, 15 11
    • यहाँ छवि विवरण दर्ज करें
  • या, 1
    • यहाँ छवि विवरण दर्ज करें
  • न,
    • यहाँ छवि विवरण दर्ज करें
  • xnor, 17 13
    • यहाँ छवि विवरण दर्ज करें
  • बी नहीं, २
    • यहाँ छवि विवरण दर्ज करें
  • B का तात्पर्य A, 7 6 है
    • यहाँ छवि विवरण दर्ज करें
  • ए नहीं, २
    • यहाँ छवि विवरण दर्ज करें
  • एक मतलब बी, 7 6
    • यहाँ छवि विवरण दर्ज करें
  • नंद, १६ १५
    • यहाँ छवि विवरण दर्ज करें
    • सच, १
    • यहाँ छवि विवरण दर्ज करें

टी एल; डॉ

मैं एक डोमिनोज़-फ्रेंडली चुनौती की प्रतीक्षा कर रहा था / और जब मैंने यह देखा, तो मैं इसे पास नहीं कर पाया। एकमात्र समस्या यह थी कि जाहिर तौर पर कोई भी डोमिनोज़ का मालिक नहीं है! इसलिए अंततः मैंने एक डबल ट्वेल्व दिया और खरीदा । इस सेट में 91 टाइलें हैं, जिसने मुझे सामान्य (लंबे) 'समय की देरी' पद्धति के बजाय 'फंक्शन कॉल' / स्टार्ट डोमिनो का विचार दिया। 90 डिग्री के मोड़ का श्रेय डोमिनोज़डब्लू 7 के चैनल से संबंधित है

भौतिक डोमिनोज़ के साथ इन्हें बनाने के बाद, मेटा पर यह फैसला सुनाया गया कि वैध समाधान डिजिटल होने चाहिए। तो मैं Tabletop सिम्युलेटर में इन फाटकों को फिर से बनाया । अफसोस की बात है, टीएस और वास्तविकता डोमिनोज़ भौतिकी पर सहमत नहीं हैं। इसके लिए मुझे 11 डोमिनोज़ जोड़ने की आवश्यकता थी, लेकिन मैंने भी 8 को बचा लिया। कुल मिलाकर, वर्चुअल डोमिनोज़ भवन निर्माण और परीक्षण ( Ctrl+ Z) के संदर्भ में x150 अधिक प्रभावी हैं ।

अपडेट करें

  • -9 [17-03-13] छोटाxor xnor nand
  • [१ [-०३-०४] वर्कशॉप फाइल में लिंक जोड़ा गया
  • +11 [17-03-03] डिजिटल जोड़ा गया xnorऔरxor
  • -8 [17-03-03] सभी फाटकों (सिवाय xorऔर xnor) के डिजीटल । टेबलेटटॉप पर केवल 2 के बजाय 1 डोमिनोज़ की आवश्यकता होती है।
  • [१६-०९ -२३] श्रंक चित्र
  • -11 [16-09-18] लगभग आधे में फिर से एक्सोर काट दिया। धन्यवाद करने के लिए @DJMcMayhem XNOR और के लिए जो XOR के लिए।
  • -31 [16-08-31] कुछ तस्वीरें अपडेट किया गया और कुछ टाइल्स मुंडा और कटौती XOR छमाही में
  • [16-08-28] चित्र जोड़े गए

43
+1 पीपीसीजी पर हमें अधिक डोमिनोज गोल्फिंग की आवश्यकता है
बीटा डिके


7
वाह। यह इस साइट पर मेरे द्वारा देखे गए सबसे मूल उत्तरों में से एक है।
DJMcMayhem

3
ऐसा लगता है कि आप एक डोमिनोज़ को ले सकते हैं यदि आप एक साथ एक्सनोर को स्क्विश करते हैं और 5 के बजाय शीर्ष पर 4 हैं, तो फिर से, मैंने इसे बिल्कुल भी परीक्षण नहीं किया है।
DJMcMayhem

2
इसे एक वैध उत्तर बनाने के लिए समय निकालने के लिए धन्यवाद। हालाँकि, स्रोत फ़ाइल का लिंक ढूंढना थोड़ा कठिन है। आम तौर पर, हेडर में लिंक भाषा की ओर जाता है। तो मैं उस एक को स्टीम गेम से लिंक करूंगा और फिर लिंक को वास्तविक "सोर्स फाइल" में एक अलग, स्पष्ट रूप से लेबल किए गए लिंक से उत्तर के शरीर में डाल दूंगा।
मार्टिन एंडर

45

हेक्सागोनी , 89 बाइट्स

XOR समाधान के लिए कुछ आवश्यक प्रेरणा के लिए FryAmTheEggman को धन्यवाद।

0000 !@
0001 ?.|@!
0010 #?#!)@
0011 ?!@
0100 +?|@!?
0101 ??!@
0110 ?<@!!<_\~(
0111 ?<<@!
1000 )\!#?@{
1001 (~?/@#!
1010 ??|@!)
1011 \#??!1@
1100 ?(~!@
1101 ?.|@!)
1110 ?$@#)!<
1111 1!@

सभी प्रोग्राम 0झूठे और 1सच्चे के लिए उपयोग करते हैं ।

इसे ऑनलाइन आज़माएं! यह एक परीक्षण सूट नहीं है, आपको विभिन्न कार्यक्रमों और खुद को इनपुट करना होगा।

उपरोक्त समाधान इष्टतमता के 2-बाइट्स के भीतर है (जब तक कि हम सत्य / मिथ्या व्याख्या को आराम नहीं देते, मुझे लगता है)। मैंने सभी कार्यक्रमों पर लगभग दो दिनों के लिए एक ब्रूट फोर्स सर्च को चलने दिया है, जो साइड-लेंथ 2 में फिट होता है, यानी 7 बाइट्स तक ( बिल्कुल सभी प्रोग्राम नहीं - मैंने कुछ मान्यताओं पर विचार किया कि हर वैध प्रोग्राम को क्या चाहिए और क्या नहीं वैध कार्यक्रम हो सकता है)। खोज में 16 संभावित द्वारों में से 15 के लिए समाधान मिला - और अक्सर एक से अधिक बहुत कुछ। आप इस पास्टबिन में सभी वैकल्पिक समाधानों की एक सूची पा सकते हैं जहां मैंने उन्हें समान व्यवहार द्वारा समूहीकृत किया है। जो मैं ऊपर दिखा रहा हूं वह मैंने चुना है क्योंकि वे या तो सबसे सरल या सबसे दिलचस्प समाधान हैं, और मैं कल उनके लिए स्पष्टीकरण जोड़ूंगा।

16 वें गेट के लिए: XOR एकमात्र गेट है जिसे जाहिर तौर पर 7 बाइट्स में लागू नहीं किया जा सकता है। बड़े कार्यक्रमों पर एक क्रूर बल खोज दुर्भाग्य से मेरे पास वर्तमान में मौजूद कोड से संभव नहीं है। इसलिए XOR को हाथ से लिखना पड़ा। अब तक मैंने जो सबसे छोटा पाया है, वह उपरोक्त 10-बाइट प्रोग्राम है, जो FryAmTheEggman द्वारा विफल (लेकिन बहुत करीब) प्रयास पर आधारित है। यह संभव है कि एक 8-बाइट या 9-बाइट समाधान मौजूद है, लेकिन इसके अलावा, सभी समाधान वास्तव में इष्टतम होना चाहिए।

स्पष्टीकरण

चेतावनी: पाठ की दीवार। ऑफ-मौका पर किसी की दिलचस्पी है कि ये अत्यधिक संकुचित हेक्सागोनी कार्यक्रम वास्तव में कैसे काम करते हैं, मैंने उनमें से प्रत्येक के लिए स्पष्टीकरण शामिल किया है। मैंने उन मामलों में प्रत्येक गेट के लिए सबसे सरल समाधान चुनने की कोशिश की है, जहां एक से अधिक इष्टतम कार्यक्रम मौजूद हैं, ताकि स्पष्टीकरण को यथोचित रूप से छोटा रखा जा सके। हालांकि, उनमें से कुछ अभी भी मन को चकित करते हैं, इसलिए मैंने सोचा कि वे थोड़ा और विस्तार के लायक हैं।

0000: असत्य

मुझे नहीं लगता कि हमें इसके लिए आरेख की आवश्यकता होगी:

 ! @
. . .
 . .

चूँकि पूरी मेमोरी ग्रिड शून्य से शुरू होती है, !बस एक शून्य प्रिंट करता है और @प्रोग्राम को समाप्त करता है।

यह भी केवल 2-बाइट समाधान है।

0001: तथा

 ? .
| @ !
 . .

यह मूल रूप से शॉर्ट-सर्किटिंग को लागू करता है । नीचे दिए गए ग्रे आरेख कार्यक्रम की शुरुआत को दर्शाता है, जहां पहले इनपुट के साथ पढ़ा जाता है ?और अनुदेश सूचक (आईपी) बाएं कोने के चारों ओर घूमता है जहां |दर्पण इसे प्रतिबिंबित करता है। अब कोने एक सशर्त के रूप में कार्य करता है, जैसे पहले इनपुट के मूल्य के आधार पर दो अलग-अलग निष्पादन पथ हैं। लाल रेखाचित्र नियंत्रण के लिए A = 0और हरे रंग के चित्र के लिए प्रवाह को दर्शाता है A = 1:

मैं मैं मैं

जैसा कि आप देख सकते हैं, जब यह Aहोता है 0, तो हम बस इसे प्रिंट करते हैं और समाप्त करते हैं (याद रखें कि सभी .नो-ऑप हैं)। लेकिन जब Aहै 1, तो IP पहली पंक्ति को फिर से पढ़ता है, Bइसके बजाय पढ़ना और प्रिंट करना।

कुल मिलाकर इस गेट के लिए सोलह 5-बाइट समाधान हैं। उनमें से चौदह अनिवार्य रूप से ऊपर के समान हैं, या तो >इसके बजाय का उपयोग कर रहे हैं |या .एक कमांड के साथ प्रतिस्थापित कर रहे हैं जो प्रभावी रूप से एक नो-ऑप है, या ?दूसरी स्थिति में डाल रहा है:

?.|@!    .?|@!    ?=|@!    =?|@!    ?_|@!    _?|@!    ?0|@!
?.>@!    .?>@!    ?=>@!    =?>@!    ?_>@!    _?>@!    ?0>@!

और फिर दो अन्य समाधान हैं (जो एक दूसरे के बराबर हैं)। ये समान लघु-परिचालित तर्क को भी कार्यान्वित करते हैं, लेकिन निष्पादन पथ थोड़े क्रेज़ी होते हैं (और पाठक को एक अभ्यास के रूप में छोड़ दिया जाता है):

?<!@|
?<!@<

0010: ए और बी नहीं

 # ?
# ! )
 @ .

यह शॉर्ट-सर्क्युटिंग का एक रूप भी लागू करता है, लेकिन #नियंत्रण प्रवाह के उपयोग के कारण बहुत पेचीदा होता है। #एक सशर्त आईपी स्विच है। हेक्सागोनी वास्तव में लेबल किए 0गए छह आईपी के साथ आता है 5, जो कि ग्रिड के छह कोनों में शुरू होता है, जो घड़ी की धार के साथ इशारा करता है (और प्रोग्राम हमेशा आईपी से शुरू होता है 0)। जब एक #सामना किया जाता है, तो वर्तमान मान को मोडुलो लिया जाता है 6, और नियंत्रण प्रवाह संबंधित आईपी के साथ जारी रहता है। मुझे यकीन नहीं है कि पागलपन के फिट ने मुझे इस सुविधा को कैसे जोड़ा, लेकिन यह निश्चित रूप से कुछ आश्चर्यजनक कार्यक्रमों (जैसे यह) के लिए अनुमति देता है।

हम तीन मामलों में अंतर करेंगे। जब A = 0, कार्यक्रम काफी सरल होता है, क्योंकि मूल्य हमेशा 0तब होता है जब #उसका सामना ऐसे किया जाता है जैसे कोई आईपी-स्विचिंग नहीं होता है:

मैं

#कुछ नहीं करता है, ?पढ़ता है A(यानी कुछ भी नहीं करता है), फिर #भी कुछ नहीं करता है, !प्रिंट करता है 0, )वेतन वृद्धि करता है (यह महत्वपूर्ण है, अन्यथा आईपी तीसरी पंक्ति में नहीं कूदता), @कार्यक्रम को समाप्त करता है। काफी सरल। अब आइए मामले पर विचार करें (A, B) = (1, 0):

मैं

लाल पथ अभी भी IP से मेल खाता है 0, और मैंने IP के लिए हरा पथ जोड़ा है 1। हम देखते हैं कि ( इस समय) ?पढ़ने के बाद , शीर्ष दाएं कोने में शुरू होने वाले आईपी पर स्विच होता है। इसका मतलब है कि पढ़ सकते हैं ( )। अब वेतन वृद्धि कि , इस तरह के शीर्ष बाएँ कोने में कुछ भी नहीं है और हम आईपी के साथ रहते हैं । प्रिंट और आईपी बाईं विकर्ण इर्द-गिर्द घूमती। अभी भी कुछ नहीं करता है और कार्यक्रम को समाप्त करता है।A1#?B0)1#1!1#@

अंत में, वास्तव में अजीब मामला है जहां दोनों इनपुट हैं 1:

मैं

इस बार, दूसरा इनपुट भी है 1और )इसे बढ़ाता है 2। इसका मतलब #है कि ऊपरी बाएँ कोने में IP पर एक और IP स्विच होता है 2, जो नीले रंग में इंगित करता है। उस रास्ते पर, हम पहले इसे और बढ़ाते हैं 3(हालाँकि यह अप्रासंगिक है) और फिर ?तीसरी बार पास होते हैं। चूंकि अब हम EOF (यानी इनपुट समाप्त हो गया है), ?रिटर्न 0, !प्रिंट करता है और @प्रोग्राम को समाप्त कर देता है।

विशेष रूप से, यह इस गेट के लिए केवल 6-बाइट समाधान है।

0011: ए

 ? !
@ . .
 . .

यह काफी सरल है कि हमें आरेख की आवश्यकता नहीं होगी: ?पढ़ता है A, !इसे प्रिंट करता है, @समाप्त करता है।

यह इस गेट के लिए केवल 3-बाइट समाधान है। (सिद्धांत रूप में, यह करना भी संभव होगा ,;@, लेकिन खोज में शामिल नहीं था ;, क्योंकि मुझे नहीं लगता कि यह !इस कार्य के लिए बाइट्स को कभी भी बचा सकता है ।)

0100: बी और ए नहीं

 + ?
| @ !
 ? .

यह अपने "भाई" की तुलना में बहुत सरल है 0010। नियंत्रण प्रवाह वास्तव में वैसा ही है जैसा हमने 0001(और) के लिए ऊपर देखा है । यदि A = 0, तो IP निचली पंक्ति, पढ़ने Bऔर मुद्रण करने से पहले समाप्त हो जाता है। अगर A = 1तब IP पहली लाइन को फिर से पढ़ता है B, तो रीडिंग भी करता है , लेकिन +दो अप्रयुक्त मेमोरी किनारों को जोड़ता है , इसलिए यह सब वर्तमान मूल्य को रीसेट करता है 0, ताकि !हमेशा प्रिंट होता रहे 0

इसके (४२) कुल ६ बाइट विकल्प हैं। सबसे पहले, ऊपर के बराबर समाधानों का एक टन है। हम फिर से |और के बीच स्वतंत्र रूप से चुन सकते हैं >, और +किसी भी अन्य कमांड से बदला जा सकता है जो हमें एक खाली बढ़त देता है:

"?|@!?    &?|@!?    '?|@!?    *?|@!?    +?|@!?    -?|@!?    ^?|@!?    {?|@!?    }?|@!?
"?>@!?    &?>@!?    '?>@!?    *?>@!?    +?>@!?    -?>@!?    ^?>@!?    {?>@!?    }?>@!?

इसके अलावा, हम भी के ]बजाय उपयोग कर सकते हैं ?]अगले IP पर ले जाता है (अर्थात IP का चयन करता है 1), ताकि यह शाखा ?शीर्ष दाएं कोने में पुन: उपयोग करे । यह एक और 18 समाधान देता है:

"?|@!]    &?|@!]    '?|@!]    *?|@!]    +?|@!]    -?|@!]    ^?|@!]    {?|@!]    }?|@!]
"?>@!]    &?>@!]    '?>@!]    *?>@!]    +?>@!]    -?>@!]    ^?>@!]    {?>@!]    }?>@!]

और फिर छह अन्य समाधान हैं जो सभी पागलपन के अलग-अलग स्तरों के साथ अलग-अलग काम करते हैं:

/[<@!?    ?(#!@]    ?(#>@!    ?/@#/!    [<<@!?    [@$\!?

0101: बी

 ? ?
! @ .
 . .

Woohoo, एक और सरल एक: पढ़ना A, पढ़ना B, प्रिंट करना B, समाप्त करना। हालांकि इसके लिए वास्तव में विकल्प हैं। चूंकि Aकेवल एक ही चरित्र है, हम इसे भी पढ़ सकते हैं ,:

,?!@

और एक एकल ?का उपयोग करने और एक दर्पण का उपयोग करने का विकल्प भी है जो दो बार इसके माध्यम से चलता है:

?|@!    ?>@!

0110: Xor

  ? < @
 ! ! < _
\ ~ ( . .
 . . . .
  . . .

जैसा कि मैंने ऊपर कहा, यह एकमात्र गेट था जो साइड-लेंथ 2 में फिट नहीं होगा, इसलिए यह FryAmTheEggman और स्वयं द्वारा एक हस्तलिखित समाधान है, और एक अच्छा मौका है कि यह इष्टतम नहीं है। भेद करने के दो मामले हैं। यदि A = 0नियंत्रण प्रवाह काफी सरल है (क्योंकि उस स्थिति में हमें केवल प्रिंट करने की आवश्यकता है B):

मैं

हम लाल पथ पर शुरू करते हैं। ?पढ़ता है A, <एक शाखा है जो बचे हुए शून्य को दर्शाती है। आईपी ​​नीचे की ओर लपेटता है, फिर _एक और दर्पण होता है, और जब आईपी कोने से टकराता है, तो यह ऊपरी बाएं कोने में लपेटता है और नीले रास्ते पर जारी रहता है। इसे ?पढ़ता है B, !छापता है। अब (इसे घटाते हैं। यह महत्वपूर्ण है क्योंकि यह सुनिश्चित करता है कि मूल्य गैर-सकारात्मक है (यह 0या तो या -1अब है)। यह आईपी को दाहिने कोने में लपेटता है, जहां @कार्यक्रम को समाप्त करता है।

जब A = 1चीजें थोड़ी पेचीदा हो जाती हैं। उस स्थिति में हम प्रिंट करना चाहते हैं not B, जो अपने आप में बहुत कठिन नहीं है, लेकिन निष्पादन पथ थोड़ा दुखद है।

मैं

इस बार, <आईपी ​​को सही दर्शाता है और फिर अगला <सिर्फ दर्पण के रूप में कार्य करता है। तो आईपी रिवर्स में उसी रास्ते को पीछे छोड़ता है, Bजब वह ?फिर से सामना करता है । आईपी ​​दाहिने कोने के चारों ओर लपेटता है और हरे रास्ते पर जारी रहता है। यह अगले मुठभेड़ों (~जो "घटती, गुणा -1" है, जो स्वैप 0और 1और इसलिए गणना करता है not B\सिर्फ एक दर्पण है और !वांछित परिणाम प्रिंट करता है। फिर ?दूसरे नंबर पर लौटने की कोशिश करता है लेकिन शून्य देता है। आईपी ​​अब नीले रास्ते पर नीचे बाएँ कोने में जारी है। (घटाव, <प्रतिबिंबित,(फिर से गिरावट, ताकि आईपी के कोने से टकरा जाने पर वर्तमान मूल्य नकारात्मक हो। यह नीचे दाईं ओर तिरछे चलता है और फिर अंत में @कार्यक्रम को समाप्त करने के लिए हिट करता है।

0111: या

 ? <
< @ !
 . .

अधिक शॉर्ट-सर्किटिंग।

मैं मैं

A = 0मामले (लाल पथ) थोड़ा यहाँ भ्रमित है। आईपी ​​बाईं ओर विक्षेपित हो जाता है, निचले बाएं कोने में लपेटता है, तुरंत दिखाई देता है <और ?पढ़ने के लिए वापस आ जाता है B। यह तब रिग कॉर्नर पर जाता है, प्रिंट Bकरता है !और समाप्त होता है।

A = 1मामले (हरा पथ) थोड़ा आसान है। <शाखा आईपी सही विक्षेपित, तो हम आसानी से प्रिंट !, वापस ऊपर बाईं ओर लपेट, और पर समाप्त @

केवल एक अन्य 5-बाइट समाधान है:

\>?@!

यह अनिवार्य रूप से एक ही काम करता है, लेकिन वास्तविक निष्पादन पथ काफी अलग हैं और यह एक के बजाय शाखाओं के लिए एक कोने का उपयोग करता है <

1000: न ही

 ) \
! # ?
 @ {

यह इस खोज में पाया गया मेरा पसंदीदा कार्यक्रम हो सकता है। सबसे अच्छी बात यह है कि यह कार्यान्वयन norवास्तव में 5 इनपुट तक काम करता है। मुझे इस बारे में समझाने के लिए मेमोरी मॉडल के विवरण में जाना होगा। एक त्वरित रिफ्रेशर के रूप में, हेक्सागोनी का मेमोरी मॉडल एक अलग हेक्सागोनल ग्रिड है, जहां प्रत्येक किनारे एक पूर्णांक मान (शुरू में सभी शून्य) रखता है। एक मेमोरी पॉइंटर (MP) है जो उस किनारे के साथ एक किनारे और एक दिशा को इंगित करता है (जैसे कि वर्तमान किनारे के आगे और पीछे दो पड़ोसी किनारे हैं, सार्थक बाएँ और दाएँ पड़ोसी के साथ)। यहाँ किनारों का एक आरेख है जिसका हम उपयोग कर रहे हैं, जिसमें सांसद लाल रंग में दिखाया गया है:

मैं

आइए पहले उस मामले पर विचार करें जहां दोनों इनपुट हैं 0:

मैं

हम ग्रे पथ पर शुरू करते हैं, जो कि किनारे को बढ़ाता है 1ताकि #आईपी ​​पर स्विच हो 1जो कि नीले रंग का रास्ता है, शीर्ष कोने वाले कोने में शुरू होता है। \वहाँ कुछ नहीं करता है और ?एक इनपुट पढ़ता है। हम शीर्ष बाएं कोने में लपेटते हैं, जहां )उस इनपुट में वृद्धि होती है। अब जब तक इनपुट शून्य है, तब तक इसमें परिणाम होगा 1, ताकि #कुछ भी न हो। फिर {MP को बाईं ओर ले जाता है, यानी A से B तक की पहली यात्रा पर । चूंकि इस किनारे पर अभी भी अपना प्रारंभिक शून्य है, आईपी शीर्ष दाएं कोने में और एक नए मेमोरी एज पर वापस लपेटता है। इसलिए यह लूप तब तक जारी रहेगा जब तक कि ?शून्य से सांसद को बी से षट्भुज के चारों ओर ले जाते हुए, शून्य पढ़ा जाता हैके सी के लिए डी और इतने पर। इससे कोई फर्क नहीं पड़ता कि क्या ?एक शून्य लौटाता है क्योंकि यह एक इनपुट था या क्योंकि यह ईओएफ था।

इस लूप के माध्यम से छह पुनरावृत्तियों के बाद, ए पर{ लौटता है । इस बार, किनारे पहले से ही बहुत अधिक चलना से मूल्य रखता है , इसलिए आईपी बाएं कोने में लपेटता है और इसके बजाय हरे रंग की राह पर जारी रहता है। बस प्रिंट करता है और कार्यक्रम को समाप्त करता है।1!1@

अब यदि कोई इनपुट है तो क्या होगा 1?

मैं

फिर ?पढ़ता है कि 1कुछ बिंदु पर और )इसे बढ़ाता है 2। इसका मतलब है कि #अब आईपी को फिर से स्विच किया जाएगा और हम लाल मार्ग पर दाहिने कोने में जारी रखेंगे। ?एक और इनपुट पढ़ता है (अगर वहाँ एक है), जो वास्तव में मायने नहीं रखता है और {एक किनारे को आगे बढ़ाता है। इसके लिए अप्रयुक्त किनारे होना चाहिए, इसलिए यह 5 इनपुट तक काम करता है। आईपी ​​शीर्ष दाईं ओर लपेटता है जहां यह तुरंत परिलक्षित होता है और बाएं कोने में लपेटता है। अप्रयुक्त किनारे पर !प्रिंट करता है 0और #आईपी ​​पर वापस स्विच करता है 0। वह आईपी अभी भी #दक्षिण पश्चिम (ग्रे पथ) पर जा रहा था, इसलिए यह तुरंत हिट करता है @और कार्यक्रम को समाप्त करता है।

कुल मिलाकर इस गेट के लिए सात 7-बाइट समाधान हैं। उनमें से 5 इसी तरह काम करते हैं और अप्रयुक्त किनारे पर जाने के लिए अन्य कमांड का उपयोग करते हैं (और एक अलग षट्भुज या एक अलग दिशा में घूम सकते हैं):

)\!#?@"    )\!#?@'    )\!#?@^    )\!#?@{    )\!#?@}

और समाधानों का एक अन्य वर्ग है जो केवल दो इनपुट के साथ काम करता है, लेकिन जिनके निष्पादन के मार्ग वास्तव में और भी गड़बड़ हैं:

?]!|<)@    ?]!|<1@

1001: समानता

 ( ~
? / @
 # !

यह सशर्त आईपी चयन का बहुत चालाक उपयोग करता है। हमें फिर से A = 0और के बीच अंतर करने की जरूरत है A = 1। पहले मामले में हम प्रिंट करना चाहते हैं not B, दूसरे में हम प्रिंट करना चाहते हैं B। के लिए A = 0हम भी के लिए दो मामलों भेद B। आइए शुरू करते हैं A = B = 0:

मैं

हम ग्रे पथ पर शुरू करते हैं। (~नजरअंदाज किया जा सकता है, आईपी बाएं कोने (अभी भी ग्रे पथ पर) को लपेटता है और Aसाथ पढ़ता है ?(ऐसा होने पर, हम प्राप्त करते हैं -1और आईपी निचले बाएं कोने में लपेटते हैं। अब जैसे मैंने पहले कहा, वह आईपी चुनने से पहले #वैल्यू मोडुलो लेता है 6, इसलिए -1वास्तव में आईपी से एक वैल्यू निकलती है 5, जो लाल रास्ते पर बाएं कोने में शुरू होती है। ?पढ़ता है B, (कि साथ ही साथ 5जब हम #फिर से हिट करते हैं तो हम आईपी ​​पर बने रहते हैं । ~नकारता -1ताकि आईपी नीचे दाएं कोने में लपेटता, प्रिंट 1और समाप्त हो जाता है।

मैं

अब अगर Bहै 1बजाय, वर्तमान मूल्य हो जाएगा 0जब हम मारा #दूसरी बार है, तो हम वापस आईपी करने के लिए स्विच 0(अब हरी पथ पर)। वह ?तीसरी बार हिट करता है, उपज देता है 0, उसे !प्रिंट करता है और @समाप्त करता है।

मैं

अंत में, जहां मामला A = 1। जब हम #पहली बार हिट करते हैं तो इस बार वर्तमान मूल्य पहले से ही शून्य है , इसलिए यह पहली बार 5में आईपी ​​पर स्विच नहीं करता है। हम बस तुरंत हरे रास्ते पर चलते रहते हैं। ?अब सिर्फ एक शून्य नहीं देता Bबल्कि बदले में देता है । !इसे प्रिंट करता है और @फिर से समाप्त करता है।

कुल में इस गेट के लिए तीन 7-बाइट समाधान हैं। अन्य दो बहुत अलग तरीके से (यहां तक ​​कि एक दूसरे से भी) काम करते हैं, और भी अजीब उपयोग करते हैं #। विशेष रूप से वे एक या एक से अधिक मूल्यों के साथ ,पढ़ते हैं (एक पूर्णांक के बजाय एक वर्ण कोड पढ़ते हैं) और फिर एक आईपी चुनने के लिए उस मूल्य modulo 6 का उपयोग करते हैं। यह बहुत पागल है।

),)#?@!

?~#,~!@

1010: बी नहीं है

 ? ?
| @ !
 ) .

यह एक काफी सरल है। निष्पादन पथ वह क्षैतिज शाखा है जिसे हम पहले से andपहले से जानते हैं । ??पढ़ता है Aऔर फिर तुरंत B। पर |और ब्रांचिंग को प्रतिबिंबित करने के बाद , B = 0हम नीचे की शाखा को निष्पादित करेंगे, जहां )उस मूल्य को बढ़ाता है 1जिसे बाद में मुद्रित किया जाता है !। शीर्ष शाखा पर (यदि B = 1) ?बस किनारे को फिर से रीसेट करें 0जो तब भी मुद्रित होता है !

इस गेट के लिए आठ 6-बाइट कार्यक्रम हैं। उनमें से चार काफी एक ही के साथ या तो कर रहे हैं >के बजाय |या 1के बजाय )(या दोनों):

??>@!)    ??>@!1    ??|@!)    ??|@!1

दो एकल का उपयोग करते हैं ?जो दर्पण के कारण दो बार उपयोग किया जाता है। नकार तब होता है जब हमने या xorतो (~उसके साथ किया था ~)

?>!)~@    ?>!~(@

और अंत में, दो समाधान एक सशर्त आईपी स्विच का उपयोग करते हैं, क्योंकि अगर सरल भी काम करता है तो सरल तरीके का उपयोग क्यों करें:

??#)!@    ??#1!@

1011: B का तात्पर्य A है

 \ #
? ? !
 1 @

यह कुछ बल्कि विस्तृत आईपी स्विचिंग का उपयोग करता है। मैं A = 1इस बार मामले से शुरू करूंगा , क्योंकि यह सरल है:

यहाँ छवि विवरण दर्ज करें

हम ग्रे पथ पर शुरू करते हैं, जिसके Aसाथ पढ़ता है ?और फिर हिट करता है #। के बाद से Aहै 1इस आईपी पर स्विच करता है 1(हरी पथ)। !तुरंत प्रिंट कि, आईपी शीर्ष बाईं ओर लपेटता, पढ़ता B(अनावश्यक रूप से) और समाप्त हो जाता है।

जब A = 0चीजें थोड़ी और दिलचस्प हो जाती हैं। पहले विचार करें A = B = 0:

यहाँ छवि विवरण दर्ज करें

इस बार, #कुछ नहीं करता है और हम आईपी पर बने रहते हैं 0(उस बिंदु से लाल पथ)। ?पढ़ता है Bऔर 1इसे एक में बदल देता है 1। ऊपरी बाएं कोने में लपेटने के बाद, हम #फिर से हिट करते हैं, इसलिए हम सभी के बाद हरे रास्ते पर समाप्त होते हैं, और 1समाप्त होने से पहले पहले की तरह प्रिंट करते हैं।

अंत में, यहाँ (A, B) = (0, 1)झूठा मामला है:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि मैंने स्पष्टता के लिए प्रारंभिक ग्रे पथ को हटा दिया है, लेकिन कार्यक्रम उसी तरह से शुरू होता है, और हम पहले की तरह लाल पथ पर समाप्त होते हैं। तो इस बार दूसरा ?रिटर्न 1। अब हमारा सामना होता है 1। इस बिंदु पर यह समझना महत्वपूर्ण है कि हेक्सागोनी में वास्तव में क्या अंक हैं (अब तक हमने केवल उन्हें शून्य पर उपयोग किया है): जब एक अंक का सामना किया जाता है, तो वर्तमान मूल्य 10 से गुणा किया जाता है और फिर अंक जोड़ा जाता है। यह आमतौर पर दशमलव संख्या को स्रोत कोड में लिखने के लिए उपयोग किया जाता है, लेकिन इसका मतलब है कि B = 1वास्तव में मूल्य के लिए मैप किया गया है 11। इसलिए जब हम हिट करते हैं #, तो इसे 6देने के लिए मोडुलो लिया जाता है 5और इसलिए हम आईपी पर स्विच करते हैं 5( 1पहले की तरह) और नीले रास्ते पर चलते रहते हैं। साधते?तीसरी बार एक शून्य लौटाता है, इसलिए !प्रिंट करता है, और एक और दो के बाद ?, आईपी नीचे दाईं ओर लपेटता है जहां कार्यक्रम समाप्त होता है।

इसके लिए चार 7-बाइट समाधान हैं और वे सभी अलग-अलग काम करते हैं:

#)/!?@$    <!?_@#1    \#??!1@    |/)#?@!

1100: ए नहीं

 ? (
~ ! @
 . .

बस एक सरल रैखिक एक: Aसाथ पढ़ें ?, साथ नकारात्मक (~, प्रिंट के साथ !समाप्त करें @

एक वैकल्पिक समाधान है, और ~)इसके बजाय इसके साथ उपेक्षा है :

?~)!@

1101: A का तात्पर्य B है

 ? .
| @ !
 ) .

यह उस निहितार्थ की तुलना में बहुत सरल है जिसके बारे में हमने अभी बात की है। यह फिर से उन क्षैतिज शाखा कार्यक्रमों में से एक है, जैसे के लिए and। यदि Aहै 0, तो यह बस 1नीचे की शाखा पर बढ़ जाता है और मुद्रित होता है। अन्यथा, शीर्ष शाखा को फिर से निष्पादित किया जाता है जहां ?पढ़ता है Bऔर फिर !इसके बजाय प्रिंट करता है।

यहाँ विकल्पों में से एक टन है (कुल में 66 समाधान), ज्यादातर प्रभावी नो-ऑप्स की मुफ्त पसंद के कारण। एक शुरुआत के लिए हम सभी को एक ही तरीके से हम के लिए कर सकता है में ऊपर समाधान भिन्न हो सकते हैं andऔर हम भी बीच चयन कर सकते )हैं और 1:

?.|@!)    .?|@!)    ?=|@!)    =?|@!)    ?_|@!)    _?|@!)    ?0|@!)
?.|@!1    .?|@!1    ?=|@!1    =?|@!1    ?_|@!1    _?|@!1    ?0|@!1
?.>@!)    .?>@!)    ?=>@!)    =?>@!)    ?_>@!)    _?>@!)    ?0>@!)
?.>@!1    .?>@!1    ?=>@!1    =?>@!1    ?_>@!1    _?>@!1    ?0>@!1

और फिर वहाँ सशर्त आई पी चुनाव है, जिसकी पहली आदेश लगभग मनमाने ढंग से चुना जा सकता है का उपयोग करते हुए एक अलग संस्करण है, और वहाँ भी बीच एक विकल्प है )और 1उन विकल्पों में से कुछ के लिए:

"?#1!@    &?#1!@    '?#1!@    )?#1!@    *?#1!@    +?#1!@    -?#1!@    .?#1!@    
0?#1!@    1?#1!@    2?#1!@    3?#1!@    4?#1!@    5?#1!@    6?#1!@    7?#1!@    
8?#1!@    9?#1!@    =?#1!@    ^?#1!@    _?#1!@    {?#1!@    }?#1!@

"?#)!@    &?#)!@    '?#)!@              *?#)!@    +?#)!@    -?#)!@    
0?#)!@              2?#)!@              4?#)!@              6?#)!@    
8?#)!@                        ^?#)!@    _?#)!@    {?#)!@    }?#)!@

1110: नंद

 ? $
@ # )
 ! <

आखिरी जटिल। यदि आप अभी भी पढ़ रहे हैं, तो आप इसे लगभग बना चुके हैं। :) चलो A = 0पहले देखो :

यहाँ छवि विवरण दर्ज करें

?पढ़ता है Aऔर फिर हम हिट करते हैं $। यह एक जम्प कमांड है (जैसे बेफुज का #) जो अगले निर्देश को छोड़ देता है ताकि हम उस पर समाप्त न हों @। इसके बजाय आईपी पर जारी है #। हालाँकि, चूंकि Aयह 0कुछ भी नहीं करता है। )इसे बढ़ाता है 1ताकि IP नीचे के पथ पर जारी रहे जहां 1मुद्रित है। <विक्षेपित सही है, जहां यह छोड़ दिया कोने में लपेटता है और कार्यक्रम समाप्त हो जाता है करने के लिए आईपी।

अगला, जब इनपुट होता है (A, B) = (1, 0)तो हमें यह स्थिति मिलती है:

यहाँ छवि विवरण दर्ज करें

यह अनिवार्य रूप से पहले की तरह ही है सिवाय इसके कि #हम IP 1(ग्रीन पाथ) पर स्विच करते हैं , लेकिन जब Bसे 0हम दूसरी बार (अब ब्लू पाथ) 0मारते हैं, जब हम पहले की तरह #प्रिंट करते हैं, तो हम IP पर वापस आ जाते हैं 1

अंत में, A = B = 1मामला:

यहाँ छवि विवरण दर्ज करें

इस बार, जब हम #दूसरी बार, वर्तमान मूल्य अभी भी 1इतना है कि हम फिर से आईपी नहीं बदलते हैं। <यह दर्शाता है और तीसरी बार हम मारा ?हम एक शून्य मिलता है। इसलिए आईपी बायीं ओर नीचे की ओर जाता है जहां !शून्य को प्रिंट करता है और प्रोग्राम समाप्त होता है।

इसके लिए कुल मिलाकर 9 7-बाइट समाधान हैं। पहला विकल्प केवल 1इसके बजाय उपयोग करता है ):

?$@#1!<

फिर दो समाधान हैं जो आपके सिर को आईपी स्विचिंग की मात्रा के साथ करेंगे जो कि चल रहा है:

)?#_[!@    1?#_[!@

ये वास्तव में मेरे दिमाग को उड़ा देते हैं: दिलचस्प हिस्सा यह है कि आईपी स्विचिंग का उपयोग आस्थगित सशर्त के रूप में किया जा सकता है। भाषा के आईपी-स्विचिंग नियम ऐसे हैं कि वर्तमान आईपी स्विच होने से पहले एक और कदम बनाता है। यदि वह चरण एक कोने से गुजरने के लिए होता है, तो वर्तमान मूल्य यह तय करता है कि यदि हम कभी भी इसे वापस स्विच करते हैं तो आईपी किस शाखा पर जारी रहेगा। वास्तव में यह तब होता है जब इनपुट होता है A = B = 1। हालाँकि यह सब इस बात के अनुरूप है कि मैंने भाषा को कैसे डिज़ाइन किया है, मुझे कल्पना के इस निहितार्थ के बारे में कभी नहीं पता था, इसलिए यह अच्छा है जब मेरी भाषा मुझे कुछ नए गुर सिखाती है: डी।

फिर एक तीसरा समाधान है जिसकी आईपी स्विचिंग की मात्रा और भी बदतर है (हालांकि यह उस आस्थगित प्रभाव का उपयोग नहीं करता है):

>?1]#!@

और फिर एक और है:

?$@#)!<

और फिर ये चार समान समाधान हैं, जो कुछ गैर-सशर्त आईपी स्विचिंग का उपयोग करते हैं और इसके बजाय शाखाओं और कोनों के माध्यम से सभी तर्क को लागू करते हैं:

]<?<@!)    ]<?<@!1    ]|?<@!)    ]|?<@!1

1111: सच

 1 !
@ . .
 . .

आपने खुद को अंत के लिए कुछ सरल अर्जित किया है: किनारे पर सेट करें 1, साथ प्रिंट करें !, समाप्त करें @। :)

बेशक, एक विकल्प है:

)!@

हमेशा की तरह, सभी नियंत्रण प्रवाह आरेख टिमवी के हेक्सागोनीकॉलियर और मेमोरी आरेख के साथ उनके एसोटेरिकाइड के साथ बनाए गए थे ।


9
Aaaaaand the tl; dr अवार्ड जाता है ... (मजाकिया अंदाज में, बढ़िया जवाब और बहुत अच्छा लिखा है, +1)
बैसड्रुप कम्बरबुवबूब जुब

4
यही कारण है कि आप अब चैट पर सक्रिय नहीं हैं ??
ऑप्टिमाइज़र

देर से छाँटें, लेकिन क्या आप अपने जानवर बल कोड के लिए एक कड़ी जोड़ सकते हैं?
nedla2004

@ nedla2004 मैं आमतौर पर उन्हें इधर-उधर नहीं रखता, लेकिन यह हमेशा इस स्क्रिप्ट का एक संशोधित संस्करण है ।
मार्टिन एंडर

40

एपीएल, 22 20 18 बाइट्स

सच्ची और झूठी प्रविष्टियाँ पूर्ण कार्यक्रम हैं, और अन्य 14 कार्य हैं। (Adám को धन्यवाद।)

0000 false              0 (complete program)
0001 p and q            ∧
0010 p and not q        >
0011 p                  ⊣
0100 not p and q        <
0101 q                  ⊢
0110 xor                ≠
0111 p or q             ∨
1000 not p and not q    ⍱
1001 eq                 =
1010 not q              ~⊢
1011 p or not q         ≥
1100 not p              ~⊣
1101 not p or q         ≤
1110 not p or not q     ⍲
1111 true               1 (complete program)

इसे यहाँ आज़माएँ।


1
+1 परमाणुओं का अच्छा उपयोग! आप पारंपरिक-FNS में 0000 और 1111 बनाकर दो बाइट्स बचा सकता है 0और 1
आदम

Tfns की अनुमति देने के लिए एक आम सहमति है, लेकिन पहली पंक्ति को गिनने के लिए नहीं। यह प्रोग्राम नाम = फ़ाइल नाम के साथ प्रोग्राम कंटेनर के रूप में फ़ाइलों का उपयोग करने वाली भाषाओं में फ़ाइल नाम की गणना नहीं करने से मेल खाती है।
आदम


10
जेली: 19 बाइट्स। यह: 18 बाइट्स। इसका मतलब यह नहीं है कि आप डेनिस को पछाड़ दें ? उसके लिए +1।
NoOneIsHere

29

एंडगेम, 70 टुकड़ों में शतरंज / औसत शतरंज खिलाड़ी

उस डोमिनोज़ जवाब से प्रेरित होकर, मैंने तय किया कि एक और खेल में यह सम्मान होना चाहिए।

ध्यान दें कि मैंने कुछ नियम लिए कि टुकड़े कैसे चलते हैं। क्योंकि मुझे ऐसा नहीं लगता कि हर स्थिति के लिए अनुकूलतम चालों का अध्ययन करना, गोरों की चाल के नियम सरल हैं: जाँच से बाहर रहें, उच्चतम रैंकिंग के टुकड़े को पकड़ें जो वह मोड़ सकता है, जबकि यथासंभव कम सामग्री खो सकता है, और एक मोहरा रोक सकता है प्राथमिकता के उस क्रम में प्रचार करने से। यदि दो स्थान हैं, तो वह बराबर फ़ेब्रुबिलिटी के साथ आगे बढ़ सकता है, तो वह या तो आगे बढ़ सकता है (इसलिए इन में, यदि वह एक से अधिक वर्ग में जा सकता है, तो वे एक ही रंग हैं)। ध्यान दें कि सफेद कुछ के साथ कब्जा कर लेगा भले ही वह कब्जा कर लिया हो, अगर यह जिस टुकड़े पर हमला कर रहा है वह खोए हुए से अधिक मूल्य है। मूल्य यहाँ हैं:pawn<knight=bishop<rook<queen

इनपुट है कि एक बदमाश मौजूद है या नहीं। ध्यान दें कि बदमाश केवल ए और बी नामों के साथ लेबल किए जाते हैं जब यह मायने रखता है: अगर गेट एक ही व्यवहार करते हैं जब बदमाशों को स्विच किया जाता है, तो उन्हें लेबल नहीं किया जाता है।

उत्पादन वर्ग सफेद राजा का रंग होता है: सफेद = 1, काला = 0

छवियों से पहले, मैं खराब छवियों के लिए माफी चाहता हूं। मैं एक कैमरा स्थिर रखने में बहुत अच्छा नहीं हूँ।

गलत, 4:

असत्य

और, 4:

यहाँ छवि विवरण दर्ज करें

ए और बी नहीं, 5 (मुझे लगता है कि मैं इसे नीचे तीन तक ले जा सकता हूं, लेकिन अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

ए, 4:

यहाँ छवि विवरण दर्ज करें

A और B, 5 नहीं (मुझे लगता है कि मैं इसे नीचे तीन तक ले जा सकता हूं, लेकिन अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

बी 4:

यहाँ छवि विवरण दर्ज करें

Xor, 5 (मैं इसे 4 बनाने का एक तरीका जानता हूं, लेकिन मेरे पास अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

या, 4:

यहाँ छवि विवरण दर्ज करें

न ही, 4:

यहाँ छवि विवरण दर्ज करें

Xnor, 5 (मैं इसे 4 बनाने का एक तरीका जानता हूं, लेकिन मेरे पास अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

बी नहीं, 4:

यहाँ छवि विवरण दर्ज करें

B का तात्पर्य A, 5 है (मुझे लगता है कि मैं इसे नीचे तीन तक ले जा सकता हूं, लेकिन अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

ए नहीं, 4:

यहाँ छवि विवरण दर्ज करें

A का अर्थ है B, 5 (मुझे लगता है कि मैं इसे तीन से नीचे ला सकता हूं, लेकिन अभी बोर्ड नहीं है):

यहाँ छवि विवरण दर्ज करें

नंद, ४:

यहाँ छवि विवरण दर्ज करें

सच, 4:

यहाँ छवि विवरण दर्ज करें


1
वाह, मुझे नहीं पता था कि शतरंज में प्रोग्रामिंग संभव है ... क्या आप कार्रवाई में इनमें से कुछ का वीडियो / सिमुलेशन पोस्ट कर सकते हैं?
बीटा डेके

2
हम्म, मैं वर्तमान में शतरंज बोर्ड के लिए उपयोग नहीं है। मैं शायद यह कहूंगा कि A / B का तात्पर्य है कि बी / बी का तात्पर्य राजाओं के आंदोलन पर प्यादों के प्रभाव के कारण समझना सबसे कठिन है। मुझे शायद उन दो के लिए बेहतर स्पष्टीकरण जोड़ना चाहिए
विनाशकारी नींबू

प्रेरणा के लिए खुशी: D अगर मैं सही तरीके से समझ रहा हूं, तो बोर्ड और टुकड़ा स्थान एक कार्यक्रम के बराबर हैं। बदमाश इनपुट हैं, इसलिए मैं उन्हें किसी भी वर्ग पर रख सकता हूं जब तक कि यह सही रंग नहीं है?
नॉनलाइनयरफोर्स

नहीं, बदमाशों का इनपुट है कि वे बोर्ड से उपस्थित हैं या अनुपस्थित हैं। जब वे सममित फाटक नहीं होते हैं, तो उन्हें ए और बी लेबल किया जाता है (जब यह अलग-अलग ए और बी के लिए मायने रखता है)। इसके अलावा मुझे एहसास हुआ कि मैं 2 टुकड़े कैसे कर सकता हूं, लेकिन मेरे पास अभी बोर्ड नहीं है। तूलिका का उपयोग किया जाना चाहिए :)
विनाशकारी नींबू

अपने "और" मामले पर, यदि आप सही किश्ती को हटाते हैं, तो राजा को नीचे (सफेद) जाने से क्या रोक रहा है?
नाथन मेरिल

27

जेली , 19 बाइट्स

0 0 0 0 ¤  1 byte  Empty niladic chain. Returns default argument 0.
0 0 0 1 &  1 byte  Bitwise AND.
0 0 1 0 >  1 byte  Greater than.
0 0 1 1    0 bytes Empty link. Returns left argument.
0 1 0 0 <  1 byte  Less than.
0 1 0 1 ị  1 byte  At-index (x,y -> [y][x]). Returns right argument.
0 1 1 0 ^  1 byte  Bitwise XOR.
0 1 1 1 |  1 byte  Bitwise OR.
1 0 0 0 |¬ 2 byte  Logical NOT of bitwise OR.
1 0 0 1 =  1 byte  Equals.
1 0 1 0 ¬} 2 bytes Logical NOT of right argument.
1 0 1 1 *  1 byte  Exponentiation.
1 1 0 0 ¬  1 byte  Logical NOT of left argument.
1 1 0 1 >¬ 2 bytes Logical NOT of greater than.
1 1 1 0 &¬ 2 bytes Logical NOT of bitwise AND.
1 1 1 1 !  1 byte  Factorial.

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


13
मुझे 0 या 1 से 1. में बदलने के लिए फैक्टरलोर का उपयोग बहुत पसंद है
नील

जेली UTF-8 है? यदि हां, तो ¤और ¬2 बाइट्स, नहीं 1. हैं
Vi।

1
@Vi। जेली यूटीएफ -8 का समर्थन करती है, लेकिन यह एक कस्टम कोड पेज का भी समर्थन करती है जो प्रत्येक 256 अक्षरों में से प्रत्येक को एक एकल बाइट के रूप में समझता है। बाइट्स यह करने के लिए शीर्ष लेख अंक में जोड़ देते हैं।
डेनिस

0 0 1 0 > 1 byte Greater than.यदि दूसरा इनपुट नकारात्मक था तो क्या यह विफल नहीं होगा?
एमडी एक्सएफ

@MFXF हम चुन सकते हैं कि कौन सा सत्य और कौन सा मिथ्या मूल्य हम समर्थन करते हैं।
डेनिस

24

नंद तर्क द्वार - 31 द्वार

NAND गेट प्रश्नों की मूल श्रृंखला के निर्माता के रूप में , मैं एक अन्य लॉजिक गेट समस्या को हल करने के लिए इन गेट्स का उपयोग करने का अवसर नहीं दे सका।

यहाँ छवि विवरण दर्ज करें

इनमें से प्रत्येक आरेख में, शीर्ष इनपुट A है जबकि निचला इनपुट B है।


5
@xnor को यह जानने के लिए फ़्लर्ट किया जा सकता है कि उनका लॉजिक गेट वह है जिसे D बनाने के लिए सबसे NAND गेट्स की आवश्यकता है:
जो जेड।

क्या आप कम से कम अपने कोड को फॉर्मेट करने के लिए Logisim का उपयोग कर सकते हैं?
mbomb007

1
@ mbomb007 मैं बाद में इसे संपादित करूँगा। मैं Logisim के साथ इतना अनुभवी नहीं हूं, इसलिए इसमें थोड़ा समय लग सकता है।
जो जेड।

3
लेकिन मुझे लिखावट ज्यादा अच्छी लगती है।
लीक नून

1
वैकल्पिक रूप से आप न तो गेट पर जा सकते हैं और न ही इसे रेडस्टोन का उपयोग करके प्रारूपित कर सकते हैं ...
jimmy23013

22

बिटवाइज़ साइक्लिक टैग , 118 बिट्स = 14.75 बाइट्स

बिटवाइज़ साइक्लिक टैग शायद सबसे सरल ट्यूरिंग-पूर्ण भाषा है जिसे कभी भी तैयार किया गया है। एक कार्यक्रम टेप और एक डेटा टेप है, दोनों बिट्स की एक सूची से मिलकर बनता है। प्रोग्राम टेप की व्याख्या साइक्लिकल रूप से की जाती है जब तक कि डेटा टेप खाली न हो, निम्नानुसार है:

  • 0: डेटा टेप से पहला बिट हटाएं।
  • 1x: यदि डेटा टेप का पहला बिट 1 है, तो बिट xको डेटा टेप में जोड़ें।

हम दो इनपुट बिट्स के बाद 1 के साथ डेटा टेप को इनिशियलाइज़ करते हैं (1 आवश्यक है क्योंकि डेटा टेप पूरी तरह से 0s के होने पर 1 बनाने का कोई तरीका नहीं है), और हम गेट के आउटपुट के रूप में अंतिम हटाए गए डेटा बिट का उपयोग करते हैं ।

  • 0,0,0,0 ( false):001
  • 0,0,0,1 ( and):1001001
  • 0,0,1,0 ( A and not B):0110100
  • 0,0,1,1 ( A):1001
  • 0,1,0,0 ( not A and B):0100
  • 0,1,0,1 ( B):0
  • 0,1,1,0 ( xor):0110110010
  • 0,1,1,1 ( or):0110
  • 1,0,0,0 ( nor):1101001000
  • 1,0,0,1 ( xnor):110101001100
  • 1,0,1,0 ( not B):1100100
  • 1,0,1,1 ( B implies A):110101101000
  • 1,1,0,0 ( not A):11010000
  • 1,1,0,1 ( A implies B):11010011001
  • 1,1,1,0 ( nand):10110100100010
  • 1,1,1,1 ( true):1100

बधाई हो!
लीक नुन् ०

आवश्यक 1पर अनुगामी falseहै?
कैलक्यूलेटरफिलीन

@CalculatorFeline हाँ, हमें 0टेप को जोड़ने की आवश्यकता है ताकि इसे अंतिम रूप से हटाया जा सके।
एंडर्स कासोर्ग

आह। उस + लपेट के बारे में भूल गया। चालाक!
कैलक्यूलेटरफल

20

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

[].sort
min
int.__rshift__
round
range
{}.get
cmp
max
lambda a,b:a<1>b
lambda a,b:a==b
lambda a,b:b<1
pow
{0:1,1:0}.get
{0:1}.get
lambda a,b:a+b<2
slice

min(True,False)(या जैसे min(1,0)) इनपुट लेता है । केवल सही ट्रू-फाल्सी मूल्य के लिए आवश्यक आउटपुट का भारी लाभ लेता है। जब भी संभव हो, एक महंगा से बचने के लिए अंतर्निहित का उपयोग करता है lambda। मैंने उस काम के लिए बिल्ट-इन की खोज के लिए कोड का उपयोग किया।

मेरा पसंदीदा एक है {0:1}.get, जिसे मैंने हाथ से सोचा था। शब्दकोश मूल्य के {0:1}लिए कुंजी मैप करता है । इसकी विधि एक कुंजी और एक डिफ़ॉल्ट लेती है, कुंजी से मेल खाने वाले मान को आउटपुट करता है, या यदि ऐसी कोई कुंजी नहीं है तो डिफ़ॉल्ट है। तो, उत्पादन एक लिए एक ही रास्ता के रूप में है , याद आ रही कुंजी के साथ और डिफ़ॉल्ट । विभिन्न शब्दकोशों के साथ अन्य वेरिएंट प्राप्त कर सकते हैं, लेकिन केवल यह सबसे छोटा था।01get0{0:1}.get(1,0)10

built_in_names = list(__builtins__) 

object_names = ["int","(0)","(1)"] + \
["True","False","0L","1L","0j","1j"] + \
["str", "''", "'0'","'1'","'a'"] + \
["list", "[]", "[0]", "[1]","['']","[[]]","[{}]"] + \
["set","set()","{0}","{1}","{''}"] + \
["dict","{}","{0:0}","{0:1}","{1:0}","{1:1}","{0:0,1:0}", "{0:0,1:1}","{0:1,1:0}","{0:1,1:1}"] + \
["id"]

object_method_names = [object_name+"."+method_name 
for object_name in object_names 
for method_name in dir(eval(object_name))]

additional_func_names = [
"lambda a,b:0",
"lambda a,b:1",
"lambda a,b:a",
"lambda a,b:b",
"lambda a,b:b<1",
"lambda a,b:a<1",
"lambda a,b:a+b",
"lambda a,b:a*b",
"lambda a,b:a==b",
"lambda a,b:a-b",
"lambda a,b:a<=b",
"lambda a,b:a>=b", 
"lambda a,b:a>b", 
"lambda a,b:a<b", 
"lambda a,b:a<1>b", 
"lambda a,b:a+b<2"]

func_names = built_in_names + object_method_names + additional_func_names

t=True
f=False

cases = [(f,f),(f,t),(t,f),(t,t)]

def signature(func):
    table = [bool(func(x,y)) for x,y in cases]
    table_string = ''.join([str(int(val)) for val in table])
    return table_string

d={}

for func_name in func_names:
    try:
        func = eval(func_name) 
        result = signature(func)
        if result not in d or len(func_name)<len(d[result]):
            d[result]=func_name
    except:
        pass

total_length = sum(len(func) for sig,func in d.items())

print total_length
print

for sig in sorted(d):
    print d[sig]

आप पूर्णांक के की तरह बनाया गया-इन के तरीकों का उपयोग नहीं किया जा सकता __lt__या __eq__? ये आगे की बाइट की संख्या को कम कर देंगे: int.__gt__इसके बजाय lambda a,b:b<1, int.__eq__इसके बजाय lambda a,b:a==bऔर इतने पर
गेबर फेकेट

@ गैबराफ़ेक्टे पायथन 2 में मौजूद नहीं हैं क्योंकि intऑफलोड की तुलना cmp। मैंने पायथन 3 के लिए यह कोशिश नहीं की है।
xnor

ओह अभी मैं देखता हूँ!
गाबेर फेकेट

फ़ंक्शन का उपयोग करके 4 बाइट सहेजें notके लिए 0001, False- ideone
जोनाथन एलन

1
@JonathanAllan यह चतुर है, लेकिन मुझे लगता है कि notयह किसी फ़ंक्शन की आवश्यकताओं को पूरा नहीं करता है क्योंकि आप ऐसा नहीं कर सकते f=not;f(3,4)। स्ट्रिंग notकाम करने के लिए होती है क्योंकि माना फ़ंक्शन तर्क एक टपल की तरह दिखते हैं, वैसे ही जैसे कि एक फ़ंक्शन के रूप में 3+काम करेगा जो इनपुट के रूप में ले सकता है । 3+(4)3+4
xnor

20

गो (गेम), 33 पत्थर, 73 चौराहे

अगर डोमिनोज़ और शतरंज स्वीकार्य हैं, तो यह। यह एक पूर्ण 19x19 गो बोर्ड पर बहुत अधिक गोल्फ नहीं हो सकता है। इसलिए मैंने छोटे आयताकार बोर्डों का उपयोग किया। इनपुट यह है कि क्या 1 और 2 चिह्नित पत्थर मौजूद हैं। आउटपुट है कि क्या काला जीतता है। यह क्षेत्र स्कोरिंग, 0.5 कोमी, स्थितिजन्य सुपरको, कोई आत्महत्या नहीं करता है। खेलने के लिए सभी काले। कुछ को कई समाधान दिए गए हैं।

सफेद जीत (2, 1x5):

➊━━━➋

1 और 2 (3, 2x3):

➊◯➋
┗┷┛

1 और 2 नहीं (2, 1x5):

╺➊━➁╸

1 (2, 1x5):

╺➊➁━╸ 
╺➊━━➁
➀━➁━╸

1 और 2 नहीं (2, 1x5):

╺➋━➀╸

2 (2, 1x5):

╺➋➀━╸

1 एक्सर 2 (2, 2x3):

➀┯➁
┗┷┛

1 या 2 (2, 1x5):

╺➊━➋╸
➀━━━➁

1 और 2 (2, 1x4):

➊━━➋
╺➀➁╸

1 = 2 (2, 1x7):

╺━➀━➁━╸

2 (2, 1x3) नहीं:

➀➁╸

1 या 2 नहीं (2, 1x4):

➀➁━╸
➀━➁╸
╺➊➁╸
➋➊━╸
➋━➊╸

1 (2, 1x3) नहीं

➁➀╸

1 या 2 (2, 1x4) नहीं:

➁➀━╸

1 नंद 2 (2, 1x3):

➊━➋

ब्लैक जीत (2, 1x3):

➊➋╸
➀━➁
➊━➁

इस पृष्ठ ने मुझे थोड़ी मदद की: http://www.mathpuzzle.com/go.html

शायद किसी को 1x9 बोर्ड पर 1 और 2 के लिए 2 पत्थर का समाधान मिल सकता है ...


1
आत्महत्या के आपके नियम क्या हैं? अनुमति नहीं दी गई? और जब एक पक्ष पूरे बोर्ड को भरता है तो क्या होता है? क्या इसे आत्महत्या माना जाए?
मार्टिन एंडर

@MartinEnder अस्वीकृत। और हाँ, यह आत्महत्या माना जाता है।
jimmy23013

1x7 समाधान गलत लग रहा था। मैं इसे ठीक करने की कोशिश कर रहा हूं ...
jimmy23013

15

जावास्क्रिप्ट ईएस 6, 124 बाइट्स

a=>0
Math.min
parseInt
a=>a
a=>b=>a<b
a=>b=>b
a=>b=>a^b
Math.max
a=>b=>~a&~b
a=>b=>a==b
a=>b=>~b
Math.pow
a=>~a
a=>b=>a<=b
a=>b=>~a|~b
a=>1

मैं गंभीर रूप से अभी से लंबोदर से नफरत करता हूं।


1
मैं कुछ कार्यक्रमों और कुछ कार्यों लिखने की अनुमति दी हूँ, तो ... मुझे लगता है कि आप को बदल सकता है a=>b=>0करने के लिए a=>0और कहते हैं कि व्याकरण यह बुला है (a=>0)(a,b), केवल उन 4 प्रविष्टियों के लिए।
jimmy23013

अरे हाँ, धन्यवाद!
मामा फन रोल

2
Math.minके बजाय a=>b=>a&bMath.maxके बजाय a=>b=>a|bMath.powके बजाय a=>b=>a>=b
कॉनर ओ'ब्रायन

1
इसके अलावा, चूंकि NaN झूठी है, आप parseIntइसके बजाय कर सकते हैं a=>b=>a>b
कॉनर ओ'ब्रायन

1
@algmyr !NaN=> true, !!NaN=>false
मामा फन रोल

14

रेटिना , 62 39 बाइट्स

23 बाइट्स @MartinEnder को धन्यवाद !

0000 false              1 byte : 2
0001 p and q            2 bytes: 11
0010 p and not q        2 bytes: 10
0011 p                  2 bytes: ^1
0100 not p and q        2 bytes: 01
0101 q                  2 bytes: 1$
0110 xor                5 bytes: 01|10
0111 p or q             1 byte : 1
1000 not p and not q    2 bytes: 00
1001 xnor               5 bytes: (.)\1
1010 not q              2 bytes: 0$
1011 p or not q         5 bytes: ^1|0$
1100 not p              2 bytes: ^0
1101 not p or q         5 bytes: ^0|1$
1110 not p or not q     1 byte : 0
1111 true               0 bytes: 

के रूप में इनपुट लेता है PQ

के बीच एक पूर्णांक आउटपुट करता 0है 30गलत है, अन्य सत्य हैं।

व्याख्या

वे सभी सिर्फ रेगीज़ हैं

उदाहरण के लिए, 01|10बस मेल खाता है 01या 10

में 0000, 2इनपुट में कभी नहीं होगा, इसलिए यह कभी मेल नहीं खाता।

में 1111, यह खाली स्ट्रिंग से मेल खाता है, जो हैं 4


^1|0$केवल 1 वर्ण तार से मेल खाना चाहिए। यहाँ क्या चल रहा है?
कैलकुलेटरफ्लीन

@CalculatorFeline यह [ 1इनपुट की शुरुआत में] या [ 0इनपुट के अंत में ] से मेल खाता है । मुझे इसे पाने के लिए एक मिनट का समय भी लगा ...
ETHproductions

वरीयता, लोग ....
लीक नून

मुझे लगता ^1|0$है कि पढ़ने में मुश्किल है 1.|.0। सभी को पढ़ने में कठिन
बनाता है

10

स्टैक कैट्स , 67 + 64 = 131 बाइट्स

ध्यान दें कि +64 -nmप्रत्येक कार्यक्रम में झंडे लगाने से है । -nसांख्यिक I / O इंगित करता है, और -mअंतिम वर्ण में स्रोत कोड को दिखाता है - सभी सबमिशन को तकनीकी रूप से इन झंडों की आवश्यकता नहीं होती है, लेकिन स्थिरता और सादगी के लिए मैं उन्हें सभी समान तरीके से स्कोर कर रहा हूं।

-2 -2 -3 -3     !I                0 0 0 0     <I!+
-4 -4 -4  1     |!T*I             0 0 0 1     [>I=I_
-4 -4  3 -2     *I*_              0 0 1 0     :I*=I:
-2 -2  3  3     T*I               0 0 1 1     [<!>X
-2  1 -2 -2     _*T*I             0 1 0 0     *|!TI:
-2  1 -3  1     !-|_I             0 1 0 1     <!I!>X
-2  3  3 -2     ^T*I              0 1 1 0     ^:]<_I
-2  3  3  3     -_T*I             0 1 1 1     *I<-I!
 2 -3 -3 -3     -*|_I             1 0 0 0     ^{!:}I_
 2 -3 -3  2     _|*I              1 0 0 1     _|[<I!:
 1 -2  1 -2     :]I*:             1 0 1 0     _!:|]X
 1 -2  1  1     *I\<X             1 0 1 1     *>I>!I
 2  2 -3 -3     -*I               1 1 0 0     I^:!
 2  2 -3  2     _*I_              1 1 0 1     |I|^:!
 1  2  2 -1     |!:^I             1 1 1 0     -I*<*I
 1  1  1  1     *<X               1 1 1 1     +I+

()स्टैक कैट्स में जाँच की जाती है कि कोई तत्व पॉजिटिव है या नॉनपोजिटिव (यानी 0 या नेगेटिव), इसलिए हम क्रमशः सत्य / असत्य का प्रयोग कर रहे हैं। दूसरा कॉलम सिर्फ रुचि के लिए है, और आउटपुट के रूप में 0/ 1कुल स्कोर 90 के साथ सर्वश्रेष्ठ फाटकों को सूचीबद्ध करता है ।

इनपुट STDIN के माध्यम से सीमांकित-पृथक बिट्स है। इसे ऑनलाइन आज़माएं!


स्टैक कैट्स एक प्रतिवर्ती गूढ़ भाषा है, जहां कार्यक्रमों में चिंतनशील समरूपता होती है। एक स्निपेट f(जैसे >[[(!-)/) को देखते हुए , दर्पण छवि (जैसे \(-!)]]<) व्युत्क्रम की गणना करती है f^-1। जैसे, यहां तक ​​कि लंबाई कार्यक्रम भी कुछ नहीं करते हैं (या एक अनंत लूप में फंस जाते हैं), और केवल गैर-तुच्छ कार्यक्रमों में विषम लंबाई होती है, कंप्यूटिंग f g f^-1जहां gकेंद्र ऑपरेटर है।

चूंकि आधा स्रोत कोड हमेशा बेमानी होता है, इसलिए इसे छोड़ दिया जा सकता है, और -mध्वज के साथ कोड चलाना इंगित करता है कि वास्तविक स्रोत कोड को पुनर्प्राप्त करने के लिए स्रोत कोड को अंतिम वर्ण पर प्रतिबिंबित किया जाना चाहिए। उदाहरण के लिए, कार्यक्रम *<Xवास्तव में है *<X>*, जो सममित है।

स्टैक कैट्स में गोल्फिंग बहुत ही अनपेक्षित है, इसलिए उपरोक्त कार्यक्रमों को ब्रूट बल द्वारा पाया जाना था। उनमें से ज्यादातर आश्चर्यजनक रूप से जटिल हैं, लेकिन मैं कुछ समझाता हूं और जब मेरे पास समय होता है तो मैं इस उत्तर को जोड़ता हूं। अभी के लिए, कुछ स्पष्टीकरण और 0/ 1संस्करणों के लिए वैकल्पिक समाधान यहाँ Github भंडार पर पाए जा सकते हैं


1
Note that the +64 is from applying the -nm flags to each program.3 * 16 = 48 या 2 * 16 = 32, किसी भी तरह से 64 रास्ता है
बिल्ली

@cat झंडे की लागत प्रति कार्यक्रम 4 है, क्योंकि आपको अंतरिक्ष को भी गिनना है।
फ्राईमईएग्गमैन

@ संबंधित प्रासंगिक मेटा पोस्ट: meta.codegolf.stackexchange.com/questions/273/…
मार्टिन

एक साल से ऊपर हो गया। क्या आपके पास अभी समय है?
कैलक्यूलेटरफ्लेन

8

हास्केल, 78 76 75 बाइट्स

  1. _#_=2<1
  2. &&
  3. >
  4. pure
  5. <
  6. _#b=b
  7. /=
  8. ||
  9. (not.).max
  10. ==
  11. _#b=not b
  12. >=
  13. a#_=not a
  14. <=
  15. (not.).min
  16. _#_=1<2

संपादित करें: -1 बाय @ धन्यवाद के लिए धन्यवाद।


मैं सिर्फ टिप्पणी करने के लिए था "यार, _#_एक मानक ऑपरेटर नहीं है!" और फिर मुझे एहसास हुआ ... शाबाश।
MathematicalOrchid

4 हो सकता हैpure
कोल

@ कोट: धन्यवाद। वाह, 2015 pureमें Preludeवापस पेश किया गया था , इसलिए यह इस चुनौती के समय उपलब्ध था।
नीम

6

ब्रेकीलॉग , 36 34 बाइट्स

0000 false              \     Backtrack (always false)
0001 p and q            1.    Unify input and output with 1
0010 p and not q        >.    Input > Output
0011 p                  1     Unify input with 1
0100 not p and q        <.    Input < Output
0101 q                  ,1.   Unify output with 1
0110 xor                '.    Input and output cannot unify
0111 p or q             1;1.  Unify input with 1 or unify output with 1
1000 not p and not q    0.    Unify input and output with 0
1001 eq                 .     Unify input with output
1010 not q              ,0.   Unify output with 0
1011 p or not q         >=.   Input >= Output
1100 not p              0     Unify input with 0
1101 not p or q         <=.   Input <= Output
1110 not p or not q     0;0.  Unify input with 0 or unify output with 0
1111 true                     Empty program (always true)

यह 0मिथ्या मूल्य और सत्य मूल्य के रूप में उम्मीद करता है 1। लौटाता है trueया false। p है Inputऔर q है Output


आप आउटपुट कैसे इनपुट करते हैं?
लीक नून

1
@LeakyNun इनपुट की तरह। आपके द्वारा कहे गए मुख्य विधेय में दो तर्क होते हैं, जिन्हें बुलाया जाता है Inputऔर Outputसम्मेलन द्वारा, लेकिन आप दोनों को मान सेट कर सकते हैं, या दोनों से मान वापस कर सकते हैं।
घातक

1
यह नौकरी के लिए सही उपकरण है: पी
कॉनर ओ'ब्रायन

6

प्रोलॉग, 147 145 बाइट्स

@SQB को 2 बाइट्स धन्यवाद दिया

a(a,a).       % 0000 false
b(1,1).       % 0001 P and Q
c(1,0).       % 0010 P and not Q
d(1,_).       % 0011 P
e(0,1).       % 0100 not P and Q
f(_,1).       % 0101 Q
g(P,Q):-P\=Q. % 0110 P xor Q
h(1,_).       % 0111 P or Q
h(0,1).
i(0,0).       % 1000 not P and not Q
j(P,P).       % 1001 P == Q                 
k(_,0).       % 1010 not Q
m(P,Q):-P>=Q. % 1011 P or not Q
n(0,_).       % 1100 not P              
r(P,Q):-P=<Q. % 1101 not P or Q         
s(0,_).       % 1110 not P or not Q
s(1,0).
t(_,_).       % 1111 true

उपयुक्त अक्षर होने के x(P,Q).साथ क्वेरी और 0 या 1. रिटर्न या ।xPQ
truefalse

परीक्षण सहित SWISH उदाहरण - runTest.चलाने के लिए दर्ज करें।


क्या यह a(2,2).झूठ का समर्थन करता है ?
jimmy23013

@ jimmy23013 मुझे लगता है कि अगर मैं मान सकता हूँ कि 2 मिथ्या है। यकीन नहीं होता तो स्वीकार्य है।
घातक

@ jimmy23013 वास्तव में, a(a,a).(या कोई अन्य पत्र) भी काम करता है और aसत्यता के लिए स्वीकार्य इनपुट नहीं है, इसलिए यह अच्छा है। सलाह के लिये धन्यवाद।
घातक

6

NTFJ, 86 बाइट्स

0000 false              ~
0001 p and q            |:|
0010 p and not q        :||:|
0011 p                  $
0100 not p and q        #{:||:|
0101 q                  #{$
0110 xor                :#{:#{:||#}:|||
0111 p or q             :|#{:||
1000 not p and not q    :|#{:||:|
1001 eq                 :#{:#{:||#}:|||:|
1010 not q              #{$:|
1011 p or not q         #{:||
1100 not p              $:|
1101 not p or q         :||
1110 not p or not q     |
1111 true               #

यहाँ यह कोशिश करो! लेकिन पहले नीचे पढ़ें।

इनपुट स्टैक पर निहित है। परिणाम ढेर पर है। (एक 16 बाइट्स जोड़े *प्रत्येक के अंत करने के लिए) अगर आप चाहते हैं 0x00या 0x010 और 1. जोड़े एक अतिरिक्त 160 बाइट्स अगर आप चाहते हैं एक का प्रतिनिधित्व उत्पादन के लिए 0या एक 1छपी। ( ~~##~~~#{@प्रत्येक से पहले रखो *।)

NTFJ का एकमात्र बाइनरी ऑपरेटर NAND है, इसलिए इनमें से प्रत्येक NAND रूप में लिखा गया है।

चलो उनमें से प्रत्येक के माध्यम से जाना।

0: गलत है

~

~एक झूठे बिट का प्रतिनिधित्व करता है। काफी सरल। चूंकि इनपुट स्टैक के निचले हिस्से में निहित है, इसलिए इसे इसके शीर्ष पर छोड़ दिया गया है।

1: पी और क्यू

|:|

NTFJ एक स्टैक पर कार्य करता है। :डुप्लिकेट के लिए आदेश है। उस p and qnot (p nand q)और उस पर गौर करें not q = q nand q

Command | Stack
        | p q
   |    | (p nand q)
   :    | (p nand q) (p nand q)
   |    | (p nand q) nand (p nand q)
        | => not (p nand q)
        | => p and q

(ध्यान दें, तो, :|होने के लिए कहा जा सकता है निषेध और |:|होने के लिए कहा जा सकता है संयोजन के रूप )

2: पी और क्यू नहीं

:||:|

निरीक्षण करें कि यह सिर्फ एक नकार :|और एक संयोजन है |:|

Command | Stack
        | p q
  :|    | p (not q)
  |:|   | p and (not q)

3: पी

$

$स्टैक से कोई आइटम पॉप करता है। तो हाँ।

4: पी और क्यू नहीं

#{:||:|

यह 2 के रूप में एक ही बात है, #{शुरुआत में छोड़कर । #1 (सही बिट) को धकेलता है और {एक बार छोड़े गए स्टैक को घुमाता है। काफी सरल।

5: क्यू

#{$

एक बार बाईं ओर घुमाएं, ड्रॉप करें।

6: xor

:#{:#{:||#}:|||

का निरीक्षण करें:

p xor q = (p and (not q)) or ((not p) and q)                ; by experimentation (trust me)
        = (not ((not p) nand q)) or (not (p nand (not q)))  ; by definition of nand
        = not (((not p) nand q) and (p nand (not q)))       ; by De Morgan's laws
        = ((not p) nand q) nand (p nand (not q))            ; by definition of nand

हालांकि, स्टैक को पूरी तरह से डुप्लिकेट करने का कोई तरीका नहीं है। तो, हम में से प्रत्येक के लाने के लिए करने जा रहे हैं p, qशीर्ष करने के लिए और यह नकल।

Command | Stack
        | p q
   :    | p q q
  #{    | q q p
   :    | q q p p
  #{    | q p p q
  :|    | q p p (not q)
   |    | q p (p nand (not q))
  #}    | (p nand (not q)) q p
  :|    | (p nand (not q)) q (not p)
   |    | (p nand (not q)) (q nand (not p))
   |    | (p nand (not q)) nand (q nand (not p))

और इस प्रकार, हमारे पास हमारा एक्सोर है।

7: पी या क्यू

:|#{:||

नेगेट ऊपर, नीचे से ऊपर लाएँ, नकारात्मक, और उन्हें एक साथ नंद करें। मूल रूप से, p or q = (not p) nand (not q)

8: न p और न q

:|#{:||:|

यह केवल 7. आसान का निषेध है।

9: eq

:#{:#{:||#}:|||:|

यह सिर्फ xnor है , या xor नहीं है। फिर से सरल।

10: क्यू नहीं

#{$:|

५ का निषेध।

11: p या नहीं q

#{:||

नेगेट पी, नंद। (not p) nand q = not ((not p) and q) = p or (not q) (by De Morgan's laws)

12: पी नहीं

$:|

छोड़ें, रोकें, और नकारें।

13: पी या क्यू नहीं

:||

डे मॉर्गन के कानून, दिन बचाने के लिए फिर से! 11 के रूप में ही प्रक्रिया, के qबजाय सिर्फ उपेक्षा p

14: न p या न q

|

यह सिर्फ एक नक़ली नंद है।

15: सच

#

# सच सा है।


सिर्फ क्यों ...> _>
Rɪᴋᴇʀ

idk बिल्कुल यह कैसे काम करता है, लेकिन यह बहुत अच्छा लगता है +1
डाउनगैट

5 सिर्फ एक खाली कार्यक्रम क्यों नहीं है, और 10 बस :|?
जोफान

6

Minecraft, 89 ब्लॉक

निम्नलिखित सभी तस्वीरों में, ब्लू ब्लॉक इनपुट ए के लिए हैं और नारंगी ब्लॉक इनपुट बी के लिए हैं

16. TRUE गेट - 1 ब्लॉक

यहाँ छवि विवरण दर्ज करें

15. नंद द्वार - 1x2x3 = 6 ब्लॉक

यहाँ छवि विवरण दर्ज करें

14. ए => बी - 1x2x3 = 6 ब्लॉकयहाँ छवि विवरण दर्ज करें

13. ए - 2 ब्लॉक नहीं यहाँ छवि विवरण दर्ज करें

12. बी => ए - 1x2x3 = 6 ब्लॉकयहाँ छवि विवरण दर्ज करें

11. बी नहीं - 2 ब्लॉक यहाँ छवि विवरण दर्ज करें

10. XNOR - 1x3x4 = 12 ब्लॉक यहाँ छवि विवरण दर्ज करें

9. NOR - 1x2x3 = 6 ब्लॉकयहाँ छवि विवरण दर्ज करें

8. या: 1 ब्लॉक यहाँ छवि विवरण दर्ज करें

7. XOR - 1x3x4 = 12 ब्लॉक यहाँ छवि विवरण दर्ज करें

6. बी - 1 ब्लॉक यहाँ छवि विवरण दर्ज करें

5.! ए एंड बी - 1x2x5 = 10 ब्लॉक यहाँ छवि विवरण दर्ज करें

4. ए - 1 ब्लॉक यहाँ छवि विवरण दर्ज करें

3. ए एंड बी! - 1x2x5 = 10 ब्लॉक यहाँ छवि विवरण दर्ज करें

2. और - 2x2x3 = 12 ब्लॉक यहाँ छवि विवरण दर्ज करें

1. FALSE- 1 ब्लॉक यहाँ छवि विवरण दर्ज करें


2
दूसरी से अंतिम छवि (और) में आप लीवर के विपरीत, खंडों के पीछे, शीर्ष पर मशालों को लगाकर 6 ब्लॉक बचा सकते हैं। मशाल को धूल के एक टुकड़े के लिए बीच में स्वैप करें और शीर्ष पर धूल को हटा दें, इसे 1x2x3 - 6 ब्लॉकों तक नीचे लाएं।
लुका एच

5

गणितज्ञ, 67 बाइट्स

0>1&
And
#&&!#2&
#&
!#&&#2&
#2&
Xor
Or
Nor
Xnor
!#2&
#||!#2&
!#&
!#||#2&
Nand
1>0&

इनमें से प्रत्येक एक फ़ंक्शन का मूल्यांकन करता है, इसलिए आप उन्हें उपयोग कर सकते हैं

#&&!#2&[True, False]
Xor[True, False]

आह, अगर केवल गणितज्ञों में सत्य / मिथ्या थे, तो उन चार लंबे लोगों को काफी छोटा किया जा सकता था।


यदि पूर्णांक सत्य / गलत नहीं हैं, तो जब आप उन्हें एक बयान में रखते हैं तो क्या होता है?
कॉनर ओ'ब्रायन

3
@ C @O'Bʀɪᴇɴ यह बिना लाइसेंस के रहता है।
मार्टिन एंडर

5

MATL, 34 23 बाइट्स

मुझे आशा है कि मुझे सब कुछ ठीक मिल गया है! शून्य मिथ्या है, गैर शून्य सत्य है। प्रत्येक फ़ंक्शन दो निहित इनपुट लेता है (हालांकि यह कुछ इनपुटों को अनदेखा कर सकता है)। पहला इनपुट ए है, और दूसरा बी है। आप इनपुट 0/ के 1लिए सही / गलत, या T/ कर सकते हैं F

यहाँ परीक्षण केस 3 के लिए एक TryItOnline उदाहरण है।

के *लिए उपयोग करके 4 बाइट्स बचाए and, और एक और 4 का उपयोग करके >/ के <बजाय ~wY&/ के w~Y&बाद मैंने डेनिस का उत्तर देखा!

1.  0,0,0,0 0 (ignores input, just returns a zero)
2.  0,0,0,1 * (and)
3.  0,0,1,0 < (not-A and B)
4.  0,0,1,1 D (A)
5.  0,1,0,0 > (not-B and A)
6.  0,1,0,1 xD (discard A, display B)
7.  0,1,1,0 Y~ (xor)
8.  0,1,1,1 + (or)
9.  1,0,0,0 +~ (not-or)
10. 1,0,0,1 = (A=B)
11. 1,0,1,0 x~ (not-B)
12. 1,0,1,1 <~ (not-B or A)
13. 1,1,0,0 ~ (not-A)
14. 1,1,0,1 ~+ (not-A or B)
15. 1,1,1,0 *~ (not(A and B))
16. 1,1,1,1 1 (just returns 1)

10
नंबर छह का मानना ​​है कि यह हास्यास्पद है।
कोनोर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ नंबर 6 सबसे अच्छा है, मुझे नंबर 12 भी पसंद है! xD!
डेविड

क्या आपके पास "असमान" फ़ंक्शन नहीं है?
लीक नून

नहीं (मुझे नहीं लगता कि कम से कम)
डेविड

2
@ डेविड मुझे लगता है कि नंबर 7 को प्रतिस्थापित किया जा सकता है-
लुइस मेंडो

5

डीसी, 37 बाइट्स

dc("डेस्क कैलकुलेटर") एक मानक यूनिक्स कमांड, स्टैक-आधारित पोस्टफिक्स कैलकुलेटर है। इसमें बिट संचालन की कमी है, और तुलना ऑपरेटरों का उपयोग केवल मैक्रोज़ को निष्पादित करने के लिए किया जा सकता है (जो बाइट्स के लायक नहीं है)। पूर्णांक विभाजन कुछ के लिए बनाता है।

ये स्क्रिप्ट स्टैक पर अपेक्षा 0और 1मान रखते हैं , और स्टैक पर परिणाम छोड़ते हैं।

0,0,0,0 (false)              0
0,0,0,1 (and)                *         a*b
0,0,1,0                      -1+2/     (a-b+1)/2
0,0,1,1 (A)                  r         reverse a, b: a now on top
0,1,0,0                      -1-2/     (a-b-1)/2
0,1,0,1 (B)                            (0 bytes) do nothing: b on top
0,1,1,0 (xor)                -         a-b
0,1,1,1 (or)                 +         a+b                  
1,0,0,0 (nor)                +v1-      sqrt(a+b) -1
1,0,0,1 (xnor)               +1-       a+b-1
1,0,1,0 (not B)              1-        b-1
1,0,1,1 (if B then A)        -1+       a-b+1
1,1,0,0 (not A)              r1-       a-1
1,1,0,1 (if A then B)        -1-       a-b-1            
1,1,1,0 (nand)               *1-       a*b - 1
1,1,1,1 (true)               1

5

भूलभुलैया , 85 बाइट्स

2 बाइट बचाने के लिए Sp3000 के लिए धन्यवाद।

!@
??&!@
??~&!@
?!@
?~?&!@
??!@
??$!@
??|!@
??|#$!@
??$#$!@
?#?$!@
?#?$|!@
?#$!@
?#$?|!@
??&#$!@
1!@

ये सभी पूर्ण कार्यक्रम हैं, दो पूर्णांक पढ़ना 0या 1एसटीडीआईएन (किसी भी गैर-अंक विभाजक का उपयोग करके), और परिणाम को 0या 1एसटीडीयूएसटी के रूप में प्रिंट करना ।

इसे ऑनलाइन आज़माएं! (टेस्ट सूट नहीं है, इसलिए आपको मैन्युअल रूप से विभिन्न कार्यक्रमों और इनपुट की कोशिश करनी होगी।)

स्पष्टीकरण के लिए, ये सभी सीधे हैं। सभी कार्यक्रम रैखिक हैं, और उपयोग में आदेश निम्नलिखित हैं:

?   Read integer from STDIN and push.
!   Pop integer and write to STDOUT.
@   Terminate program.
&   Bitwise AND of top two stack items.
|   Bitwise OR of top two stack items.
$   Bitwise XOR of top two stack items.
~   Bitwise NOT of top stack item.
#   Push stack depth (which is always 1 when I use it in the above programs).
1   On an empty stack, this pushes 1.

ध्यान दें कि मैं #हमेशा उपयोग कर रहा हूं इसे $संगणना करने के लिए उपयोग किया जाता है , अर्थात XOR 1तार्किक निषेध के लिए या दूसरे शब्दों में। केवल कुछ ही मामलों में मैं ~इसके बजाय उपयोग करने में सक्षम था , क्योंकि इसके बाद &के परिणाम -1या से सभी अवांछित बिट्स को त्याग देता है -2


5

IA-32 मशीन कोड, 63 बाइट्स

कोड के Hexdump

0000  33 c0     xor eax, eax;
      c3        ret;

0001  91        xchg eax, ecx;
      23 c2     and eax, edx;
      c3        ret;

0010  3b d1     cmp edx, ecx;
      d6        _emit 0xd6;
      c3        ret;

0011  91        xchg eax, ecx;
      c3        ret;

0100  3b ca     cmp ecx, edx;
      d6        _emit 0xd6;
      c3        ret;

0101  92        xchg eax, edx;
      c3        ret;

0110  91        xchg eax, ecx;
      33 c2     xor eax, edx;
      c3        ret;

0111  8d 04 11  lea eax, [ecx + edx];
      c3        ret;

1000  91        xchg eax, ecx; // code provided by l4m2
      09 d0     or eax, edx;
      48        dec eax;
      c3        ret;

1001  3b ca     cmp ecx, edx;
      0f 94 c0  sete al;
      c3        ret;

1010  92        xchg eax, edx;
      48        dec eax;
      c3        ret;

1011  39 d1     cmp ecx, edx; // code provided by l4m2
      d6        _emit 0xd6;
      40        inc aex;
      c3        ret;

1100  91        xchg eax, ecx;
      48        dec eax;
      c3        ret;

1101  3b d1     cmp edx, ecx; // code inspired by l4m2
      d6        _emit 0xd6;
      40        inc aex;
      c3        ret;

1110  8d 44 11 fe   lea eax, [ecx+edx-2] // code provided by l4m2
      c3        ret;

1111  91        xchg eax, ecx;
      40        inc eax;
      c3        ret;

कोड इससे अधिक लंबा हो सकता है, क्योंकि यह एक मानक कोडिंग कन्वेंशन का उपयोग करता है: इनपुट इन ecxऔर edx, और आउटपुट इन al। यह C के रूप में व्यक्त किया जा सकता है

unsigned char __fastcall func(int, int);

ऐसा लगता है कि एमएस विज़ुअल स्टूडियो को अनिर्दिष्ट SALCओपकोड समझ में नहीं आता है , इसलिए मुझे नाम के बजाय इसके कोड का उपयोग करना पड़ा।

कोड नमूनों में से कुछ में सुधार के लिए धन्यवाद l4m2 !


1
1110 8D4411FE LEA EAX, [ECX+EDX-2]
l4m2

5

सी 34 बाइट्स

#define g(n,a,b)((n-1)>>3-b-2*a)&1

जहां n का उपयोग करने के लिए फ़ंक्शन संख्या है, लेकिन मुझे लगता है कि यह मना कर दिया जाएगा इसलिए मैंने इस दूसरे को प्रस्तावित किया:

सी 244 बाइट्स (मेमोरी का उपयोग करके)

typedef int z[2][2];
z a={0,0,0,0};
z b={0,0,0,1};
z c={0,0,1,0};
z d={0,0,1,1};
z e={0,1,0,0};
z f={0,1,0,1};
z g={0,1,1,0};
z h={0,1,1,1};
z i={1,0,0,0};
z j={1,0,0,1};
z k={1,0,1,0};
z l={1,0,1,1};
z m={1,1,0,0};
z n={1,1,0,1};
z o={1,1,1,0};
z p={1,1,1,1};

यह दोहरे अनुक्रमित सरणी का उपयोग करता है। n[0][1]है(A implies B)(0,1)

फोर्थ 138 बाइट्स

मैंने सिर्फ फोर्थ सीखा है। मुझे लगता है कि Ansi Forth संगत है क्योंकि यह भी gforth पर चलता है।

: z create dup , 1+ does> @ -rot 3 swap - swap 2* - rshift 1 and ; 
0 
z a z b z c z d z e z f z g z h z i z j z k z l z m z n z o z p 
drop

फ़ंक्शन z प्रदान किए गए नाम के साथ एक नया फ़ंक्शन बनाता है फिर स्टैक के शीर्ष से नए फ़ंक्शन पते पर लॉजिक गेट नंबर डालें। यह अगले घोषणा के लिए स्टैक में अगले (n + 1) लॉजिक गेट फ़ंक्शन को छोड़ देता है।

आप इसका परीक्षण कर सकते हैं:
और एबी

0 0 b . cr 
0 1 b . cr
1 0 b . cr 
1 1 b . cr   

("" स्टैक का प्रिंट टॉप "cr" कैरिज रिटर्न है)


आपको केवल प्रत्येक फ़ंक्शन के लिए कोड के स्निपेट प्रदान करने होंगे।
कैलक्यूलेटरफैनलाइन

4

सी, 268 बाइट्स

#define c(a,b)0      // 0000 
#define d(a,b)a&b    // 0001 
#define e(a,b)a>b    // 0010 
#define f(a,b)a      // 0011 
#define g(a,b)a<b    // 0100 
#define h(a,b)b      // 0101 
#define i(a,b)a^b    // 0110 
#define j(a,b)a|b    // 0111 
#define k(a,b)!b>a   // 1000 
#define l(a,b)a==b   // 1001 
#define m(a,b)!b     // 1010 
#define n(a,b)!b|a   // 1011 
#define o(a,b)!a     // 1100 
#define p(a,b)!a|b   // 1101 
#define q(a,b)!b|!a  // 1110 
#define r(a,b)1      // 1111 

मैक्रों कार्यों से कम लगते हैं।


4

ब्रायन और चक , 183 बाइट्स

4 बाइट बचाने के लिए Sp3000 का धन्यवाद।

कुछ कार्यक्रमों में एक अनपेक्षित चरित्र होता है। विशेष रूप से, प्रत्येक \x01को <SOH>(0x01) नियंत्रण वर्ण से बदला जाना चाहिए :

0000
?
#>.
0001
,-?,-?>?\x01
#}>.
0010
,-?,?>?\x01
#}>.
0011
,?\x01+?
#>.
0100
,?,-?>?\x01
#}>.
0101
,,?\x01+?
#>.
0110
,?>},?>?_\x01
#}+{>?_}>.
0111
,\x01?,?>?
#{>.
1000
,?,?>?\x01
#}>.
1001
,-?>},?>?_\x01
#}+{>>?_}>.
1010
,,-?\x01+?
#>.
1011
,\x01?,-?>?
#{>.
1100
,-?\x01+?
#>.
1101
,\x01-?,?>?
#{>.
1110
,\x01-?,-?>?
#{>.
1111
?
#>+.

इनपुट और आउटपुट बाइट मान का उपयोग करते हैं , इसलिए इनपुट दो 0x00 या 0x01 बाइट्स (सेपरेटर के बिना) होना चाहिए और आउटपुट एक ऐसा बाइट होगा। यह वास्तव में B & C के लिए सत्य / मिथ्या की सबसे समझदार परिभाषा है क्योंकि एकमात्र नियंत्रण प्रवाह आदेश ?शून्य को मिथ्या और बाकी सब को सत्य मानता है।

स्पष्टीकरण

पहले एक त्वरित बी और सी प्राइमर:

  • प्रत्येक कार्यक्रम में दो ब्रेनफैक जैसे उदाहरण होते हैं, प्रत्येक अपनी लाइन पर लिखा जाता है। हम पहले ब्रायन और दूसरे को चक कहते हैं । ब्रायन पर निष्पादन शुरू होता है।
  • प्रत्येक प्रोग्राम का टेप दूसरे प्रोग्राम का सोर्स कोड होता है और प्रत्येक प्रोग्राम का इंस्ट्रक्शन पॉइंटर दूसरे प्रोग्राम का टेप हेड होता है।
  • केवल ब्रायन ,(इनपुट बाइट) कमांड का उपयोग कर सकते हैं और केवल चक उपयोग कर सकते हैं. (आउटपुट बाइट) कमांड का ।
  • ब्रेनफॉक का []लूप मौजूद नहीं है। इसके बजाय, आपके पास एकमात्र नियंत्रण प्रवाह है, ?जो नियंत्रण को अन्य उदाहरण पर स्विच करता है यदि टेप सिर के नीचे वर्तमान मूल्य नॉनजरो है।
  • के अलावा >और <, वहाँ {और }जो अनिवार्य रूप से Brainfuck के टुकड़े के बराबर हैं [<]और [>], वह है, वे उस दिशा में अगले शून्य की स्थिति में टेप सिर ले जाएँ। मुख्य अंतर यह है कि {टेप के बाएं छोर पर भी रोका जा सकता है, चाहे इसका कोई भी मूल्य हो।
  • सुविधा के लिए, _स्रोत कोड में किसी भी s को null-बाइट्स के साथ बदल दिया जाता है (क्योंकि पकड़ने के लिए ये nontrivial प्रोग्राम में बहुत उपयोगी होते हैं {और })।

ध्यान दें कि सभी कार्यक्रमों में चक का टेप ए से शुरू होता है #। यह वास्तव में कुछ भी हो सकता है। ?निष्पादन शुरू करने से पहले टेप सिर एक सेल को स्थानांतरित करता है (ताकि यदि यह एक वैध कमांड होता है तो स्थिति स्वयं निष्पादित नहीं होती है)। इसलिए हम कभी भी कोड के लिए चक के पहले सेल का उपयोग नहीं कर सकते हैं।

कार्यक्रमों के पांच वर्ग हैं, जिन्हें मैं बाद में विस्तार से बताऊंगा। बढ़ती जटिलता के क्रम में अब मैं उन्हें यहाँ सूचीबद्ध कर रहा हूँ।

0000, 1111: लगातार कार्यों

?
#>.
?
#>+.

ये बहुत सरल हैं। हम बिना शर्त चक को स्विच करते हैं। चक टेप हेड को अप्रयुक्त सेल में दाईं ओर ले जाता है और या तो इसे सीधे प्रिंट करता है, या प्रिंट करने के लिए इसे पहले बढ़ाता है1

0011, 0101, 1010, 1100: कार्य केवल एक ही इनपुट के आधार पर

,?\x01+?
#>.
,,?\x01+?
#>.
,,-?\x01+?
#>.
,-?\x01+?
#>.

इस पर निर्भर करता है कि हम साथ शुरू करते हैं ,या ,,हम साथ काम कर रहे हैं Aया नहीं B। आइए पहले उदाहरण 0011(यानी A) को देखें। मूल्य पढ़ने के बाद, हम ?उस मूल्य पर एक सशर्त के रूप में उपयोग करते हैं । यदि A = 1, तो यह चक पर स्विच करता है, जो टेप सिर को दाईं ओर ले जाता है और शाब्दिक रूप से एम्बेडेड-प्रिंट करता है 1। अन्यथा, ब्रायन पर नियंत्रण बना रहता है। यहां, 1-बाइट एक नो-ऑप है। फिर हम इनपुट को अच्छी तरह से बढ़ाते हैं +ताकि यह सुनिश्चित हो सके कि यह गैर-शून्य है और फिर चक के साथ स्विच करें ?। इस बार, >अप्रयुक्त सेल में दाईं ओर ले जाता है जो बाद में मुद्रित होता है 0

किसी एक मूल्य को नकारने के लिए, हम बस इसे घटाते हैं -। यह बदल जाता है 1में 0और 0में -1जो जहाँ तक गैर शून्य और इसलिए truthy है, ?का संबंध है।

0001, 0010, 0100, 1000: एक truthy परिणाम के साथ बाइनरी कार्यों

,-?,-?>?\x01
#}>.
,-?,?>?\x01
#}>.
,?,-?>?\x01
#}>.
,?,?>?\x01
#}>.

यह दो इनपुट के साथ काम करने के लिए पिछले विचार का एक विस्तार है। आइए 1000(NOR) के उदाहरण को देखें । हम (संभावित) दोनों इनपुटों को पढ़ते हैं ,?। यदि दोनों में से कोई एक है 1, तो ?चक पर स्विच किया जाता है। वह टेप हेड को अंत में }(ब्रायन के कोड के बाद खाली सेल पर) ले जाता है, एक अन्य सेल को >(अभी भी शून्य) और उसके साथ प्रिंट करता है .

हालांकि, अगर दोनों इनपुट शून्य हैं, तो ब्रायन के साथ नियंत्रण अभी भी है। >तब टेप सिर को इस }तरह से ले जाता है कि जब हम चक के साथ स्विच करते हैं तो यह कमांड निष्पादित नहीं होता है ?। अब वह सब जो चक करता है, >.जो केवल- 1प्रभारी पर चलता है और प्रिंट करता है।

आवश्यकता के अनुसार एक या दोनों इनपुट को नकार कर हम अन्य तीन कार्यों को आसानी से प्राप्त कर सकते हैं।

0111, 1011, 1101, 1110: के साथ तीन truthy परिणाम बाइनरी कार्यों

,\x01?,?>?
#{>.
,\x01?,-?>?
#{>.
,\x01-?,?>?
#{>.
,\x01-?,-?>?
#{>.

परिणाम को नकारने के लिए पिछले विचार का एक मामूली संशोधन (यानी 0जब हम ब्रायन और सभी के माध्यम से गुजर चुके हैं तो प्रिंट करें 1)। आइए 0111एक उदाहरण के रूप में (OR) देखें। ध्यान दें कि एंबेडेड 1-बाइट एक नो-ऑप है, इसलिए यह अभी भी शुरू होता है ,?,?। यदि इनपुट या तो 1हम चक पर स्विच करते हैं, जो टेप हेड को फिर से शुरू करता है {>.टेप सिर को उस पर ले जाता है 1और इसे प्रिंट करता है।

यदि दोनों इनपुट शून्य हैं तो हम ब्रायन के साथ बने रहते हैं, {इसे छोड़ने के लिए टेप हेड को घुमाएं और फिर चक पर जाएँ। जब वह >.इस बार निष्पादित करता है तो वह ब्रायन के कोड के बाद खाली सेल में चला जाता है और प्रिंट करता है 0

फिर, हम आसानी से एक या दोनों इनपुट को नकार कर अन्य कार्यों को प्राप्त करते हैं।

0110, 1001: के साथ दो truthy परिणाम बाइनरी कार्यों

,?>},?>?_\x01
#}+{>?_}>.
,-?>},?>?_\x01
#}+{>>?_}>.

यह थोड़ा पेचीदा मामला है। पिछले कार्य यथोचित रूप से सरल थे क्योंकि वे कम-परिचालित हो सकते हैं - पहले इनपुट का मूल्य आउटपुट तय कर सकता है, और यदि ऐसा नहीं होता है तो हम दूसरे इनपुट को देखते हैं। इन दो कार्यों के लिए, हमें हमेशा दोनों इनपुटों को देखना होगा।

मूल विचार है कि क्या दूसरे इनपुट के बीच चयन तय करने के लिए पहले इनपुट का उपयोग करने के लिए है 0और 1या के बीच 1और 0। आइए 0110एक उदाहरण के रूप में (XOR) लें:

विचार करें A = 0। इस मामले में हम उत्पादन करना चाहते हैं B,पढ़ता है A, ?कुछ नहीं करता है। >अगली (नॉनज़ेरो) सेल पर जाती है जिससे }हमें _चक पर लाया जाता है । यहाँ, हम पढ़ Bके साथ ,और प्रयोग ?फिर से। अगर ऐसा Bथा 0, तो हम अभी भी ब्रायन पर हैं। >छोड़ देता है तो }चक पर और ?स्विच ताकि >.प्रिंट 0ब्रायन के स्रोत कोड में एम्बेडेड। अगर Bथा 1तो दूसरी ओर, चक पर अमल करता है }जो में समा जाता है _पहले से ही ब्रायन के कोड में है, इसलिए >.तो प्रिंट 1बाइट के बजाय।

यदि A = 1, तो हम तुरंत चक पर स्विच करते हैं, जो निष्पादित करेगा }+{>?_ब्रायन के स्रोत कोड में यह क्या करता है , इसे एक 1साथ में बदल देता है +, फिर शुरू में वापस चला जाता है {और ब्रायन के ?एक सेल को दाईं ओर ले >जाता है और उसे वापस कंट्रोल करने से पहले दाईं ओर ले जाता है। इस बार, ब्रायन के पढ़ने के बाद B, यदि B = 0, और चक >.ब्रायन के बगल में सेल का उपयोग करता है , तो इसके बजाय ?होगा । इसके अलावा, जब , चक का क्या सही अंतराल पर इस्तेमाल किया जाता है और टेप के अंत तक सभी तरह से चलते हैं, ताकि इसके बजाय एक शून्य प्रिंट हो। इस तरह हम छाप रहे हैं ।10B = 1}>.not B

समतुल्यता को लागू करने के लिए, हम Aइसे शर्त के रूप में उपयोग करने से पहले ही नकार देते हैं। ध्यान दें कि इस वजह से हमें >स्किप करने के लिए दूसरे को जोड़ने की आवश्यकता है , -साथ ही जब वह प्रारंभ में वापस जा रहा हो।


4

क्लोजुरस्क्रिप्ट, 88 84 76 74 बाइट्स

nilऔर falseमिथ्या हैं, अन्य सभी मूल्य सत्य हैं। अंकगणित और असमानताओं के लिए बूलियन 0/1 के लिए मोटे होते हैं। फ़ंक्शंस गलत संख्या में तर्क ले सकते हैं।

0000   nil?            ; previously: (fn[]nil)
0001   and
0010   <
0011   true?           ; previously: (fn[x]x)
0100   >
0101   (fn[x y]y)
0110   not=
0111   or
1000   #(= 0(+ % %2))
1001   =
1010   #(not %2)
1011   <=
1100   not
1101   >=
1110   #(= 0(* % %2))
1111   /               ; previously: (fn[]4), inc

0झूठा नहीं है ?
लीक नून

2
क्लोजुरस्क्रिप्ट में नहीं।
मट्टपुत्तम

@ LeakyNun अधिकांश एलआईएसपी या कार्यात्मक प्रोग्रामिंग भाषाओं में नहीं है, जो क्लोजर निश्चित रूप से है
बिल्ली

सबसे कार्यात्मक प्रोग्रामिंग भाषाओं में @cat हां ! उदाहरण के लिए, पायथन, का मूल्यांकन करता not not(0)है False, जो कि गलत मूल्य है।
आउटगॉल्फ जूल

3
@ E @Gly Er ... पायथन न तो पूरी तरह कार्यात्मक है और न ही मैं जिस प्रकार की कार्यात्मक भाषा के बारे में बात कर रहा हूं। पायथन लाजिमी है, ज्यादातर, और कुछ छोटे (खराब निष्पादित) कार्यात्मक पहलुओं के साथ। Erlang, हास्केल (मुझे लगता है कि), आम लिस्प, Clojure, रैकेट, योजना, फैक्टर, स्टैंडर्ड एमएल, वस्तुनिष्ठ CAML, आदि 0 सिर्फ एक और मूल्य है और truthy एक परिणाम के रूप में है, और झूठे (के लिए प्रतीक #f, f, false, आदि) है असत्य। अन्य सभी मूल्य अधिकांश कार्यात्मक भाषाओं में सत्य हैं।
बिल्ली

4

ब्रेनफक , 184 178 174 बाइट्स

इनपुट / आउटपुट U + 0000 और U + 0001 का उपयोग करता है।

0000 .
0001 ,[,[->+<]]>.
0010 ,[,-[+>+<]]>.
0011 ,.
0100 ,-[,[->+<]]>.
0101 ,,.
0110 ,>,[-<->]<[>>+<]>.
0111 ,-[,-[+>-<]]>+.
1000 ,-[,-[+>+<]]>.
1001 ,>,[-<->]<[>>-<]>+.
1010 ,,-[+>+<]>.
1011 ,-[,[->-<]]>+.
1100 ,-[+>+<]>.
1101 ,[,-[+>-<]]>+.
1110 ,[,[->-<]]>+.
1111 +.

आपका सशर्त दूसरा इनपुट पढ़ना महंगा लग रहा है। जैसे 0001आप बस नहीं कर सकते ,[,>]<.(एक दुभाषिया दिया जो आपको शुरुआती सेल के बाईं ओर जाने की अनुमति देता है)?
मार्टिन एंडर

@MartinEnder मुझे लगा कि मैं यहाँ केवल डेनिस के उत्तर की नकल नहीं करूँगा।
लीक नन

4

ब्रेन-फ्लैक , 418 , 316 बाइट्स

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

प्रोग्राम की शुरुआत में स्टैक पर शीर्ष दो संख्याओं को होने दें (प्रोग्राम सही के लिए शून्य के लिए) और आउटपुट प्रोग्राम के अंत में स्टैक के शीर्ष पर हो (शून्य सच के लिए झूठे अन्य के लिए)।

झूठे, 4 बाइट्स (सौजन्य से लीक )

(<>)

और, 36 बाइट्स

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

ए और बी नहीं, 40 बाइट्स

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

ए, 6 बाइट्स

({}<>)

ए और बी नहीं, 38 बाइट्स

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

बी, 2 बाइट्स

{}

xor, 34 बाइट्स

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

या, 6 बाइट्स

({}{})

नहीं, 34 बाइट्स

(({}{}<(())>)){{}{}(((<{}>)))}{}{}

xnor, 10 बाइट्स

({}{}[()])

बी नहीं, 34 बाइट्स

{}(({}<(())>)){{}{}(((<{}>)))}{}{}

B का तात्पर्य A, 14 बाइट्स से है

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

ए नहीं, 34 बाइट्स

(({}<{}(())>)){{}{}(((<{}>)))}{}{}

एक मतलब बी, 16 बाइट्स

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

नंद, 12 बाइट्स

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

सच है, 6 बाइट्स

<>(())

व्याख्या

चूंकि इनमें से अधिकांश बहुत समान हैं, इसलिए मैं यह स्पष्ट नहीं करने जा रहा हूं कि उनमें से प्रत्येक कैसे काम करता है। मैं अपनी पूरी कोशिश करता हूं कि यह स्पष्ट हो जाए कि सोलह काम कैसे हुए।

सबसे पहले गेट्स हैं जो एक ही मूल्य के तीन लौटाते हैं (जैसे 2, 3, 5, 8, 9, 12, 14, और 15)। ये सभी एक ही पैटर्न का पालन करते हैं। पहले आप इनपुट को दो बिट संख्या में ट्वोज़ जगह और बी को लोगों के रूप में परिवर्तित करते हैं। यह इस स्निपेट के साथ किया जाता है (({}){}{})। फिर आप उस दो बिट इनपुट के मूल्य को घटाते हैं जिसे आप अलग करना चाहते हैं ({}[value])। (वास्तविक कोड में घटाव और रूपांतरण बाइट्स को बचाने के लिए एक चरण में किया जाता है)। इसे जरूरत न होने पर जोड़ा जा सकता है (({}<(())>)){{}{}(((<{}>)))}{}{}:।

अगला: और, और न ही, या, xor, और xnor। ये ऊपर वाले के समान काम करते हैं। वास्तव में इनमें से कुछ को ऊपर शामिल किया गया है, हालांकि यह तरीका छोटा है। मैंने यहाँ जो ट्रिक प्रयोग की है, वह ये है कि प्रत्येक ए। बी। के योग के अनुरूप है। यदि कोई ए + बी = १ और असत्य है तो एक्सोर सही मूल्यांकन करता है। पहले आप एबी जोड़ें और संबंधित राशि घटाएं। के रूप में व्यक्त किया ({}{}[0,1,2 or 3])। यदि आवश्यक हो तो एक आचरण नहीं

अगला: ए, बी, ए और बी नहीं। ये बहुत आत्म व्याख्यात्मक हैं। हम अनावश्यक मूल्य को हटाकर शुरू करते हैं और फिर हम या तो नकारात्मक या समाप्त हो जाते हैं।

अंत में दो सरल शब्द हैं: सत्य और असत्य। इनके लिए हम ऑफ स्टैक को सही मान देते हैं। <>Nilad रिटर्न शून्य तो हम शून्य मान के रूप में स्विच का उपयोग करके दो बाइट्स बचा सकता है।

वहाँ सबसे कुशल समाधान नहीं है (शायद ब्रेन-फ्लैक में सबसे कुशल), लेकिन मुझे ये लिखने में बहुत मज़ा आया और मैंने आपको इन्हें छोटा करने का प्रयास किया।


(<>)के लिए पर्याप्त है false; इसके अलावा, (<{}{}>)8 बाइट्स हैं
लीक नून

वाह मेरे पास चुनौती की बहुत सख्त परिभाषा थी। धन्यवाद। मैं इसे बहुत कम कर दूंगा
गेहूं जादूगर

क्या मतलब?
लीक नन

मुझे लगा कि मुझे मौजूदा इनपुट को हटाना होगा और परिणाम को उसके स्थान पर रखना होगा। (<>)इनपुट्स को छोड़ देगा और शून्य को दूसरे स्टैक पर रख देगा।
गेहूं जादूगर

1
निहित शून्य के कारण के लिए <>पर्याप्त नहीं है false? इसके अलावा, मुझे लगता aहै कि खाली कार्यक्रम हो सकता है। trueहो सकता है <>[][](बाइट्स नहीं बचाता है, लेकिन अच्छा दिखता है: पी)।
कैलक्यूलेटरफल

4

प्रोग्फ़क , 18.5 17.5 बाइट्स

जैसा कि ProgFk के निर्देश nibbles में निर्दिष्ट हैं, नीचे का कोड हेक्साडेसिमल, प्रति पंक्ति में एक लॉजिक गेट और बाइट्स के बीच रिक्त स्थान के साथ दिया गया है।

3
E1
DE 2D
<empty>
DE 1
1
E3
E2
E2 D
E3 D
1D
DE 2
D
DE 1D
E1 D
4

व्याख्या

प्रोग्फ़क एक टेप-आधारित एसोलैंग (ब्रेनफक के समान) है जहां प्रत्येक कोशिका थोड़ी होती है और निर्देश निबल्स (4 बाइट्स) के रूप में दिए जाते हैं। निर्देश सूचक द्वारा इंगित सेल पर निर्देश संचालित होते हैं। इनपुट (के साथ पहले और दूसरे कोशिकाओं में दी गई है Aऔर Bक्रमश: पहले और दूसरे कोशिकाओं जा रहा है), और अनुदेश सूचक प्रथम कक्ष पर शुरू होता है। आउटपुट पहली सेल में संग्रहीत किया जाता है।

उपयोग किए गए प्रत्येक निर्देश को नीचे समझाया गया है।

1   Increment the instruction pointer.
2   Decrement the instruction pointer.
3   Set the current bit to 0.
4   Set the current bit to 1.
D   Perform a NOT on the current bit.
E   The next instruction is an extended instruction.

Extended instructions:
1   Set the current bit to the current bit AND the next bit.
2   Set the current bit to the current bit OR the next bit.
3   Set the current bit to the current bit XOR the next bit.
6   Swap the current bit and the next bit.

@LeakyNun को एक बाइट धन्यवाद दिया!


4

दरअसल, 24 बाइट्स

ये प्रोग्राम इनपुट के रूप में लेते हैं A\nB( \nएक नई रेखा का प्रतिनिधित्व करने के साथ ), जो बी के ढेर के ऊपर, ए के नीचे से निकलता है। Falseद्वारा दर्शाया गया है 0, और Trueकिसी भी सकारात्मक पूर्णांक द्वारा दर्शाया गया है।

é0  (false: clear stack, push 0)
*   (and: multiply)
<   (A and not B: less-than)
X   (A: discard B)
>   (B and not A: greater-than)
@X  (B: discard A)
^   (A xor B: xor)
|   (A or B: or)
|Y  (A nor B: or, boolean negate)
=   (A xnor B: equals)
@XY (not B: discard A, boolean negate B)
≤   (if B then A: less-than-or-equal)
XY  (not A: discard B, boolean negate)
≥   (if A then B: greater-than-or-equal)
*Y  (A nand B: multiply, boolean negate)
é1  (true: clear stack, push 1)

3 बाइट्स के लिए लीक नन को धन्यवाद

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