அல்கோரிதம் – அடுக்குகளை தலைகீழ் படுத்துவது எப்படி ?

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.

இந்த வாரம் அமெரிக்காவில் “long weekend” அதாவது மூன்று-நாள் வார விடுமுறை – காரணம் மே மதம் நான்காம் திங்கள் “Memorial day” என்கிற “அமெரிக்க போர்வீரர் நினைவு தினம்”. இதனை ஒட்டி சராசரி குடும்பங்கள் நாடெங்கும் உல்லாச பயணம், சுற்றுலா என்று செல்வது அமெரிக்க பண்பாடு. இந்த ஆண்டு எங்கள் வீட்டில் விருந்தினரை வரவேற்கிறோம் – பயணம் என்பது இந்த ஆண்டு எங்கள் விருந்திரனுக்கு மட்டுமே! சரி அப்போது ஒரு புதிய தரவமைப்பு பற்றி ஒரு blog post போடுவோம் என்று எழுத ஆரம்பித்தது இங்கே.

அடுக்கு (Stack) என்பது ஒரு மிக அடிப்படை கணினி நிரலாக்க கோட்பாடு. ஒரு அடுக்கு தரவமைப்பில் செய்யக்கூடிய நடவடிக்கைகள் ஆனது : மேல் நுழை (push), மேல் நீக்கு (pop) என்பது.

ஒரு அடுக்கை இப்படி (கீழ் கண்டபடி) உருவாக்கலாம்:

எ = அடுக்கு()
மேல்_நுழை( எ, "அ" )
மேல்_நுழை( எ, "ஆ" )

இது கணினியில் ஒரு அடுக்கு போலவே உருவெடுக்கும்,

    
   --> [ ஆ ]
       [ அ ]
      --------
அடுக்கு "எ" என்பதில் இரண்டு உருப்படிகள் உள்ளது; 
இதில் "மேல்" உருப்படி "ஆ" என்ற மதிப்பாகும்.

மேலும் இந்த அடுக்கில் மற்ற உயிரெழுத்துக்களை முழுதாக சேர்க்கலாம்:

மேல்_நுழை( எ, "இ" )
மேல்_நுழை( எ, "ஈ" )
மேல்_நுழை( எ, "உ")
மேல்_நுழை( எ, "ஊ")
மேல்_நுழை( எ, "எ")
மேல்_நுழை( எ, "ஏ")
மேல்_நுழை( எ, "ஐ")
மேல்_நுழை( எ, "ஒ")
மேல்_நுழை( எ, "ஓ")
மேல்_நுழை( எ, "ஔ")

கணினியில் இதன் தோற்றம் இப்படி இருக்கும்,

   --> [ ஔ ]
       [ ஓ ]
       [ ஒ ]
       [ ஐ ]
       [ ஏ ]
       [ எ ]
       [ ஊ ]
       [ உ ]
       [ ஈ ]
       [ இ ]
       [ ஆ ]
       [ அ ]
அடுக்கு "எ" என்பதில் பன்னிரண்டு உருப்படிகள் உள்ளது; 
இதில் "மேல்" உருப்படி "ஔ" என்ற மதிப்பாகும்.

நம்ம இங்கே ஆயுத எழுத்து “ஃ” என்பதை சேர்க்கவில்லை; உங்களுக்கு வேண்டுமானால் நீங்கள் சேர்த்து கொள்ளலாம்.

அடுக்கின் வரிசை மாற்றுவது எப்படி ?

இப்போது அடுக்கு “எ” இதன் வரிசை மாற்றுவது எப்படி ? ஒரு குவிப்பில் இருந்து “மேல் எடு” என்று செய்தால் என்ன விளைவு என்று முதல் படியாக பார்க்கலாம் – இதன் விளைவு மேல் உள்ள உருப்படியை அழிக்கும்.

மேல்_எடு( எ )
# தற்போது குவிப்பு 'எ' வில் 11 உருப்படிகள் மட்டும் இருக்கும்.
# ஏற்கெனவே உள்ள மேல் உருப்படி 'ஓ' அழிக்கப்பட்டது.
# புதிய மேல் உருப்படி 'ஓ' என்று ஆனது.

இப்போது இந்த அடுக்கின் நிலை,

 -->   [ ஓ ]
       [ ஒ ]
       [ ஐ ]
       [ ஏ ]
       [ எ ]
       [ ஊ ]
       [ உ ]
       [ ஈ ]
       [ இ ]
       [ ஆ ]
       [ அ ]
அடுக்கு : எ 

இப்போது அழித்த மேல் உருப்படியை புதிய அடுக்கு ‘ஏ’ வில் மேல் நுழைத்தால் – அதையே ‘எ’ என்ற அடுக்கில் உருப்படிகள் உள்ளவரை அதில் மேல் எடுத்து, ‘ஏ’ வில் மேல் நுழைத்துக்கொண்டே இருந்தால் என்ன ஆகும் ?
இதனை நிரல் படுத்தி பார்க்கலாம்.

ஏ  = அடுக்கு()
மேல்_நுழை( ஏ, "ஔ")
@( நீளம்( எ ) > 0 ) வரை 
    மதிப்பு = மேல்_எடு( எ )
    மேல்_நுழை( ஏ, மதிப்பு )    
முடி

தற்போது அடுக்கு ‘எ’-வின் நிலை காலியானது:

 -->[ ]
அடுக்கு : எ 

ஆனால் அடுக்கு ‘ஏ’-வின் நிலையோ – வரிசை மாற்றப்பட்டது!

-->[ அ ]
   [ ஆ ]
   [ இ ]
   [ ஈ ]
   [ உ ]
   [ ஊ ]
   [ எ ]
   [ ஏ ]
   [ ஐ ]
   [ ஒ ]
   [ ஓ ]
   [ ஔ ]
அடுக்கு : ஏ 

இந்த நிரல் துண்டு Python மொழியில் இப்படி எழுதலாம்,

# (C) 2017 Ezhil Language Foundation
# This code is shared under public domain
# Ref: https://ezhillang.wordpress.com
import tamil
import pprint

class Stack:
    def __init__(self):
        self.store = list()

    def top(self):
        return self.store(-1)

    def __len__(self):
        return self.store.__len__()

    def push(self,val):
        self.store.insert(-1,val)

    def pop(self):
        val = self.store.pop()
        return val

    def display(self):
        pprint.pprint(list(zip(range(self.__len__()-1,0,-1),self.store)))
        
a = Stack()
for letter in tamil.utf8.uyir_letters:
    a.push(letter)
a.display()

rev_a = Stack()

while len(a) > 0:
    val = a.pop()
    rev_a.push(val)

print("Original stack => ")
a.display()
print("Reversed stack => ")
rev_a.display()

இதன் வெளியீடோ கீழே உள்ளபடி:

[(11, 'ஆ'),
 (10, 'இ'),
 (9, 'ஈ'),
 (8, 'உ'),
 (7, 'ஊ'),
 (6, 'எ'),
 (5, 'ஏ'),
 (4, 'ஐ'),
 (3, 'ஒ'),
 (2, 'ஓ'),
 (1, 'ஔ')]
Original stack => 
[]
Reversed stack => 
[(11, 'ஔ'),
 (10, 'ஓ'),
 (9, 'ஒ'),
 (8, 'ஐ'),
 (7, 'ஏ'),
 (6, 'எ'),
 (5, 'ஊ'),
 (4, 'உ'),
 (3, 'ஈ'),
 (2, 'இ'),
 (1, 'ஆ')]

மே 21 – எழில் மொழி பரிசோதனை வெளியீடு

வணக்கம்,
1. எழில் மொழி பரிசோதனை வெளியீடு மே மாதம் 21-ஆம் நாள்  வெளியீடு செய்யப்பட்டது; இந்த முறை சென்ற மாதம் செய்த மேம்பாடுகள் அனைத்தும் ஒருங்கிணைந்து Windows 64-bit தளத்தில் இயங்கும் வகை செய்யப்பட்டது.
   கிடைக்கும் மேம்பாடுகள் :
   (அ) license உரிமம் தெரியும் வகை செய்யப்பட்டது.
   (ஆ) அமைப்புகள் (settings) சேமிக்கும் வகை வசதிகள்
   (இ) சென்ற பரிசோதனை வெளியீதில் பிழை திருத்தங்கள் 
   (ஈ) எழில் இயக்கியில் பிழை செய்திகள் தமிழாக்கம் செய்தல் 
2. இதனை  http://ezhillang.org/download.html இங்கு பெற்று நீங்கள் ஒரு சிறுவர் சிறுமிக்கோ அல்லது ஒரு பள்ளிக்கூடத்தில் எழில் மொழியை பற்றி பேசலாம், அல்லது உங்கள் சுய பயன்பாட்டிற்கும் நீங்கள் பெறலாம்.
3. பிழைகள் இருந்தால் மறுமொழி கூறவும்.
நன்றி,
-முத்து

ஆய்வு கட்டுரைகள் – தமிழ் இணைய மாநாடு

இந்த ஆண்டு தமிழ் இணைய மாநாடு டொரோண்டோ நகரில் நடைபெறவுள்ளது. இதனை ஒட்டி எழில் மொழி அறக்கட்டளை திட்டத்தின் கீழ் இரண்டு கட்டுரைகள் எழுதி ஒப்புதலுக்காக சமர்பித்துள்ளோம்.

இதில் எவையேனும் அல்லது இரண்டும் தேர்ந்தெடுக்கப்பட்டால் மாநாட்டில் பேச வசதியாக இருக்கும்.

கட்டுரை தலைப்புகள்,

  1. “எழில் – பொது பயன்பாட்டிற்கும், வெளியீடு நோக்கிய சவால்களும்”
  2. “Tamil Open-Source Landscape – Opportunities and Challenges”

பொறுத்திருந்து பார்ப்போம். கட்டுரையில் பங்களித்தவர்கள் அனைவருக்கும் நன்றி.

 

 

 

காண்டாமிருகம் எங்கே ?

விக்கிபீடியா – வெற்றி நடை!

தமிழ் கணிமை எப்போதுமே வளர்ந்து கொண்டே போகுமா ? இந்த வாரம் விக்கிப்பீடியா தமிழ் திட்டத்தில் 1 இலட்சம் கட்டுரைகளை எட்டியது. விக்கிபீடியா பங்களிப்பாளர்களுக்கும் தனி-தமிழ் (நா லேதண்டி) ஆர்வலர்களுக்கும்  வாழ்த்துக்கள்!

TOSS

ஒதுக்கப்பட்ட கோணம்

தமிழ் திறமூல திட்டங்கள் என்பது அக்ஷயப்பாத்திரம் கிடையாது; எங்களது நிலை பற்றி எனது ( opinionated ) கோணம்.

ஒரு பரிபால அமெரிக்க ராப் கலைஞர் ஜே.சி “Heaven” என்ற பாடலில்  கேட்கிறான்,

“Question religion, question it all
Question existence until them questions are solved”

இதற்கும் சாதாரணமாக தமிழ் கணிமை பத்தி எழுதும் இந்த வலைப்பூவில் என்ன சம்பந்தம் ? அதில் காண்டாமிருகம் எங்கே என்பதற்கும் தலைக்கும் காலுக்கும் முடிச்சு போடுறது என்ன ? நீங்களே சொல்லுங்கள்.