January 09

Merhaba,

Bugün yaptığımız Zoom toplantısında, işlev parametrelerinden in/out işlendi. Bunlar ref'in güvensiz olduğu durumlarda hayat kurtarıcı olabiliyor! Lütfen kod içindeki ref yerine out yazıp derleyin ve farkı görün...

Aşağıdaki örneğimiz bir GBS*, yani çöp! Çöp olmayan tek şeyi ise İstiklâl Marşımız; o da 11 mısra halinde kod içinde bitişik yazılı. Güftesi, Mehmet Akif Ersoy tarafından her ne kadar Osmanlıca yazılmış olsa da bu 11 mısra 400 harften oluşuyor ve kodlamada hata yoksa eğer alfabemizin J hariç 28 harfi de tam olarak 11. mısranın "çiĞner" sözcüğü içinde yazılmış oluyor. Bu son harf: Ğ.

Bu kadar gereksiz bilgi yeter. Gerekli olan ise marşımızı oluşturan bu 10 kıtayı ezberlemek ve algoritma yazma gibi ilim ile uğraşmak; maneviyatımızı kaybetmeden!

/* in/out ile
   İstiklâl Marşımız */
import std.algorithm;
import std.range, std.stdio;

auto toplaVeSırala (    in string data,/*
ref'i out'la değişin */ref ulong[dchar] map) {
  foreach(c; stride(data, 1))
  {
    auto n = map.get(c, 0);
    map[c] = ++n;
  }
  dchar[] keys = map.keys.dup;

  return keys.sort;
}

void main() {
  ulong[dchar] map;
  string[] mısralar = [
    "korkmasönmezbuşafaklardayüzenalsancak",
    "sönmedenyurdumunüstündetütenensonocak",
    "obenimmilletiminyıldızıdırparlayacak",
    "obenimdirobenimmilletimindirancak",
    "çatmakurbanolayımçehrenieynazlıhilâl",
    "kahramanırkımabirgülnebuşiddetbucelâl",
    "sanaolmazdökülenkanlarımızsonrahelâl",
    "hakkıdırhakkatapanmilletiministiklâl",
    "benezeldenberidirhüryaşadımhüryaşarım",
    "hangiçılgınbanazincirvuracakmışşaşarım",
    "kükremişselgibiyimbendimiçiğneraşarım"
  ];

  foreach(m; mısralar)
  {
    m.toplaVeSırala(map).writeln(": ", map.length);
    sum(map.values).writeln(" adet harf eklendi!");
  }
  writefln!"Toplam %d mısra işlendi..."
  (mısralar.length);
} /* ÇIKTISI:
abcdefklmnorsuyzöüş: 19
37 adet harf eklendi!
abcdefklmnorstuyzöüş: 20
74 adet harf eklendi!
abcdefiklmnoprstuyzöüış: 23
110 adet harf eklendi!
abcdefiklmnoprstuyzöüış: 23
143 adet harf eklendi!
abcdefhiklmnoprstuyzâçöüış: 26
179 adet harf eklendi!
abcdefghiklmnoprstuyzâçöüış: 27
216 adet harf eklendi!
abcdefghiklmnoprstuyzâçöüış: 27
252 adet harf eklendi!
abcdefghiklmnoprstuyzâçöüış: 27
288 adet harf eklendi!
abcdefghiklmnoprstuyzâçöüış: 27
325 adet harf eklendi!
abcdefghiklmnoprstuvyzâçöüış: 28
363 adet harf eklendi!
abcdefghiklmnoprstuvyzâçöüğış: 29
400 adet harf eklendi!
Toplam 11 mısra işlendi...
*/

GBS: Gereksiz Bilgiler Serisi
Çok zengin bir metin olan İstiklâl Marşı'nın 11 mısrası 400 harften oluşur ve 11. mısradaki "çiğner" sözcüğü ile Türk Alfabesi'nin 28+1* harfi kullanılmış olur.(*aksanlı a: â)