February 19, 2019

Bilmiyorum bir faydasi varmi ama biraz etkinlik gostermek icin paylasiyim dedim.

Alim satim yaptigim ana projemde basarisiz alim satimlari azaltmak icin kullandigim parametreleri bir kenera yazdirip incelemek istemistim. Ortaya soyle kucuk parcaciklar cikti.


//DMD64 D Compiler 2.072.2
import std.stdio;

import std.string;
import std.range;
import std.algorithm;
import std.datetime;
import std.conv;
import std.stdio;

import std.string;
import std.range;
import std.algorithm;
import std.datetime;
import std.conv;

// Fiyat dustugunde alim yapiyorum. Alim yaptigimdaki dusus egrisinin(dususun maksimum noktasi ve min noktasi) degerleri format:
//  Min.Fiyat Saat:Dakika&Max.Fiyat Saat:Dakika
string fiyatAzalisEgrisi = "0.00025517 23:9&0.000276 22:34\n"
"0.0008555 17:19&0.000913 17:10\n"
"6.82513e-05 1:20&7.19788e-05 1:23\n"
"0.000190425 11:47&0.00020245 11:29";

// Benim talep ettigim fiyat.
auto alımFiyatı = "0.00025527\n"
"0.000848\n"
"0.00006825\n"
"0.0001923";

// Alimin gerceklestigi zaman
auto satinAlmaZamani = "00:07\n"
"17:26\n"
"01:32\n"
"04:03";


int dakkaFarkı( string sol, string sag )
{
   return (sol.split(":")[0].to!int - sag.split(":")[0].to!int)*60 + (sol.split(":")[1].to!int - sag.split(":")[1].to!int);
}

string kucukZamanıAl( string sol, string sag )
{
   return  dakkaFarkı(  sol, sag ) > 0 ? sag : sol ;
}


double oranFiyat( string sol, string sag )
{
   return sol.to!double / sag.to!double;
}

void main()
{
   // Fiyat egrisini satirlar ile 2 boyutlu bir diziye ceviriyorum ve bu 2 boyutlu dizinin  her elemanini & karakteri ile ayiriyoum.
   // 2 boyutlu her dizge min ve maks. olmak uzere iki eleman tutuyor
   auto satir = fiyatAzalisEgrisi.split("\n").map!(a=> a.split("&"));

   // Dusus egrisinin zamanini hesapliyorum. Alim yaptigim egride dusus ne kadar hizli olusmus
   writeln(satir.map!( a => dakkaFarkı(a[0].split(" ")[1],a[1].split(" ")[1]) ));

    // Dusus egrisinde maks fiyat ile min fiyati karsilastirdim guzel bir dusus orani bulabilirmiyim diye
   writeln(satir.map!( a => oranFiyat(a[0].split(" ")[0],a[1].split(" ")[0]) ));

   // Benim istedigim fiyatla dusus egrisindeki min. fiyati karsilastirdim.Bir alaka varmi diye
   writeln(zip(satir.map!( a => a[0].split(" ")[0]),alımFiyatı.split("\n") ).map!( a=>oranFiyat(a[0],a[1]) ));

   // Benim istedigim fiyata ne kadar hizli dusmus acaba bir alaka varmi incelemek istedim
   writeln(zip(satir.map!( a => kucukZamanıAl(a[0].split(" ")[1],a[1].split(" ")[1])),
               satinAlmaZamani.split("\n") ).map!( a=>dakkaFarkı(a[0],a[1]) ));

}

Sonucta sadece 1. testimde bir alaka gordum. Gercekte veri setimde ~100'e yakin veri vardi. Eger fiyat 10 dakkadan az bir surede dususuyorsa dusus devam ediyor ve burda alim yapmaktan kacinmak gerekiyor sonucunu cikardim.

Sizlerle biraz D kodu paylasmak istedim.

Erdemdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]