সেভেন সেগমেন্ট স্ক্রোলিং


15

স্যান্ডবক্স পোস্ট

ইন্ট্রো

তথ্য প্যানেল সর্বত্র হয়। প্রযুক্তিটি যখন সস্তা হয়ে ওঠে, তখন কাগজের পোস্টারগুলি আলোকিত লক্ষণগুলিতে রূপান্তরিত হয় যা শব্দগুলি দেখায় যা একদিকে প্রদর্শিত হয় এবং অন্যদিকে প্রকাশিত হয়, চিত্রটির মতো:

এখানে চিত্র বর্ণনা লিখুন

যখন এই লক্ষণগুলির মধ্যে একটি শুরু হয়, এটি সাধারণত খালি শুরু হয় এবং পাঠ্যটি ডান দিক থেকে বাম দিকে চলে যায়, যতক্ষণ না এটি অদৃশ্য হয়ে যায়।

এর কার্যকারিতাটি চলাচলের সংবেদন দেওয়ার জন্য ছোট হালকা বাল্বগুলি (এলইডি) চালিয়ে যাওয়া এবং বন্ধ করা।

পাঠ্যের পরিবর্তে যদি কেবল আমাদের কেবল সংখ্যাগুলি দেখাতে হয় তবে নীচের মতো তথাকথিত সাত-বিভাগের চিহ্নিতকারী ব্যবহার করে পোস্টারটি খুব কম পরিশীলিত হতে পারে:

এখানে চিত্র বর্ণনা লিখুন

এই ক্ষেত্রে প্রতিটি সংখ্যা কেবলমাত্র 7 টি আলোক বিভাগে / বন্ধ সংমিশ্রণ দ্বারা প্রতিনিধিত্ব করা হয় যা সমস্ত সংখ্যাকে উপস্থাপন করতে দেয়:

এখানে চিত্র বর্ণনা লিখুন

আমরা নিজেরাই যে প্রশ্নটি করি তা হ'ল এই পোস্টারগুলির একটি নির্দিষ্ট সংখ্যার মধ্য দিয়ে যাওয়ার জন্য কতগুলি বাতি (কতগুলি চালু এবং বন্ধ) করা উচিত?

উদাহরণস্বরূপ, 3-অঙ্কের সাইনটিতে 123 প্রদর্শন করতে যা আমাদের সমস্ত এলইডি বন্ধ করে শুরু করবে:

এখানে চিত্র বর্ণনা লিখুন

এটি মোট 42 টি লাইট পরিবর্তন করে।


চ্যালেঞ্জ

একটি অ-নেতিবাচক নম্বর দেওয়া এবং একটি ধনাত্মক চিহ্নের দৈর্ঘ্য আলোর পরিবর্তনের সংখ্যা গণনা করে।

বিধি

  • ধরুন ইনপুটটি একটি অ-নেতিবাচক সংখ্যা (এন> = 0) এবং একটি ধনাত্মক চিহ্নের দৈর্ঘ্য (এম> 0) নিয়ে গঠিত
  • ধরুন সাইন দৈর্ঘ্য> = সংখ্যার দৈর্ঘ্য (এম> = সংখ্যা (এন))

পরীক্ষার মামলা

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

1
প্রশ্নের লক্ষ্য কী? বাস্তবে, MAX7219 এর মতো একটি অংশ 8 টি সংখ্যা নিয়ন্ত্রণ করবে, তাদের প্রদর্শিত করতে আপনি এসপিআই কমান্ডের মাধ্যমে 8 টি সংখ্যা MAX7219 এ প্রেরণ করবেন। 1/2 ডিজিটের দশমিক পয়েন্ট 8 ম বিট - / + আলোর জন্য ব্যবহৃত হত। উদাহরণস্বরূপ, 4 টি লম্বা একটি 8 এক্স 32 ডট ডিসপ্লেতে পাঠ্য স্ক্রোল করতে করতে তৈরি করা যেতে পারে, যেমনটি আমি তৈরি করেছি: youtube.com/watch?v=hwYqgyMc5S4
ক্রসরোডস

3
@ ক্রসরোডস প্রকৃতপক্ষে এটি কোনও সত্যিকারের হার্ডওয়্যার উত্তর বা এর মতো কোনও কিছুর জন্য নয়। এটি একটি অ্যালগরিদম তৈরি করা একটি চ্যালেঞ্জ যা 7 টি বিভাগের প্রদর্শনগুলিতে প্রদত্ত সংখ্যার লাইটের পরিবর্তনের সংখ্যা আউটপুট করতে পারে
লুইস ফিলিপ ডি জেসুস মুনোজ

1
প্রস্তাবিত পরীক্ষার কেস:0,3 => 36
চ্যাস ব্রাউন

1
আমরা কি প্রথম সংখ্যাকে স্ট্রিং হিসাবে বা অঙ্কের তালিকা হিসাবে নিতে পারি?
ousurous

1
@ Οurous না, আপনাকে অবশ্যই উভয় ইনপুটটি পূর্ণসংখ্যার হিসাবে গ্রহণ করতে হবে
লুইস

উত্তর:


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এবং {
ovs

@ ওভস: চমৎকার সমন্বয়!
চ্যাস ব্রাউন

3

জেলি , 23 বাইট

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

একটি ডায়াডিক লিঙ্কটি বামদিকে প্রদর্শন করার জন্য পূর্ণসংখ্যাকে এবং ডানদিকে চিহ্নের দৈর্ঘ্যের জন্য স্বীকৃতি দেয় যা পরিবর্তনের সংখ্যা প্রদান করে (সংখ্যার অঙ্কের সংখ্যাটি যদি সাইন দৈর্ঘ্যের চেয়ে বেশি হয় তবে এটিও কাজ করে)।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

পুরো শো চলাকালীন প্রতিটি 7-সেগমেন্ট ডিসপ্লে (কোনও কোনও সময়ে) খালি থেকে প্রথম অঙ্কে ট্রানজিশন হয়, তারপরে দ্বিতীয় এবং এইভাবে এবং শেষ পর্যন্ত শেষ থেকে আবার খালি হয়। রূপান্তরগুলির জন্য প্রতিটি-অঙ্ক এবং অঙ্ক-এর অন-সেগমেন্টের বিটওয়াইজ এক্সওর ব্যয় করে (যেখানে খালি 0 অন-সেগমেন্টের সাথে "অঙ্ক" থাকে)। আমি পূর্ববর্তী পুনরায় সংশোধন থেকে ইটিএইচ প্রডাকশনগুলির উত্তরটি থেকে অন-সেগমেন্টগুলিকে চুরি করেছি , তবে se টি বিভাগের কোনও ক্রম ছাড়াই ঠিক তা করবে।

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//…
শেগি

হ্যাঁ, তবে "একটি অ-নেতিবাচক সংখ্যা দেওয়া হয়েছে" এবং "ইনপুটটি একটি নে-নেতিবাচক সংখ্যায় গঠিত" আমার কাছে কঠোর মনে হয়েছিল।
জোনাথন অ্যালান

3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 104 94 93 93 বাইট

1 শাটগি ধন্যবাদ 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 বাইটের জন্য কাজ করে।
শেগি

@ শেগি চমৎকার কৌশল, ধন্যবাদ!
ETH প্রোডাকশন

ওপি ব্যাখ্যা করেছেন যে উভয় ইনপুট বিশেষভাবে পূর্ণসংখ্যার (এবং সংখ্যার তালিকা বা স্ট্রিং) হবে
Οurous

@ Ousurous ধন্যবাদ, +0 বাইটে স্থির
ইটিএইচ প্রডাকশনগুলি

1
এছাড়াও, আমি মনে করি দেওয়া 0,3উচিত 36; আপনি দিন 0। (আমার একই সমস্যা ছিল - এটির জন্য আমার প্রায় 10 বাইট গ্রেরার খরচ নির্ধারণ করা হচ্ছে ... :))।
চ্যাস ব্রাউন

2

Japt, 31 30 বাইট

জোনাথনের জেলি সমাধান থেকে অভিযোজিত। সংখ্যার অ্যারে হিসাবে প্রদর্শিত হতে সংখ্যার সাথে বিপরীতে ক্রমে ইনপুট নেয়।

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

চেষ্টা করে দেখুন


ওপি ব্যাখ্যা করেছেন যে উভয় ইনপুট বিশেষভাবে পূর্ণসংখ্যার (এবং সংখ্যার তালিকা বা স্ট্রিং) হবে
Οurous


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

জাভাস্ক্রিপ্ট (নোড.জেএস) , 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,...,এন}এনWএন

এন=(টি'1+ +Σআমি=2এনটিআমি-1,আমি+ +টি'এন)×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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.