Ergebnis 1 bis 9 von 9
  1. #1
    Neuling
    Registriert seit
    17.02.2017
    Beiträge
    2

    Standard Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Hey Leute,

    ich weiß nicht ob von euch noch jemand c0derz kennt, doch ich habe mich daran erinnert, dass es damals eine Art Challenge gab:
    Und zwar sollte man einen Taschenrechner programmieren der so klein wie möglich ist. Soweit ich weiß, hat es jemand geschafft einen mit nur 4KB hinzubekommen!
    Weiß noch jemand wie das geht? Ich weiß noch, dass man in den Projekteinstellungen bei Visual Studio etwas einstellen musste

    Hoffe mir kann jemand weiterhelfen.


    Vielen Dank und Grüße



    PS: Ist noch jemand von damals aktiv? f0gx z.B.

  2. #2
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    795

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Das müsste gehen indem du Code schreibst welchen du nicht gegen irgendeine Lib linkst, also auch nicht die C Standardbibliothek. Kann sein dass das mit der Linkeroption /NODEFAULTLIB geht, habs jetzt nicht getestet, klingt aber danach. Bin auch kein Visual Studio Pro-Gamer. Diverse C Standardfunktionen kannste dir trotzdem z.B. aus der msvcrt.dll laden. Wenn GUI dann natürlich auch ohne irgendwelche Libs mit reiner Winapi.

  3. #3
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    72

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Schreibs in Assembler ;-P

    #define true (rand() > 10) //Happy debugging, suckers!



  4. #4
    Wiederbelebt Avatar von Cystasy
    Registriert seit
    08.05.2015
    Beiträge
    711

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Javascript:
    Code:
    function add(a,b){return (a+b)}
    function sub(a,b){return (a-b)}
    function div(a,b){return (a/b)}
    function mul(a,b){return (a*b)}
    Das sind die 4 Grundrechenarten.. das sind im ganzen 127 bytes. Nun packt man noch ne Funktion hinzu die ein Input String entsprechend splittet (z.b "1+1") und die dann entsprechend eine der 4 Funktionen aufruft.. voila, ein simpler Taschenrechner. Jenachdem wie viel Zeit man aufwendet & wieviele "Hacks" und Kniffe man nutzt, bekommt man das noch viel viel viel kürzer.
    Es ab mal eine Webseite wo es als Challenge war Javascript Dinge in 140 bytes zu quetschen.. da haben leute total krasse Sachen reingequetscht bekommen von Tetris Spielen mit Grafiken bishin zu sonstigen Dingen.. da warn Tasschenrechner das kleinere Übel von der größe her

    Das lässt sich sicher denke ich auch in C++ / C gut umsetzen wenn man die ganzen unnötigen abhängigkeiten dann weglässt und nicht unnötige libs verwendet.
    Ansonsten halt echt vllt in Assembler..

    grüße
    エロ <3

  5. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    sontyp (04.02.2018)

  6. #5
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    795

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Zitat Zitat von sontyp Beitrag anzeigen
    Schreibs in Assembler ;-P
    Hätte ich auch gesagt wenn er nicht im C/C++ bereich gepostet hätte^^ Mit FASM z.B. kannste den output mode auf binary stellen und deine Exe direkt ganz selbst schreiben, dann wirds klein.

  7. #6
    Neuling
    Registriert seit
    17.02.2017
    Beiträge
    2

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Ja sorry hätte echt dazuschreiben sollen, dass es in C/C++ gemacht werden soll

  8. #7
    Wiederbelebt Avatar von Cystasy
    Registriert seit
    08.05.2015
    Beiträge
    711

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Zitat Zitat von pav0c Beitrag anzeigen
    Ja sorry hätte echt dazuschreiben sollen, dass es in C/C++ gemacht werden soll
    Hast es ja in der richtigen Kategorie gepostet, sollte daher schon klar sein das es in C/C++ sein soll
    エロ <3

  9. #8
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    72

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Ich glaube das hier dürfte in die richtige Richtung gehen.
    Der Trick ist also im Grunde genau das zu tun, was hier schon mehrmals erwähnt wurde: Tatsächliche Abhängigkeiten prüfen, separieren, sich vom unnötigen Kram verabschieden.

    Da es sich ja um einen einfachen Taschenrechner handelt, würde ich vom Bauchgefühl her von C++ abraten. Der strukturelle Aufbau der Sprache lässt mich da bereits daran zweifeln, dass wir es schaffen, klein zu bleiben.

    //EDIT:
    So hab mich mal schlau gemacht und noch ein wenig gesucht. Es gibt wohl ein tolles tool, das in der Lage sein soll, deine .exe kräftig runter zu rechnen durch bereits genannte Mechanismen. Dazu hab ich mir ein passenden Makefile zugelegt, dass nach Standard compilierungs Vorgang das Tool drüber laufen lässt.

    Mein Code:
    #include <stdio.h>
    //#include <stdlib.h>

    int main(int argc, char *argv[]) {
    switch (argv[1][1]) {
    case '+': printf("%d\n", ((int)argv[1][0]-48) + ((int)argv[1][2]-48));break;

    case '-': printf("%d\n", ((int)argv[1][0]-48) - ((int)argv[1][2]-48));break;

    case '/': printf("%d\n", ((int)argv[1][0]-48) / ((int)argv[1][2]-48));break;

    case '*': printf("%d\n", ((int)argv[1][0]-48) * ((int)argv[1][2]-48));break;

    default: printf("Failure");break;

    }

    return 0;

    }
    Nach normaler Compilierung: ca. 128kb
    Mittels UPX (oben genanntes Tool): ca. 64kb

    Wir müssen natürlich beachten, dass es sich hierbei um einen Compiler Vorgang unter Windows handelt (weil zu faul Lappi auszupacken), ABER mir ist gerade etwas rätselhaft, was man da noch abspecken möchte.


    //EDIT No2:
    Hab's jetzt noch mal unter Linux mitm GCC kompiliert und dabei einige Compiler Schalter verwendet.
    gcc -0s -ffunction-sections -fdata-sections -Wl,--gc-sections -fno-exceptions -free main.c
    danach noch gestript:
    strip -s -R .comment -R .gnu.version --strip-unneeded a.out

    Ergebnis: 6KB

    Man möge beachten, dass das Parsing in meinem Beispiel unter aller Sau ist. Bin mir nicht sicher, ob das ganze nicht größer wird, wenn ich noch ordentlich parse.
    Geändert von sontyp (10.09.2018 um 18:16 Uhr) Grund: einrückung

    #define true (rand() > 10) //Happy debugging, suckers!



  10. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    novedad (05.02.2018)

  11. #9
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    72

    Standard AW: Taschenrechner mit 4KB - c0derz Aufgabe von früher

    Moin,

    hat sich daran noch mal jemand versucht und ist weitergekommen?

    Greetz,
    sontyp

    #define true (rand() > 10) //Happy debugging, suckers!



Ähnliche Themen

  1. [C#]Taschenrechner
    Von Nec im Forum Source Codes
    Antworten: 2
    Letzter Beitrag: 12.07.2009, 22:50
  2. (vb) Taschenrechner
    Von wombawomba im Forum VisualBasic
    Antworten: 2
    Letzter Beitrag: 01.02.2009, 17:19
  3. c++ Taschenrechner
    Von Wusaaaaa im Forum C, C++
    Antworten: 4
    Letzter Beitrag: 04.12.2008, 22:48
  4. C0derz-Hosting
    Von Steiger_mp im Forum Hosting
    Antworten: 23
    Letzter Beitrag: 29.08.2008, 23:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •