Gerçek Yazılımcılar Belli Olacak - Teknik Yarışma - ihan3t

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
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..
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Ben php yazılımcısıyım zaten bunu değişkene atınca otomatik herşeyi hallediyor :d

Yazılımcı olduğunu iddia ediyorsan soruyu çöz dostum. Php yazılımcısı, python asp yazılımcı java c# diye ayrılmaz. Yazılımcı yazılımcıdır.

Ayrıca kırmızıyla özellikle yazdım, eval gibi bir sey veya değişkene atama kullanılmayacak...
 

CyberNeeG

Uzman üye
4 Ocak 2016
1,155
1
777
Bu aralar compiler&interpreter yazımına dair bir kitap okuyordunuz ordan esinlendiniz herhalde.
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Bu aralar compiler&interpreter yazımına dair bir kitap okuyordunuz ordan esinlendinz herhalde.

Sadece bu aralar değil, daha önce de burada compiler ve programlama dili çalışma prensibi ile ilgili bir anlatım yapmıştım. Uzun zamandır grammar tasarımı compiler interpreter tasarımı ile ilgileniyorum.
Ara vermiştim şimdi bir dil tasarlayacağım, bu sırada öğrendiklerimi makale olarak paylaşacağım.

Bu soru ve cevabındaki işlem sadece basit temel bir giriş seviyesinde.


Bir dilin, compilerın interpreterın nasıl çalıştığını bilmeyen yazılımcı olamaz..
 
Son düzenleme:

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
Merhabalar dostum şöyle bir şey yaptım eksikler ve hata verecek kodlar mutlaka olacaktır üzerinde çok da düşünmedim ama en basit haliyle şöyle bir şey yaptım.

Ubuntu Pastebin

Pardon sonuç eksi çıkınca kod hata veriyordu onu da düzelttim yeni güncel kod bu

Ubuntu Pastebin
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Merhabalar dostum şöyle bir şey yaptım eksikler ve hata verecek kodlar mutlaka olacaktır üzerinde çok da düşünmedim ama en basit haliyle şöyle bir şey yaptım.

Ubuntu Pastebin

O kodların arasında "goto" mu gördüm ben? Yapma lütfen... Kullanmayın goto yu.. Object oriented ın kocaman bir anti patternidir goto.

Ayrıca kod .net core da denediğimde build edilmedi.
hata mesajı : " Program.cs(84, 40): [CS1503] Argument 1: cannot convert from 'char' to 'string'" hata satırı :
Kod:
if (YeniIslem.Contains(op))

Ayrıca boşlukları sildiğinde ne olacak? Sen boşluğa göre split etmişsin. Peki iç içe parantez kullanıldığında?

Biraz daha düzenle dostum ondan sonra kontrol edeyim.
 
Son düzenleme:

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
O kodların arasında "goto" mu gördüm ben? Yapma lütfen... Kullanmayın goto yu.. Object oriented ın kocaman bir anti patternidir goto.

Ayrıca kod .net core da denediğimde build edilmedi.
hata mesajı : " Program.cs(84, 40): [CS1503] Argument 1: cannot convert from 'char' to 'string'" hata satırı :
Kod:
if (YeniIslem.Contains(op))

Ayrıca boşlukları sildiğinde ne olacak? Sen boşluğa göre split etmişsin. Peki iç içe parantez kullanıldığında?

Kod hata vermiyor dostum oradaki derleyicide sorun var demek ki :D Ayrıca kendin diyorsun char to string diye, yani hata veriyorsa da bi zahmet op.ToString() yap onu öyle dene ;) Ayrıca iç içe parantez olursa demişsin de, olursa 3 satır kod daha yazarım ne olacak yani :D Önemli olan şey mantığı. Sen -yapın- dedin ben de yaptım ve zehir gibi de çalışıyor kod. Ek olarak boşluktan split etmedim ben öyle bir kod yok :) Boşluğu replace ederek sildim sorgudan. Goto mevzusuna gelirsek, aklıma gelen ilk çözüm buydu. Eğer gerçekten de kullanacağım bir proje olsaydı ona göre kodlardım zaten ama gerek yok.
 

osm4nl1evl4d1

Kıdemli Üye
15 Mar 2017
4,776
10
T Ü R K
Kod hata vermiyor dostum oradaki derleyicide sorun var demek ki :D Ayrıca kendin diyorsun char to string diye, yani hata veriyorsa da bi zahmet op.ToString() yap onu öyle dene ;) Ayrıca iç içe parantez olursa demişsin de, olursa 3 satır kod daha yazarım ne olacak yani :D Önemli olan şey mantığı. Sen -yapın- dedin ben de yaptım ve zehir gibi de çalışıyor kod. Ek olarak boşluktan split etmedim ben öyle bir kod yok :) Boşluğu replace ederek sildim sorgudan. Goto mevzusuna gelirsek, aklıma gelen ilk çözüm buydu. Eğer gerçekten de kullanacağım bir proje olsaydı ona göre kodlardım zaten ama gerek yok.

Ve nokta :trl
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Kod hata vermiyor dostum oradaki derleyicide sorun var demek ki :D Ayrıca kendin diyorsun char to string diye, yani hata veriyorsa da bi zahmet op.ToString() yap onu öyle dene ;) Ayrıca iç içe parantez olursa demişsin de, olursa 3 satır kod daha yazarım ne olacak yani :D Önemli olan şey mantığı. Sen -yapın- dedin ben de yaptım ve zehir gibi de çalışıyor kod. Ek olarak boşluktan split etmedim ben öyle bir kod yok :) Boşluğu replace ederek sildim sorgudan. Goto mevzusuna gelirsek, aklıma gelen ilk çözüm buydu. Eğer gerçekten de kullanacağım bir proje olsaydı ona göre kodlardım zaten ama gerek yok.


Takır takır çalışan kodun sonuçları :

sadece +1 ekledim : 27 + 3 * (15 - 8 / 2+1) - ( 4 * 5 ) = 37 dedi , yanlış

5+(8*(5+5*(9-9+5)*5)/9) bu ifadede hepten sapıttı..

Amacım seni ezmek değil fakat kaliteli bir yarışma düzenliyorum konuya gelipte ukala konuşursan maalesef yerin dibine sokabilirim ters bir anımda... Şuan neşeli olduğum için düzgünce açıklayacağım.

Float değerlere ve parantezlere dikkat etmelisin. Ayrıca sen token parse etmiyorsun, token oluşturmamışsın yakalamamışsın dahi...

Kodda goto kullanmışsın, büyük bir hata..

char ı stringe çevir diye akıl vermeye çalışarak laf sokmaya çalışmak çok yanlış bir şey. Ben bana her kod atanın kodunu düzenlemeye kalkarsam bu iş bitmez...

Bana çalışan kod atın, matematiksel sytaxa uygun olsun, konuda üstüne basa basa söylediğim gibi parse etmeyi deneyin.

Yoksa bir anlamı kalmaz.

İlgilenenler ve öğrenmek isteyenlere aslında burada bir "interpreter" nasıl yapılır onu anlatmaya öğretmeye çalışıyorum..
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst

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.