আইএসবিএন -13 কে আইএসবিএন -10 এ রূপান্তর করা হচ্ছে


21

ভূমিকা

এই চ্যালেঞ্জটিতে আপনার কাজ হ'ল এই ধরণের কোড রয়েছে বলে ধরে নিয়ে বইয়ের আইএসবিএন -13 কোড দেওয়া বইয়ের জন্য আইএসবিএন -10 কোড তৈরি করা। এই জাতীয় ISBN-13 কোডটি বিভিন্ন অংশ দ্বারা পৃথক করে -:

978-GG-PPPP-TTT-C

অক্ষর G(গোষ্ঠী), P(প্রকাশক), T(শিরোনাম) এবং C(চেকসাম) সমস্ত এক অঙ্কের জন্য দাঁড়িয়ে আছে। এই চ্যালেঞ্জের উদ্দেশ্যে দলবদ্ধকরণ এবং গণনা C( এই চ্যালেঞ্জটি দেখুন ) আকর্ষণীয় নয় এবং আমরা এই কার্যটি আরও সহজ করার জন্য সমস্ত হাইফেন ফেলে দেব।

একটি আইএসবিএন -10 নম্বরের একটি খুব অনুরূপ লেআউট রয়েছে:

GG-PPPP-TTT-c

অক্ষরগুলি G, Pএবং T13 ডিজিটের আইএসবিএন হিসাবে একই, তবে cভিন্ন (এবং একটি ভিন্ন অ্যালগোরিদম ব্যবহার করে গণনা করা হয়)। অঙ্ক cএকটি উপায় যেমন যে নিম্নলিখিত সমানতা (অনুক্রমে সংখ্যার) ঝুলিতে মধ্যে মনোনীত হয়:

10*G + 9*G + 8*P + … + 3*T + 2*T + 1*c = 0 (mod 11)

উদাহরণ

আসুন আমরা আইএসবিএন নম্বরটি বিবেচনা করি 9780345391803: এর সাথে সম্পর্কিত আইএসবিএন -10 কোড পেতে আমরা কেবল অগ্রণী 978এবং চেকসাম 3ফলন ছাড়ি 034539180

এর পরে আমাদের নতুন চেকসামটি গণনা করতে হবে:

10*0 + 9*3 + 8*4 + 7*5 + 6*3 + 5*9 + 4*1 + 3*8 + 2*0 = 185

পরবর্তী সংখ্যা বিভাজ্য 11হয় 187সুতরাং নতুন চেকসাম আছে, 2ফলে আইএসবিএন -10 কোড এবং এইভাবে 0345391802

বিধি

  • আপনার ইনপুটটিতে সর্বদা সংশ্লিষ্ট ISBN-10 নম্বর থাকবে (যেমন এটি হ'ল 13 ডিজিট দীর্ঘ এবং এর সাথে শুরু হবে 978)
  • ইনপুটটি অবশ্যই একটি বৈধ আইএসবিএন -13 হতে হবে না (উদা। 9780000000002)
  • আপনি গ্যারান্টিযুক্ত যে ফলস্বরূপ আইএসবিএন শেষ হবে না X
  • আপনি একটি পূর্ণসংখ্যা বা স্ট্রিং হিসাবে ইনপুট নিতে পারেন (হাইফেন সহ বা তার বাইরে) তবে সংখ্যার একটি সংক্ষিপ্ত তালিকা অনুমোদিত নয়
  • আপনার আউটপুট অবশ্যই একটি বৈধ আইএসবিএন -10 নম্বর হতে পারে (হাইফেন সহ বা ছাড়াই)
  • আপনার আউটপুট একটি পূর্ণসংখ্যা বা স্ট্রিং হতে পারে (আবার অঙ্কগুলির তালিকা নেই)

Testcases

9780000000002 -> 0000000000
9780201882957 -> 0201882957
9781420951301 -> 1420951300
9780452284234 -> 0452284236
9781292101767 -> 1292101768
9780345391803 -> 0345391802

নেতৃস্থানীয় শূন্যগুলি নোট করুন!


5
এটি সমাধানগুলিকে কোনওভাবেই প্রভাবিত করে না, তবে কেবল সেই গাই হওয়ার স্বার্থে, কোনও আইএসবিএন (-10 অথবা -13) এর অংশগুলি কীভাবে পৃথক করা হয়েছে সে সম্পর্কে আপনার বিবরণ ভুল। নিবন্ধকরণ গোষ্ঠী উপাদান পরিবর্তনশীল দৈর্ঘ্য, এবং পরবর্তী অংশের জন্য সংখ্যা সংখ্যা রেজিস্ট্রেশন গ্রুপের মধ্যে এবং এর মধ্যে পৃথক হতে পারে। উদাহরণস্বরূপ, উভয় 0-684-84328-5এবং এ 99921-58-10-7, প্রথম অংশ ( 0এবং 99921যথাক্রমে) নিবন্ধকরণ গ্রুপ, দ্বিতীয় অংশটি প্রকাশক, এবং আরও কিছু।
জর্ডান

5
নির্ধারিত নমুনা আইএসবিএন পছন্দ
জাকোব

উত্তর:


10

রেটিনা ,  44  39 28 বাইট

>,L3,-2`.+
.
$.>`**
_{11}

_

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

ব্যাখ্যা

কিছু নতুন রেটিনা বৈশিষ্ট্য দেখানোর সময়। :)

>,L3,-2`.+

আমরা পুরো ইনপুটটির সাথে মিলেছি .+, সেই ম্যাচটি ফিরিয়ে দেব L, তবে কেবলমাত্র 3 (শূন্য-ভিত্তিক) থেকে -2 (পেনাল্টিমেট) সহ সমস্ত অক্ষর নির্বাচন করি। আমরা ফলাফলটি কোনও পেছনের লাইনফিড ( >) ছাড়াই মুদ্রণ করি ।

এখন, রেটিনার জিনিসগুলি বিয়োগ করা কিছুটা বিরক্তিকর। তবে ভাগ্যক্রমে, আমরা মডিউল 11 কাজ করছি, তাই আমরা কেবল রৈখিক সংমিশ্রণের (গুণমান 11) এর সহগগুলি উল্টাতে পারি এবং সমস্ত কিছু যুক্ত করতে পারি। অন্য কথায়, বাধা যদি:

10*G + 9*G + 8*P + … + 3*T + 2*T + 1*c = 0 (mod 11)

তাহলে আমরা পাই:

c = 1*G + 2*G + 3*P + … + 8*T + 9*T (mod 11)

এটি এখানে জিনিসগুলিকে অনেক সহজ করে তুলেছে:

.
$.>`**

আমরা প্রতিটি চরিত্রটি নীচে সেই জিনিসটির সাথে প্রতিস্থাপন করি। *রেটিনার পুনরাবৃত্তি অপারেটর। এটি ডান-অ্যাসোসিয়েটিভ এবং এটির $&বাম এবং ডানে অন্তর্নিহিত অপারেশন রয়েছে _, তাই প্রতিস্থাপনটি আসলে সংক্ষিপ্ত $.>`*$&*_ডি আন্ডারস্কোরগুলির $&*_একটি স্ট্রিং তৈরি করে , যেখানে ডি বর্তমানে ডিজিটটি প্রতিস্থাপন করছি। তারপরে ম্যাচের সাথে স্ট্রিংয়ের দৈর্ঘ্য। 1 অতএব, সম্পূর্ণ এক্সপ্রেশনটি আমাদের রৈখিক সংমিশ্রণের n ম পদটির অবিচ্ছিন্ন উপস্থাপনার ফলাফল করে ।$.>`

_{11}

প্রকৃত মডুলোটি করা অ্যানারিতে নগণ্য: আমরা কেবলমাত্র 11 টি আন্ডারস্কোরের সমস্ত সেট ফেলে দিই।

_

অবশেষে, আমরা গণনা করি কত আন্ডারস্কোর রয়ে গেছে এবং ফলাফলটি মুদ্রণ করে, যা আইএসবিএন -10 সম্পূর্ণ করে।


1$.>` ম্যাচটি সহ এবং স্ট্রিংয়ের দৈর্ঘ্য কীভাবে দেয় ? আপনি $`রেজেক্স বিকল্পগুলির সাথে পরিচিত হতে পারেন , যা আপনাকে ম্যাচটি (তবে বাদ দিয়ে) পর্যন্ত স্ট্রিং দেয়। একটি ঢোকাতে দ্বারা >, আমরা প্রেক্ষাপটে নামান করতে $`করতে বিভাজক বর্তমান ম্যাচ এবং পরবর্তী (যা বর্তমান অঙ্ক এবং পরবর্তী মধ্যে একটি খালি স্ট্রিং) মধ্যে। সেই বিভাজকটিতে $`বর্তমান ম্যাচটি অন্তর্ভুক্ত থাকবে। তাই $>`লিখতে একটি সংক্ষিপ্ত পথ $`$&। অবশেষে, সবার জন্য $xটাইপ প্রতিকল্পন উপাদান, অক্ষিপট আপনি একটি সন্নিবেশ করতে দেয় .পর $তার দৈর্ঘ্য জন্য।


এই 11 টি ম্যাজিক কি ম্যাজিক ?! এটি আমাকে 4 বাইট বাঁচাবে ... তবে আমি পাই না!
স্ট্রিস্টার 21

1
@ স্ট্রিস্টস্টার মূলত, -2 ≡ 9 (mod 11)(কারণ একটি সংখ্যা থেকে 11 যুক্ত করা বা বিয়োগ করা একত্রিত শ্রেণীর 11 মেম্বার "মান" পরিবর্তন করে না)। এবং সংযোজন এবং গুণটি একত্রিত ক্লাসগুলিকে সম্মান করে, সুতরাং আপনি বর্তমান মডুলোর অধীনে সমমানের মান সহ লিনিয়ার সংমিশ্রণে যে কোনও মান প্রতিস্থাপন করতে পারেন। আমি নেতিবাচক সংখ্যার কথা বলার কারণটি হ'ল এটিই যে আমি cএকদিকে সমীকরণটি এবং অন্যদিকে সমস্ত শর্ত (negativeণাত্মক হিসাবে) পুনর্বিন্যাস করেছি ।
মার্টিন এেন্ডার

আমি এখন এটি পেয়েছি বলে মনে করি। সুতরাং আপনি cহয়ে ওঠার -c = ...পরিবর্তে প্রতিটি দ্বারা 10 9 8...বিয়োগের পরিবর্তে গুন এবং তারপরে সমস্ত কিছুকে -1 দ্বারা গুণিত করুন । 11-1 -2 -3...c
রাস্তায় 21

আপনি কেন চূড়ান্ত পর্যায়ে কেবল পেছনের আন্ডারস্কোরগুলি প্রতিস্থাপন করছেন তা বোঝাতে আপত্তি করবেন? এর কারণ কী তা বোঝার চেষ্টা করার জন্য আমি কিছুটা সময় ব্যয় করেছি তবে আমি এটি পুনরুত্পাদন করে বলে মনে করতে পারি না। এই আপডেটটি উপায় দ্বারা আশ্চর্যজনক দেখাচ্ছে, দুর্দান্ত কাজ!
FryAmTheEggman

1
@ ফ্রাইআম দ্য এজম্যান ধন্যবাদ :) এই মুহুর্তে, স্ট্রিংটিতে কেবল আন্ডারস্কোর রয়েছে। আমরা ইতিমধ্যে প্রথম পর্যায়ে প্রথম নয়টি মুদ্রণ করেছি।
মার্টিন এন্ডার


5

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

$y=-(([char[]]($x="$args"-replace'^978|.$')|%{--$a*[int]"$_"})-join'+'|iex)%11;$x+$y

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

ইনপুট নেয় "$args", -replaceকেবল প্রাসঙ্গিক অংশটি পেতে একটি রেজেক্স করে, $xস্ট্রিং হিসাবে স্টোর করে । তারপরে আমরা charএটিকে প্রতিটি বর্ণের মাধ্যমে একটি অ্যারে এবং লুপ হিসাবে ফেলেছি। লুপের অভ্যন্তরে, আমরা প্রাক-হ্রাস $a(যা ডিফল্ট হয় 0) এবং চেকসাম গণনা অনুযায়ী গুণিত করি। কাস্টটিকে নোট করুন int, অন্যথায় এটি ASCII মান ব্যবহার করবে।

আমরা তখন -joinসেই সংখ্যার সাথে একসাথে +পাইপ করি যা এর সাথে iex( Invoke-Expressionএবং অনুরূপ eval)। আমরা এটি গ্রহণ করি %11এবং সেই চেকসামটি সংরক্ষণ করি $y। অবশেষে, আমরা স্ট্রাক্ট কনটেনেট $x + $y, এবং পাইপলাইনে ছেড়ে চলেছি। আউটপুট অন্তর্ভুক্ত।

Emigna ধন্যবাদ 12 বাইট সংরক্ষণ করা।


আমি সত্যিই PowerShell জানি না, কিন্তু আমি মনে করি ভালো কিছু এই 84 জন্য কাজ করতে পারেন
Emigna

@ এমিগনা অবশ্যই, হ্যাঁ মডুলাস গাণিতিক এবং আমার মস্তিষ্ক ভাল খেলে না।
অ্যাডমবর্কবার্ক

5

অষ্টাভে , 46 41 39 37 বাইট

@(a)[c=a(4:12) 48+mod(7+c*(1:9)',11)]

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

কোডটি স্ট্রিং হিসাবে ইনপুট নেয় এবং একটি স্ট্রিং দেয়।

কোডটি নীচে ভেঙে গেছে:

@(a) একটি বেনামী ফাংশন তৈরি করে।

[c=a(4:12) ... ]আমরা মূল কোড তৈরি করে এমন অক্ষরগুলি বের করে দিয়ে , cপরবর্তী ব্যবহারের জন্য একটি অনুলিপি সংরক্ষণ করে এবং চূড়ান্ত আউটপুট স্ট্রিংয়ে অন্য অনুলিপি যুক্ত করি।

@ মার্টিনএন্টারের অদলবদল 10:-1:2করার চতুর পদ্ধতির ভিত্তিতে 1:10আমরা সহজেই এই ব্যাপ্তিটি তৈরি করতে এবং একটি কলাম ভেক্টর পেতে এটিকে স্থানান্তর করতে পারি। c*(1:10)'সারি ভেক্টর cএবং পরিসীমা কলাম ভেক্টরের অ্যারে গুণ করে । এটি একটি এলিমেন্ট-ভিত্তিক গুণফলের সমষ্টি হিসাবে সমান।

চেকসামটি সাধারণত mod(11-sum,11)11 এর একক হওয়ার জন্য প্রয়োজনীয় সংখ্যার গণনা করে তবে যাইহোক, কারণ cএকটি অক্ষর স্ট্রিং ছিল, যোগফলটি 2592 (48 * 54) দ্বারা হওয়া উচিত তার চেয়ে বড় হবে কারণ আমরা সংখ্যা দ্বারা গুণিত করেছি যা প্রকৃত মানের চেয়ে 48 টি বড় ছিল।

আমরা যখন মডিউলটি সম্পাদন করি, তখন এটি 2592 এর 7 ব্যতীত সমস্ত থেকে স্বয়ংক্রিয়ভাবে মুক্তি পাবে As যেমনটি, এবং পরিসীমা অবহেলার জন্য অ্যাকাউন্টিং, আসল গণনা হয়ে যায় 48+mod(7+sum,11)। আমরা এএসসিআইআই অক্ষরে ফিরে রূপান্তর করতে ফলাফলটিতে 48-এ যুক্ত করি।

চেকসাম চরিত্রটি ফলাফলের শেষে যুক্ত হয় এবং মানটি ফিরে আসে।


5

জেলি , 12 বাইট

ṫ4ṖȮV€xJS%11

এটি একটি সম্পূর্ণ প্রোগ্রাম যা I / O এর জন্য স্ট্রিং ব্যবহার করে।

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

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

ṫ4ṖȮV€xJS%11  Main link. Argument: s (string of length 13)

ṫ4            Tail 4; discard the first three characters.
  Ṗ           Pop; discard the last characters.
   Ȯ          Output; print the result to STDOUT and return it.
    V€        Eval each; turn digit characters into digits.
       J      Indices; yield [1, ..., 13].
      x       Repeat the first digit once, the second digit twice, etc.
        S%11  Take the sum, modulo 11.
              (implicit) Print the checksum to STDOUT.

4

জাভাস্ক্রিপ্ট (ES6), 59 56 বাইট

s=>(s=s.slice(3,-1))+[...s].reduce(n=>n+s[i++]*i,i=0)%11

@ শ্যাগির পরামর্শে -3 বাইট ধন্যবাদ ।



1
বা সম্ভবত 56 বাইট
শেগি

সুতরাং অঙ্কের অ্যারে হিসাবে ইনপুট না কেন? 54 বাইট
tsh


3

পাইথ , 16 বাইট

%s.e*ksbpP>Q3hT

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

পাইথ , 17 বাইট

%s*VsMKpP>Q3SlK11

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

ব্যাখ্যা

%s.e*hksbpP>Q3hT || Full program. Uses string for input and output.

            Q    || The input.
           > 3   || With elements at indexes smaller than 3 trimmed.
          P      || Pop (remove the last item).
         p       || Print the result without a linefeed, but also return it.
  .e             || Enumerated map. For each (index, value), assign two variables (k, b).
       sb        || b converted to an integer.
    *hk          || And multiplied by k + 1.
 s               || Summation.
%                || Modulo by:
               T || The literal 10.
              h  || Incremented by 1.

3

জাপট , 16 15 বাইট

এটি অন্য রাতে পাব দিয়ে এসেছিল এবং এটির সব ভুলে গিয়েছিল।

s3J
U+¬x_*°TÃuB

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


ভাবেন যে আপনি বাইট সংরক্ষণ করতে পারেন s3JএবংU+¬x_*°TÃuB
ETH প্রোডাকশনগুলি

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

দাঁড়ান, না, আমি ভুলে যেতাম U- ডি'ওহ!
শেগি

3

হেক্সাগনি , 77 61 বাইট

,,,,'~'11=\.A&.=\./';"-'"{4.8}}\'.A.>.,<\'+'%!@}/=+'+{./&{{&/

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


রঙ্গিন:


এখানে একটি বড় সংস্করণ। কিছু পাথ ক্রসিং রয়েছে, তবে cells সমস্ত কক্ষগুলি .হেক্সাগনির কোনও বিকল্প নয়, আপনাকে সেগুলি নিয়ে উদ্বিগ্ন হওয়ার দরকার নেই:

(আমি পুরানো আয়নাগুলি রাখার চেষ্টাও করেছি, তবে মাঝে মাঝে আমার কিছু পরিবর্তন করতে হবে)

কার্যকর করা লিনিয়ার কমান্ডটি হ'ল:

,,,,'48}}
,
while memory > 0:
    ';"-'"{+'+{=A&=''A
    if memory < 0:
        undefined behavior
    &{{&}
    ,
'"''+~'11='%!@

ব্যাখ্যা: প্রতিটি অঙ্কে কাউন্টার রাখার এবং গুণ করার পরিবর্তে এই প্রোগ্রামটি:

  • একটি "আংশিক যোগফল" পরিবর্তনশীল এবং "মোট যোগফল" পরিবর্তনশীল ( pএবং t) রাখুন
  • প্রতিটি অঙ্কের পড়ার জন্য: এটি আংশিক যোগে যোগ করুন, এবং আংশিক যোগফলকে মোট যোগফলে যোগ করুন।
  • মুদ্রণ করুন (-p-t)%11, যেখানে %সর্বদা ইতিবাচক ফলাফল ফিরে আসে।

3

কে (ওকে) , 29 25 24 23 বাইট

সমাধান:

x,$11!7+/(1+!9)*x:-1_3_

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

উদাহরণ:

x,$11!7+/(1+!9)*x:-1_3_"9780000000002"
"0000000000"
x,$11!7+/(1+!9)*x:-1_3_"9780345391803"
"0345391802"
x,$11!7+/(1+!9)*x:-1_3_"9781292101767"
"1292101768"
x,$11!7+/(1+!9)*x:-1_3_"9780452284234"
"0452284236"

ব্যাখ্যা:

মূল্যায়ন ডান থেকে বামে সঞ্চালিত হয়।

অন্যান্য সমাধানগুলি থেকে নেওয়া দুটি কৌশল:

  • 10 2 8 এর পরিবর্তে 1 2 3 দিয়ে গুণ করুন ...
  • ASCII মানগুলি গুণিত করুন এবং তারপরে ভারসাম্য রক্ষার জন্য যোগফলটিতে 7 যোগ করুন

ভাঙ্গন:

x,$11!7+/(1+!9)*x:-1_3_ / the solution
                     3_ / drop three items from the start
                  -1_   / drop one item from the end
                x:      / save this as variable x
               *        / multiply by
         (    )         / all this together
            !9          / til, !9 => 0 1 2 3 4 5 6 7 8
          1+            / add 1 => 1 2 3 4 5 6 7 8 9
      7+/               / sum (+) over (/), start from 7
   11!                  / mod by 11
  $                     / convert back to a string
x,                      / join with x

নোট:

  • -4 বাইটস মার্টিন এন্ডার্সের " কেবল সহগুণগুলি উল্টে দিন " যাদুবিদ্যাকে ধন্যবাদ জানায় ।
  • -1 বাইট পূর্ণসংখ্যায় রূপান্তর করার প্রয়োজনীয়তা ( যোগফল যোগ করে) অপসারণ করার জন্য টম কার্পেন্টারকে ধন্যবাদ7
  • -1 বাইট 7 এ সঞ্চালক শুরু করুন

3

সি (জিসিসি), 96 95 87 86 85 বাইট

(-1 সিলিংক্যাটকে ধন্যবাদ)

*f(s,r,c,d)char*s,*r;{for(d=13;--d;s+=*++s<48)r=d>8?c=3,s:r,c-=~d**s;*s=58-c%11;s=r;}

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

হিসাবে পরিচিত হতে হবে f(s), যেখানে sএকটি পরিবর্তনযোগ্য অক্ষর অ্যারের প্রথম উপাদানটির নির্দেশক ter ইনপুট অ্যারে সংশোধন করে, ইনপুট অ্যারেটিতে একটি পয়েন্টার দেয়।




2

ECMAScript 6 , 86 67 বাইট

a=>(c=a.substr(3,9))+([...c].map(v=>g+=--i*v,e=i=g=11)?(e-g%e)%e:0)

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


জন্য ধন্যবাদ Arnauld এর মন্তব্য থেকে সুইচ reduceকরতে mapএবং পরিত্রাণ returnশব্দ।


3
পিপিসিজিতে আপনাকে স্বাগতম! উত্তরগুলি অবশ্যই পুরো প্রোগ্রাম বা কলযোগ্য ফাংশন (যদিও তারা নামবিহীন ফাংশন হতে পারে) হতে হবে, কেবল স্নিপেট নয়। আমি বিশ্বাস করি জাভাস্ক্রিপ্টের সবচেয়ে সংক্ষিপ্ত বিকল্পটি সাধারণত একটি নামহীন ল্যাম্বডা।
মার্টিন এন্ডার

@ মার্টিনএন্ড ধন্যবাদ, আমি আমার উত্তর সম্পাদনা করেছি
কোস

3
বোর্ডে স্বাগত জানাই! কিছু টিপ: চলক আরম্ভের সাধারণত অতিরিক্ত প্যারামিটার হিসেবে রেখে দেওয়া যেতে পারে map(), reduce()ইত্যাদি কিছু অতিরিক্ত rewriting সঙ্গে, এটা প্রায়ই পরিত্রাণ পেতে সম্ভব {}এবং return। এছাড়াও, এই বিশেষ ক্ষেত্রে, map()সম্ভবত তুলনায় কম reduce()। ( এখানে একটি 65-বাইট সংস্করণ))
আর্নল্ড

আমি বেশ নিশ্চিত f=যে প্রয়োজন হয় না। এছাড়াও, আপনি cএই জাতীয় কিছুতে স্প্রেডের সূচনা করতে পারেন: a=>{i=10;s=[...c=a.substr(3,9)].reduce((g,v)=>+g+(i--)*v,0)%11;return c+=s?11-s:0}(-4 বাইট)
Asone Tuhid

2

রেটিনা 0.8.2 , 72 51 বাইট

...(.*).
$1¶$1
r`.\G
$&$'
r`.\G
$*
1{11}

¶(1*)
$.1

এটি অনলাইন চেষ্টা করুন! কারণ আমি এখনও রেটিনা 1.0 শিখিনি। ব্যাখ্যা:

...(.*).
$1¶$1

অযাচিত অক্ষর মুছুন এবং উপযুক্ত সংখ্যাগুলির একটি দ্বিতীয় অনুলিপি করুন।

r`.\G
$&$'

প্রতিটি অনন্যের সাথে তার অনুলিপি সহ দ্বিতীয় অনুলিপিটি প্রত্যয়িত করুন। এটি কার্যকরভাবে প্রত্যেকে প্রতিটি অবস্থানকে তার অবস্থান দ্বারা কার্যকরভাবে পুনরাবৃত্তি করে।

r`.\G
$*

দ্বিতীয় অনুলিপিতে অঙ্কগুলি আনারিতে রূপান্তর করুন যাতে তাদের একসাথে যুক্ত হয়।

1{11}

মডুলো ১১. হ্রাস করুন (প্রথম কপিটিতে কেবলমাত্র 9 টি সংখ্যা রয়েছে, সুতরাং এটি কখনই এটি প্রভাবিত করতে পারে না))

¶(1*)
$.1

ফলটিকে দশমিক দশকে ফিরে রূপান্তর করুন এবং আবার নতুন লাইন সরান।


2

এপিএল (ডায়ালগ ইউনিকোড) , 26 24 বাইট

∊⍕¨(⊢,11|⊢+.×⍳∘≢)3↓¯1↓⍎¨

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

Tacit উপসর্গ ফাংশন। স্ট্রিং হিসাবে ইনপুট লাগে।

2 বাইট সংরক্ষণ করেছে @ ধন্যবাদ

কিভাবে?

∊⍕¨(⊢,11|⊢+.×⍳∘≢)3↓¯1↓⍎¨     Main function.
                       ⍎¨     Execute each; turns the string into a vector of digits.
                 3↓¯1        Drop (↓) the last 1) and the first 3 digits.
   (           ≢)             Tally; returns the number of digits in the vector.
             ⍳∘                Then (∘) index (⍳) from 1
            ×                 Multiply the resulting vector [1..9]
         ⊢+.                  Dot product with sum with the original vector;
                              This will multiply both vectors, and sum the resulting vector.
      11|                     Mod 11
     ,                        Concatenate
                             With the original vector
 ⍕¨                           Format each; returns a vector of digits as strings.
                             Flatten to get rid of the spaces.


1

কোটলিন , 83 বাইট

i.drop(3).dropLast(1).let{it+(11-(it.mapIndexed{i,c->(10-i)*(c-'0')}.sum()%11))%11}

শোভিত

i.drop(3).dropLast(1).let {
    it + (11 - (it.mapIndexed { i, c -> (10 - i) * (c - '0') }.sum() % 11)) % 11
}

পরীক্ষা

data class Test(val input: String, val output: String)

fun f(i: String) =

i.drop(3).dropLast(1).let{it+(11-(it.mapIndexed{i,c->(10-i)*(c-'0')}.sum()%11))%11}

val tests = listOf(
        Test("9780000000002", "0000000000"),
        Test("9780201882957", "0201882957"),
        Test("9781420951301", "1420951300"),
        Test("9780452284234", "0452284236"),
        Test("9781292101767", "1292101768"),
        Test("9780345391803", "0345391802")
)

fun main(args: Array<String>) {
    for (c in tests) {
        val answer = f(c.input)
        val good = answer == c.output
        println("$good ${c.input} -> ${c.output} | $answer")
    }
}

Tio

TryItOnline



1

পিএইচপি, 64 বাইট

দুর্ভাগ্যক্রমে, পিএইচপি (-$c)%11তে একই -($c%11); তাই আমি অন্তত বৃহত্তম সমষ্টি সম্ভব পার্থক্য পেতে আছে (55 * 9 = 495 = 45 * 11) পরিবর্তে মাত্র ব্যবহার -$c%11

for($f=11;--$f>1;print$d)$c+=$f*$d=$argn[13-$f];echo(495-$c)%11;

অথবা

for($c=45*$f=11;--$f>1;print$d)$c-=$f*$d=$argn[13-$f];echo$c%11;

পাইপ হিসাবে চালনা করুন-nR বা তাদের অনলাইনে চেষ্টা করুন


0

জাভা 10, 110 বাইট

l->{var s=l+"";int c=0,i=3;for(;i<12;)c+=(13-i)*(s.charAt(i++)-48);return(l-(long)978e10)/10*10+(11-c%11)%11;}

একটি হিসাবে ইনপুট এবং আউটপুট নেয় longপূর্ণসংখ্যা । এটি এখানে অনলাইনে চেষ্টা করুন

অবরুদ্ধ সংস্করণ:

l -> { // lambda taking a long as argument
    var s = l + ""; // convert the input to a String
    int c = 0, // the check digit
    i = 3; // variable for iterating over the digits
    for(; i < 12 ;) // go from the first digit past 978 to the one before the check digit
        c += (13 - i) * (s.charAt(i++) - 48); // calculate the check sum
    return (l - (long) 978e10) // remove the leading 978
           /10 *10 // remove the original check digit
           + (11 - c % 11) % 11; // add the new check digit
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.