March 26, 2023

İyi pazarlar,

Uyuyan forumu arada uyandırmalı 😀

Yine bir pazar şurada, çokuzlular üzerine bir deneme yapmıştım ve sanırım 2 sene geçmiş aradan. Sonlara doğru Ali hocam std.range : indexed'i önermiş, örneklendirmiş ve ben bilmediğimi itiraf etmişim...

Neticede yine kullanmam gerektiğinde unuttuğumu farkettim. Böylece verilerinizi, örneğin sayısal bir tarihi, alfasayısal dönüşüme kolaylıkla çevirebilirsiniz:

import std.range : indexed;
import std.stdio : writefln;

enum s = [ "SIFIR", "BİR", "İKİ", "ÜÇ", "DÖRT", "BEŞ",
           "ALTI", "YEDİ", "SEKİZ", "DOKUZ", "ON",
           "YİRMİ", "", "", "", "", "", "", "", "YÜZ",
           "BİN", //...
];

void main()
{ // https://dlang.org/library/std/range/indexed.html

  // Bugün: 26 MART 2023
  ubyte[] indicies = [
    11, 6,  0,3,  2,20,11,3
  ];

  // Yazıyla: BUGÜN YİRMİ ALTI SIFIR ÜÇ İKİ BİN YİRMİ ÜÇ
  auto t = s.indexed(indicies);
  t.writefln!"BUGÜN %-(%s %)";
}

Çok basit değil mi, üstelik az yer kaplıyor! Yani bugünün tarihi sayısal olarak ulong veri tipine (çünkü t dizisi disk üzerinde sadece 8 bayt yani 219291005730424331 sayısı ile ifade edilir*) alfasayısal karşılığının temsili olarak herhangi bir ortamına örneğin bir JSON şeklinde kayıt edebilirsiniz.

Başka bir gün de şurada sayıları (veya para birimlerini, potansiyeli büyük!) yazıya çeviren bir kod yazmıştık.

(*) Yukarda ürettiğim sayı aslında Unix Time Stamp'e göre dezavantajı var. Çok eskilerden gelen saniye bazına kayıt eden bu yöntem (örneğin bu mesajı göndermemden hemen önceki zaman damgası: 1679829344) daha iyi olabilir.

Hayırlı Ramazanlar....