জাভাস্ক্রিপ্ট (ES6), 83 ... 74 73 বাইট
স্ট্রিং হিসাবে ইনপুট নেয়।
n=>1/([a,b,c]=[...n].map(v=>--v+v/3|0))||45242>>(a^b)&(~c&&n<99|b*2==a+c)
ETH প্রডাকশনগুলির জন্য 3 বাইট সংরক্ষণ করা হয়েছে
কিভাবে এটা কাজ করে
আমরা সংখ্যার প্যাডটিকে প্রতিটি সংখ্যায় একটি অফসেট প্রয়োগ করে এটির সারি অনুসারে রূপান্তর করি:
- শীর্ষ সারির জন্য +1
- মাঝারি সারির জন্য 0
- নীচের সারির জন্য -1।
নীচের সমস্ত কোড হেক্সাডেসিমাল উপস্থাপন করা হয়।
7 8 9 8 9 A (+1)
4 5 6 => 4 5 6 (unchanged)
1 2 3 0 1 2 (-1)
আসুন এই নতুন কী কোডগুলির সমস্ত এক্সওআর সমন্বয় বিবেচনা করুন। সংক্ষিপ্ত কীগুলি বন্ধনী সহ হাইলাইট করা হয়।
XOR| 0 1 2 4 5 6 8 9 A
---+------------------------------------
0 | 0 [1] 2 [4] [5] 6 8 9 A
1 | [1] 0 [3] [5] [4] [7] 9 8 B
2 | 2 [3] 0 6 [7] [4] A B 8
4 | [4] [5] 6 0 [1] 2 [C] [D] E
5 | [5] [4] [7] [1] 0 [3] [D] [C] [F]
6 | 6 [7] [4] 2 [3] 0 E [F] [C]
8 | 8 9 A [C] [D] E 0 [1] 2
9 | 9 8 B [D] [C] [F] [1] 0 [3]
A | A B 8 E [F] [C] 2 [3] 0
আমরা দেখতে পাচ্ছি যে দুটি কী সংলগ্ন হয় এবং যদি তাদের কোডগুলি XOR করা নীচের মানগুলির একটির দিকে নিয়ে যায়:
1, 3, 4, 5, 7, C, D, F
এই তালিকাটি নিম্নলিখিত বাইনারি মাস্কগুলিতে প্যাক করা যেতে পারে:
FEDCBA9876543210
----------------
0b1011000010111010 = 0xB0BA = 45242
সুতরাং দুটি কী কোড (ক, খ) দুটি স্বতন্ত্র কীগুলির সাথে মিল রয়েছে কিনা তা নির্ধারণ করার জন্য পরীক্ষা:
45242 >> (a ^ b) & 1
তিনটি কী কোড (ক, খ, সি) এর জন্য আমাদের এই অতিরিক্ত পরীক্ষা দরকার:
b * 2 == a + c
উদাহরণ:
a = 0xA
b = 0x6
c = 0x2
0xB0BA >> (0xA ^ 0x6) & 1 == 0xB0BA >> 0xC & 1 == 1
=> 0xA and 0x6 are contiguous key codes
0x6 * 2 == 0xA + 0x2
=> 0xA, 0x6 and 0x2 are contiguous key codes on the same row, column or diagonal
ডেমো
এই স্নিপেট সত্যবাদী মানগুলির তালিকা প্রকাশ করে।
let f =
n=>1/([a,b,c]=[...n].map(v=>--v+v/3|0))||45242>>(a^b)&(~c&&n<99|b*2==a+c)
console.log([...Array(1000).keys()].filter(n=>n && f(n+'')).join(' '))