Kombinasyon Hesaplatma

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    palin
    palin's avatar
    Kayıt Tarihi: 09/Temmuz/2010
    Erkek

    Merhabalar,

     

    Elimde içinden harfler ve boşluklar çıkarılmış bazı zaman aralıkları var, örneğin 2 gün 3 saat 4 dakika 56 saniye 23456 olarak yazılı. Fakat bu 23 saat 45 dakika 6 saniye de olabilir, 2 saat 34 dakika 56 saniye de. Kafamda bir türlü bütün kombinasyonları hesaplatabileceğim bir kod oturtamadım, bu konuda yardımcı olabilecek olanınız var mıdır acaba?

     

    Şimdiden teşekkürler.


  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek

    hocam veriyi koy inceleyelim. min karakter, max karakter sayısı, karakterlerin aldığı değerler vs. 

    Bu yazdıklarınla nasıl bir jenerik kod yazılmasını bekliyorsun?


    “The Fourteenth Book is entitled, "What can a Thoughtful Man Hope for Mankind on Earth, Given the Experience of the Past Million Years?" It doesn't take long to read The Fourteenth Book. It consists of one word and a period. This is it: "Nothing.” ― Kurt Vonnegut, Cat's Cradle
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    palin
    palin's avatar
    Kayıt Tarihi: 09/Temmuz/2010
    Erkek
    whopper bunu yazdı

    hocam veriyi koy inceleyelim. min karakter, max karakter sayısı, karakterlerin aldığı değerler vs. 

    Bu yazdıklarınla nasıl bir jenerik kod yazılmasını bekliyorsun?

    Hocam şöyle, veride yıl, gün, saat, dakika, saniye olarak rakamlar hep birleşik. Her hangi bir karakter sınırlaması yok, o yüzden yıl kısmı epey uzayabiliyor.

    Örneklerle açıklamaya çalışayım. Kafamdan yaptığım işlemi koda nasıl dökerim onu çözemedim henüz.

    Verimiz 3211250183252 olsun diyelim.
    3211 yıl 250 gün 18 saat 32 dakika 52 saniye gayet uyumlu oluyor, mantıklı olarak bir şekilde bölersek. Fakat bunun diğer kombinasyonları da lazım bana, mesela saati çıkarıp veriyi
    3211250 yıl 18 gün 32 dakika 52 saniye
    şeklinde de yazabiliriz. Bana gereken şey saniye, dakika, saat ve gün limitlerini aşmayacak şekilde bunları bölmesi. mesela 61 saniye olamaz, veya 25 saat olamaz gibi.


  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    palin
    palin's avatar
    Kayıt Tarihi: 09/Temmuz/2010
    Erkek

    Bir up olsun.


  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Yazilimci
    Yazilimci's avatar
    Kayıt Tarihi: 01/Şubat/2014
    Erkek
    palin bunu yazdı
    whopper bunu yazdı

    hocam veriyi koy inceleyelim. min karakter, max karakter sayısı, karakterlerin aldığı değerler vs. 

    Bu yazdıklarınla nasıl bir jenerik kod yazılmasını bekliyorsun?

    Hocam şöyle, veride yıl, gün, saat, dakika, saniye olarak rakamlar hep birleşik. Her hangi bir karakter sınırlaması yok, o yüzden yıl kısmı epey uzayabiliyor.

    Örneklerle açıklamaya çalışayım. Kafamdan yaptığım işlemi koda nasıl dökerim onu çözemedim henüz.

    Verimiz 3211250183252 olsun diyelim.
    3211 yıl 250 gün 18 saat 32 dakika 52 saniye gayet uyumlu oluyor, mantıklı olarak bir şekilde bölersek. Fakat bunun diğer kombinasyonları da lazım bana, mesela saati çıkarıp veriyi
    3211250 yıl 18 gün 32 dakika 52 saniye
    şeklinde de yazabiliriz. Bana gereken şey saniye, dakika, saat ve gün limitlerini aşmayacak şekilde bunları bölmesi. mesela 61 saniye olamaz, veya 25 saat olamaz gibi.

    Hocam veriyi düzenleme şansın varsa olabilecek maksimum sınırlara göre karakter sayısı verip çözebilirsin.

    Yıl: 4 karakter

    Gün: 3 karakter

    Saat, Dakika ve Saniye: 2 karakter

    2019003022305 örneğinden gidersek ilk 4 karakter yıl, sonraki 3 karakter gün, sonraki 2 karakter saat... şeklinde alabilirsin. Bu çok daha mantıklı olur.

    Şayet veriyi düzenleyemiyorsan; 

    Bu işin içinden çıkman imkansız gibi.

    Karakter sayısına göre if else yazarak çözebilirsin sanırım. Yıl her halükarda 4 karakter (en azından günümüz ve uzak gelecek için). Gün, saat, dakika ve saniye en az 1 karakter olmalı (Saniye 00 ise 0 mı geliyor yoksa hiç gelmiyor mu bu önemli). Gelen veri minimum 8 karakter olmalı. Maksimum karakter sayisi ise 13. If veya switch-case ile 8 den 13 e kadar kontrol edebilirsin. Karakter sayısı 8 ve 13 için şöyle bir kod yazabilirsin. Aradaki sayılar için ise kontrolü son karakter yani saniyeden başlayarak yapman lazım. Son iki karakteri kontrol edeceksin. 59 dan büyük ise saniye 1 karakterdir diyeceksin. 59 dan küçük ise sondan 2 karakter daha alıp kontrol ede ede gidebilirsin. Ama yinede takılma ihtimalin yüksek. Yani tüm kontroller hem saniye hem dakika hem saat olabilir. Dediğim gibi en güzeli veriyi düzenlemek. Gelen veri her sonuca açık çünkü

    int karakterSayisi=gelenVeri.Count();

    string yil;
    string gun;
    string saat;
    string dakika;
    string saniye;

    if(karakterSayisi == 8)
    {
    yil=gelenVeri.SubString(0, 4);
    gun=gelenVeri.SubString(4, 1);
    saat =gelenVeri.SubString(5, 1);
    dakika =gelenVeri.SubString(6, 1);
    saniye =gelenVeri.SubString(7, 1);
    }

    else if (karakterSayisi==13)

    {

    yil=gelenVeri.SubString(0, 4);
    gun=gelenVeri.SubString(4, 3);
    saat =gelenVeri.SubString(7, 2);
    dakika =gelenVeri.SubString(9, 2);
    saniye =gelenVeri.SubString(11, 2);

    }

     

     

     

    Yazilimci tarafından 20/Tem/19 14:54 tarihinde düzenlenmiştir

    Titanyumun gücü adına!!!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    palin
    palin's avatar
    Kayıt Tarihi: 09/Temmuz/2010
    Erkek
    Yazilimci bunu yazdı
    palin bunu yazdı
    whopper bunu yazdı

    hocam veriyi koy inceleyelim. min karakter, max karakter sayısı, karakterlerin aldığı değerler vs. 

    Bu yazdıklarınla nasıl bir jenerik kod yazılmasını bekliyorsun?

    Hocam şöyle, veride yıl, gün, saat, dakika, saniye olarak rakamlar hep birleşik. Her hangi bir karakter sınırlaması yok, o yüzden yıl kısmı epey uzayabiliyor.

    Örneklerle açıklamaya çalışayım. Kafamdan yaptığım işlemi koda nasıl dökerim onu çözemedim henüz.

    Verimiz 3211250183252 olsun diyelim.
    3211 yıl 250 gün 18 saat 32 dakika 52 saniye gayet uyumlu oluyor, mantıklı olarak bir şekilde bölersek. Fakat bunun diğer kombinasyonları da lazım bana, mesela saati çıkarıp veriyi
    3211250 yıl 18 gün 32 dakika 52 saniye
    şeklinde de yazabiliriz. Bana gereken şey saniye, dakika, saat ve gün limitlerini aşmayacak şekilde bunları bölmesi. mesela 61 saniye olamaz, veya 25 saat olamaz gibi.

    Hocam veriyi düzenleme şansın varsa olabilecek maksimum sınırlara göre karakter sayısı verip çözebilirsin.

    Yıl: 4 karakter

    Gün: 3 karakter

    Saat, Dakika ve Saniye: 2 karakter

    2019003022305 örneğinden gidersek ilk 4 karakter yıl, sonraki 3 karakter gün, sonraki 2 karakter saat... şeklinde alabilirsin. Bu çok daha mantıklı olur.

    Şayet veriyi düzenleyemiyorsan; 

    Bu işin içinden çıkman imkansız gibi.

    Karakter sayısına göre if else yazarak çözebilirsin sanırım. Yıl her halükarda 4 karakter (en azından günümüz ve uzak gelecek için). Gün, saat, dakika ve saniye en az 1 karakter olmalı (Saniye 00 ise 0 mı geliyor yoksa hiç gelmiyor mu bu önemli). Gelen veri minimum 8 karakter olmalı. Maksimum karakter sayisi ise 13. If veya switch-case ile 8 den 13 e kadar kontrol edebilirsin. Karakter sayısı 8 ve 13 için şöyle bir kod yazabilirsin. Aradaki sayılar için ise kontrolü son karakter yani saniyeden başlayarak yapman lazım. Son iki karakteri kontrol edeceksin. 59 dan büyük ise saniye 1 karakterdir diyeceksin. 59 dan küçük ise sondan 2 karakter daha alıp kontrol ede ede gidebilirsin. Ama yinede takılma ihtimalin yüksek. Yani tüm kontroller hem saniye hem dakika hem saat olabilir. Dediğim gibi en güzeli veriyi düzenlemek. Gelen veri her sonuca açık çünkü

    int karakterSayisi=gelenVeri.Count();

    string yil;
    string gun;
    string saat;
    string dakika;
    string saniye;

    if(karakterSayisi == 8)
    {
    yil=gelenVeri.SubString(0, 4);
    gun=gelenVeri.SubString(4, 1);
    saat =gelenVeri.SubString(5, 1);
    dakika =gelenVeri.SubString(6, 1);
    saniye =gelenVeri.SubString(7, 1);
    }

    else if (karakterSayisi==13)

    {

    yil=gelenVeri.SubString(0, 4);
    gun=gelenVeri.SubString(4, 3);
    saat =gelenVeri.SubString(7, 2);
    dakika =gelenVeri.SubString(9, 2);
    saniye =gelenVeri.SubString(11, 2);

    }

     

     

     

    Malesef boş olanlara 00 yazmamışlar hocam. Zaten tarihler de gerçek tarih olmadığı için yıllar epey uzun, milyonlara kadar uzanmış. Bir şeyler yazmaya çalıştım ama beynim yandı. Kuramadım güzel bir algoritma hepsini kontrol ettirecek. Beni epey aştı gibi bu :D


  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Yazilimci
    Yazilimci's avatar
    Kayıt Tarihi: 01/Şubat/2014
    Erkek

    Hocam o zaman uğraşma o veriyle. Hiçbir şekilde sistematiği yoksa makina diline gelmez o. Her halükarda patlar yapacağın uygulama


    Titanyumun gücü adına!!!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yabadabadoo
    yabadabadoo's avatar
    Kayıt Tarihi: 15/Temmuz/2019
    Erkek

    Buyurun hocam. Javascript ile yazdim, umarim anlarsiniz :) Asagida bir sandbox linki de biraktim, kodu denersiniz.



    // filtre fonksiyonu
    function uygundur(giri) {

    let uygun = true

    if (giri.gun >= 365) uygun = false
    if (giri.saat >= 24) uygun = false
    if (giri.dakika >= 60) uygun = false
    if (giri.saniye >= 60) uygun = false

    return uygun
    }



    // asil fonksiyon
    function strToDate (str) {
    let len = str.length
    let sonuclar = []

    for (let yil = 0; yil <= len; yil++) {
    for (let gun = yil; gun <= len; gun++) {
    for (let saat = gun; saat <= len; saat++) {
    for (let dakika = saat; dakika <= len; dakika++) {

    let giri = {
    yil: str.substring(0, yil),
    gun: str.substring(yil, gun),
    saat: str.substring(gun, saat),
    dakika: str.substring(saat, dakika),
    saniye: str.substring(dakika, len)
    }

    // sayiya cevir, bos ise 0 yap
    giri.yil = +giri.yil || 0
    giri.gun = +giri.gun || 0
    giri.saat = +giri.saat || 0
    giri.dakika = +giri.dakika || 0
    giri.saniye = +giri.saniye || 0

    // filtreden gecir
    if (uygundur(giri)) {
    sonuclar.push(giri)
    }

    }
    }
    }
    }

    return sonuclar
    }

     

     

    Sandbox linki: https://playcode.io/382000?tabs=script.js,preview,console

     


    Buraya daha sonra ozlu bir soz girilecek
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    palin
    palin's avatar
    Kayıt Tarihi: 09/Temmuz/2010
    Erkek
    yabadabadoo bunu yazdı

    Buyurun hocam. Javascript ile yazdim, umarim anlarsiniz :) Asagida bir sandbox linki de biraktim, kodu denersiniz.



    // filtre fonksiyonu
    function uygundur(giri) {

    let uygun = true

    if (giri.gun >= 365) uygun = false
    if (giri.saat >= 24) uygun = false
    if (giri.dakika >= 60) uygun = false
    if (giri.saniye >= 60) uygun = false

    return uygun
    }



    // asil fonksiyon
    function strToDate (str) {
    let len = str.length
    let sonuclar = []

    for (let yil = 0; yil <= len; yil++) {
    for (let gun = yil; gun <= len; gun++) {
    for (let saat = gun; saat <= len; saat++) {
    for (let dakika = saat; dakika <= len; dakika++) {

    let giri = {
    yil: str.substring(0, yil),
    gun: str.substring(yil, gun),
    saat: str.substring(gun, saat),
    dakika: str.substring(saat, dakika),
    saniye: str.substring(dakika, len)
    }

    // sayiya cevir, bos ise 0 yap
    giri.yil = +giri.yil || 0
    giri.gun = +giri.gun || 0
    giri.saat = +giri.saat || 0
    giri.dakika = +giri.dakika || 0
    giri.saniye = +giri.saniye || 0

    // filtreden gecir
    if (uygundur(giri)) {
    sonuclar.push(giri)
    }

    }
    }
    }
    }

    return sonuclar
    }

     

     

    Sandbox linki: https://playcode.io/382000?tabs=script.js,preview,console

     

    Ellerine sağlık hocam, tam istediğim şeyi yaptı. Ben de JS kullanıyordum zaten, direk yapıştırdım istediğim alana. İmreniyorum şöyle şeyleri çözebilenlere yahu. Benim kafa çalışmıyor. :D


  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Yazilimci
    Yazilimci's avatar
    Kayıt Tarihi: 01/Şubat/2014
    Erkek
    palin bunu yazdı
    yabadabadoo bunu yazdı

    Buyurun hocam. Javascript ile yazdim, umarim anlarsiniz :) Asagida bir sandbox linki de biraktim, kodu denersiniz.



    // filtre fonksiyonu
    function uygundur(giri) {

    let uygun = true

    if (giri.gun >= 365) uygun = false
    if (giri.saat >= 24) uygun = false
    if (giri.dakika >= 60) uygun = false
    if (giri.saniye >= 60) uygun = false

    return uygun
    }



    // asil fonksiyon
    function strToDate (str) {
    let len = str.length
    let sonuclar = []

    for (let yil = 0; yil <= len; yil++) {
    for (let gun = yil; gun <= len; gun++) {
    for (let saat = gun; saat <= len; saat++) {
    for (let dakika = saat; dakika <= len; dakika++) {

    let giri = {
    yil: str.substring(0, yil),
    gun: str.substring(yil, gun),
    saat: str.substring(gun, saat),
    dakika: str.substring(saat, dakika),
    saniye: str.substring(dakika, len)
    }

    // sayiya cevir, bos ise 0 yap
    giri.yil = +giri.yil || 0
    giri.gun = +giri.gun || 0
    giri.saat = +giri.saat || 0
    giri.dakika = +giri.dakika || 0
    giri.saniye = +giri.saniye || 0

    // filtreden gecir
    if (uygundur(giri)) {
    sonuclar.push(giri)
    }

    }
    }
    }
    }

    return sonuclar
    }

     

     

    Sandbox linki: https://playcode.io/382000?tabs=script.js,preview,console

     

    Ellerine sağlık hocam, tam istediğim şeyi yaptı. Ben de JS kullanıyordum zaten, direk yapıştırdım istediğim alana. İmreniyorum şöyle şeyleri çözebilenlere yahu. Benim kafa çalışmıyor. :D

    Hocam yanlış hatırlamıyorsam datada stabilite yoktu. Birde ben yılı yanlış anlamışım sanırım. Yılın kaç olduğu değilde kaç yıl olduğu bilgisi var gelen datada. Arkadaşın yazdığı kodda 20192366 şu datayı girdim. Aşağıdaki gibi bir sonuç çıktı

    yil:2,
    gun:19,
    saat:2,
    dakika:36,
    saniye:6
     
    Senin söylediğine göre bu data şu şekilde de olamaz mıydı?
    yil:20,
    gun:19,
    saat:23,
    dakika:6,
    saniye:
     
    veya
     
    yil:20,
    gun:192,
    saat:3,
    dakika:6,
    saniye:6

    Titanyumun gücü adına!!!
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    Bu da biraz daha okunabilir hali

     

    https://codesandbox.io/s/cold-sound-psqod

     

    ek olarak @yazilimci haklı, karakter sayısını bilmediğimiz için substring ile öyle problemler çıkar.

     

    var app = document.getElementById("app");
    
    function output(arr) {
      var el = document.createElement("div");
      el.innerText = JSON.stringify(arr);
      app.appendChild(el);
    
      console.log(arr);
    }
    
    function resolve(date) {
      var regex = /(\d+)?(?: gün )?(\d+)?(?: saat )?(\d+)?(?: dakika )?(\d+)?(?: saniye\s?)?(\d+)?/;
    
      var result = regex.exec(date);
    
      var values = result.filter(function(r, i) {
        if (i !== 0 && r !== undefined) return r;
        return;
      });
    
      output(values);
    }
    
    resolve("12345");
    resolve("10 saniye 12345");
    resolve("3 dakika 43 saniye");
    resolve("3 dakika 43 saniye 12345");
    resolve("23 saat 3 dakika 43 saniye 12345");
    resolve("5 gün 12 saat 3 dakika 43 saniye 12345");

     

     

    SinusX tarafından 21/Tem/19 11:51 tarihinde düzenlenmiştir

    Damnant quod non intelligunt...
Toplam Hit: 744 Toplam Mesaj: 15
kombinasyon