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

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

தரவமைப்புகள் – கருத்து கணிப்பு

வணக்கம்,

சில ஆண்டுகளாக தமிழில் data structures என்ற தரவமைப்புகளை முறையாக அணுகவேண்டும் என்று யோசித்து வருகிறேன். இதன் காரணமாக நம் சமூகத்தில் ஒரு கருத்து கணிப்பை உருவாக்கி இருக்கிறேன்.  இதில் அனைவரும் பங்கேற்குமாறு  கேட்டு கொள்கிறேன்.
சுட்டி இங்கு https://goo.gl/forms/ijmbWjFk5lV2L2m92
நன்றி,
முத்து

2016 ஆண்டு நடப்பு அறிக்கை

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

We released important software updates in 2016 and entered the phase of Android application development fully. Our particular software releases and contributions from last year are documented here. As always I cannot be more thankful to everyone that collaborated, reviewed and most importantly contributed code in the pursuit of open-source Tamil computing.

  1. Ezhil Language code was maintained and updated several times last year. Our releases were,

  1. Open-Tamil project had several success too; we published our latest updates and developments in the Tamil Internet Conference at Dindugul, TamilNadu in 2016. Particularly the Open-Tamil was extended to work in Java as well laying foundation for easily developing Android apps.

    • v0.65 on Oct 22nd, 2016

    • v0.6 on Jan 10th, 2016

  1. We released the Kalsee app, a simple talkback Tamil calculator on Google Play Store; this app was also open-sourced at github where the concatenative synthesis technology maybe re-shared

  1. Karunakaran, graduating senior (final-year) from CS Engineering program, at S.K.P. Engineering college Thiruvannamalai, contributed an Android App for learning Ezhil language and using the website. We supported his work with a small scholarship.

  1. We conceived and created the MinMadurai project to bring published public domain works of Project Madurai to Android phones in an offline format. This project is under development with a alpha version software at Play Store.

அன்புடன், முத்து.

வாய்ப்பாடு -multiplication is not scary

வாய்ப்பாடு

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

மாறாக, வாய்ப்பாடு என்பது என்ன ?

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

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

1) உதாரணமாக, பெருக்கல் என்பதின் விடை பெருக்கல் என்றும் அமையும். இதனை ஒரு சமன்பாடு என்றும் எழுதலாம்,

                             அ x ஆ = ஆ x அ

இதனால் நீங்கள் 1 முதல் 15 வாய்ப்பாடு 12 எண்கள் வரை மனப்பாடம் செய்யும் வகை எவரும் கேட்டல் 1 முதல் 12 வாய்ப்படை 15 எண்கள் வரை மட்டுமே நினைவில் கொள்ள வேண்டும்!

2) மேலும், இரண்டில் ஏதேனும் ஒரு எண் 10, 100, 1000 என 10-இன் மூலம் ஆகா இருந்தால் அதன் விடை சுலபமாக மற்ற எண் பின் பூஜியுங்களை சேர்த்தது போல் அமையும்.

                                                123 x 100 = 12,300

3) பெருக்கல் என்ற கணக்கின் விடை என்பதை கூட்டினால் ( modulo 9 ) இந்த பெருக்கலில் உள்ள இரு எண்களையும் modulo 9 கூட்டி மீண்டும் பெருக்கி மீண்டும் modulo 9 செய்த எண் என்பதற்கு சமம். இது ஒரு (necessary but not sufficient) தேவையான ஆனால் தீர்மானிக்கபடாத  தேவை.

                                               123 x 45 = 5535

    இதனை எண்ணிம இலக்கு மூலம் கூடினால்  (digital sum)

                                                6 x 9   = 18, (இடது பக்கத்தில் 123 எண்  1 + 2 + 3 = 6, எனவும், 4 + 5 = 9 எனவும் மாறும்.)

                                                    5 4      = 9  ( வலது புரம் 1 + 8 = 9, இடது புரம் 6 x 9 = 54 எனவும் உள்ளது)

                                                      9       = 9

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

மின்னுவதெல்லாம் பொன் – SICP கணினி இயல் நூல்

main-banner

“யாம் பெற்ற இன்பம் பெறுக வையகம்,” என்று சொன்ன பாரதியின் மொழியில் இன்று கணிமை செய்யலாம், செயலாற்றலாம்; இந்த கணினி இயல் பற்றிய ஒரு மாபெரும் நூல் “Structure and Interpretation of Computer Programs,” சுருக்கி (SICP) என்பது. இதனை ஒரு பக்கமாவது வாசியுங்கள் இங்கே. நீங்கள் பயிலும் பொறியாளரானால் முழுவதையும் கூட ஓராண்டில் பயிலுங்கள்.

இந்த lisp போன்ற ஒரு மொழியை தமிழில் நண்பர் இளங்கோ சேரன்  clj-thamil என்றும் தமிழில் இங்கு உருவாக்கியுள்ளார்.

இந்த நூல் இப்போது சீனம், ஜப்பானியம், மற்றும் ருசிய, ஆங்கிலம் போன்ற மொழிகளில் வாசிப்பிற்கு கிடைக்கிறது : விக்கிபீடியாவில் இங்கு. இந்த புத்தகம் மின்னுவதெல்லாம் பொன் அல்ல என்ற கோட்பாட்டிற்கு ஒரு விதிவிலக்கே!

நன்றி

முத்து

“கௌசல்யா” – பல பைட்டு தமிழ் குறியீடு – Unicode and Tamil multi-byte encoding

ஒன்ருடன் ஒன்ரு சமன்பாடு (ASCII – ஆங்கிலம் போன்று இல்லாதது) பல பைட்டு தமிழ் குறியீடு – Unicode and Tamil multi-byte encoding என்பதை சறியாக புறிந்து கொள்வதை பற்றி தமிழ்நாடு பயனத்தில், SKP கல்லூரி, SRM பல்கலைகழகத்திலும் இந்த வாரம் பேசினேன்.

இந்த நிரல் கீழே

# -*- coding: utf-8 -*-
import tamil
name = u"கௌசல்யா"
L = len(tamil.utf8.get_letters(name))
print(u"name variable has %d letters"%L)
assert L == 4
# ஒன்ருடன் ஒன்ரு சமன்பாடு - பல பைட்டு தமிழ் குறியீடு