Şunu demiştim.
import random
olay=0
for i in range(10000):
k = [random.random(),random.random()]
k.sort()
a, b, c = k[0], k[1]-k[0], 1 - k[1]
if a < b + c and b < a + c and c < a + b:
olay += 1
print(olay/10000)
Şunu demiştim.
import random
olay=0
for i in range(10000):
k = [random.random(),random.random()]
k.sort()
a, b, c = k[0], k[1]-k[0], 1 - k[1]
if a < b + c and b < a + c and c < a + b:
olay += 1
print(olay/10000)
Şu top sorusu ile ben de uğraşmaya başladım. Daha önce yaklaşık değerler bulmuştum ama kesin değeri ve yöntemi bulmamıştım. 15 topun her biri ile ilişkisini bulmak 120 durumu ortaya çıkarmamız gerekiyor. İlk tartıda her top için 3 durum ortaya çıkıyor. Yani a<b, b<c ve a<c . 40 tartıda zaten dümdüz her birini kombilesek buluruz. Ama ilerleyen tartılarda a<b den küçükse b<d den ise a<d olacaktır bunu tartmamıza gerek kalmayacaktır. Bu yüzden tartı sayısının 10 ile 20 arasında olduğu zaten tahmin edilebilir bir şey.
0 ile 1 arasında rastgele seçilmiş iki noktanın ortalama mesafesi kaçtır?
B-Brute Force
end_point = 1
aralik = 10000
farklar = []
for x in (round((end_point/aralik) * number, 2) for number in range(aralik + 1)):
for y in (round((end_point/aralik) * number, 2) for number in range(aralik + 1)):
farklar.append(abs(x - y))
ortalama = round(sum(farklar) / len(farklar), 4)
print(f"Toplam: {sum(farklar)}, Eleman sayısı: {len(farklar)}")
print(f"Ortalama: {ortalama}")
# Çubuk üzerinde seçilebilecek 10001 farklı nokta için test edilmiştir.
Toplam: 33345144.000074223 , Eleman sayısı: 100020001
Ortalama: 0.3334 # 4 basamağa yuvarlanmış halde.
Sonuç git gide 0.3333’e yaklaşıyor. Muhtemelen 1/3 gibi bir şey olacaktır.
/ 1/3 \
|-------o-------o-------|
\ 1/3 / \ 1/3 /
# Belki bununla bir alakası vardır.
c = cubuk - (a + b)
@Gok_Mavisi_Anka yurt dışı gezisinde bir dükkandan 4 parça eşya alır. Dükkan sahibinin hesap yaparken sayıları toplayacağı yere çarptığını görür ve adalet duygusu hemen dükkan sahibini uyarmaya yöneltir.
Fakat adam umursamazca “toplasam da aynı sonuç yani 7,11 dolar çıkacaktı” der. @Gok_Mavisi_Anka aldığı eşyaların fiyatı nedir?
Şifremi unuttuğum için uzun bir süredir foruma giremiyordum.
Yeri gelmişken ifade edeyim, “şifremi unuttum” dememe rağmen mail adresime çok geç “şifre sıfırlama maili” gönderildi ve maildeki linke tıklamam sonrası mail’in eski olduğu, üzerinden bir süre geçtiği için şifremi sıfırlayamayacağımı ifade eden uyarı ile karşılaştım ve nihayetinde bir türlü şifremi sıfırlayamadım.
Neyse ki farklı sitelerde kullandığım şifreleri deneyerek geçerli şifremi buldum.
Acemice bir çözüm ama olsun, sonuç verdi ;
for a in range(1,700):
for b in range(1,700):
for c in range(1,700):
for d in range(1,700):
if ((a != b and a != c and a != d and b != c and b != d and c != d) and (a/100 + b/100 + c/100 + d/100 == 7.11) and (a/100 * b/100 * c/100 * d/100 == 7.11)):
print (f"a: {a/100}$, b: {b/100}$, c: {c/100}$, d: {d/100}$")
a: 0,04 $,
b: 6,25 $,
c: 4,50 $,
d: 6,32 $
Toplamları 7.11 etmiyor.
pardon,
yukarıdaki kod uzun süre cevap vermeyip bilgisayarı kasacağı için, önce toplamlardan gittim,
baktım ki, toplamları 7,11 $ olan çok sonuç çıkıyor, çarpımları 7,11$ 'ı verecek sonuçların bir kısmını aldım ve excelde toplayıp 7.11’e denk geleni bulayım dedim.
acele ile çözünce 17.11’i 7.11 diye gördüm
İşin matematiğini anlayamamıştım. Gugıl amcadan kopya çektim.
mallara x,y,z,v diyelim
x + y + z + v = 7,11
x . y . z . v = 7,11
100 le çarpıp virgülden kurtaralım :
100x + 100y + 100z + 100v = 711 Toplamları
100x . 100y . 100z . 100v = 711
=100000000 . (x . y . z . v) eder, bu da 711 . 1000000 eder
Elde ettik : Toplamları 711
Çarpımları 711000000
711000000 sayısının çarpanları 2.2.2.2.2.2.3.3.5.5.5.5.5.5.79 dur
toplamı 711 olan 4 sayı oluşturmalıyız bunlarla
316 = 2.2.79
125 = 5.5.5
150 = 5.5.3.2
120 = 2.2.2.3.5
bunları virgüle geri döndürürsek : 3.16, 1.25, 1.50 ,1.20
gugıl > All
Ay Lav Yu Gogıll
Hocam şunun başındaki işareti nasıl yapıyoruz ya kullanırım ben onu
Şekilde 4x4 karenin her sütunda ve satırda 2 kare karalı olacak şekilde kaç farklı biçimde karalayabilirsiniz.
C++'ın std::next_permutation() fonksiyonu ile çözdüm:
#include <iostream>
#include <vector>
#include <algorithm>
#define N 4
int print_vec(std::vector<int> vec)
{
for (int i : vec)
std::cout << i << " ";
std::cout << std::endl;
}
bool check(std::vector<int> v1, std::vector<int> v2, std::vector<int> v3, std::vector<int> v4)
{
for (int i = 0; i < 4; i++)
{
if (v1[i] + v2[i] + v3[i] + v4[i] != 2) return false;
}
return true;
}
int main()
{
int counter = 0;
std::vector<int> r1 = { 0,0,1,1 };
std::vector<int> r2 = { 0,0,1,1 };
std::vector<int> r3 = { 0,0,1,1 };
std::vector<int> r4 = { 0,0,1,1 };
do
{
do
{
do
{
do
{
if (check(r1,r2,r3,r4))
{
counter++;
print_vec(r1);
print_vec(r2);
print_vec(r3);
print_vec(r4);
std::cout << "--------------------" << std::endl;
}
} while (std::next_permutation(r1.begin(), r1.end()));
std::sort(r1.begin(), r1.end());
} while (std::next_permutation(r2.begin(), r2.end()));
std::sort(r2.begin(), r2.end());
} while (std::next_permutation(r3.begin(), r3.end()));
std::sort(r3.begin(), r3.end());
} while (std::next_permutation(r4.begin(), r4.end()));
std::cout << counter << std::endl;
return 0;
}
Yaptığı açının kosinüsü ile pozisyonunun toplamının değip değmediğine baktım
import random
from math import cos, pi
def main():
deneme = 1000000
olay = 0
for i in range(deneme):
pos = random.random() # x pozisyonu
angle = random.random() * pi * 2 # düzlem ile yaptığı açı
if pos + cos(angle) > 1 or pos + cos(angle) < 0:
olay += 1
print(olay / deneme)
if __name__ == '__main__':
main()
from itertools import permutations
rows = set(permutations([1, 1, 0, 0], 4))
arrays = set(permutations(rows, 4))
sol = []
for array in arrays:
condition = True
for column in range(4):
if sum(array[row][column] for row in range(4)) != 2:
condition = False
if condition == True:
sol.append(array)
for array in sol:
print(15 * "-")
for row in array:
print(row)
print(f"Çözüm Sayısı: {len(sol)}")
Row’lar üzerinden yola çıktım.
1 ve 0 sayıları ile oluşabilecek eşsiz row’ları elde ettim. (2 tane 1, yani karalanmış bölge, 2 tane 0, yani karalanmamış bölge.).
Ardından bu eşsiz row’lar ile oluşturulabilecek eşsiz dizileri buldum.
Son olarak bu dizilerin her bir kolonunda bulunan karalanmış bölge sayısının 2’ye eşit olup olmadığını kontrol ederek, aradığım dizileri sol isimli listeye aktardım.
Aradığımız duruma uygun 72 tane dizi bulunuyor.
Edit: Cevap 90’mış. 18’lik kısım eksik.
from itertools import permutations
import numpy as np
rows = set(permutations([1, 1, 0, 0], 4))
arrays = set(permutations(rows, 4))
say=0
for i in arrays:
i=np.array(i)
i=i.reshape(4,4)
dizi=(sum(i[:,:]))
if 2==dizi[0] & dizi[1] & dizi[2] & dizi[3]:
say=say+1
print(say)
kodunu biraz kısalttım
Çıktısında mesela
(1, 1, 0, 0)
(1, 1, 0, 0)
(0, 0, 1, 1)
(0, 0, 1, 1)
değerlerini göremedim.
Evet, permütasyon kullanırken herhangi iki row’un birbirinin aynısı olmayacağı şekilde ayarlamışım.
O 18’lik eksik kısım oradan kaynaklanıyor muhtemelen.
Burayı şununla değiştirirsek düzeliyor,
rows = list(set(permutations([1, 1, 0, 0], 4)))
rows += rows
arrays = set(permutations(rows, 4))
Her bir kolonda karalanmış olan bölge sayısının 2’yi aşmaması için rows’u kendisi ile yalnızca 1 kez toplayabiliyoruz. Artık sonuç doğru çıkıyor.