Archive for C#
Nisan 29, 2012 at 18:51 · Kategori: .NET, C#
Yazdığınız kodda ne yapmak istediğinizi proje dışından biri pek zorluk yaşamadan anlayabiliyorsa doğru yolda ilerliyorsunuz demektir. Bu sebeple hatasız kod yazmak dışında, anlaşılabilir kod yazmak da oldukça önemli bir konu. Sadelik kuşkusuz anlaşılabilirliği arttıran en önemli hususlardan biri. Bu noktada bu yazıda zaman zaman uzun uzun yazdığımız kod bloklarını tek satır anlaşılabilir ifadelerle örneklemeye çalışacağım.
Örnek 1: Mevcut liste elamanları arasına ayraç koyma
var httpStatus = new List<string>{"1xx Informational","2xx Success"
,"3xx Redirection","4xx Client Error","5xx Server Error"};
Yöntem 1
var result = String.Empty;
foreach (var status in httpStatus) {
if (String.IsNullOrEmpty(result))
result = status;
else
result += ", " + status;
}
Yöntem 2
var result = string.Join(", ", httpStatus );
Örnek 2: Bir tipten başka bir tipe çevirme işlemi
List prices = new List<int>{100,200,300,400,500,600,610};
Yöntem 1
var newPrices = new List<double>();
for (int i = 0; i < prices.Count; i++)
{
newPrices.Add(Convert.ToDouble(prices[i]));
}
Yöntem 2
var newPrices = prices.ConvertAll(p => Convert.ToDouble(p));
Yazının Devamı
Nisan 23, 2012 at 15:56 · Kategori: .NET, C#
Bu kez mobile aygıtlarda sıkça kullandığımız T9 heceleme uygulamasının algoritması istenmiş. Özellikle her mesajın a-z arası 26 küçük harf ve boşluk ' ' içerdiği, ayrıca 0′a basılması durumunda ek boşluk bırakılması gerektiği belirtilmiş.

Eğer aynı sırada iki karakter basmak isteniyorsa, ilk karakter basıldıktan sonra kullanıcının beklemesi gerekiyor. Bunu ifade etmek için de yine boşluk karakterinin ' ' basılması gerekiyor. Örn: 2 2 -> AA değerini verirken, 22 -> B değerini veriyor.
Verilen Örnek

Bu uygulamayı yine diğerlerine nazaran daha hakim olduğum C#’da gerçekleştirdim. 100 satırlık bir inputta yaklaşık 70 milisaniye sürüyor. Varsa siz de çözümlerinizi paylaşabilirsiniz.
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
string[] numbers = new string[8] { "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
using (StreamReader sr = new StreamReader(@"c:\C-large-practice.in.txt"))
{
using (StreamWriter sw = new StreamWriter(@"c:\C-large-practice.out.txt"))
{
int n = int.Parse(sr.ReadLine());
for (int i = 1; i < = n; i++)
{
string s = sr.ReadLine();
StringBuilder sb = new StringBuilder();
for (int k = 0; k < s.Length; k++)
{
int l = 0, indx = -1;
while (l < numbers.Length)
{
if (string.IsNullOrWhiteSpace(s[k].ToString()))
{
if ((k-1 >= 0) && string.IsNullOrWhiteSpace(s[k - 1].ToString()))
sb.Append(" " + 0);
else
sb.Append(0);
break;
}
if ((indx = numbers[l].IndexOf(s[k].ToString())) >= 0)
{
for (int m = 0; m < = indx; m++)
sb.Append(l + 2);
break;
}
l++;
}
if (indx != -1 && (k + 1 < s.Length) && (numbers[l].Contains(s[k + 1].ToString())))
sb.Append(" ");
}
sw.WriteLine("Case #{0}: {1}", i, sb.ToString());
sb.Clear();
}
}
}
stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds);
INPUT ve OUTPUT dosyalarını buradan indirebilirsiniz.
Nisan 23, 2012 at 11:46 · Kategori: .NET, C#
Yaklaşık 5 gün sonra Round 1A 2012 Google Code Jam yarışması başlıyor. Bu kez vakit bulabilirsem katılmayı düşünüyorum. Daha önceki yarışmalarda sorulmuş soruları inceleyerek en azından pratik yapmak istedim. Geçen yıl Google Code Jam Africa’da sorulmuş olan sorulardan birini C#’da çözerek işe başladım.
Verilen Örnek

Yukarıdaki input bize bir dosyada veriliyor ve sağdaki output isteniyor. Basit bir reverse işlemi ama bu yarışma da çözüm kadar performasında önemli olduğunu gözardı etmemek lazım. Örneğin, geniş set bir input için 4 dakikayı aşan çözümler sonuç olarak doğru output’u versede, doğru kabul edilmiyor. Benim c# çözümüm aşağıdaki gibi oldu. 100 satırlık bir input için yaklaşık 4 milisaniye sürüyor.
Muhtemelen makine diline daha yakın diller performans açısından daha olumlu sonuç verecektir. Denemedim ama vakit bulursam en azından c’de deneyeceğim. Varsa siz de çözümlerinizi paylaşabilirsiniz.
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
using (StreamReader sr = new StreamReader(@"c:\B-large-practice.in.txt"))
{
using (StreamWriter sw = new StreamWriter(@"c:\B-large-practice.out.txt"))
{
int n = int.Parse(sr.ReadLine());
for (int i = 1; i < n; i++)
{
string[] str = sr.ReadLine().Split(' ');
StringBuilder sb = new StringBuilder();
for (int j = str.Length - 1; j >= 0; j--)
{
sb.Append(str[j] + " ");
}
sw.WriteLine("Case #{0}: {1}", i, sb.ToString());
}
}
}
stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds);
INPUT ve OUTPUT dosyalarını buradan indirebilirsiniz.
Nisan 15, 2012 at 17:15 · Kategori: .NET, C#, JAVA, JavaScript
Javascript’de === , !== operatörleri katı karşılaştırma operatörleri ( strict comparison operators ) olarak bilinirler. == ve != ile tip bağımsız karşılaştırmalar yapabilirken, bu operatörler karşılaştırma yaparken tipleri gözardı etmez.
Aşağıdaki örnek üzerinden bunlar arasındaki farkı daha iyi anlayabileceksiniz.

C#’da ya da JAVA’da bu tip operatörler bulunmamakla birlikte, eğer olsaydı herhalde şunun gibi birşey olurdu.
bool TripleEqual(object obj1, object obj2)
{
return obj1.GetType() == obj2.GetType() && obj1.Equals(obj2);
}
Aralık 18, 2011 at 12:04 · Kategori: C#
Nullable tipler bir değere sahip olabileceği gibi, undefined durumunda da olabilir. ?? operatoru null kontrolü yapmamızı sağlayarak nullable bir tipin değerini non-nullable bir tipe atamamızı kolaylaştırır. Ayrıca non-nullable tiplerin önüne ? konularak da bu tiplerin, nullable tipler gibi davranmasını sağlayabiliyoruz.
DateTime myDateTime = null; //nullable tip olmadığı için derleme zamanında hata verir.
Kullanımına basit bir örnek
DateTime? myDateTime = null; //sorunsuz çalışır
DateTime? yourDateTime = DateTime.Now;
DateTime dateTime = myDateTime ?? yourDateTime ?? DateTime.Now; // myDateTime null ise yourDateTime'ın değerini ata, o da null ise DateTime.Now'ın değerini ata
Önceki Yazılarım