Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Putkaposti 31: Polttopuut

Sivun loppuun

Antti Laaksonen [24.06.2009 20:36:18]

#

Uusi putkaposti on ilmestynyt:

https://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=ppuut

Jääkukkien ja alkukukkien jälkeen professori Viherkasvi on siirtynyt polttopuihin.

MIB [24.06.2009 20:39:32]

#

Hmm.. Taas sellainen tehtävä, että olen ihan pellolla. :D
Pitänee odottaa pari vuotta, että tajuaa noita.

Grandi [24.06.2009 20:50:37]

#

1234567891011121314151617181920 20

Milläs tietotyypillä tuon laskeminen onnistuu? Ei taida löytyä C++:sta ainakaan valmiiksi?

Chiman [24.06.2009 20:55:54]

#

Kolmen rivin python-koodilla löytyy 7 ekaan kohtaan ratkaisu. Sitten suoritusaika karkaa perusbrutella turhan suureksi.

Teuro [24.06.2009 20:56:06]

#

long long int on 64 bittinen kokonaisluku, johon tuon pitäisi sopia.

Grandi [24.06.2009 21:20:43]

#

Teuro kirjoitti:

long long int on 64 bittinen kokonaisluku, johon tuon pitäisi sopia.

cout << sizeof(long long int) << endl;

Tulostaa minulla 8.

Lisäksi seuraava koodi:

long long int a = 1234567891011121314151617181920;

Antaa virheilmoituksen:

koodi.cpp:17:21: warning: integer constant is too large for its type
koodi.cpp:17: virhe: kokonaislukuvakio on liian suuri tyypille ölongö

Sami [24.06.2009 21:25:36]

#

Onnea vaan niiden 64 bittisten lukujen kanssa kun sen toiseksi viimeisen vastaus vie >1900 bittiä.

P.S. Kuinka huijausta Wolfram|Alphan käyttäminen on tässä tehtävässä? :)

Grandi [24.06.2009 21:30:46]

#

Itse tehtävä on helppo, mutta ei jaksa etsiä netistä kirjastoa dynaamisille tietotyypeille eikä toisaalta alkaa opettelemaan Pythoniakaan. Ei mielestäni kaikkein parhaiten valittu tehtävä.

vehkis91 [24.06.2009 21:54:41]

#

Pitänee tehdä pythonill, ku c++ ei onnístu suoraan yli 64bittisten muuttujien käyttö... :(


Edit: Outoa, 3 ekaa menee ihan oikein, mutt sitten 5. ja 6 menevät väärin, vaikka niiden arvojen pitäisi kyll mahtua 64bittiseen unsigned long long int -tyyppiseen muuttujaan... :S

Grandi [24.06.2009 22:56:23]

#

vehkis91 kirjoitti:

Edit: Outoa, 3 ekaa menee ihan oikein, mutt sitten 5. ja 6 menevät väärin, vaikka niiden arvojen pitäisi kyll mahtua 64bittiseen unsigned long long int -tyyppiseen muuttujaan... :S

Mulla kävi ihan samalla tavalla. Seitsemäs olikin sitten jo negatiivinen :D

Juice [24.06.2009 23:19:16]

#

Chiman kirjoitti:

Kolmen rivin python-koodilla löytyy 7 ekaan kohtaan ratkaisu. Sitten suoritusaika karkaa perusbrutella turhan suureksi.

Eihän tuossa 8. kohdassakaan mennyt vielä edes viittä minuuttia (Q8200 @ 2.8 GHz) :p

Grandi kirjoitti:

Itse tehtävä on helppo, mutta ei jaksa etsiä netistä kirjastoa dynaamisille tietotyypeille eikä toisaalta alkaa opettelemaan Pythoniakaan. Ei mielestäni kaikkein parhaiten valittu tehtävä.

Ehkä se vaikeus piilee siinä, että viimeiset kohdat saa laskettua inhimillisessä ajassa... Tällaiset tehtävät ovat juuri parhaita. Jokainen saa laskettua ensimmäisen kohdan vaikka käsin, mutta lopussa pitää jo miettiä jotakin älykkäämpää lähestymistapaa.

Sami [24.06.2009 23:40:08]

#

vehkis91 kirjoitti:

Pitänee tehdä pythonill, ku c++ ei onnístu suoraan yli 64bittisten muuttujien käyttö... :(


Edit: Outoa, 3 ekaa menee ihan oikein, mutt sitten 5. ja 6 menevät väärin, vaikka niiden arvojen pitäisi kyll mahtua 64bittiseen unsigned long long int -tyyppiseen muuttujaan... :S

Eikä muuten mahdu, ei ainakaan se tulos...

vehkis91 [24.06.2009 23:40:10]

#

Mun koneesta loppuu mehut toss 8 kohdass, ku toteutin pythonill. :D Pitää varmaan säätää sitä algoritmia vähäsen. :D

Edit, Sami huomasin juu, ku tein pythonill. :P

Ihme_kala [26.06.2009 00:29:47]

#

Eikö noiden pitkien lukujen laskeminen onnistuisi ns. allekkainlaskualgoritmilla? Säilöisi ne numerot vaikka merkkijonoon josta aina muuttaa numeroksi kun täytyy suorittaa laskutoimitus ja sitten muuttaa stringiksi ja yhdistää isoon stringiin jossa on koko tulos.

Grez [26.06.2009 09:20:15]

#

Eihän noiden lukujen laskeminen ole mikään ongelma. En varsinkaan keksi, miksi millään kielellä pitäisi tehdä niin hankalasti, että pyörittelisi merkkijonojen kautta.

Varsinainen ongelma on, jos ei keksi tai osaa googlettaa sopivaa laskualgoritmia, niin 1234567891011121314151617181920 potenssiinkorotuksessa menee hitusen aikaa. Vaikka saisit tehtyä miljoona potenssiinkorotusta sekunnissa (joka tuskin on isomman pään luvuilla mahdollista) niin aikaa menisi silti 1234567891011121314151617,181920 sekuntia, eli yli 39122166849293961 vuotta. Eli voidaan siis sanoa, että isomman pään tehtäviä ei ole käytännössä mahdollista laskea yksinkertaisesti potensseja laskemalla ja näin saatuja tuloksia ynnäämällä.

Metabolix [26.06.2009 09:20:52]

#

Ihme_kala kirjoitti:

Eikö noiden pitkien lukujen laskeminen onnistuisi ns. allekkainlaskualgoritmilla?

Onnistuu. Tehtävän hankaluus ei ole siinä, miten isoilla luvuilla lasketaan, vaan siinä, että kaikkien 1234567891011121314151617181920 puun käyminen läpi yksitellen veisi kotikoneella triljoonia vuosia.


Sivun alkuun

Vastaus

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

Tietoa sivustosta