Konkurs 1000!

0

Witajcie koledzy :)

Postanowiłem zrobić mały konkurs (bez nagród :P).

Zadanie polega na napisaniu prostego programiku, który wczytuje z wejścia liczby z przedziału od 1 do 1000 (0 oznacza koniec danych) i wypisuje silnię tej liczby.

Termin: 14 Stycznia 2004 roku
Zgłoszenia: na mojego maila, plik o nazwie nick.cpp / nick.c / nick.pas, temat maila: [4p] konkurs
Ocenianie:

  1. poprawnośc (znaczy zgodność z moimi wynikami)
  2. czas działania

Jeżeli zadanie wydaje się za proste, to mogę zwiększyć limit wejścia :)

Powodzenia

0

A jakie kompilatory dozwolone? Rozumiem, że te pas'y to z turbo pascala mają być?

// Dopisane
Tak w ogóle, dobrze by było, gdybyś podał te swoje wyniki. Chociażby tą silnię z 1000.

0
  1. Troszke nieciekawy czas. Za duzo projektow do zrobienia mam
  2. Twoje wyniki nie musza byc poprawne :P
  3. Nie widze tam asm, wiec juz mi sie nie podoba.
0
  1. Nie będę brać udziału, nie wygram konkursu, bo i za szybko chodzić moje programiki nie będą...
  2. Jak chodzi o ASM, to nie ma problemu... W Turbo Pascalu jest wbudowany kompilator asambler'a, więc nie powinno być kłopotu z wstawieniem kodu z ASM do Turbo Pascala (Wydaje mi się, że nie powinno być problemu, nigdy na ASM'ie się nie znałem, jak coś wklejałem to gotowy kodzik i nawet nie próbowałem się zastanawiać co robił ;p )
0

Poprawki:

  1. Piszemy we FreePascalu i GCC na platformę i386 (assembler wbudowany może być)
  2. Moje wyniki są poprawne - potwierdził to acm.uva.es
  3. Jak będzie za mało zgłoszeń to mogę przedłużyć termin :)
0

FreePascalu i GCC

nie mozna dac turbo pascala :-/ ? musimy byc sztywnia jak OI ?

0

Wstawki to nie to samo :(
Jest troszke niedopowiedzen. Np. nie wiadomo na jaki system. Czy mozna wykorzystac klastry ;) Czy mozna skorzystac z wczesniej wyliczonych tablic dla pierwszych (moze wszystkich ;) ) wartosci silnii.
No i takze nie wiadomo w jakim systemie maja byc wyniki wyprowadzane (dziesietny, czy mozna szesnastkowo).

A tak swoja droga... to tak na oko 1000! ma jakies 2,5 tys. cyfr dziesietnych 8-0

0

a jaki jest twoj mejl?
samo zrodlo przysylac?

0

a jaki jest twoj mejl?
samo zrodlo przysylac?

Wejdz ort! stronke (ikonka domku przy poscie :) )

// Dryo - a pl literki to co?

0

Jeszcze raz.

Maila dostaniesz klikając na główkę nad moim postem.
Jeżeli kochasz TurboPascala to możeś walnąć we FreePascalu {$MODE DELPHI}.
FreePascal ma więcej możliwości :)

Zasada ogólna - jeden wątek/proces. Bez plików tymczasowych.
Tablicowanie odpada - mam za małą skrzynkę pocztową :).
Wyniki oczywiście dziesiętnie.

System to oczywiście Linux [FPC: 1.0.10, GCC: 3.2.x]

0

wynik 1000! to 4,02387260077093773543702433923e+2567, tak postac wystarczy?

0

heh, mam wynik dokładny, zajmuje 14808 bajtów, pozostało jeszcze sformatować go do kodu 10tnego, o matko, liczyło się ponad dwie minuty 8-)

[dopisane]

ups! jaka jazda! ten wynik to 10000! a nie 1000! Vogel, więc możesz spokojnie rozszerzyć zakres wprowadzanych liczb [cygaro]

[znowu dopisane]
no cóż, Marooned mnie ubiegł, więc pochwalę się, że 1000! w hex to:

<font face="Courier New">0002 A2A7 7333 8969 B740 DE6E 2B29 1FD8
DD6E E62A 2B41 525A B61C BE52 489B 6CF3
44C2 3231 711B 6D9F 34E0 F13A B50E AF1A
D3DD 9277 1EC2 6B4B 9EA8 0411 C866 B1CC
BD85 5F83 26ED AB10 8327 55E1 682D 3E7A
9133 5E36 7032 9BC1 571B 5208 D72F 7D6B
E814 83A6 E670 8ABF 913B 789F 4183 8E9A
73C1 BA82 E3A9 5657 0405 A660 A17E 1125
838B C810 C8D2 C639 1548 1914 EA20 2867
A563 A41B 6AEF EF5F EAC3 00A7 8803 A30E
B995 2088 42EB EBA8 7293 97A8 CD90 87E2
8FB1 55A3 DE0F 18DD 90E6 4A92 93AF 6487
A5AA BDAB 855F A254 FCBD C9F1 1160 60BC
2E2B 4410 E55E 7368 B844 D9BF 0AEC A92D
EB01 7DEF 69AF 777E 8D4E DB1F 1B92 6AE0
1DF3 366A BB9E 4568 FC08 FE25 5B68 BCA0
E483 82A8 E6DF 1C7B 0BA3 3BC2 225C C512
B391 76A2 6B13 098E 733E 5141 7224 BE36
FBD9 33A8 A7D9 8A08 F356 CF01 0F0F C59B
9F1E 32D3 FB43 209A 82FA 0E7F 69E3 02FC
B0F2 0362 B86C BBEB 08B8 1B1B A07F 08AB
119C E5E0 92D0 9996 B710 5887 7932 7D91
EE80 EB67 9A99 F0FD CA7E B4A5 0EF1 7429
5E94 D590 E3CF 8BF3 7D23 E5B2 2DCD 79A4
AC2C 1EA7 D1D5 5170 789F CD2F CBB3 EA52
EAD4 F711 6F86 2578 F5E2 2421 C90C D0A7
EE09 5903 1506 31F2 7305 1914 29A5 4CAC
E66D D076 C51A 9403 4B31 BEBE C406 EE46
0181 225E 03A9 A22C 51E6 A2A8 DB4A 94FD
3526 0511 5CAF 251B 14DF 0CEC 523C 48B7
9B58 B0FC 0676 792D 38A0 D615 23EB 75F5
CBC3 3EBD A1B1 9933 878C E705 0356 BD22
8CE9 327A 9916 F9FF 3BB5 B6BE EDFE 5382
B861 D6C4 DA52 A975 4B6F EEC8 A993 72B4
3AFA 7808 836D 281C 5B2C DF79 1CF7 6D6C
737A AD32 C5ED 7475 855F C15C 3F45 C470
5DD0 D6B4 0786 56D0 27CF EE6F 3777 2E03
C35C 0DCB BDAA 25EA 64D6 865C 87CA C0A9
A999 EB88 D7A1 6515 811A 7719 2071 189C
353C 1E72 242A 4F31 06CE F2BA D107 5549
B4EF D688 5690 F3F5 8C1F 4686 951C C543
1184 28EC 653E 3C6F BDB4 2793 0F62 4680
672C 1E70 C25D B7E7 B670 16A9 5B30 DBA5
6D00 8375 9EAC 93A8 E4D0 C548 53AA 43F1
97B9 6FD7 0696 AE57 50D7 D1F0 427B 8DBC
FAFC 8B99 24D5 1340 FBF7 1BC2 2780 FBA7
6525 F5E5 B91A 2461 983B 60BF 087D FDD8
9DCB C6F7 892D 9E4C 5D55 D106 D45F 77E4
FC1C 44A3 76D6 93BF B8B1 60F1 2ED1 BDF5
F4F1 127E 61D9 DEC2 DC1B BA43 A6FF 47D2
94DE 7A67 CDF3 EF90 9376 6709 2517 E985
642D 1950 31C6 F533 9C1C EA60 7A69 9C55
E75C 5479 CBD3 0DDA CCAB 3074 72AA 67A6
A9A5 47D7 E1EB A123 1441 93E6 D293 3556
DDEB 5161 51EA CF0B 48CE 0889 2236 ABFB
74BF 0CEE 3A0E 4599 7301 027F 2A53 9906
9769 4F14 DE4F AC0C 908E EAEE DF3D BB45
C4CE 9F74 4FEF 88EC 1068 C520 56B1 6DA0
99E1 FB62 0BD9 0DE2 5534 B5E8 20B3 67A4
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 </span>

a liczy się na moim PII 300 w 0.82s
niestety konwersja na system dziesiętny trwa całe wieki
(w moim wypadku cały wiek trwa ok. 260s).

ale ambitnie policzę 10000! i nikt już mi nie podskoczy. zresztą, wynik tego (szesnastkowo) liczy się w kilkanaście sekund, ale ta zasrana konwersja... conajmniej cała noc.

0

wynik 1000! to 4,02387260077093773543702433923e+2567, tak postac wystarczy?

Nie - ma być dokładna.

Łukasz - nie prowokuj, bo to się źle skończy :)

// teraz mogę prowokować, mam szybki algorytm, który radzi sobie z 20 razy wyższym zakresem silni tak z dziesiętnym, jak i z szesnastkowym wynikiem. rozszerz wymagania! - ŁF

0

[code]40238726007709377354370243392300398571937486421071463254379991042993851239862902059204420848
69694048004799886101971960586316668729948085589013238296699445909974245040870737599188236277
27188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181
04582578364784997701247663288983595573543251318532395846307555740911426241747434934755342864
65766116677973966688202912073791438537195882498081268678383745597317461360853795345242215865
93201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589
32076716913244842623613141250878020800026168315102734182797770478463586817016436502415369139
82812648102130927612448963599287051149649754199093422215668325720808213331861168115536158365
46984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953
31910172335555660213945039973628075013783761530712776192684903435262520001588853514733161170
21039681759215109077880193931781141945452572238655414610628921879602238389714760885062768629
67146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274
62228998800519544441428201218736174599264295658174662830295557029902432415318161721046583203
67869061172601587835207515162842255402651704833042261439742869330616908979684825901254583271
68226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612
83186078838615027946595513115655203609398818061213855860030143569452722420634463179746059468
25731037900840244324384656572450144028218852524709351906209290231364932734975655139587205596
54228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259
89949022222176590433990188601856652648506179970235619389701786004081188972991831102117122984
59016419210688843871218556461249607987229085192968193723886426148396573822911231250241866493
53143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644
56909907315243327828826986460278986432113908350621709500259738986355427719674282224875758676
57523442202075736305694988250879689281627538488633969099598262809561214509948717012445164612
60379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595
74178516082923013535808184009699637252423056085590370062427124341690900415369010593398383577
79394109700277534720000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000[/code]

0

Czemu nie może być tablicowanie? Przecież tablica może być wypełniona przy starcie programu, później tylko pobrać wartość - jeśli byś mierzył tylko czas między wprowadzeniem liczby a wypisaniem wyniku, taki program by wygrał :D

0

Chodziło mi o to, abyście nie deklarowali czegoś takiego:

const var = array[1..1000] of string = ('1', '2', .....................)

bo to zajmie kilka mega.

Marooned - wynik wygląda poprawnie, ale mi chodzi jeszcze o szybkość działania programu :)

0

Chodziło mi o to, abyście nie deklarowali czegoś takiego:

const var = array[1..1000] of string = ('1', '2', .....................)

bo to zajmie kilka mega.

dokladnie 1000 * 4b = 4kb

/* string zajmuje wiecej niz 4B :) */

// o czym ty do nas rozmawiasz? po pierwsze 4000b <> 4kB, po drugie wszystkie wyniki to będzie 1000 * średnio 2kB, a więc rzeczywiście kilka MB - ŁF

0

moze w pascalu, bo w c++ int to 4 bajty

// a jak chcesz upakować do czterech bajtów na przykład 14! = 87178291200, czyli 2 razy ponad zakres 2^32??? - ŁF

0

Ktos tu przegial :-D
Dobra. Teraz vixen03.
Jak juz Łukasz Fronczyk wspomnial: 10004B = 4000B (zakladam, ze b to Bajty, a nie bity).
W ludzkim swiecie, to rzeczywiscie bylogy to 1000 kilo bajtow. Jednak my zyjemy w innym swiecie. U nas nawet jak sie idzie do sklepu to sie prosi 1024 gramy jablek (czyli jeden kilo).
Dlatego 1000
4B < 4KB
A teraz to co ja wspomnialem (to w /* / jakbys sie nie domyslil :P ).
Jak zadeklarujesz:
const var tab = array [1..1000] of string...
To masz 1000 elementow o rozmiarze... 256 bajtow, bo 1 string domyslnie tyle zajmuje. Jezeli zadeklarowane by to bylo:
const var tab = array [1..1000] of string[3]
to wtedy byloby te 1000
4.
A teraz lecimy dalej. Nie mozna sie ograniczyc do 3 znakow, poniewaz kolejne stringi, jakie nalezaloby wpisywac to:
'1', '2', '6', '24', '120', '720', '40320'
Jak widac, juz przy pozycji 7 mamy wiecej niz 3 znaki. A pomysl ile by bylo, gdyby to co Łukasz Fronczyk podal bylo zapisane dziesietnie :) W pascalowym stringu bys nie zmiescil.

0

no i co z tym konkursem, w ogóle ktoś poza mną coś wysłał?

0

Nie. Zresztą Twój załącznik też nie doszedł.

Zwycięzcą ogłaszam Łukasza F., gdyż

  1. jego wynik wygląda na poprawny
  2. Marooned wysłał efekt pracy gościa z Politechniki Poznańskiej, informując mnie zresztą o tym na gg :)
  3. nikt inny nic nie zgłosił...

// uuu, to jestem także ostatni (-; - ŁF

0

Komentarz... (nie mogłem się powstrzymać).

Ustalono że odbędą się zawody lekkoatletyczne pomiędzy prezydentem USA i pierwszym sekretarzem KPZR. Wygrał amerykanin...
W USA gazety pisały... "Nasz prezydent pierwszy, rosjanin ostatni".
W ZSRR... "Prezydent USA przedostatni, Sekretarz partii drugi"...

0

Przepraszam za wygrzebywanie z czelusci forum, ale nudzilo mi sie i zrobilem sobie taki programik, jak w temacie i w zwiazku z tym chcialbym sie dowiedziec w jakim czasie (wraz z wypisaniem postaci dziesietnej) dzialal program zwyciezcy (dokladniej chodzi mi o czasy dla 1000! i 10000!). Mam jeszcze jedno pytanie, gdzie mozna sprawdzic poprawnosc wynikow?

0

Zassaj z działu download i pomierz sobie sam wszystko...
http://4programmers.net/view_file.php?id=1354

1 użytkowników online, w tym zalogowanych: 0, gości: 1