Kombinasyon Hesaplatma
-
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.
-
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?
-
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. -
Bir up olsun.
-
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 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
-
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
-
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 fonksiyonfunction 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
-
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 fonksiyonfunction 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
-
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 fonksiyonfunction 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:6Senin söylediğine göre bu data şu şekilde de olamaz mıydı?yil:20,gun:19,saat:23,dakika:6,saniye:6veyayil:20,gun:192,saat:3,dakika:6,saniye:6 -
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");