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.
Spoiler
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.
Spoiler
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.
Merhaba, bununla dizi
’nin ilk 4 elemanın tümünün birden 2 olup olmadığını mı ifade etmek istiyorsunuz? Öyleyse tam olarak onu yapmıyor.
ben öyle yaptığını düşüyorum ve o şekildede kontrol ediyor siz ne yaptığını düşünüyosunuz
sum(i)
Bunun tek calisma nedeni elemanlarin 1, 2 veya 3 olmasi. 1 not in dizi
diye kisaltilabilir.
Ben de:
from itertools import permutations as p
print(len([a for a in set(p(set(p([1,1,0,0],4)),4)) if 1 not in map(sum,zip(*a))]))
Not: Cozum veya yontem dogru mu bilmiyorum.
evet haklısınız çok daha kısalmış oluyo
amam hiç hoş görünmüyo