Uusin putkaposti on kasvitieteen alalta:
https://www.ohjelmointiputka.net/postit/tehtava.
Tähän tehtävään voi keksiä ratkaisuja ohjelmoimattakin!
Eli piäisikö tuossa keksiä maksimipituus kukalle?
Jäi ilmeisesti perimmäinen tehtävä puuttumaan, tai sitten en sitä huomannut.
Tehtävässä pitää ilmoittaa kymmenen ostettavan pylvään pituudet. Tavoite on kukan kasvaminen mahdollisimman kauan.
Kukka voi kasvaa kuinka pitkäksi tahansa, kunhan pylväät voidaan joka päivä asetella tehtävässä mainitulla tavalla.
Kuinka kukka voi kasvaa nollasta yhteen kun ei kerran ylety tarkalleen pylvään tasalle?
Kukka on siksi merkillinen, että se kasvaa kerralla sentin juuri, kun professori vaihtaa pylväiden järjestyksen.
Siis kukan mahdolliset pituudet ovat 1 cm, 2 cm, 3 cm jne.
Pikaisella päässälaskulla 9349 senttiä pituutta, laskinta en jaksanut käyttää tietokoneesta puhumattakaan. Mietin sitten uudestaan, kun joku panee paremmaksi :)
Kiva tehtävä. Vähän joutui laskinta käyttää, muttä pääsi ohjelmoimatta. Mietin sitten uudestaan, kun joku panee paremmaksi :)
Minulla oli jo ajatus, jolla maksimimäärän olisi saanut ratkaistua suhteellisen pienellä määrällä yhtälöitä. Sitten tajusinkin, ettei idea ottanut huomioon lainkaan sitä, ettei kaikkia pylväitä ole pakko käyttää yhtä aikaa. :) Menipä siis uudelleen miettimiseksi.
Edit: No pääsinpä sentään ohjelmoimatta 25000:n päälle. Hieman piti notepadin kanssa pyöritellä lukuja. Kasvaa muuten melkoisen suureksi tuo kukka. :o
Teoreettisen maksimin voi laskea helposti. Sen täytyy olla olemassa, koska pylväitä on äärellinen määrä ja niitä voi laittaa vain äärelliseen määrään paikkoja. Enpä spoilaa kuitenkaan enempää.
Mistäpä muuten saa ostettua 1 000 000 cm pitkiä pylväitä? Onko heillä kotiinkuljetus :-)
(No nyt hoksasin. Laskuapua Python-tulkista, muuten meni päässä.)
Kukka kasvaa pitkäksi, mutta onpa professorikin jo vanha mies, kun kukka saavuttaa suurimman pituutensa. Taivaisiin kohoava pylväs professorin talon edessä ei myöskään herätä kilpailijoiden epäilyksiä.
Osaan nyt vastata kysymykseeni. Jos myyntipiste on miljoonan sentin, eli 10 000 metrin, eli 10 km:n etäisyydellä, heillä on tietenkin kotiinkuljetus. Toivottavasti varoittavat siitä etukäteen.
Olipas helppo, kun jopa minä keksin ratkaisun varsin vaivatta. Lisäksi mielestäni todistin, että 29524 on maksimaalinen korkeus. Päässälaskuna olisi mennyt, mutta laiskana ihmisenä käytin kynää ja paperia.
Joo, 29524 on maksimaalinen korkeus. Siinä käytetään kaikkia mahdollisia 10:n pylvään yhdistelmiä eri päivinä.
Väsyneenä en ole todellakaan parhaassa koodivireessä. Kehitin vain jonkun mielestäni loogisesti jatkuvan sarjan ja lähetin sen. Kokeilen joskus myöhemmin paremmalla ajalla saada paremman tuloksen sitten.
Aika yksinkertainen verrattuna edellisiin putkaposteihin, ratkesi vajaassa vartissa kynän ja paperin avulla.
Ellen ole kovin väärässä, tämä putkaposti taitaa olla hiukan haastavampi, jos tehtävän kääntäisi toisin päin eli annettaisiin joukko pylväitä ja kysyttäisiin kuinka kauan kukka kasvaa. Antilla näyttää olevan tarkastimessa jonkinlainen ratkaisu tähän tehtävään, mutta itselläni ei ainakaan vielä ole ideaa, jolla tehtävän voisi ratkaista tehokkaasti hiukan isommissa tapauksissa, joissa on esim. 20, 30, 50, 100, 1000 pylvästä. 1000 pylväällä maksimaalinen korkeus (6.6e476) alkaa jo olla niin iso, että ihan mikä tahansa brute force ratkaisu ei kelpaa tarkastamaan puuttuuko välistä jokin luku.
Tällä hetkellä tehtävän tarkistin laskee kukan kasvuajan yksinkertaisesti muodostamalla kaikki mahdolliset pylväiden yhdistelmät (310 = 59049 kpl) ja tarkastamalla taulukosta, milloin tulee ensimmäinen pituus, jota ei pysty muodostamaan. Minun tiedossani ei ole oleellisesti nopeampaa tapaa tarkistuksen tekemiseen, joten tässä on tosiaan oiva lisähaaste niille, joille alkuperäinen tehtävä oli turhan helppo.
Joo... Ehkä vähän turhan helppo tällä kertaa.
Oikea ratkaisu löytyi alle 5 minuutissa ilman laskinta, mutta ehkä asiaa helpotti hieman se, että on kuullut vastaavanlaisen tehtävän erilaisena versiona joskus aiemmin aikoja sitten.
Käytössäsi on orsivaaka (vaaka, jossa on kaksi vaakakuppia ja joka näyttää kun kupit ovat keskenään tasapainossa) ja neljä punnusta. Kuinka ja minkä painoisilla punnuksilla voit punnita näillä tarvikkeilla minkä tahansa tasakiloja painavan esineen painon väliltä 1-40 kg? (Ja vastaushan on täsmälleen sama putkapostin tehtävän kanssa, joskin tässä kysytään vain neljää lukua kymmenen sijaan).
Eikös tuon pienimmän joukkoon kuulumattoman luvun ongelma ole analoginen täydellisen peitteen ongelman kanssa, joka on tunnetusti NP-täydellinen? En tiedä, tuli vain ideana mieleen. Mutta ongelma vaikuttaa kovasti NP-täydelliseltä.
Kauampa kesti ennen kuin aloin tosissani miettiä. Muutamalla aiemmalla yrityksellä en päässyt mihinkään mutta kun tehtävä näköjään on helppo oli pakko puristaa jotain ja löytyihän se ratkaisu. Oli tosiaan helppo.
Aihe on jo aika vanha, joten et voi enää vastata siihen.