Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Algorytm rozwiązujący zagadkę
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Przeglądając forum, natknąłem na stary temat z zagadkami i jedną sobie skopiowałem:
Cytat
Cztery osoby (nazwijmy je: Adam, Basia, Celina i Dorota) wybrały się samochodem na imprezę.
Rozpętała się burza, parking jest dość oddalony od domu, a okazało się, że w samochodzie jest tylko jeden parasol!
Adam idzie z parkingiu do domu - 1 minutę, Basia - 2, Celina - 5, a Dorota - 10.
Pod parasolem mieszczą się naraz dwie osoby, a gdy idą, szybsza dostosowuje swe tempo do wolniejszej (czyli Adam z Dorotą szliby 10 minut).
Aby nikt nie zmókł, wymyślili, że najpierw pójdzie Adam z Basią, Adam wróci z parasolem, potem Adam z Celiną, Adam wróci z parasolem, w końcu Adam z Dorotą. W sumie 2+1+5+1+10= 19 minut.
Sposób niezły, ale istnieje lepszy - da się to zrobić w 17 minut.
Pytanie: jak?


Z tekstu wynikają pewne założenia:

1. Prędkość osób
Adam - 1 minut
Basia - 2 minuty
Celina - 5 minut
Dorota - 10 minut

2. Parasol - mieszą się pod nim naraz maksymalnie dwie osoby
3. Miejsca:
a) Samochód
(IMG:style_emoticons/default/cool.gif) Dom

3. Osoba szybsza dostosowuje tempo do wolniejszej

Zadanie: Napisz program, który rozwiąże zagadkę korzystając z wytycznych.

Prosty zarys algorytmu jaki ja wymyśliłem:

  1. $People = array(
  2. 'Adam' => 1,
  3. 'Basia' => 2,
  4. 'Celina' => 5,
  5. 'Dorota' => 10
  6. );


Dwie tablice:
  1. $Car = array();
  2. $House = array();


Algorytm:
< Uruchomienie pętli >
  • Przepisanie tablicy People do Car
  • Wylosowanie dwóch osób, zapisanie ich imion do zmiennych pomocniczych i ich szybkości [i usunięcie ich z tablicy Car]
  • Obliczenie, prędkości poruszania się osób - czyli sprawdzenie, która jest wolniejsza
  • Dodanie czasu: prędkość wolniejszej osoby
  • Dodanie osób do tablicy House
  • Wylosowanie jednej osoby z tablicy House, która wróci do samochodu i dodanie jej do tablicy Car
  • Dodanie czas: prędkość osoby wracającej
  • Powtórzenie pętli, póki są osoby w samochodzie

Zapisanie kroków - kto i w jakiej kolejności
Porównanie czasu, jeżeli mniejszy od poprzedniego to przepisujemy kroki i zapisujemy czas
<Powrót do początku pętli>


Ja wymyśliłem taki algorytm... Jeszcze do końca nie wyszło mi napisanie tego, bo minimalny czas uzyskuję 19 minut - ale to błąd w moich wcześniejszych założeniach co do losowania.

Jestem ciekawy, czy można zrobić to jakoś bardziej optymalnie.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


  1. $inCar = array('Adam', 'Basia', 'Celina', 'Dorota');
  2. $hexMap = array(0,1,2,3,4,5,6);
  3. $items = array('parasol')
  4.  
  5. $run = new goHome($inCar);
  6. $run->runCarHex($hextMap, 1, 1);
  7. $run->removeUser(array('Basia', 'Celina', 'Dorota'));
  8. $run->runCarHex($hextMap, 0, 0);
  9. $run->getItems(1);
  10. $run->runUserHex($hextMap, 1, 1);
  11. echo $run->getTime();


Czas wykonania: 3 minuty, bo Adam nie był bucem i wysadził dziewczyny pod dom. (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Żaden problem... Adam odprowadza Basię (2), wraca (1) i mówi pozostałym, że mają iść same razem (10). Sam wraca bez parasola - bo facet nie z cukru (IMG:style_emoticons/default/biggrin.gif)

Wersja 2: Jedna z dziewczyn jest dziewczyną Adama. Pozostałe odprowadza, z dziewczyną zostają w samochodzie w celu wiadomym. Czas zakończenia - zależny od tego, która z dziewczyn jest dziewczyną Adama (IMG:style_emoticons/default/biggrin.gif)

A tak poważniej... Zadanie jest nieprecyzyjne, ponieważ nie określa czy wszyscy idą do tego samego domu choćby (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Tak, idą do tego samego domu, dystans jest ten sam.
Go to the top of the page
+Quote Post
foxbond
post
Post #5





Grupa: Zarejestrowani
Postów: 162
Pomógł: 12
Dołączył: 20.12.2009
Skąd: Siedlce

Ostrzeżenie: (0%)
-----


Cytat
Sposób niezły, ale istnieje lepszy - da się to zrobić w 17 minut.
Pytanie: jak?


Pewny jesteś, że istnieje sposób 17-sto minutowy? Chyba ze 4 opcje rozrysowałem na kartce i najszybszy 19min, najdłuższy 28min
Go to the top of the page
+Quote Post
ADeM
post
Post #6





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


Thek podał rozwiązanie:
Żaden problem... Adam odprowadza Basię (2), wraca (1) i mówi pozostałym, że mają iść same razem (10). Sam wraca bez parasola - bo facet nie z cukru.

Na końcu Baśka wraca po niego (+4 minuty). Razem wychodzi 17.
Go to the top of the page
+Quote Post
Fifi209
post
Post #7





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


@up
Dokładnie tak, ale chodzi mi o program/skrypt który tą zagadkę rozwiąże (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przeglądnij sobie zestawy zadań z ostatnich 2-4 lat potyczek algorytmicznych (raczej zadania z początkowych etapów). O ile dobrze pamiętam, w którymś zadaniu Bajtaraz musiał wykonać analogiczne zadanie.

Ten post edytował Crozin 18.03.2013, 12:35:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 14:47