Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Putkaposti 11: Kummat summat

Sivun loppuun

Antti Laaksonen [18.11.2006 15:10:49]

#

Tässä on uusi putkapostitehtävä:
https://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=kumsum

Tehtävän aihe on aika perinteinen: tiettyjä lukuja yhdistää jokin merkillinen matemaattinen ominaisuus, ja tehtävänä on laatia riitävän tehokas ohjelma näiden lukujen etsintään.

ezuli [18.11.2006 15:18:10]

#

Jokaisen luulisi löytävän vähintään 10 lukua.

FooBat [18.11.2006 19:39:05]

#

Kestipäs kauan keksiä mistä puuttuvat 8 lukua piilekseli :) Taisi liittyä juurikin noihin ezulin mainitsemiin 10 lukuun, joiden kaikkien piti löytää.

Chiman [18.11.2006 20:29:06]

#

Hauska tehtävä. Tehokas algoritmi löytyi helposti: suoritusaika 1,3 s vanhalla koneella, kielenä Python.

Jaska [18.11.2006 20:35:02]

#

Aika helppo tosiaan. Jaksankohan koodata ohjelman, kun on niin paljon muuta hommaa.

Chiman kirjoitti:

suoritusaika 1,3 s vanhalla koneella.

Siis mitä? Koneesiko on 1,3 s vanha?

Chiman [18.11.2006 23:24:05]

#

Jaska kirjoitti:

Siis mitä? Koneesiko on 1,3 s vanha?

Olisikin. 130 Ms on lähempänä.

ezuli [19.11.2006 11:40:30]

#

ezuli kirjoitti:

Jokaisen luulisi löytävän vähintään 10 lukua.

Itse asiassa niitä onkin 11. Alunperin olisi ollut 12, mutta Antti rajasi tehtävän luonnollisiin lukuihin.

*Wipii! Eka putkis minkä sain ratkaistua. Pythonilla 1.2s, tosin kone on 2GHz ja pari apulukua laskin erillään Pythonin rajoituksista johtuen.

ezuli [19.11.2006 13:12:11]

#

(Muokkausaika ummessa.)
Sain optimoitua tuon oikeaoppisemmaksi, eli ei ylimääräisiä apulukuja. Aikakin parani heti 0,9 sekuntia.

setä [19.11.2006 17:26:57]

#

VB:llä voi suoraan räknätä vain 29 numeroisia lukuja joten tarvi pientä kikkailua merkkijonojen kanssa jotta pääsee tuohon 50 numeroon. lopultakin kaikki 104 löytyi 0,83 sekunnissa.

setä [19.11.2006 18:57:47]

#

Pienellä lisävirityksellä 0,51 s.

Thief [19.11.2006 19:00:48]

#

Hehe.. taidan olla käsi tai ajatus ei kulje.
Noh.. tää mun räpellys räknää kyllä oikein... Mutta kauan..... zzzZZZ

Taitaapi vaatia hieman optimointia..

moptim [19.11.2006 19:01:23]

#

Ja minä kun en tuohon mitään algoritmia keksi... :(

Thief [19.11.2006 19:09:56]

#

Tuo mun algoritmi ei varmaan niitä tehokkaimpia ole mutta pahin hidaste on muutama raskas funktio jota käytän..

Niistä kun pääsisi eroon.. Ongelmia tuottaa lukualueen suuruus.

Jaska [19.11.2006 19:35:46]

#

Kannattaa oppia analysoimaan, miten kauan algoritmin suoritus suunnilleen kestää. Ensiksi miettimäni algoritmi oli kanssa tolkuttoman hidas. Nykyisellä algoritmilla ratkaisun saa hetkessä. On vaan niin paljon hommaa opiskelussa, että en juuri ehdi koodaamaan.

ezuli [20.11.2006 16:19:09]

#

ezuli kirjoitti:

pari apulukua laskin erillään Pythonin rajoituksista johtuen.

Huomasinpa taas, että ohjelmointikielissä on hyvä olla jotain rajoituksia. Luvun 10**50 sijaan yritin käyttää 10**50 numeroista lukua, joka olisi tarvinnut melko paljon muistia. Olisi varmaan jäänyt putkis ratkaisematta, jos olisin tuolla suurehkolla testiluvulla saanut ohjelmaani testata.
*ps. Itsensä kanssa on helppo keskustella, ei tule vastaväitteitä.

Tzaeru [20.11.2006 16:25:33]

#

ezuli kirjoitti:

*ps. Itsensä kanssa on helppo keskustella, ei tule vastaväitteitä.

No sitten ei ole tarpeeksi itsekriittinen :)

Kuitenkin, tähän voisikin jopa osallistua ja jotakin vääntää kun vaihteeksi vaikuttaa tehtävältä, joka on jopa omien ratkaisukykyjeni ulottuvissa.

Thief [20.11.2006 17:20:09]

#

Oma softa tekee varmaan hitaus ennätyksen...
Jos viikoksi jätän laskemaan niin saan kyllä kaikki.. :)

Mutta enpä taida vaivautua...

Sen sijaan keskityn keksimään järkevämpää tapaa laskea koska sellainen varmasti on.

setä [22.11.2006 00:09:10]

#

Kokeilin Pythonilla ja erinäisten yritysten ja erehdysten jälkeen sain kuin sainkin tulkin tottelemaan. Aikaa meni kumsumin ratkaisuun 1,8 s tulosteineen, Ilman tulosteita (arvot tallennettuina merkkijonoon) 0,88 s. VB:llä pääsin alle 0,44 s. tulosteineen. Ilman tulostusta 0,37 s. Python on näemmä hidas tulostuksessa.

Juice [22.11.2006 17:58:19]

#

Olipas tämä helppo :)
Pythonilla 0,84 s tiedostoon tallentaen.

mikaelh [22.11.2006 21:23:01]

#

Pistetäämpä tänne ihan vertailun vuoksi omien ohjelmieni suoritusaikoja.

C:llä erästä näppärää suurten lukujen pyörittelemiseen kelpaavaa kirjastoa käyttävä ohjelma ratkaisee tämän vain 15 millisekuntissa.

Samanlainen PHP:llä tehdyn samaista kirjastoa käyttävän ohjelman suoritus puolestaan kestää 0.390 sekuntia (josta user-aika Linuxissa tosin 0.300 sekuntia).

Suorittimena Pentium 4 2.8GHz kummassakin tapauksessa ja ohjelmat tulostivat luvut näytölle (PHP:llä tehty ohjelma tulosti ne jopa suuruusjärjestyksessä).

Juice [22.11.2006 22:08:28]

#

15 ms :O
Kaipa tuon omankin virityksen algoritmiä voisi optimoida, mutta loppujen lopuksi aika pieni merkitys noin käytännössä :p

Thief [22.11.2006 22:13:50]

#

<bleep>
Tässä on joku kikka.
Löytyis ny edes sopiva kirjasto isojen numeroiden kanssa kikkailuun.

Meitsi [23.11.2006 11:44:59]

#

Jaksaiskohan sitä bruteforcen koodailla...

moptim [23.11.2006 19:47:21]

#

Ainut tapa mitä keksisin olisi tämmöinen suunnilleen:

For i = 0 To (10 ^ 50)
  ' tähän tarkistus
Next i

Draiz [23.11.2006 19:57:23]

#

KingOfTheWorld kirjoitti:

Ainut tapa mitä keksisin olisi tämmöinen suunnilleen:

For i = 0 To (10 ^ 50)
  ' tähän tarkistus
Next i

Mikäs idea tässäkin viestissä oli?

setä [23.11.2006 20:57:05]

#

Draiz kirjoitti:

Mikäs idea tässäkin viestissä oli?

Jotain informaatiota siinäkin oli. Moderaattorit, voisko noita kirosanoja siivota?

Blaze [23.11.2006 21:21:35]

#

setä kirjoitti:

voisko noita kirosanoja siivota?

Voihan nuo, jos niin halutaan.

Thief [24.11.2006 21:10:37]

#

Kirosanat on osa suomenkieltä ja oiva tehostus keino.
Mitä niitä nyt turhaan sensuroimaan. :P

setä [24.11.2006 21:35:03]

#

Täällä on enimmäkseen asialliset keskustelut ja värikästä kieltä mutta kirosanat rumentavat. Huono tehostuskeino julkisilla sivuilla.

tgunner [24.11.2006 22:07:11]

#

Missä täällä on muka kirosanoja? o_O

Metabolix [24.11.2006 22:12:19]

#

Ei niitä olekaan, kun Blaze sensuroi ne.

tgunner [24.11.2006 22:52:33]

#

No, mutta minusta kirosanoja ei pitäisi sensuroida, paitsi jos 70% virkkeestä koostuu niistä. Kyllä pieninä annoksina voimasanat ovat OK.

Tzaeru [25.11.2006 00:03:47]

#

pakko lainata viznutia, kun paremmin sen pisti, että kirosanat ovat sinänsä ok, mutta ei niitä välimerkkeinä pidä käyttää.

Thief [25.11.2006 02:23:18]

#

Aivan. Edellinen ukkosenjumala jonka nakkasin oli humoristinen turhautumisen ilmaisu. :D

Mutta takaisin itse asiaa.. Mathematicalla kikkailin ja sain melkoisen määrän sopivia lukuja.. Pitäisi kehitellä siitä vielä oma ohjelma.

FooBat [25.11.2006 02:44:56]

#

Tämäkin tehtävä oli varsin mielenkiintoinen ja tulin vaihteeksi vähän viritelleeksi ohjelmaani. Lukualueesta 10**5000 näyttäisi löytyvän 4566 sopivaa lukua. Noiden laskemiseen meni javalla ja hiukan modatulla apfloat-kirjastolla noin 43 min AMD Athlon 3000+:lla.

tejeez [25.11.2006 21:20:25]

#

KingOfTheWorld kirjoitti:

Ainut tapa mitä keksisin olisi tämmöinen suunnilleen:

For i = 0 To (10 ^ 50)
  ' tähän tarkistus
Next i

En mäkään parempaa keksiny. Oon ihan huono enkä vaan osaa ajatella mitään :(

litra [15.12.2006 11:07:55]

#

Lukuja löytyy kiitettävästi mutta pyöritys kestää tuhat vuotta.
Ehkei brute force ollutkaan järkevä vaihtoehto, ei vaan tullut muuta mieleen :P

Jaska [16.12.2006 16:26:38]

#

Minä suunnittelin brute-force haun, kun ei muuta tullut mieleen. Ensiksi testataan luvut 1,2,3,..., sitten 1^2,2^2,3^2,... ja niin edelleen kasvattaen eksponenttia koko ajan 1:llä.

litra [16.12.2006 20:26:01]

#

ajobenchmarkeista päätellen löytyy paljon optimaalisempikin tapa..

Metabolix [16.12.2006 21:40:45]

#

Pitäisi melkein sensuroida tuo Jaskan paljastus, tuohan on melkein valmis ratkaisu.

Thief [16.12.2006 23:33:33]

#

Jaa ei tuollasella brutettamisella pääse mihinkään.
Tai no.. ehkä viikossa.

Jaska [18.12.2006 20:32:38]

#

Metabolix kirjoitti:

Pitäisi melkein sensuroida tuo Jaskan paljastus, tuohan on melkein valmis ratkaisu.

Eikös se kilpailuaika mennyt jo?

Metabolix [18.12.2006 20:49:18]

#

Ei, vastauksiahan voi lähettää vielä useampaankin postiin. Ne päättyvät vasta, kun vastaussivu ei hyväksy vastauksia ja malliratkaisut julkaistaan. (Ja eiväthän ne kilpailuja ole, vai kuinka?)

Jaska [18.12.2006 20:53:58]

#

Saatte sensuroida tuon minun viestini vapaasti. Mielestäni malliratkaisut voisivat kyllä tulla huomattavasti nopeammin.

Thief [20.12.2006 17:16:08]

#

Oma viritys on suhteellisen optimoitu bruteforce eikä sillä todellakaan pitkälle pötkitä..


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta