আমার বারকোড বৈধ?


33

একটি EAN-8 বারকোডে 7 ডিজিটের তথ্য এবং একটি 8 তম চেকসাম অঙ্ক অন্তর্ভুক্ত রয়েছে।

চেকসামটি সংখ্যাগুলি পর্যায়ক্রমে 3 এবং 1 দ্বারা গুণিত করে ফলাফল যুক্ত করে এবং পরবর্তী 10 এর পরবর্তী একক থেকে বিয়োগ করে গণনা করা হয়।

উদাহরণস্বরূপ, অঙ্কগুলি দেওয়া 2103498:

Digit:        2   1   0   3   4   9   8
Multiplier:   3   1   3   1   3   1   3
Result:       6   1   0   3  12   9  24

এই ফলাফলের সংখ্যার যোগফল 55 , সুতরাং চেকসাম সংখ্যা 60 - 55 = 5 is


চ্যালেঞ্জ

আপনার কাজটি একটি 8 ডিজিটের বারকোড দেওয়া, এটি কার্যকর কিনা তা যাচাই করা - চেকসামটি বৈধ কিনা সত্যবাদী মানটি ফিরিয়ে দেওয়া, এবং অন্যথায় মিথ্যা বলে।

  • আপনি নিম্নলিখিত ফর্মগুলির কোনওটিতে ইনপুট নিতে পারেন:
    • একটি স্ট্রিং, দৈর্ঘ্যে 8 টি অক্ষর, বারকোড অঙ্কগুলি উপস্থাপন করে
    • 8 টি পূর্ণসংখ্যার একটি তালিকা, বারকোডের অঙ্কগুলি
    • একটি অ-নেতিবাচক পূর্ণসংখ্যা (আপনি হয় নেতৃস্থানীয় শূন্যগুলি ধরে নিতে পারেন যেখানে কোনওটি দেওয়া হয়নি, যেমন 1= 00000001, বা প্রদত্ত শূন্যগুলির সাথে ইনপুট অনুরোধ করতে পারেন)
  • যে বিল্টিনগুলি EAN-8 চেকসাম গণনা করে (অর্থাত প্রথম প্রথম 7 টি সংখ্যা নেয় এবং শেষ গণনা করে) নিষিদ্ধ।
  • এটি , তাই সংক্ষিপ্ততম প্রোগ্রামটি (বাইটে) জিতেছে!

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

20378240 -> True
33765129 -> True
77234575 -> True
00000000 -> True

21034984 -> False
69165430 -> False
11965421 -> False
12345678 -> False


1
এই প্রশ্নটি আসলে কোনও বার কোড (যা কালো-সাদা ডোরাকাটা জিনিস) সম্পর্কিত নয়, বারকোড দ্বারা এনকোড করা নম্বরটি সম্পর্কে। নম্বরটি কোনও বার কোড ব্যতীত উপস্থিত থাকতে পারে এবং বার কোডটি EANs ব্যতীত অন্যান্য জিনিসগুলি এনকোড করতে পারে। সম্ভবত কেবল " আমার EAN-8 বৈধ " কি আরও ভাল শিরোনাম?
পাওলো ইবারম্যান

2
@ পাওলোএবারম্যানের সাথে এটির মতো একই আংটি নেই ...
ফ্লিপট্যাক

7
বারকোডগুলি পড়ার সময়, আমি কিছু চিত্র পড়ার আশা করি (বা কমপক্ষে কিছুটা স্ট্রিং), চেকসাম যাচাই করে না।
পাওলো ইবারম্যান

দৃ related়ভাবে সম্পর্কিত , যেহেতু আইএসবিএন -13 একটি ইএন।
অলিভিয়ার

উত্তর:


5

জেলি , 7 বাইট

s2Sḅ3⁵ḍ

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

কিভাবে এটা কাজ করে

s2Sḅ3⁵ḍ  Main link. Argument: [a,b,c,d,e,f,g,h] (digit array)

s2       Split into chunks of length 2, yielding [[a,b], [c,d], [e,f], [g,h]].
  S      Take the sum of the pairs, yielding [a+c+e+g, b+d+f+h].
   ḅ3    Convert from ternary to integer, yielding 3(a+c+e+g) + (b+d+f+h).
     ⁵ḍ  Test if the result is divisible by 10.

13

জাভাস্ক্রিপ্ট (ES6), 41 40 38 বাইট

সংরক্ষিত 2 বাইট @ETHProductions এবং 1 বাইট ধন্যবাদ ক্রেইগ আয়রে।

s=>s.map(e=>t+=e*(i^=2),t=i=1)|t%10==1

অঙ্কের তালিকা হিসাবে ইনপুট নেয়।

চেকসাম সহ সমস্ত অঙ্কের যোগফল নির্ধারণ করে।

যোগফল যদি 10 এর একাধিক হয় তবে এটি একটি বৈধ বারকোড।

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


আমি বলতে যাচ্ছিলাম যে আপনি প্রাক-পুনরাবৃত্তি থেকে পুনরাবৃত্তির সাথে পুনরাবৃত্তিতে স্যুইচ করে 3 বাইট সংরক্ষণ g=([n,...s],i=3,t=0)=>n?g(s,4-i,t+n*i):t%10<1করতে পারেন তবে আপনি আরও একটি ভাল উপায় খুঁজে পেতে পারেন ...
ETH প্রোডাকশন

ধন্যবাদ, @ ইথ প্রডাকশনস, আমি পরিবর্তিত হয়েছি mapযা আমি মনে করি যে ভাল কাজ করে যেহেতু ইনপুট স্ট্রিংয়ের পরিবর্তে অঙ্কের তালিকা হতে পারে।
রিক হিচকক

সম্ভবত অন্য একটি বাইট সংরক্ষণ করুন s=>s.map(e=>t+=e*(i=4-i),t=i=1)&&t%10==1?
ETH প্রোডাকশনগুলি

হ্যাঁ, উজ্জ্বল, ধন্যবাদ:)
রিক হিচকক

দুর্দান্ত সমাধান! আপনি প্রতিস্থাপন করতে পারে &&সঙ্গে |truthy যেহেতু আউটপুট 1/0 থেকে / falsy অনুমতি পায়?
ক্রেগ আয়রে


8

জেলি , 8 বাইট

m2Ḥ+µS⁵ḍ

পরীক্ষা স্যুট চেষ্টা করুন।

জেলি , 9 বাইট

JḂḤ‘×µS⁵ḍ

এটি অনলাইনে চেষ্টা করুন বা পরীক্ষার স্যুটটি ব্যবহার করে দেখুন।

এটি কীভাবে কাজ করে

m2Ḥ + ⁵ḍS⁵ḍ ~ সম্পূর্ণ প্রোগ্রাম।

এম 2 ~ মডিউলার 2. ইনপুটটির প্রতিটি দ্বিতীয় উপাদানটি ফেরত দিন।
  Each each প্রতিটি দ্বিগুণ।
   + µ the ইনপুট যুক্ত করুন এবং একটি নতুন monadic চেইন শুরু করুন।
     এস ~ সম
      ~ 10 10 দ্বারা বিভাজ্য?
JḂḤ 'µ µS⁵ḍ ~ সম্পূর্ণ প্রোগ্রাম (একাদিক)।

জে ~ 1-ইনডেক্স দৈর্ঘ্যের ব্যাপ্তি।
 It it বিট; মডেলো প্রতিটি সংখ্যা 2 দ্বারা উপরের সীমাতে।
  Each each প্রতিটি দ্বিগুণ।
   'Each প্রতিটি বৃদ্ধি।
    ~ The ইনপুট দিয়ে পেয়ারওয়্যার গুণা।
     ~ a একটি নতুন monadic চেইন শুরু করে।
      এস ~ সম
       ~ 10 যোগফল কি 10 দ্বারা বিভাজ্য?

বৈধ হওয়ার জন্য বারকোড এবং চেকসাম অঙ্কের প্রথম 7 টি সংখ্যার ফলাফল অবশ্যই 10 এর একাধিককে যুক্ত করতে হবে। সুতরাং, পুরো তালিকায় প্রয়োগ করা অ্যালগরিদম 10 দ্বারা বিভাজ্য হলে চেকসামটি বৈধ ।


এখনও 9 বাইট তবে সুসংগত মান সহ:JḂḤ‘×µS⁵ḍ
হাইপারনিউটারিনো

@ হাইপারনিউট্রিনো ধন্যবাদ, আমি জানতাম যে এটির জন্য একটি পরমাণু রয়েছে!
মিঃ এক্সকোডার

এছাড়াও 9 বাইট:: JḂaḤ+µS⁵ḍপি
হাইপারনিউট্রিনো

@ হাইপার নিউট্রিনো ওয়েল এর অনেকগুলি বিকল্প রয়েছে: পি
মিঃ এক্সকোডার

1
8 বাইট বা 8 অক্ষর? m2Ḥ+µS⁵ḍইউটিএফ -8 এ 15 বাইট, যদি না আমি এটির ভুল গণনা করি।
ta.speot.is

7

এমএটিএল , 10 বাইট

@ জগারবকে একটি ভুল নির্দেশ করার জন্য ধন্যবাদ , এখন সংশোধন করা হয়েছে।

IlhY"s10\~

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

Ilh     % Push [1 3]
Y"      % Implicit input. Run-length decoding. For each entry in the
        % first input, this produces as many copies as indicated by
        % the corresponding entry of the second input. Entries of
        % the second input are reused cyclically
s       % Sum of array
10\     % Modulo 10
~       % Logical negate. Implicit display

7

বেফুঞ্জ -98 (পাইফুঞ্জ) , 16 14 বাইট

S এর jপরিবর্তে দ্বিতীয় অংশটি এড়িয়ে 2 বাইট সংরক্ষণ করা ;, পাশাপাশি একটিতে ~এবং +প্রথম অংশে অদলবদল +করে দ্বিতীয়টিতে একটি থেকে মুক্তি পেতে ।

~3*+~+6jq!%a+2

ইনপুটটি 8 সংখ্যায় রয়েছে (প্রযোজ্য ক্ষেত্রে 0 টি সংখ্যার সাথে) এবং অন্য কিছু নয়।

প্রস্থান কোডের মাধ্যমে আউটপুট (টিআইও-তে ডিবাগ ড্রপডাউন খুলুন), যেখানে 1 টি সত্য এবং 0 টি মিথ্যা।

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

ব্যাখ্যা

এই প্রোগ্রামটি বিভিন্ন কৌশল ব্যবহার করে।

প্রথমত, এটি তাদের ASCII মানগুলির মাধ্যমে একের পর এক অঙ্কগুলি নেয়। সাধারণত, আমরা ইনপুট থেকে পড়ার জন্য প্রতিটি মান থেকে 48 টি বিয়োগের প্রয়োজন হবে। তবে, যদি আমরা এটি সংশোধন না করে থাকি তবে আমাদের ১ in (3 + 1 + 3 + 1 + 3 + 1 + 3 + 1) আমাদের যোগফলের 48 টির অতিরিক্ত কপি থাকবে, যার অর্থ আমাদের মোটের চেয়ে 768 বেশি হবে এটি "হওয়া উচিত" যেহেতু আমরা কেবলমাত্র যোগফল 10 এর সাথে সম্পর্কিত, আমরা পরে যোগফলটিতে 2 যোগ করতে পারি। সুতরাং, আমরা কাঁচা ASCII মান গ্রহণ করতে পারি, 6 বাইট বা আরও অনেক কিছু সঞ্চয় করে।

দ্বিতীয়ত, এই কোডটি কেবলমাত্র অন্য প্রতিটি অক্ষর একটি EOF কিনা তা পরীক্ষা করে দেখায়, কারণ ইনপুটটি কেবলমাত্র 8 টি অক্ষরের দীর্ঘ হবে।

তৃতীয়ত, #লাইনের শেষে প্রথম অক্ষরটি এড়িয়ে যায় না, তবে ;অন্য দিক থেকে আসাটি বাদ দিবে ip #;পরিবর্তে সামনে রাখার চেয়ে এটি ভাল is

কারণ আমাদের প্রোগ্রামের দ্বিতীয় অংশটি কেবল একবার চালানো হয়েছে, আমাদের এটি সেট আপ করতে হবে না যাতে পিছনের দিকে দৌড়ানোর সময় এটি প্রথমার্ধটি এড়িয়ে যায়। এটি আমাদের দ্বিতীয়ার্ধে লাফানোর জন্য জাম্প কমান্ডটি ব্যবহার করতে দেয়, কারণ এটি চালিয়ে যাওয়ার আগে আমরা পিছনে চলে যাচ্ছি।

ধাপে ধাপে

দ্রষ্টব্য: "বিজোড়" এবং "এমনকি" অক্ষরগুলি 0-সূচকযুক্ত সিস্টেমের উপর ভিত্তি করে। প্রথম অক্ষরটি সূচক 0 সহ একটি এমনকি একটি।

~3*+~+      Main loop - sum the digits (with multiplication)
~           If we've reached EOF, reverse; otherwise take char input. This will always
                be evenly indexed values, as we take in 2 characters every loop.
 3*+        Multiply the even character by 3 and add it to the sum.
    ~       Then, take an odd digit - we don't have to worry about EOF because
                the input is always 8 characters.
     +      And add it to the sum.
      6j    Jump over the second part - We only want to run it going backwards.

        q!%a+2    The aftermath (get it? after-MATH?)
            +2    Add 2 to the sum to make up for the offset due to reading ASCII
          %a      Mods the result by 10 - only 0 if the bar code is valid
         !        Logical not the result, turning 0s into 1s and anything else into 0s
        q         Prints the top via exit code and exits


6

ওল্ফ্রাম ভাষা (গণিত) , 26 21 বাইট 26

10∣(2-9^Range@8).#&

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

8 টি সংখ্যার তালিকা হিসাবে ইনপুট নেয়।

কিভাবে এটা কাজ করে

2-9^Range@8একত্রে 10 থেকে 10 মডিউল 2-(-1)^Range@8, যা হয় {3,1,3,1,3,1,3,1}। আমরা ইনপুট দিয়ে এই তালিকার বিন্দু পণ্যটি গ্রহণ করি এবং ফলাফলটি 10 ​​দ্বারা বিভাজ্য কিনা তা পরীক্ষা করে দেখুন।

ওল্ফ্রাম ল্যাঙ্গুয়েজ (ম্যাথমেটিকা) , 33 বাইট এবং প্রতিযোগিতামূলক

Check[#~BarcodeImage~"EAN8";1,0]&

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

স্ট্রিং হিসাবে ইনপুট নেয়। 1বৈধ বারকোড এবং অবৈধের জন্য ফিরে আসে 0

কিভাবে এটা কাজ করে

অন্তর্নির্মিতের পথে আমি সবচেয়ে ভাল জিনিসটি খুঁজে পেতে পারি (যেহেতু ম্যাথমেটিকা ​​সমস্ত সেগুলি সম্পর্কে)।

অভ্যন্তরীণ বিট, #~BarcodeImage~"EAN8";1EAN8 বারকোডের একটি চিত্র তৈরি করে, তারপর এটি পুরোপুরি উপেক্ষা করে 1 এ মূল্যায়ন করে However তবে, যদি বারকোডটি অবৈধ হয়, তবে BarcodeImageএকটি সতর্কতা উত্পন্ন করে, যা Checkসেই ক্ষেত্রে 0 ফিরে আসে।


3
আপনি হাত দিয়ে হিসাবটি করছেন যেহেতু এটি খাটো, বা ওল্ফ্রামের এখনও তার মান লাইব্রেরির কোথাও কোনও ভ্যালিডেটইএন 8 বারকোড () ফাংশন নেই?
চিহ্নিত করুন

1
@ মার্ক ম্যাথেমেটিকা সরাসরি বারকোডকে বৈধতা দিতে পারে না , তবে আমি সবেমাত্র পেয়েছি BarcodeImage, যা বারকোডের চিত্র তৈরি করে এবং প্রক্রিয়াটিতে বারকোডকে বৈধতা দেয়। সুতরাং Check[#~BarcodeImage~"EAN8";0,1]<1&কাজ করবে (কিন্তু এটা দীর্ঘ হওয়ার)।
মিশা লাভরভ

5

জাভা 8, 58 56 55 বাইট

a->{int r=0,m=1;for(int i:a)r+=(m^=2)*i;return r%10<1;}

-২ বাইটগুলি তার জাভাস্ক্রিপ্ট উত্তরে দেখার পরে পরিবর্তে ব্যবহার করে @ রিক হিচকককে অপ্রত্যক্ষভাবে ধন্যবাদ জানায় । -1 বাইট এর পরিবর্তে ব্যবহার করে @ETHProductions (এবং @RickHitchcock ) কে অপ্রত্যক্ষভাবে ধন্যবাদ ।(m=4-m)*im++%2*2*i+i
(m^=2)*i(m=4-m)*i

ব্যাখ্যা:

এখানে চেষ্টা করুন।

a->{              // Method with integer-array parameter and boolean return-type
  int r=0,        //  Result-sum
      m=1;        //  Multiplier
  for(int i:a)    //  Loop over the input-array
    r+=           //   Add to the result-sum:
       (m^=2)     //    Either 3 or 1,
       *i;        //    multiplied by the digit
                  //  End of loop (implicit / single-line body)
  return r%10<1;  //  Return if the trailing digit is a 0
}                 // End of method

1
আপনি একটি কৌশল দিয়ে অন্য বাইট সংরক্ষণ করতে পারেন @ETHProductions আমাকে দেখিয়েছে: এতে পরিবর্তন m=4-mকরুন m^=2
রিক হিচকক

@RickHitchcock আহ, অবশ্যই .. আমি ব্যবহার ^=1প্রশংসনীয় প্রায়ই উত্তর যখন আমি মধ্যে পরিবর্তন করতে চান 0এবং 1^=2এই ক্ষেত্রে কাজ মধ্যে পরিবর্তন করতে 1এবং 3। সুন্দর কৌশল, মন্তব্যটি উল্লেখ করার জন্য ধন্যবাদ। :)
কেভিন ক্রুইজসেন

4

05 এ বি 1 ই , 14 বাইট

θ¹¨3X‚7∍*O(T%Q

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

শীর্ষস্থানীয় 0গুলি প্রয়োজন , অঙ্কগুলির তালিকা নেয়।


ব্যর্থ বলে মনে হচ্ছে 3100004(সত্যবাদী হওয়া উচিত)।
Zgarb

@ জাগারব আপনি 0সেখানে একটি মিস করছেন ।
এরিক আউটগল্ফার

ওহ, এটি একটি স্ট্রিং লাগে? ঠিক আছে, তাহলে আমার খারাপ।
জাগারব

@ জগারব ওয়েল, আপনি উদ্ধৃতিগুলি বাদ দিতে পারেন, তবে হ্যাঁ, আপনার শীর্ষস্থানীয় হওয়া দরকার 0। এই উত্তরটি আসলে স্ট্রিংগুলিতে নম্বর ফাংশন ব্যবহার করে, 05AB1E এর অন্যতম বৈশিষ্ট্য।
এরিক আউটগল্ফার

@ মিঃ এক্সকোডার এই প্রশ্নটি খুব পরিষ্কার নয়, আমি আরও একটি কোড যুক্ত করব যা নীচের জন্য হ্যান্ডেল করে।
এরিক আউটগল্ফার

4

পাইথ , 8 বাইট

!es+*2%2

সমস্ত পরীক্ষার কেস যাচাই করুন!

পাইথ , 13 বাইট

যদি আমরা ধরে নিতে পারি যে ইনপুটটির সর্বদা ঠিক 8 টি সংখ্যা রয়েছে:

!es.e*bhy%hk2

সমস্ত পরীক্ষার কেস যাচাই করুন!


কিভাবে কাজ করে?

! এস + * 2% 2 ~ সম্পূর্ণ প্রোগ্রাম।

      % 2 ~ ইনপুট [:: 2]। ইনপুটটির প্রতিটি দ্বিতীয় উপাদান।
    * 2 ~ ডাবল (পুনরাবৃত্তি তালিকার দু'বার)
   + The ইনপুট যুক্ত করুন।
  s ~ Sum
 e ~ শেষ সংখ্যা।
! ~ যৌক্তিক নয়।
! es.e * sbhy% hk2 ~ সম্পূর্ণ প্রোগ্রাম।

               The ইনপুটটিকে একটি স্ট্রিতে রূপান্তর করুন।
   .e ~ গণিত মানচিত্র, খের বর্তমান মান এবং কেতে সূচক সঞ্চয় করে।
          % hk2 the সূচকের বিপরীত সমতা। (কে + 1)% 2।
        hy ~ ডাবল, ইনক্রিমেন্ট। এই মানচিত্রগুলি বিজোড় পূর্ণসংখ্যা 1 এবং এমনকি 3 টিতে হয়।
      খ ~ বর্তমান সংখ্যা
     * ~ গুণ
  s ~ Sum
 e ~ শেষ সংখ্যা।
! ~ যৌক্তিক অবহেলা।

যদি অ্যালগরিদম প্রয়োগের পরে প্রথম 7 ডিজিটের যোগফল 10 থেকে বিয়োগ করা হয় এবং তারপরে শেষ অঙ্কের সাথে তুলনা করা হয়, এটি আলগোরিদম প্রয়োগের পরে সমস্ত অঙ্কের যোগফল 10 এর একাধিক কিনা তা পরীক্ষা করার সমতুল্য ।


ব্যর্থ বলে মনে হচ্ছে 3100004(সত্যবাদী হওয়া উচিত)।
Zgarb

@ জাগারব অপেক্ষা করা আমাদের করা উচিত 3*3+1*1+0*3+...নাকি 0*3+3*1+1*0..? আমি ভেবেছিলাম আমাদের প্রাক্তনটি করার কথা রয়েছে
মিঃ এক্সকোডার

নতুন স্পেসে, ঠিক 8 টি রয়েছে কিনা তা নিশ্চিত করতে নেতৃস্থানীয় অঙ্কগুলি যুক্ত করা হয় (যদি আমি সঠিকভাবে বুঝতে পারি)।
Zgarb

@ জগারব ঠিক আছে, ঠিক আছে।
মিঃ এক্সকোডার

4

হাস্কেল , 40 38 বাইট

a=3:1:a
f x=mod(sum$zipWith(*)a x)10<1

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

8 টি পূর্ণসংখ্যার তালিকা হিসাবে ইনপুট নেয়। অসীম তালিকা ব্যবহারের একটি ব্যবহারিক উদাহরণ।

সম্পাদনা করুন: গল্ফল্ফকে ধন্যবাদ 2 বাইট সংরক্ষিত


2
cycle 2 বাইট সংরক্ষণের পরিবর্তে পুনরাবৃত্ত সংজ্ঞাটি ব্যবহার করা ।
ক্রিশ্চিয়ান লুপাস্কু

4

রেটিনা , 23 22 বাইট

-1 বাইট ধন্যবাদ মার্টিন ইন্ডারকে !

(.).
$1$1$&
.
$*
M`
1$

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

ব্যাখ্যা

উদাহরণ ইনপুট: 20378240

(.).
$1$1$&

প্রথম সংখ্যার সাথে দু'বার পুনরাবৃত্তি করুন এবং তারপরে দম্পতি নিজেই দু'বার পুনরাবৃত্তি করুন each আমরা পেতে2220333788824440

.
$*

প্রতিটি অঙ্ককে অ্যানারিতে রূপান্তর করুন। স্পষ্টতার জন্য বন্ধনী যুক্ত হওয়ার সাথে আমরা পেয়েছি(11)(11)(11)()(111)(111)...

M`

খালি স্ট্রিংয়ের মিলগুলির সংখ্যা গণনা করুন, যা স্ট্রিংয়ের সংখ্যার চেয়ে এক বেশি। (শেষ দুটি পদক্ষেপের সাথে আমরা মূলত প্রতিটি অঙ্কের যোগফলকে +1 দিয়েছি) ফলাফল:60

1$

1স্ট্রিংয়ের শেষে একটি ম্যাচ করুন । আমরা এককভাবে তিনটি এবং 1 দ্বারা অঙ্কগুলি করেছি এবং সংক্ষিপ্তসারগুলি করেছি, একটি বৈধ বারকোডের জন্য এটি 10 ​​(শেষ সংখ্যা 0) দ্বারা বিভাজ্য হওয়া উচিত; কিন্তু আমরা শেষ ধাপে 1 যোগ, তাই আমরা শেষের ডিজিটটি হতে 1. ফাইনাল ফলাফলের চাই: 1


2
আমি তোমাদের ড্রপ করতে পারেন মনে .ম্যাচ পর্ব ও ম্যাচ 1$শেষে।
মার্টিন ইন্ডার

@ মার্টিনএন্ডার খুব সুন্দর, আমি এটি করব, ধন্যবাদ!
লিও

3

পাওয়ারশেল , 85 বাইট

param($a)(10-(("$a"[0..6]|%{+"$_"*(3,1)[$i++%2]})-join'+'|iex)%10)%10-eq+"$("$a"[7])"

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

সংজ্ঞায়িত হিসাবে অ্যালগরিদম কার্যকর করে। ইনপুট নেয় $a, প্রতিটি অঙ্কটি সাথে টেনে আনে "$a"[0..6]এবং এর মাধ্যমে লুপ করে |%{...}। প্রতিটি পুনরাবৃত্তি, আমরা অঙ্কটি নিয়ে থাকি, স্ট্রিং "$_"হিসাবে নিক্ষেপ করি বা +এটি দ্বারা গুণিত করার আগে এটি 3বা পূর্বে 1( $iমডিউলো বৃদ্ধি করে বেছে নেওয়া হয় 2) এটি হিসাবে পূর্বে এটি cast ালাই ।

এই ফলাফলগুলি সমস্ত একত্রিত হয়ে সংক্ষিপ্ত করা হয় -join'+'|iex। আমরা সেই রেজাল্ট মোড নিয়ে থাকি 10, এটিকে বিয়োগ করে 10আবার ফলাফল মোড নিয়ে যাই 10(এই দ্বিতীয় মডটি 00000000পরীক্ষার ক্ষেত্রে জবাবদিহি করা প্রয়োজন )। আমরা তারপরে পরীক্ষা করে দেখি যে -eqএটি শেষ অঙ্কে ইউল কিনা । সেই বুলিয়ান ফলাফলটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।


ব্যর্থ বলে মনে হচ্ছে 3100004(সত্যবাদী হওয়া উচিত)।
Zgarb


আহ ঠিক আছে, আমি উদ্ধৃতি ছাড়াই এটি পরীক্ষা করেছি।
Zgarb

@ জগারব আহ, হ্যাঁ উদ্ধৃতিগুলি ছাড়াই, পাওয়ারশেল সুস্পষ্টভাবে একটি পূর্ণসংখ্যা হিসাবে কাস্ট করবে, শীর্ষস্থানীয় শূন্য (গুলি) বাদ দেবে।
অ্যাডমবর্কবার্ক

3

জেলি , 16 বাইট

ż3,1ṁ$P€SN%⁵
Ṫ=Ç

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

অঙ্কের তালিকা হিসাবে ইনপুট নেয়


নিতপিক: আপনার টিআইও সময়সীমা এছাড়াও, 16 বাইট
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার কীভাবে অপেক্ষা করুন। আমি Dফুটারে রেখে দিলে এটি কাজ করে। এবং হ্যাঁ ধন্যবাদ! : ডি
হাইপার নিউট্রিনো

@ ইরিকথ আউটগল্ফার আমি কি কিছু ভুল করছি? আপনার 16 বাইটার অবৈধ বলে মনে হচ্ছে?
হাইপারনিউটারিনো

হতে পারে, এটি ভিন্নভাবে কাজ করে, তবে আপনারও কিছুটা অবৈধ বলে মনে হচ্ছে ... বিশেষত আমি মনে করি শেষ লাইনটি হওয়া উচিত DµṪ=Ç
এরিক আউটগল্ফার

1
ব্যর্থ বলে মনে হচ্ছে 3100004(সত্যবাদী হওয়া উচিত)।
Zgarb

3

এপিএল (ডায়ালগ) , 14 বাইট

রাস্তার সমাধানের সাথে সমান ।

পুরো প্রোগ্রাম বডি। STDIN থেকে সংখ্যার তালিকার জন্য অনুরোধ জানানো হয়।

0=10|+/⎕×83 1

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

কি ...

0= শূন্য সমান

10| Mod-10 এর

+/ যোগফল

⎕× ইনপুট বার

8⍴3 1 চক্রাকারে আটটি উপাদান নেওয়া হয়েছিল [3,1]

?


1
আপনার মানে এপিএল এটি প্রাচীন সুমেরিয়ান বা লিনিয়ার বি এর মতো কোনও একটি চরিত্রে এটি করতে পারে না?
চিহ্নিত করুন

ট্রেন: 0 = 10 | - / + 2 × + /
ngn

3

05 এ বি 1 ই , 9 বাইট

3X‚7∍*OTÖ

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

3X‚7∍*OTÖ    # Argument a
3X‚          # Push [3, 1]
   7∍        # Extend to length 7
     *       # Multiply elements with elements at same index in a
      O      # Total sum
       TÖ    # Divisible by 10

নিস! আমি যখন দেখেছিলাম প্রথম জিনিসটি "দৈর্ঘ্যে প্রসারিত" ছিলাম, এখনও এটি ব্যবহার করে নি।
ম্যাজিক অক্টোপাস উরন

31×S*OTÖ8 বাইট জন্য। ×শুধু 31 nবার ধাক্কা । আপনি যখন গুণ করবেন, এটি স্বয়ংক্রিয়ভাবে অতিরিক্ত 31 এর ড্রপ করে।
যাদু অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টপাস ইউরান এটি seems ষ্ঠ 69165430 -> 1
টেস্টকেসে

3

জে, 17 বাইট

-10 বাইট কোল ধন্যবাদ

0=10|1#.(8$3 1)*]

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

মূল সমাধানটির জিপ / গুণক কম্বো এড়াতে একইসাথে 1#.পণ্যগুলিকে যুক্ত করতে "বেস 1 ট্রিক" এড়ানোর জন্য এটি সমান আকারের তালিকাগুলির গুণক ব্যবহার করে। উচ্চ স্তরের পদ্ধতির মূল ব্যাখ্যার অনুরূপ।

আসল, 27 বাইট

0=10|{:+[:+/[:*/(7$3 1),:}:

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

ব্যাখ্যা

0 =                                        is 0 equal to... 
    10 |                                   the remainder when 10 divides...
         {: +                              the last input item plus...
              [: +/                        the sum of...
                    [: */                  the pairwise product of...
                          7$(3 1) ,:       3 1 3 1 3 1 3 zipped with...
                                     }:    all but the last item of the input

0=10|1#.(8$3 1)*]17 বাইটের জন্য কাজ করা উচিত (একই অ্যালগোরিদমটিও করে)। আমি যথেষ্ট নিশ্চিত যে বিটাতে আপনি একটি বিশেষ্য দিয়ে ডানদিকে একটি হুক শেষ করতে পারেন, তাই 0=10|1#.]*8$3 115 এর জন্য কাজ করতে পারেন (আমি টিওটি পরীক্ষা করে দেখছি তবে এটি নিচে বলে মনে হচ্ছে?)
কোলে

@ কোল, আমি এই উন্নতি পছন্দ করি। আমি 1#.2 বা 3 বারের মতো কৌশলটি শিখেছি এবং ভুলে গেছি ... আমাকে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ। ওহ 15 টি বাইট সংস্করণ টিআইওতে কাজ করেনি।
জোনা

3

সি (জিসিসি), 84 82 72 61 54 বাইট

c;i;f(x){for(i=c=0;x;x/=10)c+=(1+2*i++%4)*x;c=c%10<1;}

নীল থেকে -21 বাইট

নাহুয়েল ফুইলিউল থেকে -7 বাইট

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

স্টেডিবক্সের উত্তরের স্বাধীনভাবে বিকাশ হয়েছে

'f' একটি ফাংশন যা বারকোডকে একটি হিসাবে গ্রহণ করে intএবং 1সত্য এবং 0মিথ্যা হিসাবে প্রত্যাবর্তন করে ।

  • fশেষ অঙ্ক সঞ্চয় করে xs( s=x%10),

  • তারপরে যোগফলটি গণনা করে c( for(i=c=0;x;x/=10)c+=(1+2*i++%4)*x;)

    • cযোগফল, iএকটি পাল্টা হয়

    • প্রথম সহ প্রতিটি অঙ্ক জন্য, যোগ করুন 1+2*i%4গুণ অঙ্ক ( x%10চেকসাম এবং বৃদ্ধি করার জন্য) i( i++3-2*i++%4)

      • 1+2*i%4iযখন iসমান হয় তখন 1 হয় এবং বিজোড় হলে 0 হয়
  • তারপরে যোগফল দশটির একক হয় কিনা তা ফেরত দেয় এবং যেহেতু আমরা শেষ অঙ্কটি যুক্ত করেছি (1 দ্বারা গুণিত), বারকোডটি বৈধ হলে যোগফল দশটির একাধিক হবে। (বাদ দিতে জিসিসি-নির্ভর অনির্ধারিত আচরণ ব্যবহার করে return)।


আমার মনে হয় (x%10)ঠিক xযেমন হতে পারে আপনি c%10পরে যাচ্ছেন । এছাড়াও আমি মনে করি আপনি ব্যবহার করতে পারেন i<8এবং তারপরে c%10শেষে পরীক্ষা শূন্য কিনা তা।
নিল

@ নীল ধন্যবাদ! যে -10 বাইট পেয়েছে।
pizzapants184

আসলে আমি মনে করি sঅপ্রয়োজনীয়:c;i;f(x){for(i=c=0;i<8;x/=10)c+=(1+2*i++%4)*x;return c%10<1;}
নিল

টিও লিঙ্কটি 61 বাইট হয় তবে উত্তরে এটি 72, কেন x=c%10<1বা c=c%10<1তার পরিবর্তে return c%10<1এখনও কাজ করে তাও জানেন না
নাহুয়েল ফুইলুল

এছাড়াও i<8প্রতিস্থাপন করা যাবেx
নাহুয়েল ফিউইলুল

3

সি, 63 বাইট

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10;}

ধরে নেয় যে 0হয় trueএবং অন্য কোন মান false

আরও ভাল ফেরতের মান জন্য +3 বাইট

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10==0;}

যোগ ==0করার জন্য returnবিবৃতি।

Ungolfed

int check(int* values)
{
    int result = 0;
    for (int index = 0; index < 8; index++)
    {
        result += v[i] * 3 + v[++i]; // adds this digit times 3 plus the next digit times 1 to the result
    }
    return result % 10 == 0; // returns true if the result is a multiple of 10
}

এটি EAN চেকসামগুলির বিকল্প সংজ্ঞা ব্যবহার করে যেখানে চেক ডিজিটটি এমনভাবে বেছে নেওয়া হয়েছে যে চেক ডিজিট সহ পুরো বারকোডের চেকসামটি 10 ​​এর একাধিক M

স্টিডিবক্স, by৩ বাইটের পরামর্শ অনুসারে লুপের ভিতরে ভেরিয়েবল শুরু করা

i;s;c(int*v){for(i=s=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10;}

Tead১ বাইট স্টেডিবক্সের পরামর্শ অনুসারে কোঁকড়ানো বন্ধনীগুলি সরানো

i;s;c(int*v){for(i=s=0;i<8;i++)s+=v[i]*3+v[++i];return s%10;}

কেভিন ক্রুইজসেনের পরামর্শ অনুসারে আরও ভাল রিটার্ন মান <1না দিয়ে ব্যবহার করা==0

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10<1;}

যোগ <1করার জন্য returnবিবৃতি, এই বরং জোড়ার তুলনায় শুধুমাত্র 2 বাইট যোগ করা ==0যা 3 বাইট যোগ করা হয়েছে।


এর পরে অপসারণ করে আপনি দুটি বাইট সংরক্ষণ করতে পারেন । এছাড়াও, ফাংশন জমা পুনর্ব্যবহারযোগ্য হতে হবে যাতে আপনি আরম্ভ করতে হবে, (ঠিক পরিবর্তন ফাংশন ভিতরে করতে এবং করতে )। {}forsi;s=0;i,s;i=0;i=s=0;
স্টেডিবক্স

@ স্টেডিবক্স আমি কীভাবে কোঁকড়ানো বন্ধনীগুলি সরিয়ে ফেলতে পারি?
মিশেল জনসন 21

তাদের ভিতরে কেবল একটি বিবৃতি আছে। এর পরে যখন কোনও কোঁকড়ানো বন্ধনী নেই forতখন লুপ বডিটি পরবর্তী বিবৃতি হবে। for(i=0;i<8;i++){s+=v[i]*3+v[++i];}হিসাবে একই for(i=0;i<8;i++)s+=v[i]*3+v[++i];
স্টেডিবক্স

@ স্টেডিবক্স ওহ অবশ্যই এটি সি সিনট্যাক্সগুলির একটি গতি যা আমি সাধারণত ভুলে যাই, কারণ সাধারণ কোড লেখার সময় আমি সর্বদা কোঁকড়ানো বন্ধনীগুলি অপ্রয়োজনীয় এমনকি অন্তর্ভুক্ত করি কারণ এটি কোডটি আরও পাঠযোগ্য।
মিশেল জনসন

আপনার সত্য / মিথ্যা উত্তরে, +3 যুক্ত করে ==0এটি ব্যবহার করে +2 করা যাবে <1। :)
কেভিন ক্রুইজসেন

2

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

e=>eval(e.map((a,i)=>(3-i%2*2)*a).join`+`)%10<1

যদিও এরই মধ্যে আরও সংক্ষিপ্ত উত্তর রয়েছে তবে জাভাস্ক্রিপ্টে এটি আমার প্রথম গল্ফ করার চেষ্টা তাই আমি গল্ফিংয়ের সুপারিশ শুনতে চাই :-)

পরীক্ষামূলক

বিকল্পভাবে, আপনি এটি অনলাইনে চেষ্টা করতে পারেন !


2

পার্ল 5, 37 32 + 1 (-পি) বাইট

s/./$-+=$&*(--$|*2+1)/ge;$_=/0$/

-5 বাইটস ডম হেস্টিংসকে ধন্যবাদ। 37 +1 বাইট ছিল

$s+=$_*(++$i%2*2+1)for/./g;$_=!!$s%10

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


1
এটি নিয়ে একটি ছোট্ট খেলা ছিল এবং ভেবেছিলাম আমি একটি দরকারী কৌশল ভাগ করব: এর --$|মধ্যে টগল হয় 1এবং 0তাই আপনি ++$i%2বিকল্প বুলিয়ান পরিবর্তে এটি ব্যবহার করতে পারেন ! এছাড়াও, সমস্ত গুরুত্বপূর্ণ হ'ল মোট ( $s) ম্যাচগুলি /0$/, সেই পরিবর্তনের সাথে মিলিত 33 বাইট পেতে সক্ষম হয়েছিল s///: এটি অনলাইনে চেষ্টা করুন! ( -lকেবলমাত্র দৃশ্যমানতার জন্য)
ডম হেস্টিংস

হ্যাঁ আমি যদিও করতে s/./(something with $&)/geএবং /0$/মেলে কিন্তু দুই মিলিত।
নাহুয়েল ফিউইলুল

2

ব্রেইনফাক, 228 বাইট

>>>>++++[<++>-]<[[>],>>++++++[<++++++++>-]<--[<->-]+[<]>-]>[->]<<<<[[<+>->+<]<[>+>+<<-]>>[<+>-]<<<<<]>>>>[>>[<<[>>+<<-]]>>]<<<++++[<---->-]+++++[<++<+++>>-]<<[<[>>[<<->>-]]>[>>]++[<+++++>-]<<-]<[[+]-<]<++++++[>++[>++++<-]<-]>>+.

সম্ভবত একটি মোটামুটি কিছু উন্নত করা যেতে পারে। ইনপুট একবারে 1 ডিজিট নেওয়া হয়, সত্যের জন্য 1 আউটপুট, 0 টি মিথ্যা বলে।

কিভাবে এটা কাজ করে:

>>>>++++[<++>-]<

অবস্থান 3 এ 8 রাখুন।

[[>],>>++++++[<++++++++>-]<--[<->-]+[<]>-]

8 বার ইনপুট নেয়, প্রতিবার আসকি মান থেকে আসল মান +2 এ পরিবর্তন করে। ইনপুটগুলি পৃথক করে আলাদা করে রাখে, যা সরানো হবে, পরে আরও সহজে গুণনের জন্য।

>[->]

প্রতিটি আইটেম থেকে একটি বিয়োগ করুন। আমাদের টেপটি এখন এমন কিছু দেখাচ্ছে

0 0 0 0 4 0 4 0 8 0 7 0 6 0 2 0 3 0 10 0 0
                                         ^

প্রতিটি মানের সাথে এর চেয়ে 1 টি বেশি হওয়া উচিত। এর কারণ হ'ল শূন্যগুলি আমাদের গুণ প্রক্রিয়াটিকে বিশৃঙ্খলা করবে।

এখন আমরা গুণ করা শুরু করতে প্রস্তুত।

<<<<

শেষ থেকে দ্বিতীয় আইটেম যান।

[[<+>->+<]<[>+>+<<-]>>[<+>-]<<<<<]

শূন্য থাকাকালীন, এটিতে আইটেমটি তিনটি দিয়ে গুণ করুন, তারপরে দুটি আইটেমকে বামে সরান। এখন আমরা আমাদের প্রয়োজনীয় সমস্ত কিছু তিন দ্বারা গুণিত করেছি এবং আমরা টেপের প্রথম অবস্থানে রয়েছি।

>>>>[>>[<<[>>+<<-]]>>]

সম্পূর্ণ তালিকা যোগ করুন।

<<<++++[<---->-]

আমাদের মানটি প্রকৃত মানের চেয়ে 16 টি বেশি। 16 টি বিয়োগ করে এটি ঠিক করুন।

+++++[<++<+++>>-]

যোগফলটি 10 ​​এর একাধিক কিনা তা আমাদের পরীক্ষা করা দরকার সর্বাধিক যোগফল 9s এর সাথে, যা 144। যোগফলের ডান

<<[<[>>[<<->>-]]>[>>]++[<+++++>-]<<-]

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

বাকিটি আউটপুট জন্য:

<[[+]-<]<++++++[>++[>++++<-]<-]>>+.

যোগফলের স্থানে সরান। যদি এটি অ-শূন্য (নেতিবাচক) হয় তবে বারকোডটি অবৈধ; অবস্থান -1 এ সেট করুন। সঠিক আসকি মান পেতে এখন 49 যোগ করুন: 1 টি বৈধ হলে, 0 যদি এটি অবৈধ হয়।


2

জাভা 8, 53 বাইট

Golfed:

b->(3*(b[0]+b[2]+b[4]+b[6])+b[1]+b[3]+b[5]+b[7])%10<1

ল্যাম্বডায় সরাসরি গণনা সংক্ষিপ্ততম সমাধানে উপস্থিত হয়। এটি একটি একক অভিব্যক্তিতে ফিট করে, ল্যাম্বডা ওভারহেডকে ন্যূনতম করে এবং বহির্মুখী পরিবর্তনশীল ঘোষণা এবং সেমিকোলনগুলি সরিয়ে দেয়।

public class IsMyBarcodeValid {

  public static void main(String[] args) {
    int[][] barcodes = new int[][] { //
        { 2, 0, 3, 7, 8, 2, 4, 0 }, //
        { 3, 3, 7, 6, 5, 1, 2, 9 }, //
        { 7, 7, 2, 3, 4, 5, 7, 5 }, //
        { 0, 0, 0, 0, 0, 0, 0, 0 }, //
        { 2, 1, 0, 3, 4, 9, 8, 4 }, //
        { 6, 9, 1, 6, 5, 4, 3, 0 }, //
        { 1, 1, 9, 6, 5, 4, 2, 1 }, //
        { 1, 2, 3, 4, 5, 6, 7, 8 } };
    for (int[] barcode : barcodes) {
      boolean result = f(b -> (3 * (b[0] + b[2] + b[4] + b[6]) + b[1] + b[3] + b[5] + b[7]) % 10 < 1, barcode);
      System.out.println(java.util.Arrays.toString(barcode) + " = " + result);
    }
  }

  private static boolean f(java.util.function.Function<int[], Boolean> f, int[] n) {
    return f.apply(n);
  }
}

আউটপুট:

[2, 0, 3, 7, 8, 2, 4, 0] = true
[3, 3, 7, 6, 5, 1, 2, 9] = true
[7, 7, 2, 3, 4, 5, 7, 5] = true
[0, 0, 0, 0, 0, 0, 0, 0] = true
[2, 1, 0, 3, 4, 9, 8, 4] = false
[6, 9, 1, 6, 5, 4, 3, 0] = false
[1, 1, 9, 6, 5, 4, 2, 1] = false
[1, 2, 3, 4, 5, 6, 7, 8] = false

2

কিউবাসিক, 54 52 বাইট

উঘ, বিরক্তিকর উত্তরটি সবচেয়ে সংক্ষিপ্ত আকারে পরিণত হয়েছিল:

INPUT a,b,c,d,e,f,g,h
?(3*a+b+3*c+d+3*e+f+3*g+h)MOD 10=0

এটি অঙ্কগুলি কমা-বিচ্ছিন্ন করে দেয়। আমার আসল 54-বাইট সমাধান, যা একবারে একটি ডিজিট লাগায়, "নিকার" পদ্ধতির ব্যবহার করে:

m=3
FOR i=1TO 8
INPUT d
s=s+d*m
m=4-m
NEXT
?s MOD 10=0

2

সি # (.নেট কোর) , 65 62 বাইট

b=>{int s=0,i=0,t=1;while(i<8)s+=b[i++]*(t^=2);return s%10<1;}

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

প্রাপ্তি স্বীকার

-3 বাইটস @ কেভিন ক্রুইজসেন এবং একচেটিয়া-বা অপারেটরটি ব্যবহার করে ঝরঝরে কৌশল।

DeGolfed

b=>{
    int s=0,i=0,t=1;

    while(i<8)
        s+=b[i++]*(t^=2); // exclusive-or operator alternates t between 3 and 1.

    return s%10<1;
}

সি # (.নেট কোর) , 53 বাইট

b=>(3*(b[0]+b[2]+b[4]+b[6])+b[1]+b[3]+b[5]+b[7])%10<1

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

@ স্নোম্যানের উত্তরের একটি সরাসরি বন্দর ।


আপনার প্রথম উত্তরের জন্য: b=>{int s=0,i=0,t=1;while(i<8)s+=b[i++]*(t^=2);return s%10<1;}( 62 বাইট ), অথবা বিকল্পভাবে একটি ভবিষ্যদ্বাণী সহ, এছাড়াও 62 বাইট: b=>{int s=0,t=1;foreach(int i in b)s+=i*(t^=2);return s%10<1;}(যা আমার জাভা 8 উত্তরের একটি বন্দর )।
কেভিন ক্রুইজসেন

1

ম্যাটল্যাব / অকটাভ , 32 বাইট

@(x)~mod(sum([2*x(1:2:7),x]),10)

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

আমি এই কোডটি তৈরি করেছি এবং অন্যান্য উত্তরগুলির দিকে না তাকিয়ে এই পদ্ধতির বিকাশ হওয়ায় আমি অন্যান্য অকটাভ উত্তর সত্ত্বেও এটি পোস্ট করব।

এখানে আমাদের একটি বেনামি ফাংশন রয়েছে যা ইনপুটটিকে 8 টি মানের অ্যারে হিসাবে গ্রহণ করে এবং যদি কোনও বৈধ বারকোড হয় তবে সত্য হয়, অন্যথায় মিথ্যা ..

ফলাফলটি নিম্নরূপ গণনা করা হয়।

              2*x(1:2:7)
             [          ,x]
         sum(              )
     mod(                   ,10)
@(x)~
  1. বিজোড় অঙ্কগুলি (একটি সূচকযুক্ত) 2 দ্বারা গুণিত হয়।
  2. ফলাফলটি ইনপুট অ্যারেতে প্রম্পট করা হয়, এমন একটি অ্যারে প্রদান করে যার যোগফল তিনবার বিজোড় অঙ্কগুলি এবং একবারে এমনকি সংখ্যাসমূহকে ধারণ করে।
  3. আমরা যোগফলটি করি যা আমাদের যোগফলের মধ্যে সরবরাহ করা চেকসামও অন্তর্ভুক্ত করে।
  4. এরপরে Modulo 10 সম্পাদিত হয়। সরবরাহিত চেকসামটি বৈধ হলে চেকসাম মান সহ সমস্ত গুণিত সংখ্যার যোগফল 10 এর একাধিক হতে হবে Therefore সুতরাং কেবলমাত্র একটি বৈধ বারকোড 0 প্রদান করবে।
  5. বৈধ হলে সত্যের একটি লজিক্যাল আউটপুট পেতে ফলাফলটি উল্টানো হয়।

1

এক্সেল, 37 বাইট

এক্সেলের 8 টি পৃথক কক্ষকে মঞ্জুরি হিসাবে "8 পূর্ণসংখ্যার একটি তালিকা" ব্যাখ্যা করা:

=MOD(SUM(A1:H1)+2*(A1+C1+E1+G1),10)=0

= এমওডি (এসইউএম ((এ 1: এইচ 1) + 2 * (এ 1 + সি 1 + ই 1 + জি 1)), 10) = 0 এই সূত্রটি কী এক্সেলের মধ্যে বিদ্যমান?
রোজলুপি

@ রোসলুপি, পূর্বনির্ধারিত নয়, না। তবে Modulo, Sum, + ইত্যাদি করেন ;-)
ওয়ার্নিশ

আমি কেবল এটিই বলতে চাই যে এপিএলে প্রথম y = (এ 1: এইচ 1) + 2 * (এ 1 + সি 1 + ই 1 + জি 1), এবং যোগফল এবং মোডের পরে ভাল চলছে; এপিএলে প্রথম যোগফল ভাল হয় না (এ 1: এইচ 1) ইত্যাদি কিছু (1,2,3) + 4 = (5,6,7) এবং যোগফলের চেয়ে (5,6,7) = 18; লক্ষ করুন যে যোগফলটি (1,2,3) = 6 এবং 6 + 4 = 10 18 থেকে আলাদা But তবে সম্ভব আমি
কোনও

@ রোসলুপি, ক্ষমা চেয়েছেন, ()আপনার মন্তব্যে পরিবর্তিত বিষয়গুলি মিস করেছেন ।
ওয়ার্নিশ

এক্সেল কীভাবে ব্যাখ্যা করে তা সমস্যা =(A1:H1): এটি অ্যারে হিসাবে পরিচালনা করা হয় না। যদি কোনও কলামের A-Hব্যাপ্তিতে না থাকে তবে এটি অবৈধ । যদি এএইচ-তে কোনও কলামে রাখা হয় তবে কেবলমাত্র সেই কলামটির জন্য মান প্রদান করে। (% ফলাফলের সূত্র%: সি 2 -> সি 1 এইচ 999 -> এইচ 1 কে 1 -> # ভাল!)
ওয়ার্নিশ

1

রুবি, 41 বাইট

পূর্ণসংখ্যার একটি অ্যারে নেয়। জর্ডান -6 বাইট ধন্যবাদ।

->n{n.zip([3,1]*4){|x,y|$.+=x*y};$.%10<1}

নিস! FWIW আপনার mapএখানে মোটেই প্রয়োজন নেই: zipএকটি ব্লক নেয়। আপনি $.আরম্ভের পরিবর্তে আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন s:->n{n.zip([3,1]*4){|x,y|$.+=x*y};$.%10<1}
জর্দান

1

টিআই-বেসিক (83 সিরিজ), 18 বাইট

not(fPart(.1sum(2Ans-Ans9^cumSum(binomcdf(7,0

তালিকা হিসাবে ইনপুট নেয় Ans1বৈধ বারকোড এবং অবৈধের জন্য ফিরে আসে 0

আমার গণিত উত্তর একটি বন্দর । একটি অনলাইন পরীক্ষার পরিবেশের পরিবর্তে স্ক্রিনশট অন্তর্ভুক্ত করে:

বারকোড স্ক্রিনশট

উল্লেখযোগ্য বৈশিষ্ট্য: binomcdf(7,0তালিকাটি তৈরি করতে ব্যবহার করা হয় {1,1,1,1,1,1,1,1}(সম্ভাবনার তালিকা যা সাফল্যের সম্ভাবনা 0 সহ 7 টি পরীক্ষার পরে এন = 0,1, ..., 7 এর জন্য সর্বাধিক এন সাফল্য থাকবে)। তারপরে, cumSum(এটিকে পরিণত করে {1,2,3,4,5,6,7,8}

seq(কমান্ডটি ব্যবহার করার চেয়ে এটি একটি বাইট সংক্ষিপ্ত , যদিও historতিহাসিকভাবে মূল বক্তব্যটি ছিল এটিও উল্লেখযোগ্যভাবে দ্রুত faster

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.