Display Programmieraufgabe



  • ich weiss nicht wieso jemand ueberhaupt darauf antwortet wenn es ein bewerbungstest ist. was bringt es der person zu helfen um sie in einen job einsteigen zu lassen der nicht passt. das muss ja nichtmal ueber/unterqualifizierung bedeuten, sondern einfach nicht das themengebiet.

    ich bin ja sonst fuer helfen aber hier verursacht man langfristig das gegenteil, darvin sollte das loesen.


  • Mod

    SeppJ schrieb:

    Ich werde später am Tag mal eine Komplettlösung posten, damit das Elend ein Ende hat.

    Es war ja anscheinend C++ gefragt, weil der Thread im C++-Forum erstellt wurde. Ich habe mal C++11 + OpenGL + GLUT zur Darstellung gewählt (Selbstverständlich gutes, solides, portables OpenGL 1.0. Wer braucht schon Shader?). In einer druckerfreundlichen 80 Spalten Schreibweise. Der Code sollte selbsterklärend sein:

    #include <GL/glut.h>
    #include <map>
    #include <cstdlib>
    void a39(int);float a38=1,a55,b84,q=1;float color=1,i,f12=0;void r(void){glClear
    (040400);glBegin(0x7);a39(0);glEnd();glutSwapBuffers();}float h[7]={4,2,1,1,6},\
    y7=0,d6=0;float colors[4][3]={1};std::map<std::pair<int,int>,std::tuple<float&,\
    float&,float&>>v;void I(float& f){f+=0.02;(f>1&&(f=1));r();}std::map<char,float&
    >a32;float *b[]={&a38,&b84,&a55,&q,&color,&i,&f12,&h[3],&y7,&d6,&colors[3][1],&*
    (h+4)};float f21[][2]={-1,1,-1,-1,1,-1,1,1};void a39(int I){if(I>3)return;glCol\
    or3f(*b[I*3],*(b+I*3)[1],**(2+b+I*3));glVertex2f(*f21[I],f21[I][1]);a39(++I);}v\
    oid II(float&f){f-=0.02;(f<0&&(f=0));r();}std::map<char,float&>ll;void J(char c,
    float&f){ll.emplace(c,f);}void H(){};void p(unsigned char k,int,int){if(k==27)s\
    td::exit(0x0);auto i=a32.find(k);(i!=a32.end())?I(i->second):H();auto a66=ll.fi\
    nd(k);if(a66==ll.end())return;II(a66->second);}void _(char c,float& f){a32.empl\
    ace(c,f);}int main(int a,char*b[]){J(0151,colors[3][1]);_(51,a55);_(0150+0x3,h[3
    ]);J('z',q);glutInit(&a,b);_(0x35+04,h[4]);_('2',b84);_('l',y7);glutInitDisplay\
    Mode(0x12);J(111,*(h+4));_('a',q);_(062+5,d6);J(0155,f12);glutInitWindowPosition
    (0x64,0144);J(0x71,a38);J(0167,b84);_(115,color);glutInitWindowSize(320,0x140);J
    (117,d6);J(0x78,color);J(101,a55);_(0x6A,f12);_(0144,i);_(061,a38);J(0x2d+1,y7);
    glutCreateWindow("Color Gradient");_(56,colors[3][1]);J(0143,i);J(44,h[3]);glut\
    DisplayFunc(r);float O;glutKeyboardFunc(p);H();I(O);glutMainLoop();H();I(h[0]);}
    

    Steuerung:
    [Esc]: Ende

    [1] : Oben links: +Rot
    [2] : Oben links: +Grün
    [3] : Oben links: +Blau
    [q] : Oben links: -Rot
    [w] : Oben links: -Grün
    [e] : Oben links: -Blau

    [a] : Unten links: +Rot
    [s] : Unten links: +Grün
    [d] : Unten links: +Blau
    [z] : Unten links: -Rot


    [c] : Unten links: -Blau

    [7] : Oben rechts: +Rot
    [8] : Oben rechts: +Grün
    [9] : Oben rechts: +Blau
    [u] : Oben rechts: -Rot
    [i] : Oben rechts: -Grün
    [o] : Oben rechts: -Blau

    [j] : Unten rechts: +Rot
    [k] : Unten rechts: +Grün
    [l] : Unten rechts: +Blau
    [m] : Unten rechts: -Rot
    [,] : Unten rechts: -Grün
    [.] : Unten rechts: -Blau

    Zur Steuerung der Höhe und Breite einfach die Größe des Fensters verändern.

    Übersetzung: Sollte jeder beliebige C++11-Compiler können. Die Executable muss gegen GLUT (oder freeglut), GLU und OpenGL gelinkt werden. Es müssen natürlich diese Bibliotheken (bzw. Bibliotheken, die diese APIs implementieren) und die zugehörigen Header installiert sein.

    PS: Der Experte sieht vermutlich sofort, an welcher Stelle ich geschummelt habe. Das ist eben kreative Auslegung der Aufgabenstellung 😉 .



  • Eine Komplettloesung wäre echt super. Wenn derjenige wirklich weniger als 2 Stunden braucht werd ich das Forum nie mehr nerven und mich meiner Unfähigkeit eingestehen.



  • Als gegenleistung für die Lösung deiner Bewerbungsaufgabe sollte es dann aber auch die Stelle geben 😕

    Achja, Arbeitgeber wissen auch wie man googled. Wenn er diesen Thread noch nicht gefunden hat, wird er das noch. 🙄


  • Mod

    Kati27 schrieb:

    Eine Komplettloesung wäre echt super. Wenn derjenige wirklich weniger als 2 Stunden braucht werd ich das Forum nie mehr nerven und mich meiner Unfähigkeit eingestehen.

    😕 Der Beitrag vor deinem ist eine Komplettlösung. Und für 21 Zeilen brauche ich keine 2 Stunden. Erkennst du nicht einmal eine Lösung, wenn man sie dir gibt?



  • Ok. Wieso hast du die Lösung so komisch formatiert. Das sieht aus wie ein Buchstabensalat. Außerdem wäre eine Kommentierung hilfreich. In welcher zeile verwendest du bilineare Interpolation bzw was verwendest du eigentlich für einen Algorithmus. Deine Lösung sieht nach einer High End Variante aus. Die Bibliotheken die du verwendest hör ich jetzt zum ersten Mal 🙂


  • Mod

    Hast du bisher überhaupt mal einen Punkt in irgendeiner Farbe irgendwo auf den Bildschirm gezeichnet?

    Die Interpolation in meinem Programm ergibt sich einfach automatisch aus dem Programmablauf, da ist nirgendwo eine spezielle Formel, die du dir abgucken kannst. Das Ganze findet in den Zeilen 9 und 10 statt, der Rest ist bloß Boilerplatecode drumherum, zwecks Auswertung der Tastatureingaben und Aufmachen des Fensters.

    Das Ergebnis ist, wie du siehst, nicht ganz perfekt, weil diese einfache Interpolation im RGB-Raum in der Mitte zu Artefakten führt, wenn die Farben in den Ecken unterschiedliche Töne haben. Korrekterweise müsste man hier eigentlich im HSV-Raum interpolieren. Und am Besten noch Gammawerte korrigieren, denn eine lineare Interpolation sieht einfach doof aus. Aber das bekommt jemand, der sich bei einem Displayhersteller bewerben will, sicherlich hin, jetzt, wo du einen Anfang hast. Du bist hier schließlich der Experte.

    Die Formatierung ist auf Textkonsolen und Drucker ausgelegt, das macht man im professionellen Umfeld so. Hier im Forum sieht das - zugegeben - etwas unübersichtlich aus.



  • Also ich hab jetzt mal was versucht. Aber es klappt noch net so ganz.

    Kann denn net mal einer eine Lösung versuchen die genau das ausgibt wie ichs gezeichnet habe.

    gradient(topLeft=0,topRight = 3 , bottomLeft = 0,bottomRight = 3);

    und die Funktion spuckt dann sowas hier aus da es ein 16:9 Bildschirm ist

    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3



  • ich hab jetzt mal meinen Code fertig gemacht. Wäre nett wenn ihr mir wenigstens
    mal eine kleine Hilfestellung geben könntet.

    https://github.com/Kati27/Test/blob/master/README.md





  • Bin für jede Hilfe dankbar. Auch was Code design, etc. angeht. Der Code gibt leider noch nicht das obige Bild aus 😞



  • int main( int argc, char **argv )
    {
    	argv[1] = "display";
    	argv[2] = "0";
    	argv[3] = "2";
    
    	argc = 4;
        // ...
    }
    

    Nein, nein, nein.
    Du kannst doch nicht einfach in argv rumschreiben. Was meinst du, fuer wie viele Eintraege das Speicher reserviert?



  • Das ist ja nur zum Testen. Klar wird das später der User machen !!



  • Und hier nochmal mein noch falscher Code. Bitte helfen .

    https://github.com/Kati27/Test/blob/master/test.cpp



  • Hyde++ schrieb:

    int main( int argc, char **argv )
    {
    	argv[1] = "display";
    	argv[2] = "0";
    	argv[3] = "2";
    
    	argc = 4;
        // ...
    }
    

    Nein, nein, nein.
    Du kannst doch nicht einfach in argv rumschreiben. Was meinst du, fuer wie viele Eintraege das Speicher reserviert?

    irgendwo gibt es ein forum
    voll von jugendlichen
    die um ihr taschengeld wetten
    wieviele beitraege sie ergattern koennen
    und wieviele ernste menschen wie dich sie entsetzen koennen
    in einem einzigen thread 😃

    (vielleicht zaehlt word-count noch bonus punkte, wobei quotes vermutlich nicht doppelt zaehlen, smileys mit augen aktionen -> 🙄 😮 verdoppeln die punktzahl des satzes, nehm ich an).

    hat blurry den februar geld pot wieder an sich gerissen? 😃



  • Bitte gebt mir feedback zu meinem Code. Wäre echt hilfreich.



  • Feedback: UK und US Schreibweise von Wörtern mischen ist doof.


  • Mod

    Der gezeigte Code zeugt nicht gerade vom Verständnis für agile Methoden oder des modernen Softwareentwicklungszyklus. Du solltest lieber ein modulares, plattformübergreifendes Framework benutzen, da dieses Projekt für dich im wahrsten Sinne des Wortes mission-critical ist. Das Backend kann dann in einer dynamischen Sprache wie Go oder Rust geschrieben werden, womit du out-of-the-box ein automatisches Deployment pünktlich zur Deadline erreichst. Wichtig ist doch vor allem, dass dein Programm fehlertolerant und skalierbar ist, beides ist derzeit nicht der Fall. Der Tester hat diese Aufgabe schließlich gestellt, da sie nicht-trivial ist und unkonventionelles Denken erfordert. Den derzeitigen Code solltest du auf jeden Fall noch einmal einem Refactoring unterziehen, bis er dann nach mehreren Iterationen sowohl alle Unit-Tests besteht (in diesem Fall sind das low-hanging-fruits), als auch dein Verständnis praxisorientierter Designpatterns widerspiegelt.



  • Der gezeigte Code zeugt nicht gerade vom Verständnis für agile Methoden oder des modernen Softwareentwicklungszyklus.

    Lol. Wie kommst du darauf dass mein Code nicht agil entwickelt wurde ? Genausowenig koenntest du sagen dass er nach Wasserfall entwickelt wurde. Ist ja nur ein Code und kein Entwicklungsprozess. Kein Mensch kann sagen nach welchem Entwicklungsprozess ein Code entwickelt wurde.

    Aber kann mir mal einer sagen was an meinem Code falsch ist ?



  • Das Backend kann dann in einer dynamischen Sprache wie Go oder Rust geschrieben werden

    Backend brauch ich sicher nicht 🙂


Anmelden zum Antworten