Announcement

Collapse
No announcement yet.

Doppelwürfel programmieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Doppelwürfel programmieren

    Hallo,

    auf die Hoffnung dass ich jetzt nicht gekillt werde... Das Thema gabs schon mal - auch von jemand der mit mir wohl an der gleichen Uni studiert...

    Mir hilft der Thread aber nicht weiter.


    Aufgabe ist es einen Doppelwürfel zu erstellen.
    Ich scheitere jedoch schon an der Konzepterstellung.

    Ich habe einen Satz der lauter

    String code = "eintreffendersendungverspaetetneuerterminfolg t";

    Diesen gilt es nach dem Prinzip des Doppelwürfel zu codieren mit dem Codewort

    String key = "Schwarzwald".

    Wobei Schwarzwald durchnummeriert wird siehe Bild

    normalform.jpg


    Jetzt muss das der key Alphabetisch sortiert werden und dementsprechend die Spalten verschoben werden...

    alpha.jpg


    Jetzt wird Spaltenweise das verschlüsselte Wort ausgegeben....

    String ausgabe wäre dann: rner egnf....



    Ich habe keinen blassen Schimmer mit welcher Datenstruktur das lösbar ist...
    hier auf meinem Papier habe ich tausende Ansätze aber komme nicht weiter...

    Folgendes habe ich schonmal erstellt (Matrix-Style...)

    Code:
    public class Main {
    
    	public static void main(String[] args) {
    
    		String code = "eintreffendersendungverspaetetneuerterminfolgt";
    		int codelength = code.length();
    
    		String key = "Schwarzwald";
    		char[] sc = key.toLowerCase().toCharArray();
    		Arrays.sort(sc);
    
    		int spalten = (code.length() / key.length()) + 1;
    		
    		char[][] matrix = new char[spalten][key.length()];
    
    	
    		int buchstabe = 0;
    		
    		for (int i = 0; i < spalten; i++) {
    			for (int p = 0; p < key.length(); p++) {
    				if(buchstabe < codelength){
    				matrix[i][p] = code.charAt(buchstabe);
    				buchstabe++;
    				} else {
    					matrix[i][p] = ' ';
    				}
    			}
    		}
    		
    		
    		for (int i = 0; i < spalten; i++) {
    			for (int p = 0; p < key.length(); p++) {
    				System.out.print(matrix[i][p]);
    				} 
    			}
    		}
    	
    	
    	
    	}

    Immerhin gibt er mir das ganze ja schonmal in einer Matrix wieder...

    Vielen Dank für die Hilfe!



    achso und der andere Thread.. wie gesagt... hab mir den Code vom Christian Marquardt angeschaut aber ... naja ich blicke das nicht ;D7



    http://cryptblog.de/doppelwuerfel/index.html Hier wirds auch erklärt... (Das Prinzip wies geht..)

  • #2
    Das Programm scheint aber korrekt zu arbeiten. Es nimmt allerdings nur eine Verschlüsselung mit einem Passwort vor.
    Das Ergebnis, was auf deiner o.a. Seite mit der ersten Verschlüsselung erzeugt wird

    1.jpg

    wird ja ausgegeben

    2.jpg

    Grundlegende Datenstruktur ist eine HashMap. Siehe Zeile 132ff im Code
    Zuletzt editiert von Christian Marquardt; 20.11.2013, 19:41.
    Christian

    Comment


    • #3
      Hm ja das sehe ich ja, dass ab 132 das beginnt...

      Frage ist nur, wie orientiere ich mich? Woher weiß ich was das S bis D von Schwarzwald ist?

      Muss ich das programmiertechnisch anders lösen als auf einem Blatt Papier?

      Ich wills ja irgendwie verstehen... nicht kopieren

      Deswegen wäre ich froh, wenn mir einer mal auf die Sprünge helfen könnte... mit normalem Deutsch was zu tun ist?

      Ich liege ja wohl mit dem zweidimensionalen Array total falsch.



      EDIT:

      Wenn ich zB eine Hashmap nehme (so der Plan)

      HashMap<Integer, String> hm = new HashMap<Integer, String>

      Dann kann ich ja nur 0,"s" usw putten Okay der StringBuffer den du da hast, dient den String zusammenzufügen... ist hier sinnvoller.

      Aber trotzdem könnte ich aktuell mit meinem Wissensstand gerade mal den normalen satz einlesen....

      Comment


      • #4
        Vielleicht solltest du es mal debuggen um zu sehen was passiert
        Christian

        Comment


        • #5
          Code:
          for (int i = 0; i < cryptKey.length(); i++) {
          			int p;
          			for (p = 1; p < reihenfolge.length; p++) {
          				if (reihenfolge[p] == cryptKey.charAt(i)) {
          					reihenfolge[p] = ' ';
          					break;
          				}
          			}
          			spalten[i] = p;
          		}

          Warum machst du das?



          Vor den for schleifen: [null, a, a, c, d, h, l, r, s, w, w, z]
          Nach den for schleifen: [null, , , , , , , , s, , , ]
          Zuletzt editiert von chrilux; 20.11.2013, 22:32.

          Comment


          • #6
            Ich kann erst wieder heute abend in den Code schauen
            Christian

            Comment


            • #7
              Erstmal vielen Dank für deine unterstützung...!

              ich wollte eigentlich nur mal kurz fragen ob du mir auf deutsch nochmal erklären kannst, was diese schleife macht...
              Im Endeffekt ordnet sie dem codewort schwarzwald die originale reihenfolge der permutierten zu oder?

              Aber was ist mit dem S? das steht da halt so einzeln... selbst wenn ich es debugge verstehe ich das nicht...

              Comment


              • #8
                Sauber die wurst ich habs geschafft... verschlüsseln funzt... jetzt muss ich mich mal am entschlüsseln versuchen

                Das schöne ist, dass es einfach mal nicht kopiert ist... habs selbst geschrieben aber der ansatz dafür hab ich zu danken

                Danke für die Hinweise

                Comment


                • #9
                  Das ist schön
                  Christian

                  Comment


                  • #10
                    Jetzt stehe ich beim DEkodieren allerdings vorm nächsten Problem


                    Unbenannt.jpg


                    Hier haben wir es so, dass wir die Abfolge: LGHISAEOHLEWT haben und dann das Codewort: Deckel

                    Allerdings kann ich jetzt nicht hingehen und die anzahl der buchstaben des der abfolge durch die anzahl des codewortes teilen...
                    Ich bekomme diese reihenfolge ohne irgendwie zu wissen wie man programmiertechnisch dahinkommt schon gar nicht auf dem papier hin...

                    Gibts hier einen guten Logiker?

                    Habe mir jetzt viele gedanken gemacht... den Klartext weiß ich ja zuvor auch nicht, dann wäre es leichter machbar.

                    Comment


                    • #11
                      Es wird doch gut in deinem Link erklärt.
                      Du kannst doch ein zweidimensionales char oder String Array benutzen und dieses für das eintragen senkrecht befüllen. Das auslesen dann waagerecht
                      Die Anzahl der Spalten ergibt sich aus der Länge des Codewortes (DECKEL = 6). Die Anzahl der Zeilen ergibt sich aus der Länge des dekodierten Strings

                      NRSGSESAIEOZRABINADIILURTNDEHXUSRHEVIEEPAEHEEGTLZF TLIANMEL

                      59 Zeichen dividiert duch 6 ergibt 9,83. Da das nicht glatt aufgeht +1. Ergibt somit 10 Zeilen.

                      Damit hast du die Größe des 2 dim. Array
                      Zuletzt editiert von Christian Marquardt; 22.11.2013, 13:25.
                      Christian

                      Comment


                      • #12
                        uhh hab jetz das modulo genommen und die zwischen den arrays sorted und unsorted die relationen hergestellt und in ein array zuordnung[0-n] gesteckt

                        dann hab ich den StringBuffer benutzt um die zeichen abzutrennen, dabei wird geschaut, ob das die stelle von den jeweiligem codewort im unsortierten array kleiner dem modulo der nachrichtenlänge ist und falls das so ist, trennt er einfach einen buchstaben mehr´von der nachricht ab

                        Comment


                        • #13
                          Naja, wenns geht ist es doch ok
                          Programm ->

                          http://entwickler-forum.de/showthrea...pelw%C3%BCrfel
                          Zuletzt editiert von Christian Marquardt; 06.11.2017, 21:02.
                          Christian

                          Comment

                          Working...
                          X