Programlama ile çözülebilecek zeka soruları

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

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

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