Contest: 19 August 2008 - 21 August 2008



  • Das ist egal. Da steht nichts davon also ist es Dir überlassen. Das prog muss halt funzen und meine 16Kb wirst du wohl unterbieten können?



  • Bis wann musst Du die Aufgabe denn abgegeben haben?



  • steht im titel? (21 August)



  • Und warum sollte Dir jemand gratis Deine Hausaufgaben machen?



  • Es sind nich meine Ha's. Ich hab kein Informatik und bin in der 10. Klasse. Willst du meinen Quellcode sehen?



  • LittleGamer3 schrieb:

    Willst du meinen Quellcode sehen?

    Immer her damit. 😉



  • #include <iostream>
    using namespace std;
    
    int main()
    {
    	int eingabe;
    	cin >> eingabe;	
    
    	while (eingabe>=1000)
    	{
    		cout << "M";
    		eingabe = eingabe - 1000;
    	}
    	if (eingabe>=900)
    	{
    		cout << "DCCCC";
    		eingabe = eingabe - 900;
    	}
    	if (eingabe>=800)
    	{
    		cout << "DCCC";
    		eingabe = eingabe - 800;
    	}
    	if (eingabe>=700)
    	{
    		cout << "DCC";
    		eingabe = eingabe - 700;
    	}
    	if (eingabe>=600)
    	{
    		cout << "DC";
    		eingabe = eingabe - 600;
    	}
    	if (eingabe>=500)
    	{
    		cout << "D";
    		eingabe = eingabe - 500;
    	}
    	if (eingabe>=400)
    	{
    		cout << "CCCC";
    		eingabe = eingabe - 400;
    	}	
    	if (eingabe>=300)
    	{
    		cout << "CCC";
    		eingabe = eingabe - 300;
    	}
    	if (eingabe>=200)
    	{
    		cout << "CC";
    		eingabe = eingabe - 200;
    	}
    	if (eingabe>=100)
    	{
    		cout << "C";
    		eingabe = eingabe - 100;
    	}
    	if (eingabe>=90)
    	{
    		cout << "LXXXX";
    		eingabe = eingabe - 90;
    	}
    	if (eingabe>=80)
    	{
    		cout << "LXXX";
    		eingabe = eingabe - 80;
    	}
    	if (eingabe>=70)
    	{
    		cout << "LXX";
    		eingabe = eingabe - 70;
    	}
    	if (eingabe>=60)
    	{
    		cout << "LX";
    		eingabe = eingabe - 60;
    	}	
    	if (eingabe>=50)
    	{
    		cout << "L";
    		eingabe = eingabe - 50;
    	}
    	if (eingabe>=40)
    	{
    		cout << "XXXX";
    		eingabe = eingabe - 40;
    	}
    	if (eingabe>=30)
    	{
    		cout << "XXX";
    		eingabe = eingabe - 30;
    	}
    	if (eingabe>=20)
    	{
    		cout << "XX";
    		eingabe = eingabe - 20;
    	}
    	if (eingabe>=10)
    	{
    		cout << "X";
    		eingabe = eingabe - 10;
    	}
    	if (eingabe>=9)
    	{
    		cout << "VIIII";
    		eingabe = eingabe - 9;
    	}
    	if (eingabe>=8)
    	{
    		cout << "VIII";
    		eingabe = eingabe - 8;
    	}
    	if (eingabe>=7)
    	{
    		cout << "VII";
    		eingabe = eingabe - 7;
    	}
    	if (eingabe>=6)
    	{
    		cout << "VI";
    		eingabe = eingabe - 6;
    	}
    	if (eingabe>=5)
    	{
    		cout << "V";
    		eingabe = eingabe - 5;
    	}
    	if (eingabe>=4)
    	{
    		cout << "IIII";
    		eingabe = eingabe - 4;
    	}
    	if (eingabe>=3)
    	{
    		cout << "III";
    		eingabe = eingabe - 3;
    	}
    	if (eingabe>=2)
    	{
    		cout << "II";
    		eingabe = eingabe - 2;
    	}
    	if (eingabe>=1)
    	{
    		cout << "I";
    		eingabe = eingabe - 1;
    	}
    
    	cout << endl;	
    	return 0;
    }
    


  • Glaubst du mir jetzt?
    Ich möchte nur mal sehen, wie andere das Problem angehen und ob es möglich ist, den Quellcode kürzer zu halten...


  • Mod

    Wieviel von diesen 16kb wohl auf durch die Funktion bedingt sein werden...
    Sorry, aber das sind einfach unsinnige Randbedingungen.



  • LittleGamer3 schrieb:

    Glaubst du mir jetzt?
    Ich möchte nur mal sehen, wie andere das Problem angehen und ob es möglich ist, den Quellcode kürzer zu halten...

    Soll jetzt der Quellcode kürzer sein, oder dessen Kompilat?
    Btw. ist es der Quellcode, der später wartbar und übersichtlich sein muss, nicht das Kompilat.



  • Das fertig kompilierte Programm soll weniger Speicherplatz beanspruchen als meins.



  • Wenn es um die Größe des Binaries geht solltest du die iostream-Anforderung definitiv rausnehmen.
    Außerdem sollte jeder selbst kompilieren dürfen, immerhin kann man durch etwas Feintuning deutlich Platz sparen.

    Aber dir scheint es hier weniger um einen Coding-Contest zu gehen als darum wer die eleganteste Lösung bietet, richtig?

    Also eher eine Frage der Ästethik. Dein Code ist so schon in Ordnung, zwar sehr lang, aber er ist weder schwer zu verstehen noch unübersichtlich. Die 16KB kommen hauptsächlich dadurch zu Stande, dass du die C++ IOStreams benutzt (die verschlingen schon ganz schön was an Platz im Verhältnis zu deinem Code) und wahrscheinlich ist es auch noch ein Debug Build. Mit Mac OS kenn ich mich nicht so aus und ich weiß nicht welchen Compiler du benutzt hast, daher kann ich dir nicht genau sagen woran es liegt.



  • Du hast das genau richtig verstanden. Ich hab mit
    g++ main.cpp -o romq
    kompiliert.

    Postet einfach mal eure Codes oder Vorschläge

    EDIT: Wie kann ich die Iostream rausnehmen?



  • Die andere Richtung wird hier verlangt. Ich bin bei 175 Zeichen 😉



  • .filmor schrieb:

    Die andere Richtung wird hier verlangt. Ich bin bei 175 Zeichen 😉

    und das funktioniert???


  • Mod

    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.



  • LittleGamer3 schrieb:

    .filmor schrieb:

    Die andere Richtung wird hier verlangt. Ich bin bei 175 Zeichen 😉

    und das funktioniert???

    duerfte sogar einfacher sein...

    ich bin derzeit bei 8054 Byte im Release-Mode (mit deinen Compilerflags sogar nur 7819 Byte)

    #include <cstdio>
    
    int main()
    {
    int eingabe;
    scanf( "%u", &eingabe );
    
    while ( eingabe >= 1000 )
    {
    putchar( 'M' );
    eingabe -= 1000;
    }
    while ( eingabe >= 500 )
    {
    putchar( 'D' );
    eingabe -= 500;
    }
    while ( eingabe >= 100 )
    {
    putchar( 'C' );
    eingabe -= 100;
    }
    while ( eingabe >= 50 )
    {
    putchar( 'L' );
    eingabe -= 50;
    }
    while ( eingabe >= 10 )
    {
    putchar( 'X' );
    eingabe -= 10;
    }
    while ( eingabe >= 5 )
    {
    putchar( 'V' );
    eingabe -= 5;
    }
    while ( eingabe >= 1 )
    {
    putchar( 'I' );
    eingabe--;
    }
    
    putchar( '\n' );
    }
    

    geht sicher besser...



  • ich hab noch ein #include vorne drann gemacht, dann hat es den fünf zahlen standgehaten... hat fertig kompiliert jedoch auch 16KB



  • 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.

    kannst du das prog mal so posten, dass es funktioniert?


  • Mod

    LittleGamer3 schrieb:

    kannst du das prog mal so posten, dass es funktioniert?

    Das Programmgerüst hast du doch vorgegeben.


Anmelden zum Antworten