Forum Ateista.pl
Kącik Zagadek - Wersja do druku

+- Forum Ateista.pl (https://ateista.pl)
+-- Dział: Nauka (https://ateista.pl/forumdisplay.php?fid=5)
+--- Dział: Pozostałe (https://ateista.pl/forumdisplay.php?fid=22)
+--- Wątek: Kącik Zagadek (/showthread.php?tid=14113)

Strony: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45


RE: Kącik Zagadek - ZaKotem - 10.06.2019

Dla podpowiedzi dodam, że jest to wyposażone w małe haczyki.


RE: Kącik Zagadek - kmat - 10.06.2019

Powiało grozą.


RE: Kącik Zagadek - ZaKotem - 10.06.2019

kmat napisał(a): Powiało grozą.

Groźne jest, gdy trzyma się to w innym miejscu ciała, niż zazwyczaj.


RE: Kącik Zagadek - kmat - 10.06.2019

Pas do pończoch?


RE: Kącik Zagadek - Gawain - 10.06.2019

kmat napisał(a): Pas do pończoch?

Byłem blisko B-) najbardziej pasuje.


RE: Kącik Zagadek - ZaKotem - 10.06.2019

Zupełnie daleko jesteście. Chociaż nazwa tego w istocie kojarzy się pasmanteryjnie (ale też trochę gangstersko-militarnie) to nie ten dział. No dobra, chyba tym razem za trudne było Język

Taenia solium - tasiemiec uzbrojony.

[Obrazek: z22848719IH,Zarazenie-tasiemcem-u-dorosl...e-prze.jpg]

Noszony w d...ielicie zazwyczaj nie powoduje powikłań innych niż anemia i zaburzenia trawienia - co jest powodem, że niektóre zdesperowane panny marzące o karierze modelki używają go jako drastycznego środka odchudzającego. Kiedy jednak człowiek zarazi się tasiemcem poprzez spożycie nie  larw, ale jaj - najczęściej poprzez kontakt z kałem - larwy tasiemca mogą się zagnieździć w innym miejscu, w mięśniach, oku, a nawet w mózgu, powodując chorobę zwaną wągrzycą, często śmiertelną. Normalnie jednak gospodarzem pośrednim tasiemca jest świnia. Dlatego w państwach muzułmańskich, gdzie nie hoduje się świń, tasiemiec uzbrojony i wągrzyca jest rzadkością. Tasiemiec pozostaje w ciele człowieka nawet przez kilkanaście lat, produkując miliony jaj w nadziei, że któreś z nich znajdzie jakaś świnia. Oddzielone od reszty ciała proglotydy - segmenty wypełnione dojrzałymi jajami - opuszczają ciało żywiciela zazwyczaj z kałem, ale zdarza się, że dzięki swej śliskości są wydalane osobno, z... pierdnięciem. Człowiek zjada zakażone mięso świni, a larwa znajduje drogę do jego układu pokarmowego i jelita, gdzie zamieszkuje na stałe i dojrzewa. W skali całego świata prawdopodobnie co dziesiąty człowiek chociaż raz miał tasiemca uzbrojonego - ogromna większość zdarza się w krajach biednych, gdzie ludzie nie przestrzegają higieny.


RE: Kącik Zagadek - Pterodaktyl - 18.06.2019

Dobra, jako że nikt nie odgadł i przez dłuższy czas jest tu cicho, pozwolę sobie zadać ja Duży uśmiech
Na podstawie poniższych zdań zgadnij, o jaką liczbę chodzi.
1. Co najmniej jedno zdanie ze zdań 9 i 10 jest prawdziwe. 
2. To jest albo pierwsze fałszywe, albo pierwsze prawdziwe zdanie. 
3. Pewne trzy kolejne zdania są fałszywe. 
4. Różnica między numerem ostatniego prawdziwego zdania i pierwszego prawdziwego zdania dzieli liczbę, której szukamy. 
5. Suma numerów prawdziwych zdań jest liczbą, której szukamy. 
6. To nie jest ostatnie prawdziwe zdanie. 
7. Numer każdego prawdziwego zdania dzieli liczbę, której szukamy. 
8. Szukana liczba to procent prawdziwych zdań. 
9. Ilość dzielników szukanej liczby (nie licząc 1 i jej samej) jest większa niż suma numerów prawdziwych zdań. 
10. Nie ma trzech kolejnych prawdziwych zdań.


RE: Kącik Zagadek - kmat - 18.06.2019

ZaKotem napisał(a): No dobra, chyba tym razem za trudne było Język
Za szybko się poddałeś. Można było podać jeszcze parę szczegółów, zasugerować, że rzęsistek pochwowy to dobry trop Duży uśmiech

Pterodaktyl napisał(a): 2. To jest albo pierwsze fałszywe, albo pierwsze prawdziwe zdanie.
Chyba błąd logiczny.


RE: Kącik Zagadek - Pterodaktyl - 19.06.2019

Nie. Wynika z niego, że albo jest pierwszym prawdziwym, albo drugim fałszywym.


RE: Kącik Zagadek - zefciu - 19.06.2019

Wychodzi mi 210. Ale może też wyjść w zasadzie każda wielokrotność 210. Wartości logiczne zdań są takie:
[False, True, True, True, False, True, True, False, False, False]
Wyliczone maszynowo, sprawdzone „ręcznie”. Nie dają sprzeczności, ale też nie dają konkretnego wyniku, a jedynie listę dzielników.
EDIT: A nie. Z fałszywości zdania 9 wynika, że nie może być to 420, ani żadna inna wielokrotność 210 (bo już 420 ma 22 dzielniki). Dlatego odpowiedzią jest 210.

Poniżej wklejam kod:
Kod:
def f1(guesses):                                                                                                        
    return guesses[9 - 1] or guesses[10 - 1]                                                                            
                                                                                                                        
                                                                                                                        
def f2(guesses):                                                                                                        
    return (guesses[1 - 1] and not guesses[2 - 1]) or (not guesses[1 - 1] and guesses[2 - 1])                          
                                                                                                                        
                                                                                                                        
def f3(guesses):                                                                                                        
    current = 0                                                                                                        
    longest = 0                                                                                                        
    for i in guesses:                                                                                                  
        if i:                                                                                                          
            longest = max([current, longest])                                                                          
            current = 0                                                                                                
        else:                                                                                                          
            current += 1                                                                                                
    longest = max([current, longest])                                                                                  
    return longest >= 3                                                                                                
                                                                                                                        
                                                                                                                        
def f4(guesses):                                                                                                        
    first = None                                                                                                        
    last = None                                                                                                        
    for i, guess in enumerate(guesses, 1):                                                                              
        if guess:                                                                                                      
            if not first:                                                                                              
                first = i                                                                                              
            last = i                                                                                                    
    if last and first:                                                                                                  
        return [last - first]                                                                                          
    else:                                                                                                              
        return [9999]                                                                                                  
                                                                                                                        
                                                                                                                        
def f5(guesses):                                                                                                        
    return sum(i for (i, guess) in enumerate(guesses, 1) if guess)                                                      
                                                                                                                        
                                                                                                                        
def f6(guesses):                                                                                                        
    return not guesses[6 - 1] or any(guesses[7 - 1:])                                                                  
                                                                                                                        
                                                                                                                        
def f7(guesses):                                                                                                        
    return [i for (i, guess) in enumerate(guesses, 1) if guess]                                                        
                                                                                                                        
                                                                                                                        
def f8(guesses):                                                                                                        
    return sum(10 for guess in guesses if guess)                                                                        
                                                                                                                        
                                                                                                                        
def f9(guesses):                                                                                                        
    return False                                                                                                        
                                                                                                                        
                                                                                                                        
def f10(guesses):                                                                                                      
    current = 0                                                                                                        
    longest = 0                                                                                                        
    for i in guesses:                                                                                                  
        if i:                                                                                                          
            current += 1                                                                                                
        else:                                                                                                          
            longest = max([current, longest])                                                                          
            current = 0                                                                                                
    longest = max([current, longest])                                                                                  
    return longest < 3                                                                                                  
                                                                                                                        
                                                                                                                        
fs = [f1, f2, f3, f4, f5, f6, f7, f8, f9, f10]                                                                          
                                                                                                                        
                                                                                                                        
if __name__ == '__main__':                                                                                              
    for i in range(1024):                                                                                              
        guesses = [bit == '1' for bit in f'{i:010b}']                                                                  
        numbers = set()                                                                                                
        divisors = []                                                                                                  
        for i, f in enumerate(fs):                                                                                      
            result = f(guesses)                                                                                        
            if isinstance(result, bool):                                                                                
                if result != guesses[i]:                                                                                
                    break                                                                                              
            elif isinstance(result, int) and guesses[i]:                                                                
                numbers.add(result)                                                                                    
            elif isinstance(result, list) and guesses[i]:                                                              
                divisors += result                                                                                      
        else:                                                                                                          
            if len(numbers) == 0:                                                                                      
                print(guesses, divisors)                                                                                
            elif len(numbers) > 1:                                                                                      
                continue                                                                                                
            number = numbers.pop()                                                                                      
            for divisor in divisors:                                                                                    
                if number % divisor:                                                                                    
                    break                                                                                              
            else:                                                                                                      
                print(guesses, number)
Pytanie 9 ciężko było zaimplementować używając tej architektury, więc „przełączałem” je ręcznie. Pytanie, jakie było proste dla człowieka rozumowanie, które pozwoliło rozwiązać zagadkę bez pomocy komputera. Bo doszedłem do tego, że zdania 1, 9 i 10 są fałszywe. A potem utknąłem.


RE: Kącik Zagadek - ZaKotem - 19.06.2019

zefciu napisał(a): Wychodzi mi 210. Ale może też wyjść w zasadzie każda wielokrotność 210. Wartości logiczne zdań są takie:
[False, True, True, True, False, True, True, False, False, False]

Na mój gust zdania 2 i 6 nie mają wartości logicznej.


RE: Kącik Zagadek - zefciu - 19.06.2019

ZaKotem napisał(a): Na mój gust zdania 2 i 6 nie mają wartości logicznej.
Nie da się określić ich wartości logicznej na podstawie samych logicznych relacji z innymi zdaniami. Ale pamiętajmy, że są jeszcze zdania mówiące o tym, jak od wartości logicznych zdań zależy sama szukana liczba. Inne wartości tych zdań dawałyby sprzeczności.


RE: Kącik Zagadek - ZaKotem - 19.06.2019

zefciu napisał(a): Nie da się określić ich wartości logicznej na podstawie samych logicznych relacji z innymi zdaniami. Ale pamiętajmy, że są jeszcze zdania mówiące o tym, jak od wartości logicznych zdań zależy sama szukana liczba. Inne wartości tych zdań dawałyby sprzeczności.

No to może dają sprzeczności, a zadanie jest nierozwiązywalne. Trochę nieładnie przypisywać zdaniom paradoksalnym prawdziwość tylko dlatego... żeby się zgadzało. Jeśli taka była intencja twórcy zadania, to też zgrzeszył. A może istnieje jakieś rozwiązanie przy założeniu, że 2 i 6 nie są ani prawdziwe, ani fałszywe? Mnie z takim założeniem nic nie wychodziło, ale ja nie umiem wydoić komputera.


RE: Kącik Zagadek - zefciu - 19.06.2019

ZaKotem napisał(a): Trochę nieładnie przypisywać zdaniom paradoksalnym prawdziwość tylko dlatego... żeby się zgadzało.
No nie. Zdaniu „to zdanie jest fałszywe” nie da się przypisać wartości logicznej – owszem. Ale już zdaniu „to zdanie jest prawdziwe” możemy przypisać dowolną wartość logiczną. Więc stwierdzenie, że takie zdanie jest prawdziwe nie jest paradoksalne.
Cytat:A może istnieje jakieś rozwiązanie przy założeniu, że 2 i 6 nie są ani prawdziwe, ani fałszywe?
Ale wtedy co? Albo liczymy te zdania albo ich nie liczymy.


RE: Kącik Zagadek - kmat - 19.06.2019

W sumie jeśli formuła "to zdanie jest fałszywe" jest z definicji niemożliwa, to trzeba przyjąć interpretację, że jst to pierwsze prawdziwe zdanie.A jeśli tak, to zdania 1, 9, i 10 są fałszywe.


RE: Kącik Zagadek - Pterodaktyl - 20.06.2019

@zefciu, wartości logiczne poprawne, ale dalej zrobiłeś dwa kardynalne błędy. Hint -> zdania 7 i 9, przeanalizuj jeszcze raz.
zefciu napisał(a):
ZaKotem napisał(a): Na mój gust zdania 2 i 6 nie mają wartości logicznej.
Nie da się określić ich wartości logicznej na podstawie samych logicznych relacji z innymi zdaniami. Ale pamiętajmy, że są jeszcze zdania mówiące o tym, jak od wartości logicznych zdań zależy sama szukana liczba. Inne wartości tych zdań dawałyby sprzeczności.
Dokładnie, niemniej można tu dopatrzyć się logicznej niekonsekwencji, skoro zdania - które zawsze winny być ubranymi w język obrazami jakichś faktów - mówią coś o sobie samych. Lecz w tym przypadku muszą prowadzić one do określonych rozwiązań - inaczej nie unikniemy sprzeczności.

Da się to rozwiązać ręcznie, choć w chuj długo się z tym pierdoliłem Duży uśmiech później przedstawię mój tok rozumowania.


RE: Kącik Zagadek - zefciu - 20.06.2019

Zdanie 7 mówi o tym, że numery prawdziwych zdań są dzielnikami szukanej liczby. 210 jest iloczynem pierwszych numerów prawdziwych zdań. Zatem nie będzie nic większego. Zdanie 9 (fałszywe) mówi, że liczba dzielników tej liczby jest nie większa niż suma zdań. Dzielniki mamy takie:
2,3,5,6,7,10,14,15,21,30,35,42,70,105 i jest ich 14 co nie jest większe niż 22. No więc 420 też może być. Zdanie ma dwa rozwiązania?


RE: Kącik Zagadek - kmat - 20.06.2019

zefciu napisał(a): Dzielniki mamy takie:
2,3,5,6,7,10
3. Pewne trzy kolejne zdania są fałszywe.


RE: Kącik Zagadek - zefciu - 20.06.2019

kmat napisał(a): 3. Pewne trzy kolejne zdania są fałszywe.
Ale nie jest powiedziane „tylko numery prawdziwych zdań dzielą liczbę”, a „wszystkie numery prawdziwych zdań dzielą liczbę”.


RE: Kącik Zagadek - Fizyk - 20.06.2019

Numery prawdziwych zdań to 2,3,4,6,7 z tego co widzę (Pterodaktyl potwierdził, że to rozwiązałeś OK). Mają one dzielić liczbę z zagadki, ponadto różnica numerów ostatniego i pierwszego prawdziwego zdania - 7-2 = 5 - również ma ją dzielić. Najmniejsza liczba spełniająca te dwa warunki to 3*4*7*5 = 420. 210 nie pasuje (nie dzieli się przez 4).