Display Programmieraufgabe
-
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
-
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.
-
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.
-
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: -BlauZur 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.
-
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
-
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.
-
-
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 .