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

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, 'ஆ')]

எழில் மொழி இடைமுகம் – மேம்பாடுகள் / முன்னோட்டம்

 

  1. apr11_ezhil_examplesபடத்தில் 177 எ. கா. நிரல்கள் கொண்ட எழுதி, எழில் நிரல் திருத்தி
    april11_ezl
    எழில் திருத்தி “எழுதி” யின் விவரங்கள் பக்கம்

     

எழில் : முதல் பக்கம் வடிவமைப்பு

முதல் பக்கம் என்றாலே கொசம் சிக்கல். பிள்ளையார் சுழி, தென்னாடுடைய சிவனுக்கும் வணக்கம் எனவும் பல வணங்குத்தல்கள் உள்ளன. ஆனால் தமிழ் மொழிக்கு சிறப்பான ஒரு சின்னத்தை கொண்டு எழில் மொழியில் முதல் பக்கம் அமைக்கப்பட்டது.

small-ezhil-splash-5
படம் 1: எழில் மொழி முதல் பக்கம் – செயலியில் தொடங்குதல்.
எழில் – தமிழ் கணினி மொழி

“தமிழில் நிரல்படுத்தி கணிமை பழகுவோம்!” என்பது புதிய கொள்கை

படம் சில மணி நேரம் முன்னேற வடிவமைக்கப்பட்டது. எந்த தமிழ் எழுத்துருக்கள் என்று சொல்லமுடியுமா உங்களால் ?

நன்றி

-முத்து

 

 

தமிழ் 99 விசை பலகை இடைமுகம் – Tamil99 keyboard interface for Ezhil

கணினியை பார்க்காத சிறுவன் எப்படி உள்ளீடு செய்வான் ? தமிழில் எழில் மொழி ஆர்வலர்கள் பாதிக்குமேல் நிரல் உள்ளீடு செய்வதற்கு தனி தமிழ் விசைப்பலகை இல்லை. இந்த பிரச்சினைகளை தீர்வு செய்ய ஏற்கனவே சில மூன்று பட்டை உள்ளீடு பட்டன்-களை கண்டோம். தற்போது முழு விசை பலகை (keyboard) இடைமுகம் ஒன்றை உருவாக்கி மேம்படுத்தி வருகிறேன்.

ezhil_March20_2017
படம் 1: Tamil 99 keyboard interface for Ezhil editor; தமிழ் 99 விசைப்பலகை இடைமுகம் எழுதியில். 

உங்களுக்கு எதுவும் கருத்துள்ள பின்னூட்டங்கள் இருந்தால் தெரிவிக்கவும்.

நன்றி.

 

எழில் தொகுப்பு – எண் புள்ளி ஒன்பது

எழில்எண்  புள்ளி ஒன்பது இன்று இரண்டு ஆண்டுகள் புள்ளி ஏழு ஏழு வெளியிட்ட பின் வருகிறது. முழு வரலாறு இங்கு.

பைதான் தொகுப்புகள் பெரும் தளத்தில் பெறலாம்: ‘pip install –upgrade ezhil’ என்று கொடுத்தாலே போதும்.

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

-முத்து

 

 

எழுதி – நிரலாக்கம் உள்ளீடு இடைமுகம்

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

இது போன்ற பல கேள்விகள் என்னிடம் கேட்டவர்கள் உண்டு. அதற்க்கு விடை சமீபத்திய எழில் மொழியில் உள்ள ‘எழுதி’ செயலியின் மேம்பாடு  – சொடுக்கும் உதவி பட்டன்கள்.

ezhil_March11_2017
படம் 1: ‘எழுதி’-இல் உள்ள மூன்று பட்டைகளை உள்ள அடுக்கு பட்டன்கள் பல எழில் மொழி குறி சொற்களையும், எழில் மொழி வாக்கியங்களையும் இடைசொருகும் படி அமைக்கப்பட்டன. இது இன்னும் சில மேம்பாடுகள் பின் திரட்டி ஆக்க படும்.

Mac OS X-இல் எழில் இடைமுகம் (GUI) செயலி உருவாக்க நேரிடும் சவால்கள்

3platforms
படம் 1: எழில் மொழி செயலி மூன்று இயங்கு தளங்களில் கிடைக்கும் படி செய்ய திட்டமிட்டோம். ஆனால் மேக் OS X-இல் சற்று தடங்கல்கள் உள்ளன என்று இந்த பதிவில் தெரிவிக்கிறோம்.

சமீப காலமாக packaging எழில் என்பதில் எப்படி github-இல் உள்ள எழில் மொழி நிரல்களை ஒருங்கிணைத்து ஒரு திரட்டியாக செய்து பயனர்கள் தங்கள் கணினிகளில் நிறுவி செயல்படுத்தும் படி செய்யலாம் என்று வேளைகளில் இறங்கி உள்ளேன்.

விண்டோஸ் தளத்தில் 64-bit கணினிகளில் Windows 7, 8, 10, என்பதில் எழில் மொழி செறிவர நிறுவி வேலைசெகிறது என்று நான் பலரிடம் அவரவர்கள் நடத்திய பரிசோதனைகளில் உறுதிபடுத்தி கொண்டேன்.

லினக்ஸ் இயங்கு தளத்தில் எதுவும் ப்ரிச்சனை இருப்பதாக தெரியவில்லை. Ubuntu-விலும்  64-bit கணினியில் சரியாக வேலை செய்கிறது.

அனால் இந்த Mac OS-X இல் மட்டும் எழில் மொழி Github repo-வில் இருந்து console வழி மட்டும் செயல் படுகிறது. எழுதி செயலி window வழி graphical interface GTK-இனை சார்ந்து உள்ளதால் இதற்க்கு Mac OS-X இல் இயக்க சற்று சிக்கல்களாக உள்ளது. காரணம் PyGobject3  Windows மற்றும் Linux தலங்களுக்கு மட்டுமே நிறுவ தயார் நிலையில் உள்ளது. Mac OS-X இக்கு  Gtk-ஐ மூல நிரல்களில் இருந்து மட்டுமே நிறுவும் நிலை உள்ளது என்பதால் இதனை திரட்டி ஆக்குவதும், ‘எழுதி’ செயலியை இயக்குவதும் சற்று கஷ்டமாக / முடியாமல் போனது.

இந்நிலையில் Mac OS-X-இல் எழில் மொழி console இடைமுகம் செயலி நன்றாக வேலை செய்கிறது என்றும் பதிவு செய்கிறேன். வரும் நாட்களில் ஏதேனும் புதிய முன்னேற்றங்கள் இல்லாத பட்சத்தில் எழில் மொழி ‘எழுதி’ இடைமுகம் இந்த தளத்தில் கிடைக்காது – கட்டளை இடைமுகம் மட்டுமே கிடைக்கும்.

உங்களில் எவருக்கும் Mac OS X-இல் GTK அல்லது packaging வல்லமைகளை, பரிந்துரைகள் இருந்தால் பகிரவும்.

-முத்து,

சான் ஓசே, கலிபோர்னியா