ஹானொய் இன் கோபுரம் (Tower of Hanoi)

ஹனோய் கோபுரம் அறிமுக கணினி அறிவியலில் ஒரு சிறந்த பிரச்சனை. (Tower of Hanoi is a classic introductory computer science problem) see: http://en.wikipedia.org /wiki/Tower_of_Hanoi

பிரச்சனை நோக்கம், பின்வரும் நிலைமைகளின் கீழ், அச்சு # 3 மது # 1, முதல் வட்டுகள் அனைத்து நகர்த்த உள்ளது

R1: ஒரு சிறிய வட்டு பெரிய வட்டு மேல் உட்கார முடியாது
R2: நீங்கள் தற்காலிக அச்சு இரண்டு அச்சு ஏதாவது பயன்படுத்தலாம்
R3: நீங்கள் செய்ய முடியும் நகர்வுகள் எண்ணிக்கை இல்லை

Goal of the problem is to move all of disks from peg #1, to peg #3, under the following conditions,

  1. R1: Only a smaller disk can sit on top of the larger disk
  2. R2: You may use any of two pegs as temporary store
  3. R3: There is no limit on number of moves you can make
Tower of Hanoi (Ref: http://en.wikipedia.org/wiki/Tower_of_Hanoi)
Tower of Hanoi
(Ref: http://en.wikipedia.org/wiki/Tower_of_Hanoi)

How can you solve this problem ?

  1.  Let us reduced the size of the problem to 1 disk on the peg #1.
  2. We can make a drawing like [1,0,0].
  3. We can simply move the disk 1 from peg #1 to peg #3, and we have completed the problem!
  4. That was easy. [0,0,1].
  1. For 2 disks how do you solve it?
  2. We initially have [1 2, 0, 0]. we want to get to [0,0,1 2]
  3. By moving smaller disk 1 from peg #1, to peg #2, we have [2, 1, 0].
  4. Now your situation is same as problem with 1-disk on peg #1, and 1-disk on peg #2 which we will ignore temporarily.
  5. Next we can move either of disks from peg #1 or peg #2 to peg #3. However the rule, R1, requires us to move the peg #1 disk as it is the larger disk and it should go at bottom.
  6. Now your configuration is like, [0,1,2]
  7. Clearly the final step is to move disk #1 from peg #2 to peg #3, on top of the existing disk #2. Now your configuration is [0,0,1 2]. Solved!

So what does the general solution look like, for n-disks? Well the problem has a dynamic-programming structure, where solving smaller problems, inductively, leads to solution of the larger problem.

  1. Here, you need to move all n-1 smaller disks from peg #1 to peg #2,  and to do that, you will use peg #3 as temporary.
  2. Once you have achieved this, you have to move disk-n from peg #1 to peg #3.
  3. Now move (1,2, … n-1) disks from peg #2 to peg #3 using the peg #1 as intermediate.

This is a recursive solution and harder to visualize at first reading, but you will eventually get the hang of it.

Move 1,2,3 disks from peg #1 to peg #2, with peg #3 as intermediate. Move disk 4 from peg #1 to peg #4. Then move all disks from peg #2 to peg #3 using peg #1 as intermediate.
Move 1,2,3 disks from peg #1 to peg #2, with peg #3 as intermediate. Move disk 4 from peg #1 to peg #4. Then move all disks from peg #2 to peg #3 using peg #1 as intermediate.

The follow program describes the Ezhil program solution to Tower of Hanoi problem,

# (C) 2013 Ezhil Language Project
# Tower of Hanoi – recursive solution

நிரல்பாகம் ஹோனாய்(வட்டுகள், முதல்அச்சு, இறுதிஅச்சு,வட்டு)

@(வட்டுகள் == 1 ) ஆனால்
பதிப்பி  “வட்டு ” + str(வட்டு) + “ஐ \t  (” + str(முதல்அச்சு) + ”  —> ” +  str(இறுதிஅச்சு)+ “) அச்சிற்கு நகர்த்துக.”
இல்லை

@( [“இ”, “அ”,  “ஆ”]  இல் அச்சு ) ஒவ்வொன்றாக
@( (முதல்அச்சு != அச்சு)  && (இறுதிஅச்சு  != அச்சு) ) ஆனால்
நடு = அச்சு
முடி

முடி

# solve problem for n-1 again between src and temp pegs                      ஹோனாய்(வட்டுகள்-1, முதல்அச்சு,நடு,வட்டுகள்-1)

# move largest disk from src to destination
ஹோனாய்(1, முதல்அச்சு, இறுதிஅச்சு,வட்டுகள்)

# solve problem for n-1 again between different pegs
ஹோனாய்(வட்டுகள்-1, நடு, இறுதிஅச்சு,வட்டுகள்-1)
முடி
முடி

ஹோனாய்(4,”அ”,”ஆ”,0)

Try this program online, at, ezhillang.org Alternative solution by @tshrinivasan can be found towers_of_hanoi.n

Solution is illustrated in Fig. 2, with following output,

வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 3ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (ஆ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (ஆ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 4ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (இ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (ஆ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 3ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.

I hope you had fun!

எழில் மொழிச் சொற்கள்

”எழில்” மொழியில் பயன்படுத்தப்படும் சொற்கள் (Keywords)பற்றிச் சமூக வலைத்தளங்களில் பல கருத்துகளைக் கேட்கிறோம். சிலருக்குச் சில சொற்கள் பிடித்துள்ளன, ஆனால் வேறு சில சொற்கள் பிடிக்கவில்லை, இவற்றை இன்னும் எளிமையாக, எல்லாருக்கும் புரியும்வண்ணம் மாற்றலாமே என்று கருதுகிறார்கள்.

இதுபோன்ற கருத்துகளை ஒரே இடத்தில் தொகுக்கலாம் என்ற எண்ணத்தில் இந்தப் பதிவை எழுதுகிறோம்.

”எழில்” மொழியில் உள்ள சொற்களின் பட்டியல் (உரிய ஆங்கிலச் சொல்லுடன் சேர்த்து) கீழே தரப்பட்டுள்ளது. அதுபற்றிய உங்கள் கருத்துகளை அறிய விழைகிறோம்.

ஒவ்வொரு சொல்லுக்கும் ‘நன்றாக உள்ளது’, ‘நன்றாக இல்லை’, ‘இதை இப்படி மாற்றலாமே’ என்ற மூன்று வாய்ப்புகள் தரப்பட்டுள்ளன. அவற்றுள் ஒன்றைத் தேர்ந்தெடுங்கள். நீங்கள் வேறு நல்ல சொல் என்று நினைப்பவற்றைப் பரிந்துரை செய்யுங்கள். (உங்களிடம் தமிழ் தட்டச்சு வசதி இல்லாவிட்டாலும் பரவாயில்லை, நீங்கள் ஆங்கில எழுத்துகளிலேயே மாற்றுச் சொற்களைப் பரிந்துரைக்கலாம்)

இப்படிச் சேகரிக்கப்படும் மாற்றுச் சொற்களைத் தொகுத்து, பெரும்பான்மை மக்களின் கருத்து, “எழில்” உருவாக்கக் குழுவின் சிந்தனைகள் அடிப்படையில் வேண்டிய மாற்றங்களைத் தீர்மானிப்போம்.

உங்கள் கருத்துகளுக்கும் உதவிக்கும் மிக்க நன்றி. “எழில்” மொழிக்கு இன்னும் எழில் கூட்டுவோம்!

இந்த வாக்கெடுப்பில் பங்கேற்பதற்கான இணைய முகவரி: http://www.surveymonkey.com/s/BPRBRDS

உதாரணம் மூலம் மொழி எழில் கற்கவும் (Learn Ezhil Language by Example)

உதாரணம் மூலம்  மொழி எழில் கற்கவும் (Learn Ezhil Language by Example)
Author: Naga Chokkanathan (என். சொக்கன்)

தமிழில் நிரலாக்கம் கற்றுக்கொள்ள – எழில் (Learn Programming – in Tamil with Ezhil)

 கணினி அறிவியல் தொழில்நுட்பம் முன்னேற்றம் ஒரு தவிர்க்க முடியாத கருவியாக உள்ளது. Computer science is an indispensable tool for technology progress.
தமிழில் நிரலாக்கம் கற்றுக்கொள்ள – எழில். (Learn Programming – in Tamil with Ezhil)
  1. உங்கள் முதல் எழில் நிரல் எழுத #Ezhil Language Tutorials by @nchokkan – “Let us write our first Ezhil program”  மேலும் வாசிக்க  (Read more)
  2. எடுத்துக்காட்டாக மூலம் கற்றுக்கொள்ள (Learn Ezhil by following examples),  மேலும் வாசிக்க  (Read more)

கீழே உங்கள் எண்ணங்கள், மற்றும் கருத்துக்களை பதிவு செய்யுங்கள்! (Please leave your thoughts, and comments below!)