Programlama ile çözülebilecek zeka soruları

Ş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?

1 Beğeni

B-Brute Force :drooling_face:

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.
1 Beğeni
c = cubuk - (a + b)
3 Beğeni

Ulan zamanında şöyle birkonu açmıştım beni az mı taşlamıştılar…
Neyse.

Canın sagolsun yazbel family

@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?

2 Beğeni

Ş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 :grinning:;

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 $

2 Beğeni

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 :pensive:

2 Beğeni

İş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

3 Beğeni

gugıl > All
Ay Lav Yu Gogıll

Hocam şunun başındaki işareti nasıl yapıyoruz ya kullanırım ben onu

1 Beğeni

1 Beğeni

image

Ş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;
}
1 Beğeni

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()
1 Beğeni
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.

2 Beğeni
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 :slight_smile:

1 Beğeni

Çı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.

1 Beğeni