Contest: 19 August 2008 - 21 August 2008
-
Hi LittleGamer3,
12976 Byte mit MacBook Pro auf Mac OS X 10.5
keine Optimierungen: g++ spille.cpp -o romq
#include <iostream> const char letters[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; const unsigned int values[] = {1000, 500, 100, 50, 10, 5, 1}; int main() { int eingabe; std::cin >> eingabe; unsigned int i = 0; while(eingabe){ unsigned int j = values[i]; if(eingabe>=j){ std::putchar(letters[i]); eingabe -= j; } else ++i; } std::putchar('\n'); return 0; }Gruß,
CSpille
-
Hi LittleGamer3,
die Binaries sind so groß, weil dein Windows-Compiler den kompletten
iostream-header reinpackt -> Mein Programm wird auch weit über 100KB groß.Ich kann natürlich gegen deine vorgegebene Schablone verstoßen

#include <cstdio> const char letters[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; const unsigned int values[] = {1000, 500, 100, 50, 10, 5, 1}; int main() { int eingabe; std::scanf("%u", &eingabe); unsigned int i = 0; while(eingabe){ unsigned int j = values[i]; if(eingabe>=j){ std::putchar(letters[i]); eingabe -= j; } else ++i; } std::putchar('\n'); return 0; }Unter Mac 12692 Byte...
und das Binary wird auch unter Windows in die nähe des Spitzenreiters kommen,
ich denke sogar leicht drunter sein...Gruß,
CSpille
-
for(int i=0,w=1000;eingabe>=w-w/(10-i%2*5)&&cout<<"MDCLXVI"[i+(2-i%2)*((eingabe-=w)<0&&(eingabe+=w+w/(10-i%2*5)))]||(w/=5-++i%2*3););Kein echter Versuch von Obfuscation. Ohne Subtraktionsregel ist es allerdings langweilig, und als Nebenbedingung habe ich mir gestellt, alles wichtige in einen einzelnen Ausdruck zu stecken. Nächste Stufe könnte sein, diesen Ausdruck regulärer zu gestalten ( x op ( y op ( z op ( ... usw ) ) ).
-
CSpille schrieb:
#include <cstdio> const char letters[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; const unsigned int values[] = {1000, 500, 100, 50, 10, 5, 1}; int main() { int eingabe; std::scanf("%u", &eingabe); unsigned int i = 0; while(eingabe){ unsigned int j = values[i]; if(eingabe>=j){ std::putchar(letters[i]); eingabe -= j; } else ++i; } std::putchar('\n'); return 0; }Unter Mac 12692 Byte...
Welche Compilerversion verwendest du?
Bei mir ist das Binary 14088 Bytes gross (i686-apple-darwin8-g++-4.0.1)...
-
Hi Styx,
ich verwende:
i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5484)Aber ich hab dein Programm mal kompiliert... Deins ist 20 Byte kleiner...
Gruß,
CSpille
-
Hi @all,
#include <cstdio> int main() { int eingabe; std::scanf("%u", &eingabe); bool b = false; unsigned int v=1000; char letters[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; char* letter = letters; while(eingabe){ if(eingabe>=v){ std::putchar(*letter); eingabe -= v; } else { v /= (b) ? 5 : 2; b = !b; ++letter; } } std::putchar('\n'); return 0; }12652 Bytes...
Gruß,
CSpille
-
camper schrieb:
S.T.A.L.K.E.R. schrieb:
Dein Code ist so schon in Ordnung, zwar sehr lang, aber er ist weder schwer zu verstehen noch unübersichtlich.
Ein sehr langer Code ist auch immer unübersichtlich.
int i = 0, wert = 1000; while( eingabe > 0 ) if ( eingabe >= wert ) { cout << i["MDCLXVI"]; eingabe -= wert; } else wert /= ++i % 2 ? 2 : 5;Dürfte kaum zu erheblich kleinerem binary führen.
Bei meiner heiligen Milchkuh, was ist i["MDCLXVI"] für eine kranke Shitkacke???
-
OMGLOLWTF schrieb:
Bei meiner heiligen Milchkuh, was ist i["MDCLXVI"] für eine kranke Shitkacke???
Das gleiche wie "MDCLXVI"[i]. Du hast 'ne Milchkuh?
-
Ja, ich habe eine Milchkuh. Aber leider melke ich sie viel zu selten, weil ich die meiste Zeit meinen Hühnern das Fell über die Ohren ziehen muss.

Erbitte Links zu weiterführenden Erklärungen!
-
Brauchst keinen Link, p[i] ist definiert als *(p + i). Da die Addition kommutativ ist, ist das gleich *(i + p) => i[p].
-
@CSpille
@Thread StarterIhr habt beide einen Fehler
Ihr kennt doch den Film Rocky? Gut Rocky 4 Steht auf der Verpackung Rocky IV nicht IIII
IIII gibt es nicht. Genau wie eine 9 = IX und nicht VIIII ist :). Nur das mal zu römischen Zahlen.
-
OMGLOLWTF schrieb:
Ja, ich habe eine Milchkuh. Aber leider melke ich sie viel zu selten, weil ich die meiste Zeit meinen Hühnern das Fell über die Ohren ziehen muss.

Erbitte Links zu weiterführenden Erklärungen!
-
Danke, jetzt weiß ich endlich, warum sie so dicke Euter hat!
Werde sie gleich mal leer nuckeln!

-
@jd:
LittleGamer3 schrieb:
Die Subtraktionsregel muss nicht beachtet werden (=>wikipedia).
Ich bin mir nicht sicher, ob das von dir Ernst gemeint war

LittleGamer3 schrieb:
Bsp:
76 = LXXVI
512 = DXII
566 = DLXVII
316 = CCCXVI
4444 = MMMMCCCCXXXXIIIIAber du hast Recht... Ein Fehler ist drin...
Bei dem 3. Beispiel krieg ich ein anderes Ergebnis als angegeben ^^Gruß,
CSpille
-
jd schrieb:
Ihr habt beide einen Fehler
Ihr kennt doch den Film Rocky? Gut Rocky 4 Steht auf der Verpackung Rocky IV nicht IIII
IIII gibt es nicht. Genau wie eine 9 = IX und nicht VIIII ist :). Nur das mal zu römischen Zahlen.ohne Subtraktionsregel stand in den Regeln.
und das Programm von styx verbraucht auf meinem rechner genau 5096 Byte.
-
-
Ich denke, bei diesem kleinen Programm ist die Grösse des Binaries nur abhängig vom verwendeten Compiler (vielleicht auch noch Version + Optimierungseinstellungen) und dem eingesetzten Betriebssystem.
Gruss
Styx
-
CSpille schrieb:
Hi @all,
#include <cstdio> int main() { int eingabe; std::scanf("%u", &eingabe); bool b = false; unsigned int v=1000; char letters[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; char* letter = letters; while(eingabe){ if(eingabe>=v){ std::putchar(*letter); eingabe -= v; } else { v /= (b) ? 5 : 2; b = !b; ++letter; } } std::putchar('\n'); return 0; }12652 Bytes...
Gruß,
CSpille5632 Bytes unter MSVC9 mit folgenden Cmdlines:
Compiler: /O1 /Os /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /GF /FD /MD /GS- /Gy /Fo"Release\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
Linker: /OUT:"test4.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release\test4.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
-
Was hat das alles noch mit C++ zu tun?
-
Tachyon schrieb:
Was hat das alles noch mit C++ zu tun?
Die Headerdatei...

Aber ich gebe dir Recht, mit OOP hat das von Anfang an nichts zu tun gehabt...
Aber da C eine Untermenge von C++ ist...