lostyazilim
tr.link

beyin fırtınası lazım acil

4 Mesajlar 811 Okunma
lstbozum
tr.link

guvwe guvwe WM Aracı Kullanıcı
  • Üyelik 16.08.2018
  • Yaş/Cinsiyet 24 / E
  • Meslek öğrenci
  • Konum Ankara
  • Ad Soyad A** A**
  • Mesajlar 385
  • Beğeniler 3 / 72
  • Ticaret 0, (%0)
arkadaşlar hocamız bir ödev verdi ödevin konusu şu biz takımları girecez mesela 3 tane takım takımların maç sayılarıını gircez mesela her takım2 maç ve takımların yediklerini ve attıkları gol sayılarını gircez ve bu değerlere göre kaç farklı maç yapar ve maçların durumlarınıın çıktısını istiyor bunu nasıl yazabilirim
 

 

SOSYAL MEDYA HESAPLARIMIZI TAKİP EDER MİSİNİZ?
İnstagram sayfamız
www.instagram.com/gul.yabaniii
wmaraci
reklam

wmgtasarim wmgtasarim wmg.com.tr Banlı Kullanıcı
  • Üyelik 01.01.2020
  • Yaş/Cinsiyet 26 / E
  • Meslek Yazılım | Web Tasarım
  • Konum Tekirdağ
  • Ad Soyad A** Ö**
  • Mesajlar 1893
  • Beğeniler 545 / 550
  • Ticaret 8, (%100)
O nasıl soru o nasıl hoca 🤣🤣 kanki benim beyin bu soruya iflas 🤣🤣
 

 

EmreKRMN EmreKRMN Designer/Coder Kullanıcı
  • Üyelik 18.12.2013
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgi İşlem Personeli
  • Konum Balıkesir
  • Ad Soyad E** K**
  • Mesajlar 822
  • Beğeniler 213 / 217
  • Ticaret 70, (%99)
Bu ne biçim ödev hocam :D Ödev değil bu; hocanız sizin proje çıktısına göre kupon dolduracak galiba :D
 

 

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)
Merhabalar şu şekilde bir çözüm buldum ve Javascript ile yazdım.

İlgili veriler




Çözüm Adımları:


    [*]teamsWithDetails objesine ilgili bilgileri girdik. Toplamda atılan gol sayısı ve yenilen gol sayısı mantıken eşit olmalı.
    [*]matchupLimit ile takımlar arası yapılacak karşılaşma limitini belirliyoruz. (2'den fazla girince kombinasyonlardan dolayı biraz kasabilir. )
    [*] Takımların yediği ve attığı gollere göre olabilecek bütün maç sonuçlarını ayrı aryı hesaplayıp çıkarıyoruz ve array'e ekliyoruz.
    [*] Bu maç sonuçlarını karşılaşma sayısına göre gruplar oluşturacak şekilde kombinasyon oluşturup tekrardan diziye atıyoruz. (Bu kısım matchup değişkeninin artmasına bağlı olarak programı dondurabilir.)
    [*] Örneğin 2'li karşılaşmalar için toplam 4 adet maçtan oluşan 500 olası ihtimalde eşleşmeler dizide mevcut..
    [*] Son olarak bu dizi içerisinde atılan gol ve yapılan maç sayısına göre filtreleyip olası doğru ihtimalleri listeliyoruz.



Örnek Çıktı:



Olası İhtimal:
[
{
teaml: 'Galatasaray',
team2: 'Fenerbahçe',
team1Score: 4,
team2Score: 0
},
{
teaml: 'Galatasaray',
team2: 'Trabzonspor',
team1Score: 0,
team2Score: 1
},
{
teaml: 'Fenerbahçe',
team2: 'Beşiktaş',
team1Score: 2,
team2Score: 1
},
{
teaml: 'Beşiktaş',
team2: 'Trabzonspor',
team1Score: 0,
team2Score: 2
}
]

...
...
...



Kod:

function k_combinations(set, k) {
var i, j, combs, head, tailcombs;
if (k > set.length || k <= 0) {
return [];
}
if (k == set.length) {
return [set];
}
if (k == 1) {
combs = [];
for (i = 0; i < set.length; i++) {
combs.push([set[i]]);
}
return combs;
}
combs = [];
for (i = 0; i < set.length - k + 1; i++) {
head = set.slice(i, i+1);
tailcombs = k_combinations(set.slice(i + 1), k - 1);
for (j = 0; j < tailcombs.length; j++) {
combs.push(head.concat(tailcombs[j]));
}
}
return combs;
}

var teamsWithDetails = [
{"team": "Galatasaray", "concededGoal": 2, "scoredGoal": 4},
{"team": "Fenerbahçe", "concededGoal": 3, "scoredGoal": 2},
{"team": "Beşiktaş", "concededGoal": 4, "scoredGoal": 1},
{"team": "Trabzonspor", "concededGoal": 1, "scoredGoal": 3}
];
var matchupLimit = 2;
var matchPossibilites = [];
for (let team of teamsWithDetails) {
for (let opponent of teamsWithDetails) {
if (team.team == opponent.team) {
continue;
}


for (var i = team.scoredGoal; i >= 0; i--) {
for (var j = opponent.scoredGoal; j >= 0; j--) {
var possibility = {
"teaml": team.team,
"team2": opponent.team,
"team1Score": i,
"team2Score": j,
}

if (!matchPossibilites.some(
match => match.teaml === opponent.team
&& match.team2 === team.team
&& match.team1Score === j
&& match.team2Score === i
)) {
matchPossibilites.push(possibility);
}

}
}

};
};

var possibleSetsOfMatches = k_combinations(matchPossibilites, matchupLimit * 2);

for (let index = 0; index < possibleSetsOfMatches.length; index++) {
const match = possibleSetsOfMatches[index];
var checkTeamsMatchCount = new Array(teamsWithDetails.length).fill(false);
var checkTeamsScoreCount = new Array(teamsWithDetails.length).fill(false);
var checkTeamsConcededCount = new Array(teamsWithDetails.length).fill(false);
for (let i = 0; i < teamsWithDetails.length; i++) {
const team = teamsWithDetails[i];
var counter = 0;
var GoalCounter = 0;
var ConcededCounter = 0;
for (let j = 0; j < match.length; j++) {
const groupMember = match[j];
if (team.team == groupMember.teaml || team.team == groupMember.team2) {
counter++;
}
if (team.team == groupMember.teaml) {
GoalCounter += groupMember.team1Score;
}
if (team.team == groupMember.team2) {
GoalCounter += groupMember.team2Score;
}
}
if (counter == matchupLimit) {
checkTeamsMatchCount[i] = true;
} else {
continue;
}
if (GoalCounter == team.scoredGoal) {
checkTeamsScoreCount[i] = true;
} else {
continue;
}
}

let checker = arr => arr.every(v => v === true);
if (checker(checkTeamsMatchCount) && checker(checkTeamsScoreCount)) {
var flag = false;
for (let index = 0; index < match.length; index++) {
const element = match[index];
for (let i = index + 1; i < match.length; i++) {
const element1 = match[i];
if ((element.team1 == element1.team2) && (element.team2 == element1.team1)){
flag = true;
}
}
}
if (flag == false){
console.log("Olası İhtimal: ")
console.log(match);
}
}

}



Son olarak şunu belirtmek istiyorum. Kodu yazan kişi olarak kod kalite olarak bad practice ve code complexity olarak kötü durumda. O yüzden kasmalar veya eksik olasılıklar içerebilir. Fikir vermesi açısından kod kullanılabilir.


Kolay gelsin...
 

 

wmaraci
wmaraci
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al