सात खंड स्क्रॉलिंग


15

सैंडबॉक्स पोस्ट

पहचान

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

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

जब इनमें से कोई एक संकेत शुरू होता है, तो यह आमतौर पर खाली होने लगता है और पाठ दाईं ओर से बाईं ओर निकल जाता है, जब तक यह गायब नहीं हो जाता।

इसकी कार्यक्षमता आंदोलन की अनुभूति देने के लिए छोटे प्रकाश बल्ब (एल ई डी) को चालू और बंद करना है।

यदि पाठ के बजाय हमें केवल संख्याएँ दिखाने की आवश्यकता होती है, तो पोस्टर तथाकथित सात-खंड मार्करों का उपयोग करके बहुत कम परिष्कृत हो सकता है:

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

इस स्थिति में प्रत्येक संख्या केवल 7 प्रकाश खंडों के संयोजन को / बंद से दर्शाती है जो सभी संख्याओं का प्रतिनिधित्व करने की अनुमति देती है:

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

सवाल हम खुद से पूछते हैं कि इन पोस्टरों में से एक निश्चित संख्या से गुजरने के लिए रोशनी के कितने परिवर्तन (कितने चालू और बंद) किए जाने चाहिए?

उदाहरण के लिए, 3-अंकीय चिन्ह में 123 को दिखाने के लिए जो हमारे पास सभी एल ई डी के साथ शुरू होता है:

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

यह रोशनी के कुल 42 परिवर्तन करता है।


चुनौती

एक गैर-नकारात्मक संख्या और एक सकारात्मक संकेत लंबाई को देखते हुए रोशनी में परिवर्तन की संख्या की गणना करें।

नियम

  • मान लें कि इनपुट एक गैर-नकारात्मक संख्या (N> = 0) और एक सकारात्मक संकेत लंबाई (M> 0) से मिलकर बना है
  • मान लें कि लंबाई> = संख्या लंबाई (M> = अंक (N))

परीक्षण के मामलों

123, 3        => 42
45, 5         => 60
111, 3        => 12
98765, 10     => 220
0, 3          => 36

1
प्रश्न का लक्ष्य क्या है? वास्तव में, MAX7219 जैसा एक हिस्सा 8 अंकों को नियंत्रित करेगा, उन्हें प्रदर्शित करने के लिए आप अधिकतम 8 अंक SP72 कमांड के माध्यम से MAX7219 को भेजेंगे। दशमलव बिंदु 8 बिट का 1 या 2 अंकों का उपयोग - / + प्रकाश के लिए किया जाएगा। उदाहरण के लिए, 4 को टेक्स्ट को स्क्रॉल करने के लिए 8 x 32 डॉट डिसप्ले बनाने के लिए डिसाइकाइज्ड किया जा सकता है, जैसे यह मैंने बनाया: youtube.com/watch?v=hwYqgyMc5S4
CrossRoads

3
@CrossRoads वास्तव में यह वास्तविक हार्डवेयर उत्तर या इस तरह की किसी भी चीज़ के लिए अभिप्रेत नहीं है। यह एक एल्गोरिथ्म बनाने के लिए एक चुनौती है जो 7-सेगमेंट डिस्प्ले में दिए गए नंबर की रोशनी के बदलावों की संख्या को आउटपुट कर सकता है
लुइस फेलिप डी जीसस मुनोज़

1
सुझाया गया परीक्षण मामला:0,3 => 36
चेस ब्राउन

1
क्या हम पहले पूर्णांक को एक स्ट्रिंग, या अंकों की सूची के रूप में ले सकते हैं?
Οurous

1
@ Οurous no, आपको दोनों इनपुट को पूर्णांक के रूप में लेना चाहिए
लुइस फेलिप डी जीसस मुनोज

जवाबों:


7

पायथन 2 , 129 126 119 104 बाइट्स

def f(n,k,p=0):z=p<1or n>0;q=-~ord('}/lx2Z^o~z'[n%10])*z;return(z and f(n/10,k,q))+k*bin(p^q).count('1')

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

Ovs से एक बड़ी 15 बाइट्स के लिए Thx ।

जैसा कि निर्दिष्ट है, एक गैर-नकारात्मक संख्या और एक सकारात्मक संकेत लंबाई लेता है, और कुल परिवर्तन लौटाता है।


4
क्या असली चुदाई है यह टोना। आप अजगर भगवान हैं। मैं बहुत खुश 200 के तहत मेरे कोड हो रही बाइट तो आप के साथ दिखाने के मिल'7367355777e0d93bf0fb'
डॉन हजार

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

2
104 बाइट्स या 102 बाइट्स के साथ एक अप्रतिबंधित ( \x7f) pऔर {
12

@ नोव्स: अच्छा समायोजन!
चास ब्राउन

3

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

Dị“¤]þ+>~Œ¶?w‘Ø0j^ƝBFS×

एक डायडिक लिंक जो पूर्णांक को बाईं ओर प्रदर्शित करने के लिए स्वीकार करता है और दाईं ओर साइन की लंबाई जो परिवर्तन की संख्या उत्पन्न करता है (यह भी काम करता है कि पूर्णांक में प्रदर्शित अंकों की संख्या साइन लंबाई से अधिक है)।

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

कैसे?

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

Dị“¤]þ+>~Œ¶?w‘Ø0j^ƝBFS× - Link: integer to display, V; integer sign length, L  e.g. 123, 3
D                       - cast V to decimal digits                                  [1,2,3]
  “¤]þ+>~Œ¶?w‘          - code-page indices list = [3,93,31,43,62,126,19,127,63,119]
 ị                      - index into (1-based & modular) (vectorises)             [3,93,31]
              Ø0        - literal = [0,0]                                             [0,0]
                j       - join                                                [0,3,93,31,0]
                  Ɲ     - pairwise application of:
                 ^      -   bitwise XOR                                        [3,94,66,31]
                   B    - convert to binary digits (vectorises)               [[1,1],[1,0,1,1,1,1,0],[1,0,0,0,0,1,0],[1,1,1,1,1]]
                    F   - flatten                                             [1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,1,1,1]
                     S  - sum                                                            14
                      × - multiply by L                                                  42

क्या आप संख्या को अंक सरणी के रूप में लेकर एक बाइट को बचा सकते हैं? tio.run/##ATsAxP9qZWxsef//…
Shaggy

हां, लेकिन "एक गैर-नकारात्मक संख्या को देखते हुए" और "इनपुट में एक गैर-नकारात्मक संख्या शामिल है" मुझे सख्त लग रहा था।
जोनाथन एलन

3

जावास्क्रिप्ट (Node.js) , 104 94 93 93 बाइट्स

@ बग्घी को 1 बाइट धन्यवाद दिया

B=n=>n&&n%2+B(n>>1)
F=(d,w,q)=>w*B(q^(q=d&&"w`>|i]_p}".charCodeAt(d%10)))+(d&&F(d/10|0,w,q))

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


मुझे लगता है कि यह -1 बाइट के लिए काम करता है।
झबरा

@ सुहागी अच्छी चाल, धन्यवाद!
ETHproductions

ओपी ने स्पष्ट किया है कि दोनों इनपुट विशेष रूप से पूर्णांक (और अंकों या तारों की सूची नहीं) होना चाहिए
Οurous

@ Tesurous धन्यवाद, +0 बाइट्स पर तय किया गया।
ETHproductions

1
इसके अलावा, मुझे लगता है कि 0,3देना चाहिए 36; आप देते हैं 0। (मैं एक ही समस्या थी - इस लागत को ठीक करने के बारे में मुझे 10 बाइट्स grrrr ... :))।
चास ब्राउन

2

जाप, 31 30 बाइट्स

जोनाथन के जेली समाधान से अनुकूलित। अंक सरणी के रूप में प्रदर्शित होने वाली संख्या के साथ रिवर्स ऑर्डर में इनपुट लेता है।

*Vm!c"w]+>~?" pT ä^T x_¤¬x

कोशिश करो


ओपी ने स्पष्ट किया है कि दोनों इनपुट को विशेष रूप से पूर्णांक होना चाहिए (और अंकों या तारों की सूची नहीं)
18urous

2

साफ , 280 बाइट्स

import StdEnv,Data.List
~ =toInt
?s=sum[(~s>>p)rem 2\\p<-[0..6]]
$n l#j=repeatn l 0
#n=j++[~c-47\\c<-:toString n]++j
#k=[getItems(map((!!)[0,119,3,62,31,75,93,125,19,127,95])n)[i-l..i-1]\\i<-[0..length n]]
=sum(zipWith@(tl k)k)
@[u][]= ?u
@[u:x][v:y]= ?((bitxor)u v)+ @x y
@[][]=0

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

वहाँ एक छोटा रास्ता है ..


1

चारकोल , 40 बाइट्स

≔⁺×⁷0⭆S§⪪”)∧??%←⁶%*An”⁷IιθI×NΣEθ¬⁼ι§θ⁺⁷κ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। इनपुट को बाइनरी सेगमेंट मानों में परिवर्तित करके काम करता है, फिर प्रत्येक वर्ण के बीच परिवर्तनों की संख्या की गणना करता है। स्पष्टीकरण:

      S                     Convert first input to string
     ⭆                      Map over digits and join
         ”)∧??%←⁶%*An”      Compressed segment value string
        ⪪             ⁷     Split into groups of seven characters
                        ι   Current digit
                       I    Convert to integer
       §                    Index into groups
    0                       Literal `0`
  ×⁷                        Repeat seven times
 ⁺                          Concatentate
≔                        θ  Assign to variable `q`

     θ          Variable `q`
    E           Map over characters
             κ  Current index
           ⁺⁷   Add seven
          θ     Variable `q`
         §      Cyclically index
        ι       Current character
       ⁼        Compare
      ¬         Logical not
   Σ            Sum results
  N             Second input
 ×              Multiply
I               Cast to string
                Implicitly print

1

जावास्क्रिप्ट (Node.js) , 88 बाइट्स

के रूप में इनपुट लेता है (integer)(width)

n=>w=>[...n+'',g=n=>n&&1+g(n&n-1)].map(c=>s+=g(x^(x=Buffer('w$]m.k{%o')[c])),x=s=0)|s*w

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

कैसे?

{1,2,...,n}n अंक और एक प्रदर्शन चौड़ाई wकुल संख्या एन प्रकाश परिवर्तन द्वारा दिया जाता है:

एन=(टी'1+Σमैं=2nटीमैं-1,मैं+टी'n)×w

कहाँ पे टीएक्स,y अंकों से परिवर्तन के लिए प्रकाश परिवर्तनों की संख्या है एक्स अंकों के लिए y तथा टी'एक्स रिक्त अंक से अंक में परिवर्तन के लिए प्रकाश परिवर्तनों की संख्या है एक्स (या फिर इसके विपरीत)।

टिप्पणी की गई

n => w =>                       // n = integer; w = width of display
  [ ...n + '',                  // coerce n to a string and split it
    g = n =>                    // g = helper function counting the number of 1's
      n && 1 + g(n & n - 1)     // by defining it here, we also force an extra iteration
  ]                             // with an undefined digit (interpreted as the blank digit)
  .map(c =>                     // for each entry c in this array:
    s += g(                     //   add to s the result of a call to g():
      x ^ (x =                  //     XOR the previous value of x
        Buffer('w$]m.k{%?o')[c] //     with the new one, picked from a 10-entry lookup
      )                         //     gives undefined (coerced to 0) for the last entry
    ),                          //   end of call to g()
    x = s = 0                   //   start with x = 0 and s = 0
  ) | s * w                     // end of map(); return s * w
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.