Archive for the ‘Programlama’ Category

Alien Numbers

Tuesday, July 8th, 2008

Google code.jam‘i keşfetmem üzerine hemen kolları sıvadım. Code Jam, Google tarafından düzenlenen bir programlama yarışması. Verilen problemleri istediğiniz bir programlama dili kullanarak çözmeye çalışıyorsunuz. Yarışmanın ilk ayağı 16 Temmuz Çarşamba günü başlayacak. Üyelik ücretsiz. Profesyonelinden öğrencisine herkes yarışmaya katılabilir. Birinciye $10.000 ödül verilen yarışmada derece yapmanın Google’da bir iş bulabilmeye yarayacağını düşünüyorum.

Şuan için code.jam’da örnek problemler mevcut. Bu problemler yarışanların code.jam hakkında fikir sahibi olmalarını sağlıyor. Pratikler alanında yer alan ilk problem Alien Numbers. Diğer problemlere göre kolay olan bu probleme bende bir çözüm üretmeyi başarabildim.

Nedir Bu Uzaylı Sayılar?
Pratiklerde yer alan ilk problem yeni bir sayı sistemi yaratmak ile ilgili. Problem sizden verilen karakterlere göre 2 değişik sayı sistemi yaratmanızı ve bu sistemde geçen bir sayıyı, ikinci sayı sisteminde yer alan karşılığını vermenizi istiyor. Diğer problemlere göre kolay olan bu problemi Perl ile yapmayı başardım. Size kısaca algoritmasından bahsedeyim.

Problemde yer alan açıklamaya bakacak olursak şu şekilde. Şuan kullandığımı sayı sistemi 0123456789 rakamlarından oluşmakta. Problem bize diyor ki size verdiğim karakterlerde bir sayı sistemi yarat ve alien sayısını, kaynak dil ile üretilmiş sayı sisteminden, hedef dil ile üretilmiş sayı sistemine tercüme et diyor. Problem programın yapmasını istediği 3 veri sunuyor.

alien_sayisi kaynak_dil hedef_dil

Problemin sayfasında yer alan örneklere bakacak olursak; alien sayısı olarak 9, kaynak dil olarak 0123456789 ve hedef dil olarak “oF8″ karakterleri verilmiş. Öncelikle kaynak dili ele alalım. Kaynak dil şuan kullandığımız sayı sistemidir ve oluşturulabilecek sayılar şu şekilde olmaktadır: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12… Görüdüğünüz gibi 0′ı kullanmadık. Sayma sayıları 1 den başlamaktadır. Hedef dilimizde de böyle olmalı. Verilen alien sayısı 9 bu sayı sisteminin 9. sayısını oluşturmaktadır. İkinci sayı sistemine bakacak olursak bize “oF8″ karakterleri verilmiş. Bu karakterler ile oluşturulacak sayılar şu şekilde olur: F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF… 9 sayısı kaynak dilimizde 9. sırada yer almaktaydı. Demekki 9 sayısının hedef dilimizde ki karşılı, hedef dilimizde 9. sıarada yer alan Foo.

Peki bunu programlama ile nasıl yapacağız?
Bu problemi programa dökmek için gerçek hayattaki gibi düşündüm (farklı çözümler üretenler de olmuş). Kullandığımız sayı sisteminde yer alan sayılar ile sonsuz miktarda sayı üretebiliyoruz. 0 1 2 3 4 5 6 7 8 9 ile saydıktan sonra 10 geliyor. Yani son sayıya geldiğimizde, eğer solunda bir sayı yoksa soluna bir ilk sayma sayımız ekleniyor ve ilk sayımız başa dönüyor. 17 18 19 20 şeklinde saydığımızda ise solda yer alan sayı, sayma sayılarımızın son sayısı olmadığından bir arttırılıyor. Yaptığım programın aynen bunu yapmasını sağladım. Öncelikle tüm sayıları bir array‘a bölüp, daha sonra 1. sayıdan başlayarak artmasını sağladım. Arttır fonksiyonunu inceleyecek olursak:

Teknik nedenlerden dolayı kaynak kod kaldırılmıştır. Lütfen aşağıdaki linkten kaynak kodu indiriniz.

Program üzerinde algoritmayı anlatmaya çalıştım. Programın tam halini:

http://onurs.googlecode.com/files/problema.zip

Adresinden indirebilirsiniz. Problem açıklaması ve girdi dosyası bulunmaktadır.

C ile Düzenli İfadeler

Friday, July 4th, 2008

Bu yazımda C programlama dili ile nasıl Düzenli İfadeler (Regular Expressions) kullanabileceğinizi anlatacağım. Yazı düzenli ifadeler’i bildiğinizi farz alarak hazırlanmıştır.

Öncelikle C dili için düzenli ifadeler kütüphanesini edinmelisiniz. GNU C Library ile gelen regex kütüphanesini kullanacağız. Eğer GNU tabanlı bir işletim sistemi kullanıyorsanız libc6-dev paketini yüklemeniz yeterli olacaktır. MS Windows tabanlı bir işletim sistemi kullanıyorsanız regex kütüphanesinin Windows portunu MinGW‘nin download sayfasından indirebilirsiniz.

(more…)

Perl’in Python ve Ruby karşısındaki üstünlüğü

Thursday, March 27th, 2008

Severen kullandığım Perl programlama dili, günümüzde hala populer olarak kullanılmakta. Hal böyle ki, Python ve Ruby’den de daha populer olarak yoluna devam ediyor. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html linkten ulaşabileceğiniz populerlik sıralamasında Java birinci sırada.

Perl’e başlamak

Saturday, September 1st, 2007

Blogumda Perl ile ilgili hiç bir yazı bulunmamasından yakınırken Perl’e başlamak isteyenler için bir kitap önerisiyle ilk Perl yazımı atayım.

Perl ile günlük hayatımızda yaşamımızı kolaylaştıran uygulamalar yapmanız mümkün. Özellikle biraz kavradıktan sonra Perl ile yazılım geliştirmek çok hoşunuza gidecek ve bundan zevk alacaksınız. Neden Perl diye bir soru sorarsanız, *nix bir sistemde scripler bazen çok önemlidir. Yapmayı istediğiniz bir uygulamayı, bir script yaparak kolay hale getirebilir ve istediğiniz zaman kullanabilirsiniz. Özellikle Perl ile script geliştirmeniz, Perl’in çok esnek olmasından baya kolay olacaktır. Üstelik CPAN gibi kaynaklar ve inanılmaz api desteği ile Perl programlamaya başlamak isteyenlerin veya profesyonel programcıların da tercihi olabilir.

Perl’e başlamak istiyorsanız sizin için hazırlanmış bir Perl kitabı var. Llama Book. Yani tam adını yazarsak Learning Perl. Kitap Perl’in temelini en iyi ve anlaşılır şekilde anlatıyor. Eğer bu kitabı okursanız, Perl’i öğrenebilir ve Bilgisayar Programlama’dan zevk alabilirsiniz. Yeni, `amatör` ve profesyonel programcılara şiddetle tavsiye ederim. Ki Perl’in babası Larry Wall‘da ediyor.

C ve Mysql

Saturday, September 1st, 2007

Daha önce yazdığım ve eski sitemde yayınladığım C ve Mysql kullanımınılmış ve nasıl kullanıldığını satır satır anlatan C ve Mysql denemem tekrar yayınlanmayı hakediyor.

Programı, kaynak kodlarını ve dökümantasyonu: http://onurs.googlecode.com/files/nedir.tar.gz adresinden indirebilirsiniz. C ile Mysql’in nasıl kullanıldığını merak ediyorsanız, başlangıç için iyi bir kaynak olabilir.