দাবা বোর্ড

দাবা বোর্ড

লার্নিং অনুশীলনী

ভূমিকা

ধরুন, আপনার 1000 পর্যন্ত সব অ-ঋণাত্মক ইন্টিজার দরকার। এগুলো একটি অ্যারেতে টাইপ করতে হলে সেটা হাস্যকরই হতো।

এর জন্যই আছে range টাইপ:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

রেঞ্জ খুবই কমন: কেবল আপনার টাইপিং বাঁচাতেই নয়, ফাংশনের রিটার্ন টাইপ হিসেবেও।

মনে রাখুন, রেঞ্জ কোনো ভেক্টর নয়। এগুলো আসলে একটি সিকোয়েন্স তৈরির নির্দেশনার সমষ্টি মাত্র ("লেজি" ইভালুয়েশন, বা একটি "ইটারেটর")।

কোনো রেঞ্জকে ভেক্টর হিসেবে দরকার হলে রূপান্তরের জন্য collect() ফাংশনটি ব্যবহার করুন:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

স্টেপ সাইজ নির্দিষ্ট করা যায়, এখানে 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

তাহলে সিনট্যাক্স হলো start:stepsize:stop. ইন্টিজারের উদাহরণে যেমন দেখা যায়, দুই প্রান্তের সীমাই অন্তর্ভুক্ত। স্টেপ সাইজ যদি stop - start-কে নিঃশেষে ভাগ না করে, তাহলে শেষ এলিমেন্টটি stop ছাড়িয়ে যাওয়া এড়াবে।

অক্ষরের রেঞ্জ

রেঞ্জে অ-সংখ্যাসূচক সিকোয়েন্সও ব্যবহার করা যায়। সবচেয়ে সহজ উদাহরণ হলো ASCII অক্ষর:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

Char টাইপ নিয়ে আরও বিস্তারিত আলোচনা আসবে অন্য একটি কনসেপ্টে। আপাতত এগুলোকে একক কোটের ভেতরের একক ক্যারেক্টার হিসেবে ধরুন।

রেঞ্জের জন্য ফাংশন ও অপারেটর

first() এবং last() দিয়ে একটি রেঞ্জের সীমা যাচাই করুন।

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10

ভেক্টর ইনডেক্সিং নিয়ে আরও কিছু

ইন্টিজার রেঞ্জ ও ভেক্টর, দুটোই ভেক্টর ইনডেক্সিংয়ে ব্যবহার করা যায়:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

নির্দেশনা

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

কিন্তু আপনার কল্পনাকে পুরো লাগাম ছেড়ে দেওয়ার আগে, আপনাকে মৌলিক বিষয়গুলো সামলে নিতে হবে। চলুন বোর্ড জেনারেট করে শুরু করি।

দাবার বোর্ডের প্রতিটি ঘর একটি অক্ষর-সংখ্যা জোড়া দিয়ে চিহ্নিত করা হয়। ঘরগুলোর খাড়া কলামগুলো, যাদের ফাইল বলা হয়, A থেকে H পর্যন্ত লেবেল করা থাকে। ঘরগুলোর অনুভূমিক সারিগুলো, যাদের র‍্যাঙ্ক বলা হয়, ১ থেকে ৮ পর্যন্ত সংখ্যায়িত।

1. র‍্যাঙ্ক রেঞ্জ ডিফাইন করুন

rank_range() ফাংশনটি ইমপ্লিমেন্ট করুন। এটি ১ থেকে ৮ পর্যন্ত ইন্টিজারের একটি রেঞ্জ রিটার্ন করবে।

julia> rank_range()
# output omitted

2. ফাইল রেঞ্জ ডিফাইন করুন

file_range() ফাংশনটি ইমপ্লিমেন্ট করুন। এটি বড় হাতের A থেকে বড় হাতের H পর্যন্ত ক্যারেক্টারের একটি রেঞ্জ রিটার্ন করবে।

julia> file_range()
# output omitted

3. র‍্যাঙ্ক রেঞ্জকে র‍্যাঙ্কের ভেক্টরে রূপান্তর করুন

ranks() ফাংশনটি ইমপ্লিমেন্ট করুন। এটি ১ থেকে ৮ পর্যন্ত ইন্টিজারের একটি ভেক্টর রিটার্ন করবে। ভেক্টরটি হাতে লিখবেন না, rank_range() ফাংশন থেকে রিটার্ন করা রেঞ্জ থেকে এটি জেনারেট করুন।

julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]

4. ফাইল রেঞ্জকে ফাইলের ভেক্টরে রূপান্তর করুন

files ফাংশনটি ইমপ্লিমেন্ট করুন। এটি 'A' থেকে 'H' পর্যন্ত ক্যারেক্টারের একটি ভেক্টর রিটার্ন করবে। ভেক্টরটি হাতে লিখবেন না, file_range() ফাংশন থেকে রিটার্ন করা রেঞ্জ থেকে এটি জেনারেট করুন।

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Julia Exercism

দাবা বোর্ড শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Julia ট্র্যাকের 35টি কনসেপ্ট128টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।