Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
17.03.2007, 11:58 (Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2007 12:01 von Mr.T.)
So, ich möchte mal was testen, um zu sehen wie es so bei Euch allen ankommt.
Es folgt ein Rätsel, welches es mittels eines VIs zu lösen gilt. Für den anfang nichts schweres, es sollte in ein paar Minuten gelöst sein.
Regel: Ein VI muss gepostet werden, sobald es "unterboten" wurde.
Aufgabe: Umrechner ins römische Zahlensystem
Forderungen:
- Numerische Eingabe
- Stringausgabe
- Ein "Umrechner" unseres Zahlensystems in das römische
- es dürfen keine Cases verwendet werden
- für den Anfang reicht die Umrechnung bis 9999
- für den Anfang sollen nur
1000 = M
100 = C
10 = X
1 = I
dargestellt werden (später können D = 500 und L = 50 gerne dazu kommen)
Beispiel:
1984 = MCCCCCCCCCXXXXXXXXIIII (= MDCCCCLXXXIIII)
Meine Vorlage, die sicher zu schlagen ist, es gelten alle Drähte ausser Schleifeneintritte/-ausgänge:
3 VIs von der Palette
1 Konstante
3 Array Konstanten
3 Forschleifen
11 Drähte
VIEL SPAß!
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
17.03.2007, 12:51 (Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2007 14:03 von Lucki.)
Weiß nicht wie Du das genau rechnest, sicher ist nur, daß ich eine For_Schleife weniger habe, deshalb poste ichs mal...
Bin übrigen auch Orwell -Fan, daß ich 1948 statt 1984 eingegeben habe war nur ein Versehen.
Edit: Das oben war nur ein suboptimaler Schnellschuß, aber ich laß das mal so stehen. Noch besser ist diese Variante hier, die ich auch als VI anfüge:
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
1. LVF-Rätsel
Hallo,
ganz schön knifflig mit Deinen Einschränkungen.
Ich habe mir überlegt externen Code (von Matlab oder C) einzubinden. Da gibt es ja schon Beispiele im Netz. Nur habe ich das irgendwie nicht hingekriegt.
Da hätte ich dann 1 Funktion aus LabVIEW, 1 numerisches Element, 1 Stringelement und 2 Drähte. Das wäre dann nicht mehr zu unterbieten. Aber ich weiß nicht, wie ich C-Code einbinde, wenn ich ihn in einem Textfile habe.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Eigentlich sollte das VI erst gepostet werden, wenn es unterboten wird.
Zuzufügen wäre vielleicht noch mal auszutesten, welches VI den kleinsten Speicherbedarf und die kürzeste Ausführungszeit hat.
Gut! Also dann: Step2:
Einbinden der 500 (D) und 50 (L), um die Römische Zahl darzustellen. Und z.B. auch sowas als 2. Stringausgabe: 4 = IV 6 = VI...
Hehe
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
17.03.2007, 21:07 (Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2007 21:13 von Lucki.)
' schrieb:ganz schön knifflig mit Deinen Einschränkungen.
Ich habe mir überlegt externen Code (von Matlab oder C) einzubinden. Da gibt es ja schon Beispiele im Netz. Nur habe ich das irgendwie nicht hingekriegt.
Da hätte ich dann 1 Funktion aus LabVIEW, 1 numerisches Element, 1 Stringelement und 2 Drähte. Das wäre dann nicht mehr zu unterbieten. Aber ich weiß nicht, wie ich C-Code einbinde, wenn ich ihn in einem Textfile habe.
Die Einschränkung - kein case verwenden - ist willkürlich und nicht nachvollziehbar, aber echt blöd ist die fehlende Einschränkung, daß das Problem (- und nicht nur die Ein- und Ausgabe -) in der LabVIEW-Sprache G zu lösen ist. Ohne diese Einschränkung wird das im Sinne der Vorgabe optimale Ergebnis immer so aussehen wie Du sagtest, also also bei einer Aufgabe mit 1 Eingabe und 1 Ausgabe: 1 Bedienelement, gefolgt von einer Leitung, gefolgt von einem Code-Interface-Knoten, dann noch eine Leitung, hinführend zu 1 Anzeigeelement. Aber was hat das Ganze dann noch mit LabVIEW zu tun, oder bin ich hier im falschen Forum?
Gruß Ludwig
17.03.2007, 23:09 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2007 09:44 von Mr.T.)
Haha - Lucki, wer das Rätsel stellt, gibt die Regeln vor!
Nachdem ich Dein VI gesehen habe (was ein grober Regelverstoss war, siehe oben!!) fiel mir folgendes auf:
Du brauchst 3 Schieberegister (ich habe 2), und 3 VIs von der Palette (gleichviele), damit hast Du mich nicht schlagen können, somit ist Dein VI wieder raus, weil ich gerade eben optimiert habe und auch nur noch 2 Forschleifen brauche! Puh, hatte ich nochmal Glück!
Aber das ganze ist jetzt mal das erste Experiment... ich denke ich hätte Schieberegister auch angeben müssen und dafür Drähte weglassen sollen... Und keine roten Punkte zulassen (Typenwandlungen!! Wobei ich einen habe...mist)
Prinzipiell geht es bei diesem Rätsel auf keinen Fall um sauberes und schönes programmieren, sondern um harte Fakten, sprich nur und nur und nur die Anzahl verwendeter Programmierelemente. Zum Vergleich: in C++ würde man die Anschläge, also Zeichen des Codes zählen - was zugegeben einfacher ist, als bei uns mit LV...:DWenn es darum ginge, wäre Dein Vi sicher besser.
Achso, und weiter noch:
Auch das Einbinden externen Codes gehört zu einer Programmiersprache. So auch hier, nur wer´s nicht kann (Ahaaaa! Lerneffekt wg. Wettkampf) hat halt Pech - wer das bei seinen Forderungen aufzählt kann somit ja auch für den Ausschluss solcher Aktivitäten (wie bei mir die Cases) sorgen. Wer´s hinbekommt hat gewonnen und bekommt LV-Respekt !
Letztlich soll diese Rätselaktion nur Spaß machen und nicht zu unnötigen debatten über "Rätselvorschriftenblödsinn" führen. Es soll ja halt noch ein Rätsel bleiben...
So, jetzt fange ich dann auch mal mit dem optimieren an. Mal sehen, ob ich noch die ein oder andere Sache Rausschmeissen kann.
Aktueller Stand:
- Es werden MDLX und I angezeigt. (1561 = MDLXI, 1441 = MCCCCXXXXI) Hier Link
- 2 Forschleifen
- 3 VIs von Palette
- 2 Schieberegister
- 4 Konstanten, davon 2 uninitialisiert und 3 Arrays
' schrieb:Nachdem ich Dein VI gesehen habe (was ein grober Regelverstoss war, siehe oben!!) fiel mir folgendes auf:
Du brauchst 3 Schieberegister (ich habe 2), und 3 VIs von der Palette (gleichviele), damit hast Du mich nicht schlagen können, somit ist Dein VI wieder raus, weil ich gerade eben optimiert habe und auch nur noch 2 Forschleifen brauche! Puh, hatte ich nochmal Glück!
Wenn Du, ohne Dein VI zu posten, angesichts der gesehenen Postings nachoptimierst, so ist das vergleichbar mit einer öffentlichen Ausschreibung, bei der ein bevorzugter Mitbewerber die Angebote der anderen zu sehen kriegt, bevor er sein eigenes Angebot einreicht. Man nennt das dort Wirtschaftskriminalität. Aber Du gehst ja noch darüber hinaus. Stell Dir ein Spiel vor, in dem der, der zu dem Spiel eingeladen hat und gerade dabei ist zu verlieren, mitten im Spiel verkündet, die Regeln haben sich geändert. Genau so ist es, wenn Du jetzt plötzlich anfängst, die Schieberegister mit zu zählen.
Hier im Forum auch mal solche Aufgaben zu stellen, ist ein ein sehr gute Sache, und für dies Anregung gebührt Dir Dank. Es wäre aber dann besser, wenn sich der Aufgabensteller selbst zurücknimmt, d.h. mehr eine Moderatorfunktion übernimmt, und nicht mir vor keinem Mittel zurückschreckendem Ehrgeiz versucht, das Spiel selbst für sich zu entscheiden.
Gruß Ludwig
18.03.2007, 10:54 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2007 10:56 von Mr.T.)
Hehe, nein, das möchte ich ja ganicht. bin doch kein krimineller!
Mein ziel ist ja hier im Moment (Experimentierphase) erstmal herausfinden, welche Kriterien bei uns "nicht C++-lern" gezählt werden sollten.
Deshalb die Idee mit den Registern.
Wie seht Ihr das? Was sollte gezählt werden? Klar variiert das je nach Aufgabenstellung..und man vergisst dann auch mal was bei der Aufgabenstellung, was dann später doch noch dazukommen sollte...ist ja nicht der BND hier
Bist Du der Meinung, wer mal ein VI gepostet hat, darf dann nicht mehr nachoptimieren, weil er Vorteile durch das einsehen anderer VIs hat? Das sollte die Regel mit dem Posting erst nach dem unterbieten genau bewirken. Deshalb auch immer meine Aufzählung der Elemente. Das zeigen des letzten VIs ist dann Ehrensache.
Findet Ihr so´ne Regel sinnvoll? Also, hier nun, um allem aus dem Weg zu gehen, meine oben erwähnte Lösung. Ausgehend von dieser Lösung könnten wir ja das Rätsel neu starten.
Also, wenn Du mich fragst: Keine Erbsenzählerei mit Schleifen und Drähten, kein Siegerehrung, Teamarbeit statt Wettbewerb. Jeder postet, so wie er will, kritisiert die Entwürfe der anderern und bessert sie nach. Zum Schluß stehen dann 1, 2 oder auch 3 gleichwertige Lösungen da, und jeder hat etwas dazugelernt. Und bitte weder für Lösungen noch für Personen einen Oberguru, der dann Kraft seines Amtes verkündet: "Der/Die/Das ist die Nr. 1"