গণিত 1170 1270 1096 1059 650 528 570 551 525 498 বাইট
সর্বশেষ সংস্করণটি প্লেট বিশ্লেষণের আগে "ছাঁটাই" করা দরকার না করে 27 বাইট সংরক্ষণ করে। পেনাল্টিমেট সংস্করণটি মূল 24 টি নমুনা পয়েন্টের মধ্যে 10 টি ব্যবহার করে 26 বাইট সংরক্ষণ করেছে।
z=Partition;h@i_:=i~PixelValue~#/.{_,_,_,z_}:>⌈z⌉&/@z[{45,99,27,81,63,81,9,63,45,63,9,45,45,45,63,45,45,27,45,9},2];f@p_:=h/@SortBy[Select[p~ColorReplace~Yellow~ComponentMeasurements~{"Image","Centroid"},100<Last@ImageDimensions@#[[2,1]]<120&],#[[2,2,1]]&][[All,2,1]]/.Thread[IntegerDigits[#,2,10]&/@(z[IntegerDigits[Subscript["ekqeuiv5pa5rsebjlic4i5886qsmvy34z5vu4e7nlg9qqe3g0p8hcioom6qrrkzv4k7c9fdc3shsm1cij7jrluo", "36"]],4]/.{a__Integer}:> FromDigits[{a}])-> Characters@"BD54TARP89Q0723Z6EFGCSWMNVYXHUJKL1"]
122 বাইটগুলি একক, বেস 36 নম্বর হিসাবে বেস 10 সংখ্যাগুলির দীর্ঘ তালিকা প্যাকিংয়ের লেজিওনম্যামাল 978 এর ধারণার মাধ্যমে সংরক্ষণ করা হয়েছে। চূড়ান্ত কোডটি ছেড়ে তিনি আরও 20 বাইট রেখেছিলেন।
528 থেকে 570 বাইটে লাফ দেওয়া অতিরিক্ত কোডের কারণে নিশ্চিত হয়েছিল যে চিঠিগুলি ফেরত পাঠানো হয়েছে যাতে লাইসেন্স প্লেটে থাকা চিঠির ক্রম অনুসারে হয়। প্রতিটি বর্ণের সেন্ট্রয়েডে এক্স-সমন্বিত থাকে যা এক্স সহ অক্ষরের তুলনামূলক অবস্থান প্রকাশ করে reve
অবহেলিত কোড
coordinates=Flatten[Table[{x,y},{y,99,0,-18},{x,9,72,18}],1];
h[img_] :=ArrayReshape[PixelValue[img, #] /. {_, _, _, z_} :> ⌈z⌉ & /@ coordinates, {6, 4}];
plateCrop[img_]:=ColorReplace[ImageTrim[img,{{100,53},{830,160}}],Yellow];
codes={{{15,13,15,13,13,15},"B"},{{15,8,8,8,9,15},"C"},{{15,13,13,13,13,15},"D"},{{15,8,14,8,8,15},"E"},{{15,8,14,8,8,8},"F"},{{15,8,8,11,9,15},"G"},{{6,6,6,6,15,9},"A"},{{9,9,15,15,9,9},"H"},{{8,8,8,8,8,15},"L"},{{9,15,15,15,13,9},"M"},{{15,9,9,9,9,15},"0"},{{9,10,12,14,10,9},"K"},{{9,13,13,11,11,9},"N"},{{8,8,8,8,8,8},"1"},{{1,1,1,1,9,15},"J"},{{15,9,15,14,8,8},"P"},{{15,9,9,9,15,15},"Q"},{{15,9,15,14,10,11},"R"},{{15,8,12,3,1,15},"S"},{{9,15,6,6,6,6},"V"},{{15,6,6,6,6,6},"T"},{{9,15,15,15,15,15},"W"},{{9,9,9,9,9,15},"U"},{{9,14,6,6,14,9},"X"},{{9,14,6,6,6,6},"Y"},{{15,3,2,4,12,15},"Z"},{{15,9,9,9,9,15},"0"},{{8,8,8,8,8,8},"1"},{{15,1,3,6,12,15},"2"},{{15,1,3,1,9,15},"3"},{{2,6,6,15,2,2},"4"},{{7,12,14,1,1,15},"5"},{{15,8,14,9,9,15},"6"},{{15,1,2,2,6,4},"7"},{{15,9,15,9,9,15},"8"},{{15,9,15,1,9,15},"9"}};
decryptRules=Rule@@@codes;
isolateLetters[img_]:=SortBy[Select[ComponentMeasurements[plateCrop[img],{"Image","Centroid"}],ImageDimensions[#[[2,1]]][[2]]>100&],#[[2,2,1]]&][[All,2,1]]
f[plate_]:=FromDigits[#,2]&/@#&/@h/@isolateLetters[plate]/.decryptRules
সংক্ষিপ্ত বিবরণ
মূল ধারণাটি হ'ল ইনপুট চিত্র থেকে পিক্সেলের একটি নিয়মিত নমুনা বোনফাইড চিত্রগুলিতে একই অবস্থান থেকে পিক্সেলের সাথে মেলে কিনা check কোডের বেশিরভাগ অংশে প্রতিটি চরিত্রের বিট স্বাক্ষর থাকে,
চিত্রটি "জে", "পি", "কিউ" এবং "আর" অক্ষর থেকে নমুনাযুক্ত পিক্সেলগুলি দেখায়।
পিক্সেল মানগুলিকে ম্যাট্রিক হিসাবে উপস্থাপন করা যেতে পারে। গা ,়, গা bold় 1
কালো বর্ণের সাথে মিল রয়েছে। 0
সাদা কোষ এর মিলা।
এগুলি JPQ আর এর ডিক্রিপশন প্রতিস্থাপনের নিয়ম are
{1, 1, 1, 1, 9, 15} -> "জে",
{15, 9, 15, 14, 8, 8} -> "পি",
{15, 9, 9, 9, 15, 15 } -> "কিউ",
{15, 9, 15, 14, 10, 11} -> "আর"
"0" এর বিধিটি কেন তা বোঝা উচিত:
{15, 9, 9, 9, 9, 15} -> "0"
এবং এইভাবে "প্রশ্ন" বর্ণটি থেকে পৃথকযোগ্য।
নিম্নলিখিতটি চূড়ান্ত সংস্করণে ব্যবহৃত 10 পয়েন্টগুলি দেখায়। এই পয়েন্টগুলি সমস্ত অক্ষর সনাক্ত করার জন্য যথেষ্ট।
ফাংশন কি
plateCrop[img]
প্লেট থেকে ফ্রেম এবং বাম প্রান্ত অপসারণ, ব্যাকগ্রাউন্ড সাদা করে তোলে। চিত্রের উপাদানগুলি, 100 থেকে 120 পিক্সেলের উচ্চতর সম্ভাব্য অক্ষরগুলি নির্বাচন করে আমি এই ফাংশনটিকে চূড়ান্ত সংস্করণ থেকে সরিয়ে দিতে সক্ষম হয়েছি।
isolateLetters[img]
ক্রপযুক্ত চিত্র থেকে স্বতন্ত্র অক্ষর সরিয়ে দেয়।
ক্রপযুক্ত চিত্র, আউটপুট plateCrop
যেহেতু ইনপুট হিসাবে যায় সেগুলি দেখিয়ে এটি কীভাবে কাজ করে তা আমরা প্রদর্শন করতে পারি isolateLetters
। আউটপুটটি স্বতন্ত্র অক্ষরের একটি তালিকা ।
Coordinates
পিক্সেল রঙ চেক করার জন্য 24 সমানভাবে বিতরণ করা অবস্থান are স্থানাঙ্কগুলি প্রথম চিত্রের সাথে মিলে যায়।
coordinates=Flatten[Table[{x,y},{y,99,0,-18},{x,9,72,18}],1];
{, 9, 99}, {27, 99}, {45, 99}, {63, 99}, {9, 81}, {27, 81}, {45, 81}, {63, 81}, { 9, 63}, {27, 63}, {45, 63}, {63, 63}, {9, 45}, {27, 45}, {45, 45}, {63, 45}, {9, 27, {27, 27}, {45, 27}, {63, 27}, {9, 9}, {27, 9}, {45, 9}, {63, 9}
h
পিক্সেলগুলিকে বাইনারি রূপান্তরিত করে।
h[img_] :=ArrayReshape[PixelValue[img, #] /. {_, _, _, z_} :> ⌈z⌉ & /@ coordinates, {6, 4}];
codes
প্রতিটি চরিত্রের স্বাক্ষর। দশমিক মানগুলি কালো (0) এবং হোয়াইট (1) কোষের জন্য বাইনারি কোডের সংক্ষেপণ। গল্ফযুক্ত সংস্করণে, বেস 36 ব্যবহার করা হয়।
codes={{{15, 9, 9, 9, 9, 15}, "0"}, {{8, 8, 8, 8, 8, 8}, "1"}, {{15, 1, 3,6,12, 15}, "2"}, {{15, 1, 3, 1, 9, 15}, "3"}, {{2, 6, 6, 15, 2, 2}, "4"}, {{7, 12, 14, 1, 1, 15},"5"}, {{15, 8, 14, 9, 9, 15}, "6"}, {{15, 1, 2, 2, 6, 4},"7"}, {{15, 9, 15, 9, 9, 15}, "8"}, {{15, 9, 15, 1, 9, 15},"9"}, {{6, 6, 6, 6, 15, 9}, "A"}, {{15, 13, 15, 13, 13, 15}, "B"}, {{15, 8, 8, 8, 9, 15}, "C"}, {{15, 13, 13, 13, 13, 15}, "D"}, {{15, 8, 14, 8, 8, 15}, "E"}, {{15, 8, 14, 8, 8, 8},"F"}, {{15, 8, 8, 11, 9, 15}, "G"}, {{9, 9, 15, 15, 9, 9}, "H"}, {{1, 1, 1, 1, 9, 15}, "J"}, {{9, 10, 12, 14, 10, 9}, "K"}, {{8, 8, 8, 8, 8, 15}, "L"}, {{9, 15, 15, 15, 13, 9}, "M"}, {{9, 13, 13, 11, 11, 9}, "N"}, {{15, 9, 15, 14, 8, 8}, "P"}, {{15, 9, 9, 9, 15, 15}, "Q"}, {{15, 9, 15, 14, 10, 11}, "R"}, {{15, 8, 12, 3, 1, 15}, "S"}, {{15, 6, 6, 6, 6, 6}, "T"}, {{9, 9, 9, 9, 9, 15}, "U"}, {{9, 15, 6, 6, 6, 6}, "V"}, {{9, 15, 15, 15, 15, 15}, "W"}, {{9, 14, 6, 6, 14, 9}, "X"}, {{9, 14, 6, 6, 6, 6}, "Y"}, {{15, 3, 2, 4, 12, 15}, "Z"}};
(* decryptRules
স্ব স্ব স্ব স্ব চরিত্রের সাথে প্রতিস্থাপনের জন্য *)
decryptRules=Rule@@@codes;
f
একটি ফাংশন যা লাইসেন্স প্লেটের একটি চিত্র নেয় এবং একটি চিঠি দেয়।
f[plate_]:=FromDigits[#,2]&/@#&/@h/@isolate[plateCrop@plate]/.decryptRules;
{"এ", "বি", "সি", "ডি", "ই", "এফ", "জি"}
H "এইচ", "1", "জে", "কে", "এল", "এম", "এন", "0"}
P "পি", "কিউ", "আর", "এস", "টি", "ইউ", "ভি", "ডাব্লু"}
X "এক্স", "Y", "জেড", "0", "1", "2", "3", "4"}
5 "5", "6", "7", "8", "9"
Golfed
কোডটি প্রতিটি অক্ষরের জন্য সমস্ত 24 বিট (সাদা বা কালো) উপস্থাপন করতে একক দশমিক সংখ্যা ব্যবহার করে সংক্ষিপ্ত করা হয়। উদাহরণস্বরূপ, পত্র "জে" নিম্নলিখিত প্রতিস্থাপন নিয়ম ব্যবহার করে: 1118623 -> "J"
।
1118623 এর সাথে সম্পর্কিত
IntegerDigits[1118623 , 2, 24]
{0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1 1
যা হিসাবে repackaged করা যেতে পারে
ArrayReshape[{0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1}, {6, 4}]
{{0, 0, 0, 1}, {0, 0, 0, 1}, {0, 0, 0, 1}, {0, 0, 0, 1}, {1, 0, 0, 1} , {1, 1, 1, 1}
এটি কেবল "জে" এর ম্যাট্রিক্স যা আমরা উপরে দেখলাম।
%//MatrixForm
বর্ণের "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"
তালিকা হিসাবে বর্ণের প্রতিনিধিত্ব করার পরিবর্তে আর এক সঞ্চয় আসে ।
পরিশেষে, দীর্ঘ সংস্করণ থেকে সমস্ত ফাংশন পৃথকভাবে সংজ্ঞায়িত না h
করে ফাংশনে সংহত করা হয়েছিল f
।
h@i_:=ArrayReshape[i~PixelValue~#/.{_,_,_,z_}:>⌈z⌉&/@Join@@Table[{x,y},{y,99,0,-18},{x,9,72,18}],{6,4}];f@p_:=#~FromDigits~2&/@(Join@@@h/@SortBy[Select[p~ImageTrim~{{100,53},{830,160}}~ColorReplace~Yellow~ComponentMeasurements~{"Image","Centroid"},Last@ImageDimensions@#[[2,1]]>100&],#[[2,2,1]]&][[;;,2,1]])/.Thread[IntegerDigits[36^^1c01agxiuxom9ds3c3cskcp0esglxf68g235g1d27jethy2e1lbttwk1xj6yf590oin0ny1r45wc1i6yu68zxnm2jnb8vkkjc5yu06t05l0xnqhw9oi2lwvzd5f6lsvsb4izs1kse3xvx694zwxz007pnj8f6n,8^8]->Characters@"J4A51LUHKNYXVMW732ZTCGSFE60Q98PRDB"]