- 10 Ara 2015
- 3,577
- 4
Soruyu anlamak için ne bilmem lazım abi
Eşekler Dövüşürken Sıpalar Ezilirmiş... Çekil Kenara Çekil, Uzaktan İzle
Soruyu anlamak için ne bilmem lazım abi
Eşekler Dövüşürken Sıpalar Ezilirmiş... Çekil Kenara Çekil, Uzaktan İzle
Soruyu anlamak için ne bilmem lazım abi
Eşekler Dövüşürken Sıpalar Ezilirmiş... Çekil Kenara Çekil, Uzaktan İzle
Şimdi bize eşek dediğine mi yansam, ona sıpa dediğine mi gülsem anlamadım...
Matematik.. Lexical analysis, tokens, parsers..
Şimdi bize eşek dediğine mi yansam, ona sıpa dediğine mi gülsem anlamadım...
Merhabalar tht üyeleri, sansasyonel bir konu ile birlikteyiz.
Şimdi neden böyle bir konu açıyorum? Daha önce açtığım yarışma konusundan sonra yeni bir yarışma yapmanın vakti geldi. ( eski yarışma konusu : http://www.turkhackteam.org/python/1497935-algoritma-sorusu-ihan3t.html )
Bu konuyu sadece derinlemesine yazılım ile ilgilenen gerçek yazılımcılar çözümleyebilir. O yüzden böyle bir başlık seçtim.
Soruyu ilk okuduğunuzda aslında çok basit gelebilir. Fakat işin içine dalıp yapmaya çalıştığınızda zorluğunu anlayacaksınız.
Arkadaşlar bildiğiniz üzere forumda herkes kendisini "yazılımcı, hacker, programcı, webci, android uzmanı, çok bilgili kişi" şeklinde tanıtıyor. Fakat açılan konulara içeriklere baktığımızda teknik anlamda boş şeyler oluyorlar (hepsi değil tabiki, fakat malesef birçoğu..).
Bu yarışmada, gerçekten ilgilenen / bilgili kişiler kendilerini test ederek pratik yapacaklar, bilmeyenler ise yazılımda önemli bir konuyu öğrenmiş olacaklar. Herkes için faydalı bir yarışma olacak.
Şimdi gelelim sorumuza... Aslında basit olan sorumuz şu şekilde : "vereceğim matematik işlemini, içerdiği expressionları parse ederek yorumlayıp işlem yapan bir program yazın".
Anlamayanlar için şöyle bir örnek vereyim :
"27 + 3 * (15 - 8 / 2) - 4" bu işlemi parse ederek, matematiksel işlem önceliği kurallarına uygun bir şekilde çalıştıran bir program yazın. Yazılan bu program, verilen işlem değiştirildiğinde de düzgün çalışabilmeli, farklı 4 işlem biçimlerini matematiksel işlem önceliğine göre parse edebilmeli.
Önemli : Python da "eval" kullarak veya başka bir dilde buna benzer bir yöntem ile yapılan işlem bu sorunun çözümü değildir. Hazır kütüphane/tool kullanmak yasaktır. Soruyu "parse" ederek çözmeniz gerekmekte.
Forumda "sözde yazılımcı" olduğunu başkalarının gözüne sokan arkadaşları bu güzel konuya davet ederek kendilerini kanıtlama fırsatı sunabilirsiniz.
Sorunun çözümünü anlatan uzunca bir konu yazacağım, sorunun çözümü de zaman alacağı için hafta sonuna kadar katılanlara vakit veriyorum. Pazar akşamı/gecesi çözümü anlatıp sonrasında bu konu üzerine eğitim yapacağım.
Sorunun kabul gören tek bir cevabı vardır.
Katılan herkese şimdiden başarılar..
matematiksel islem mi yapacaz eğer öyle ise vb.net veya c# ile yazabilirim
en kısa cevabı veriyorum
flex ve bison
Çok basit
var l = 25*4-6+7
parser başlı başına bir konu bilgisayar mühendisliğinde ve onu 0dan yapabilecek insan sayısı çok az türkiyede ayrıca swift yazarlarken bile apple hazır tool kullanmıştır (LLVM)
Çok basit
var l = 25*4-6+7
postumu biri silmiş, neden silindiğini anlamadım ama hatayı düzelttim...
https://gist.github.com/anonymous/dbecaea3a4688103f23d0ad685a9cf7a
Zaten bende burada mühendislik prensibi gereği o llvm in flex in background da ne işler yaptığını anlatmaya çalışıyorum.
İşin temelini bilmeden hazır tool kullanmanın yazılımda yeri yok maalesef. Zaten konuda da bunu belirten bu amaçla açılmış bir konu.
Domain specific language tasarlarken şirketler tool kullanabilir ama o adamlar zaten biliyor işin teknik tarafını.
Konuyu okudunuz mu? Çünkü kırmızıyla yazdım belli olsun diye, hazır tool kullanılmayacak, eval vs kullanilmayacak.
Hala sadece boş cevaplar görüyorum şöyle yapılır şu tool var demek yerine yapında gerçekten bilip bilmediğinizi görelim.
Bu konuda amaç gerçekten yazılımla ilgilenenler ve her şeyi lafta olanları ayırabilmek..
Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.