लाइट्स आउट, 7-सेगमेंट वर्जन


14

7-सेगमेंट डिस्प्ले को देखते हुए कुछ सेगमेंट और कुछ ऑफ के साथ, अंकों का एक क्रम (0-9) लगता है, जैसे कि प्रत्येक अंक के लिए संबंधित सेगमेंट को टॉगल करने के बाद, सभी सेगमेंट को बंद कर दिया जाता है।

उदाहरण

  _
  _    [3] =>     |   [1] =>    [OFF]
  _               |

संख्या और उनके संबंधित खंड:

 _         _   _         _    _    _    _    _ 
| |    |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|    |  |_   _|    |   _|  |_|    |  |_|   _|

नियम

कोडगॉल्फ g सबसे छोटी प्रविष्टि जीतती है।

इनपुट

खंडों की एक गैर-रिक्त सूची, जिसे स्विच किया जाता है, जैसा कि दिया गया है

  1. संख्याओं का एक क्रम। खंडों को ऊपर से नीचे की ओर, बाएं से दाएं पर गिना जाता है; 0 या 1. से शुरू होने वाले नंबरों को क्रम में रखने की आवश्यकता नहीं है।

  2. एक एकल 7-बिट अंक। MSB / LSB निर्दिष्ट नहीं (इस प्रकार आप चुन सकते हैं)।

संख्याओं के बीच गैर-संख्यात्मक वर्ण अनुमत हैं (लेकिन समर्थित होने की आवश्यकता नहीं है)।

उदाहरण के लिए। संख्या के लिए 7: 136या 1010010या0100101

उत्पादन

डिस्प्ले पर "लागू" होने के लिए संख्याओं का एक क्रम। किसी भी तरह से प्रतिबंधित नहीं है, जैसे अंकों का क्रम। उदाहरण के लिए। के लिए प्रारंभिक अवस्था संख्या के लिए इसी 1, वैध आउटपुट होगा 1, 111, 010, आदि

एक वैकल्पिक आउटपुट 10-बिट अंक (फिर से, एमएसबी / एलएसबी आपकी पसंद है)। उदाहरण के लिए। 1इनपुट के रूप में, आउटपुट 1000000000या होगा 0000000001

कुछ संयोजनों में कई गैर-दोहराए जाने वाले समाधान होते हैं, जैसे। अपरकेस लेटर से संबंधित सेगमेंट को Hस्विच ऑफ किया जा सकता है 013, लेकिन यह भी 489और 0258

यदि कोई समाधान मौजूद नहीं है (जो मुझे लगता है कि संभव नहीं है), आउटपुट खाली है।


2
इसके लिए अधिक विनिर्देश की आवश्यकता है। प्रत्येक सेगमेंट में कौन से सेगमेंट शामिल किए गए हैं (उदाहरण के लिए, 9 में बॉटम सेगमेंट शामिल है?) कृपया सभी अंकों को ड्रा करें और प्रत्येक में शामिल सेगमेंट की संख्या को इंगित करें।
स्तर नदी सेंट

इसके अलावा, इनपुट के लिए कौन से प्रारूप की अनुमति है? क्या खंड संख्याएँ क्रम में दी जाएंगी? अगर कोई समाधान नहीं है तो हम क्या करें?
लेवल रिवर सेंट

"कुछ संयोजनों में कई गैर-दोहराए जाने वाले समाधान होते हैं" इसके अलावा, किसी भी समाधान का क्रमचय एक और समाधान है, है ना? (जैसे के 301लिए H)।
अरनुलद

1
सबूत है कि एक समाधान हमेशा मौजूद है: यह प्रत्येक व्यक्ति खंड के लिए समाधान खोजने के लिए पर्याप्त है। क्षैतिज क्षेत्रों के लिए समाधान, ऊपर से नीचे तक, कर रहे हैं 17, 08और 1479। ऊपरी ऊर्ध्वाधर खंडों के लिए समाधान, बाएं से दाएं, हैं 39और 59। निचले ऊर्ध्वाधर खंडों के लिए समाधान, बाएं से दाएं, हैं 56और 2389
ग्रेग मार्टिन

1
@GregMartin 2हमेशा जरूरी नहीं है, क्योंकि आप इसे किसी के साथ की जगह ले सकता 0468, 1358या 1369, चाहे आप चाहते हैं पर एक आधार 0, 8या 9अपने जवाब में है, लेकिन वहाँ खत्म करने के लिए कोई रास्ता नहीं है 7सब पर है, और मुझे लगता है कि आप कम से कम एक में होनी चाहिए की 1और 3
नील

जवाबों:


4

जेली , 26 25 बाइट्स

2ṗ⁵’µ×“wØ][:koR¶{‘^/=µÐfḢ

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

7-बिट पूर्णांक के रूप में इनपुट लेता है। 10-बिट पूर्णांक के बाइनरी फॉर्म को लौटाता है।

यह सिर्फ जानवर सभी संभावनाओं को बल देता है। सभी संभव आउटपुट प्राप्त करने के लिए निकालें या Xयादृच्छिक संभव आउटपुट प्राप्त करने के लिए इसे बदलें ।

जादू दृश्य कार्यक्रम!

यह काम किस प्रकार करता है

2ṗ⁵’µ×“wØ][:koR¶{‘^/=µÐfḢ  - main link, takes one integer
2ṗ⁵’                       - generate all length-10 binary arrays
    µ                µÐf   - now we find those arrays which correspond to digit-
                              sequences which work to switch off all segments:
                              Filter (keep) those arrays which:
     ×                      - multiplied by 
      “wØ][:koR¶{‘          - [119, 18, 93, 91, 58, 107, 111, 82, 127, 123] 
                               (encoding for turned-on segments given number)
                  ^/        - reduced by XOR
                    =      - are equal to (implicit) the program's input
                        Ḣ  - output the first of these valid arrays

1
संख्याओं की सरणी ( “wØ][:koR¶z‘) में त्रुटि हो सकती है। आपके नंबर 9में नीचे खंड ( 9कार्य विवरण में आपके विज़ुअलाइज़ेशन की तुलना) का अभाव है । अन्यथा बहुत अच्छा है, विशेष रूप से दृश्य!
किरील

1
@kyrill फिक्स्ड! बस सूची शाब्दिक में थोड़ा बदलाव की आवश्यकता है।
Fireflame241

2

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

n=>[65,35,55,42,48,54,110].reduce((r,v,i)=>r^=n>>i&1&&v+v,0)

यह काम करता है क्योंकि:

  • टॉगलिंग 1 और 7 केवल शीर्ष खंड को जीतता है
  • टॉगलिंग 1, 2 और 6 केवल टॉप लेफ्ट सेगमेंट को टॉगल करता है
  • टॉगलिंग 1, 2, 3, 5 और 6 केवल शीर्ष दाएं खंड को टॉगल करता है
  • टॉगलिंग 2, 4 और 6 केवल सेंटर सेगमेंट को टॉगल करता है
  • 5 और 6 टॉगल करने से केवल बायें सेगमेंट में टॉगल होता है
  • टॉगलिंग 2, 3, 5 और 6 नीचे दाएं खंड को टॉगल करता है
  • टॉगलिंग 2, 3, 4, 6 और 7 नीचे के सेगमेंट को टॉगल करता है

1
निश्चित नहीं है कि इसे विजेता के रूप में स्वीकार किया जाना चाहिए, क्योंकि जाहिर है कि आपने अरनॉल्ट से कुछ प्रेरणा ली थी। लेकिन फिर, उन्होंने आपकी टिप्पणी से कुछ प्रेरणा भी ली। वैसे भी, अच्छा जवाब, आप दोनों!
1948 में किरिल

@kyrill मेरा अद्यतन उत्तर भी नील का एक सुझाव था। इसमें कोई संदेह नहीं है कि उनका जवाब अब तक जीतता है।
अरनुलद

2

जावास्क्रिप्ट (ईएस 6), 117 107 101 86 84 बाइट्स

नील की बदौलत 15 बाइट्स बचाए

इनपुट को 7-बिट पूर्णांक के रूप में लेता है, जहां एलएसबी ऊपरी खंड है। एक 10-बिट पूर्णांक लौटाता है जहां एलएसबी अंक है 0

f=(n,k)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,-~k):k

डेमो


1
पुनरावर्तन छोटा है f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k:। या फिर आप को लगता है कि अगर एक जवाब, मौजूद है f=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
नील

1
@ नील धन्यवाद! हां, एक उत्तर हमेशा मौजूद होता है।
अरनुलद

1
जैसा कि अंकों का उपयोग करके उत्तर बनाना हमेशा संभव होता है 1-7, आप 83और को हटाकर ,91,75और उपयोग करके 8 बाइट्स बचा सकते हैं k+2
नील

2

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

BitXor@@{260,802,10,514,3,266,293}[[#]]&

(यह ध्यान से प्रत्येक खंड के लिए आउटपुट चुनकर और एलएसबी और एमएसबी के बीच स्विच करके अधिक गोल्फ हो सकता है।)

उदाहरण के लिए पदों की सूची के रूप में इनपुट लें {2,4,5,7}और एमएसबी ऑर्डर (0, ..., 9) में 10-बिट संख्या ( 384= 0110000000बाइनरी में) आउटपुट करें ।

उदाहरण में इसके अनुरूप है

  |_
  |_

और आउटपुट के अनुरूप है {7,8}

स्पष्टीकरण:

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


2

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

ị“A#7*06n‘^/

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

यह बल भंग नहीं करता है, और यह मेरे अन्य समाधान की तुलना में उल्लेखनीय रूप से कम है। इनपुट को चालू-खंडों की सूची के रूप में लेता है, और LSB के रूप में आउटपुट शीर्ष खंड है।

अंकों की सूची के रूप में आउटपुट।

यह काम किस प्रकार करता है

यह जल्दी होने वाला है

ị“A#7*06n‘^/ - main link, takes input as a list of turned-on segments (eg. [1,3,6])
 “A#7*06n‘   - list literal [65,35,55,42,48,54,110] where each element is a 7-bit
                 integer, where each integer corresponds to how to turn off
                 a segment (eg. turn off the first segment with 7 and 1 =>2^7+2^1=>64)
ị            - get the elements in the list corresponding to the input indices
          ^/ - XOR reduce these elements to get a single 7-bit integer

क्या आप इस तथ्य का लाभ नहीं उठा सकते हैं कि इस एल्गोरिथ्म का उपयोग करते समय दोहराए जाने वाले समाधानों की अनुमति दी जाती है, कुछ छोटे (जैसे चपटे) के साथ XOR- कम को बदलने के लिए? या क्या मैं कुछ न कुछ भूल रहा हूं?

जैसा कि मेरे पास कोड है, अब लगभग बराबर 7-बिट पूर्णांक की सूची उत्पन्न करता है 1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7, तो XOR- उन्हें @ ais523 घटाता है। समतल उपयोग किए गए अंकों की एक सूची पर काम करेगा जो अधिक वर्ण लेता है।
फायरफ्लेम २४१
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.