Display Programmieraufgabe



  • Kati27 schrieb:

    Klingt kompliziert oder.

    Das klingt kompliziert?
    Echt jetzt?



  • Naja 🙂

    Wenn einer nur 2 Farben übergibt dann seh ich gerade diese 3 Fälle.

    Rampe geht von links nach rechts (oder umgekehrt)
    Rampe geht von oben nach unten (oder umgekehrt)
    Rampe geht diagonal (das klingt wahnsinnig schwierig )

    Dafür verwende ich lineare Interpolation.

    color = (1-t) *c1 + t * c2 ; //t[0 1]
    

    Kann man das irgendwie durch ein einziges Model abbilden ?



  • Hey Leute also wenn dieser Bewerbungstest nicht schwierig und zeitaufwendig ist dann weiss ich echt nicht mehr. Hier hab ich jetzt mal ein Beispiel für 2 Farben gefunden. Und wie ich schon immer gesagt habe das sind unterschiedliche Fälle.
    Und für 4 Farben das ist wieder ein anderer Fall und anderer Algorithmus !!

    http://www.ucancode.net/Visual_C_Source_Code/Draw_Vertical_Gradient_Horizontal_Gradient_and_Diagonal_gradient_with_vc.htm

    Würde mir jede Firma so was schicken dann könnte ich mich pro Woche nur bei einer Firma bewerben !!



  • Überlege Dir einmal ob das nicht wirklich vielleicht nur ein einziger Fall sein kann? Nämlich eine bilineare Interpolation mit vier Farben an den vier Eckpunkten. So ziemlich jeden genannten Fall kann man wohl darauf zurückführen.

    Aber eigentlich ist das doch hier nur Getrolle, oder nicht? Was sagen die Web-Experten?



  • Und wenn ich jetzt nur mal den Fall diagonal betrachte dann erzeugt dieser auch schon wieder 4 Fälle. nämlich es könnte

    (1) von links oben nach rechts unten
    (2) von links unten nach rechts oben
    (3) von rechts oben nach links unten
    (4) von rechts unten nach links oben

    Für jeden dieser Fälle muss ich wieder anderen Code schreiben. Ich glaub ich sag der Firma ab 🙂



  • Das ist echt kein Getrolle. Wäre das nicht Overkill etwas lineares mit etwas bilineares abzubilden. Das dauert doch viel länger etc.



  • Das einzig "komplizierte" an der ganzen Sache ist wohl eigentlich, dass man vermutlich kein Floating-Point mit späterer Rundung zur Verfügung hat, um die Interpolation zu machen (ich gehe hier jetzt einfach mal von kleinen µCs aus). Darum würde ich also diesen Teil generell halten (bilinear halt) und nur einmal implementieren. Wenn Du für Special-Cases mehr Performance haben willst, kannst Du das später immernoch machen. Der Firma hast Du dann gezeigt, dass Du generalisieren kannst, um Aufwand zu sparen, das Prinzip verstanden hast, etc. pp.

    Aber dass kannst Du ja offenbar alles gar nicht, also würde ich auch vorschlagen, dass Du Dich anderswo für etwas anderes bewirbst.



  • Kati27 schrieb:

    Hey Leute also wenn dieser Bewerbungstest nicht schwierig und zeitaufwendig ist dann weiss ich echt nicht mehr.

    Wenn das für dich so "schwierig und zeitaufwendig" ist, dann bist du für diese Stelle einfach nicht geeignet.
    Es gibt nämlich Leute für die ist das nicht so "schwierig und zeitaufwendig".

    Kleiner Tip: deswegen machen die sowas. Um herauszufinden was die Kandidaten so zusammenbringen. Nen?

    Das einzige was ich bekritteln würde, wenn man davon ausgeht dass du die Vorgaben hier korrekt und vollständig wiedergegeben hast: es ist etwas unklar formuliert.
    Das macht die Sache aber auch nur dann ein kleines bisschen "schwierig und zeitaufwendig", wenn man "die perfekte Lösung (tm)" abgeben möchte.
    Weil man dann u.U. viel Erklärungen in Kommentare schreiben muss und u.U. sogar mehrere Varianten implementieren.



  • Also danke für die zahlreiche Hilfe soweit. Ich hab grad bei der Firma nachgefragt, und sie sagten dass immer 4 Farben übergeben werden. Wenn also einer nur topleft und topright übergibt dann nimmt bottomleft automatisch den Wert von topleft an und bottomright automatisch den Wert von topright an.

    Das beste ist wohl wirklich alles mit bilinear abzubilden. Dann werden aus diesen vielen Fällen nur ein einziger. Hmm.



  • Hier noch ein gutes Beispiel für bilinear . Es ist wirklich nicht so leicht wieviele hier meinen.

    http://supercomputingblog.com/graphics/coding-bilinear-interpolation/2/



  • Kati27 schrieb:

    Es ist wirklich nicht so leicht wieviele hier meinen.

    Doch, ist es. Du kannst es bloss nicht.
    http://psych.colorado.edu/~vanboven/teaching/p7536_heurbias/p7536_readings/kruger_dunning.pdf



  • So auf euren Rat hin, werd ich jetzt nur die bilineare Formel verwenden und hoffen dass ich damit alles abdecken kann.



  • Some example ramps: 16:9
    TL = 0, TR = 3 (BL = 0, BR = 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
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3



  • noch ein Beispiel

    TL = 0, TR = 0, BL = 2, BR = 2

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
    2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
    2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2


  • Mod

    decimad schrieb:

    Aber eigentlich ist das doch hier nur Getrolle, oder nicht? Was sagen die Web-Experten?

    Schmeckt sehr stark nach blurry. Planlos? Check. Irgendwas berufliches? Check. Selbstgespräche? Check. Reagiert nicht auf Antworten? Hier passt es nicht ganz. Anscheinend hat Kati27 so langsam das Stichwort "Interpolation" aufgegriffen. Dafür waren auch nur 4 Seiten nötig, obwohl in der ersten Antwort bereits alles erklärt wurde. Bei blurry wäre die Leitung deutlich länger gewesen. Außerdem hat Kati27 ein paar Mal direkt auf Gegenfragen geantwortet, etwas, das blurry nie tat.

    Kann daher der Fall sein, wo zwei verschiedene Dinge bloß ähnlich schmecken, wie Bärlauch und Knoblauch. Die kommen natürlich trotzdem in den gleichen Topf.

    Ich gehe aber eher von einer Neuinterpretation des blurry-Charakters aus. Das passt zeitlich zu gut (blurry ist kürzlich aus dem Forum vertrieben worden) und der Stil ist zu ähnlich.

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



  • SeppJ schrieb:

    Schmeckt sehr stark nach blurry. Planlos? Check. Irgendwas berufliches? Check. Selbstgespräche? Check. Reagiert nicht auf Antworten?

    Es fehlt die Formanalyse:
    Plenken? Check.
    Erwähnung von "troll": Hat blurry nie getan.

    SeppJ schrieb:

    Ich gehe aber eher von einer Neuinterpretation des blurry-Charakters aus.

    Kann gut sein, die uneinheitliche Schreibweise von Umlauten spricht für einen künstlichen Schreibstil.


  • Mod

    lektrol schrieb:

    Plenken? Check.

    Ist mir ehrlich gesagt nie speziell aufgefallen, dass blurry geplenkt hat. Jetzt wo du es sagst, habe ich nachgeguckt. Es stimmt! Und immer vor Fragezeichen, genau so wie Kati27. Das ist ja wie ein Markenzeichen!

    Erwähnung von "troll": Hat blurry nie getan.

    Ja, dieser Punkt bringt mich (ein wenig) zum Zweifeln. Blurry ging nie auf Trollvorwürfe ein.

    Es gibt natürlich noch die alleroberflächlichste Ähnlichkeit von allen: NameZahl. Blurry legte, wenn ich mich recht entsinne, am Anfang mit dem Namen "blurry33" los (bevor er dann nach diversen Permabanns die Zahl variierte).



  • Kati ist doch langweilig! Ich will das Original (Marc++us) zurück!!



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


Anmelden zum Antworten