দাম্ম অ্যালগরিদম ব্যবহার করে একটি চেক ডিজিট গণনা করুন


17

আছে জনপ্রিয় যেমন Luhn যেমন Check digit টি আলগোরিদিম এবং তারপর আছে ভাল উদাহরণস্বরূপ Damm অ্যালগরিদম বেশী,। লুহনের মতো অ্যালগরিদমগুলির জনপ্রিয়তার পিছনে একমাত্র সম্ভাব্য কারণ হ'ল কোডগুলি তাদের গল্ফড বাস্তবায়ন করে। এর অর্থ হ'ল একটি সম্প্রদায় হিসাবে আমরা আরও ভাল অ্যালগরিদমের গল্ফড বাস্তবায়ন সরবরাহ করে বিশ্ব পরিবর্তন করার ক্ষমতা রাখি।

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

এই অ্যালগরিদম একটি অপারেশন টেবিলের চারদিকে ঘোরে যা অবশ্যই দুর্বলভাবে সম্পূর্ণ অ্যান্টি-সিমেট্রিক অর্ডারের কোসিগ্রুপ হতে হবে। অপারেশন টেবিল যা উইকিপিডিয়া নিবন্ধে পাওয়া যাবে Damm অ্যালগরিদম প্রায় এক যা এই চ্যালেঞ্জ ব্যবহৃত হবে না। সম্পূর্ণতার জন্য আমি নীচে এটি পুনরুত্পাদন করব:

    |   0   1   2   3   4   5   6   7   8   9
----+----------------------------------------
0   |   0   3   1   7   5   9   8   6   4   2
1   |   7   0   9   2   1   5   4   8   6   3
2   |   4   2   0   6   8   7   1   3   5   9
3   |   1   7   5   0   9   8   3   4   2   6
4   |   6   1   2   3   0   4   5   9   7   8
5   |   3   6   7   4   2   0   9   5   8   1
6   |   5   8   6   9   7   2   0   1   3   4
7   |   8   9   4   5   3   6   2   0   1   7
8   |   9   4   3   8   6   1   7   2   0   5
9   |   2   5   8   1   4   3   6   7   9   0

সংক্ষেপে (বিস্তারিত জানার জন্য উইকিপিডিয়া নিবন্ধটি দেখুন ) অ্যালগরিদম নীচে কাজ করে:

  1. আপনি প্রক্রিয়া করার জন্য অঙ্কের তালিকা এবং একটি অন্তর্বর্তীকালীন সংখ্যা যা 0 তে সেট করা আছে তা দিয়ে শুরু করুন।
  2. তালিকার প্রতিটি অঙ্কের জন্য আপনি কলাম সূচক হিসাবে অঙ্কটি এবং সারি সূচক হিসাবে পূর্ববর্তী অন্তর্বর্তী অঙ্কটি ব্যবহার করে একটি নতুন অন্তর্বর্তী সংখ্যা গণনা করুন।
  3. চূড়ান্ত অন্তর্বর্তী সংখ্যা হ'ল চেক ডিজিট। আপনি যদি এমন একটি নম্বর যাচাই করছেন যা ইতিমধ্যে একটি যুক্ত চেক সংখ্যা রয়েছে চূড়ান্ত অন্তর্বর্তী সংখ্যা 0 হয় যদি নম্বরটি বৈধ হয়।

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

কিছু উদাহরণ:

Input       |   Output
------------+-------------
42          |   427
427         |   4270
2 to 2      |   2 to 29
23 42 76-   |   23 42 76-5
-           |   -0

আমি জয়ের দাবিতে পাইট এন্ট্রিগুলি দেখার অপেক্ষায় রয়েছি।
অ্যালকিমিস্ট

উত্তর:


3

পাইথ, 49 টি অক্ষর

+z`u@sm>+0jCdT_6"Ľ򒉲򭉟񶯆𐱩򐞆󰆂򕟐򑽌򵋏󇋽򯴆󚙈𱑂񞑼쵥񪨶"+*TGvH:z"\D"k0

Godশ্বর জানেন কী কী অক্ষর রয়েছে তাই আপনার কম্পিউটারে উপরের প্রোগ্রামটি নির্ভুলভাবে উত্পন্ন করার জন্য পাইথন 3 প্রোগ্রামটি এখানে রয়েছে:

N = 317598642709215486342068713591750983426612304597836742095815869720134894536201794386172052581436790
M = 1000000
l = []
while N:
    l.insert(0, N % M)
    N //= M

n = "".join(chr(c) for c in l)

s = '+z`u@sm>+0jCdT_6"' + n + '"+*TGvH:z"\D"k0'

with open("golf.pyth", "wb") as f:
    f.write(s.encode("utf-8"))

print("Program length is {} characters.".format(len(s)))

ব্যাখ্যা:

+z`                                     Output the input followed by a
                                        stringified...
   u                         :z"\D"k0   Reduction starting with 0 of digits
                                        in input...
    @                  +*TGvH           Indexing ... by 10*prev + int(next).
     sm         "ZALGO"                 Sum all digits created by ... over the
                                        unicode garbage.
       >+0     6                        Prepend 0 if needed to...
          jCdT_                         Codepoint converted to sequence of
                                        digits.

3

সিজেম, 54 টি অক্ষর

q_o{A,s&},{~0"끼´慜䪝膞䝮芜㮜ꡞ靓渏縰蒆㣉倔쵶"2G#bAb+A/T==:T;}/T

সেখানে একটি অনিদ্রিত অক্ষর রয়েছে, তাই আপনি নীচের পারমালিঙ্কটি ব্যবহার করতে চাইতে পারেন।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

অন্তর্বর্তী Tসংখ্যাটি ট্র্যাক করা হচ্ছে , যা সিজেএম শুরুর দিকে 0 হয় to

q_o                                  "Read STDIN, duplicate it and print it.";
   {A,s&},                           "Filter out all non-digit characters.";
          {                     }/   "For each digit character.";
           ~                         "Eval to get the digit itself.";
            0                        "Push a zero.";
             "..."2G#b               "Push that long string and interpret the character
                                      codes as the digits of a base-2^16 number.";
                      Ab+            "Get base-10 digits and prepend the 0.";
                         A/          "Split into rows of 10.";
                           T=        "Select row based on interim digit.";
                             =       "Select column based on current digit.";
                              :T;    "Store in T and discard.";
                                   T "Push the interim digit to be printed.";

3

পাইথন 3, 149 141 138 টি অক্ষর

import re
l=""
for c in"ĽᝢႮ⏿ዿၮ∉᜝Ꮺൢ៫Njẜ᳼╭᛭ᰡඡᆸߡⓞ᠜ȍ῏᪆":l+="%04d"%ord(c)
def D(b):
 a="0"
 for i in re.sub("\D","",b):a=l[int(a+i)]
 return b+a

উদাহরণ:

 Input | Output
-------+--------
    42 | 427
   427 | 4270
2 to 2 | 2 to 29
   123 | 1234
  1234 | 12340
     - | -0

মোট ১১ টি অক্ষর অপসারণ করতে সহায়তা করার জন্য @ মেগাটম এবং @ সিগকে ধন্যবাদ


2
10 * ইনট (ক) + ইনট (আই) ইনট (এ + আই), তাই না?
মেগাটম

ভাল যুক্তি! আপনাকে ধন্যবাদ, এটি 5 অক্ষর সাশ্রয় করে।
মনোপোল

1
একটি একক বিবৃতি অনুসরণ করার জন্য এর মধ্যে একটি নতুন লাইন প্রয়োজন হয় না। (-3)
seequ

2

রুবি, 149 টি অক্ষর

i="0";t="0#{'2uleblnnz0nbpv3kqkaufbjqebm57jdj6ubaba1mc2fyucqff69tbllrcvw393li'.to_i 36}";puts(gets.chomp.each_char{|c|i=(c=~/\d/?t[(i+c).to_i]:i)}+i)

Repl.it পরীক্ষিত


2

জে, 117 বাইট

কেবল মুদ্রণযোগ্য আসকি রয়েছে। (জে এবং ইউনিকোডের সাথে আমার খুব কঠিন সময় ছিল)) সারিগুলির ক্রমন-সূচকগুলি থেকে রূপান্তর সারণি উত্পন্ন।

3 :'y,":(((_4(87)&#:inv\40-~a.i.''(3/3+wGf*Dl:(zaW+Hhw*(1p+;~.,y>m-<MZ)JCs'')A.i.10){~<@,~)/|.0,(#~10>])(1":i.10)i.y'

ব্যবহার:

   damm=.3 :'y,":(((_4(87)&#:inv\40-~a.i.''(3/3+wGf*Dl:(zaW+Hhw*(1p+;~.,y>m-<MZ)JCs'')A.i.10){~<@,~)/|.0,(#~10>])(1":i.10)i.y'

   damm '23 42 76-'
23 42 76-5

   damm ''
0

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


2

হাস্কেল, ১৩১ টি অক্ষর

import Data.Char
f n=n++(show$foldl(\x y->read[('0':(show.ord=<<"౧⚈ક×ዿၮ∉ɏᵕₖ᧔İɕSʢ凞㷽ᰡ衎텴䘗↩倭῏᪆"))!!(x*10+y)])0[read[i]|i<-n,isDigit i])

পরীক্ষা রান:

> mapM_ (putStrLn.f) ["42", "427", "2 to 2", "23 42 76-", "-"]
427
4270
2 to 29
23 42 76-5
-0

0

k, 36 টি অক্ষর

/ declare quasi-group  
M:"H"$'"0317598642709215486342068713591750983426612304597836742095815869720134894536201794386172052581436790"

/ declare function
  f:{x,$0{M y+10*x}/"H"$'x@&x in .Q.n}

/ get length of function
  #$f
36

/ execute function against test input
  .q.show f@'{x!x}("42";"427";"2 to 2";"23 42 76-";,"-")
"42"       | "427"
"427"      | "4270"
"2 to 2"   | "2 to 29"
"23 42 76-"| "23 42 76-5"
,"-"       | "-0"

q, 40 টি অক্ষর (কে সমতুল্য প্রয়োগ)

 f:{x,string 0{M y+10*x}/"H"$'x inter .Q.n}

1
আমি অবশ্যই বলব যে আমি বিধিগুলিতে প্রশ্নবিদ্ধ লুপ-হোলের ব্যবহারের প্রশংসা করি, তবে অবশ্যই আমি অবশ্যই অর্ধ-গোষ্ঠীর ঘোষণার অন্তর্ভুক্তি এবং চরিত্রের গণনায় কোনও ধরণের সাহায্যকারী ক্রিয়াকলাপের ঘোষণাকে কার্যকর করার জন্য বিধিগুলি স্পষ্ট করতে হবে। ।
Fors
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.