Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Geheimschrift MIX (Zeichenketten)

Ein Text (Zeichenkette) soll zunächst in zwei gleich lange Teile aufgeteilt werden, und danach werden diese Teile zeichenweise wieder zusammengefügt. Besteht der Text aus einer ungeraden Anzahl Zeichen, wird beim Aufteilen der erste Teil um ein Zeichen länger gemacht als der zweite. Beim Zusammenfügen wird mit dem ersten Buchstaben des ersten Teils begonnen, dann mit dem ersten Buchstaben des zweiten Teils weitergemacht; nun kommt der zweite Buchstabe des ersten Teils, und weiter geht es mit dem zweiten Buchstaben des zweiten Teils usw.

Programmieren Sie zur Überprüfung Ihres Programms die "Entschlüsselungsmethode", sprich die Umkehrung dieser einfachen Geheimschrift.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

6 Lösung(en)

def encode(s):
    count = len(s)/2
    if (len(s) % 2):
        count+=1
    s1 = s[0:count]
    s2 = s[count:len(s)]
    out =''
    for i in range(count):
        out+=s1[i]
        if i < len(s2):
            out+=s2[i]
    return out

def decode(s):
    s1=''
    s2=''
    j=0
    while j < len(s):
        s1+=s[j]
        j+=1
        if j < len(s):
            s2+=s[j]
            j+=1
    return (s1+s2)
              
print decode(encode("1234567"))
print decode(encode("123456"))
print decode(encode("Das ist ein Test"))
                
package ch.santis.programmierenlernen.kapitel7;

public class Aufgabe_7_6 {
	
	public static void main(String[] args) {
		new Aufgabe_7_6().top();
	}
	// Geheimschrift MIX
	void top() {
		
		String text = "Geheimschrift Programm einfachb";
		
		int stringlange = text.length();
		System.out.println(stringlange);
		
		String teil1 = stringteiler1(text, stringlange);
		System.out.println(teil1);
		System.out.println(teil1.length());
		
		String teil2 = stringteiler2(text, stringlange);
		System.out.println(teil2);
		System.out.println(teil2.length());
		
		String encrypted = encription(teil1, teil2);
		System.out.println("Encrypted: " + encrypted);
		
		String decrypted = decription(encrypted);
		System.out.println("Decrypted: " + decrypted);
		
	}
	
	public String decription(String encrypted) {
		int stringlange = encrypted.length();
		
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();
		String decrypted = "";
		
		for(int index = 0; index < stringlange; index++) {
			if(index % 2 == 0) {
				sb1.append(encrypted.substring(index,index+1));
			}
			else if(index % 2 == 1) {
				sb2.append(encrypted.substring(index,index+1));
			}
		}
		decrypted = sb1.toString() + sb2.toString();
		return decrypted;
	}
	
	public String encription(String teil1, String teil2){
		int teil1lange  = teil1.length();
		int teil2lange  = teil2.length();
		int stringlange = teil1lange + teil2lange;
		
		StringBuilder sb = new StringBuilder();
		String encrypted = "";
		
		int teil1counter = 0;
		int teil2counter = 0;
		for(int index = 0; index < stringlange;) {
			if(index % 2 == 1) {
				sb.append(teil2.substring(teil2counter,teil2counter+1));
				teil2counter++;
				index++;
			}
			else if(index % 2 == 0) {
				sb.append(teil1.substring(teil1counter,teil1counter+1));
				teil1counter++;
				index++;
			}
		}
		encrypted = sb.toString();
		return encrypted;
	}

	public String stringteiler1(String text, int stringlange) {
		String teil1;
		double teil1lange = (double) stringlange / 2;
		teil1lange = Math.ceil(teil1lange / 1);
		teil1 = text.substring(0, (int)teil1lange);
		return teil1;
	}
	
	public String stringteiler2(String text, int stringlange) {
		String teil2;
		double teil2lange = (double) stringlange / 2;
		teil2lange = Math.ceil(teil2lange / 1);
		teil2 = text.substring( (int)teil2lange, stringlange);
		return teil2;
	}
	
}
                

Lösung von: Jan Roth (Santis Training AG)

codeMIX = {
  encode: function(str) {
    let mid = Math.ceil(str.length / 2),
        sub1 = str.substr(0, mid),
        sub2 = str.substr(mid),
        out = '';
    for (let i = 0; i < sub1.length; i++) {
      out += sub1[i];
      if (i < sub2.length) out += sub2[i];
    }
    return out;
  },
  decode: function(str) {
    let out = '';
    for (let i = 0; i < str.length; i += 2)
      out += str[i];
    for (let i = 1; i < str.length; i += 2)
      out += str[i];
    return out;
  }
}

console.log(codeMIX.encode('strenggeheim'));
console.log(codeMIX.decode(codeMIX.encode('strenggeheim')));
                                                             // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

# frozen_string_literal: false

def mix(data = '')
  len = data.length
  if (len % 2).zero?
    str1 = data[0..((len / 2) - 1)]
    str2 = data[(len / 2)..len]
  else
    str1 = data[0..(len / 2)]
    str2 = data[((len + 1) / 2)..len] + ' '
  end

  mixed = ''

  (0..(str1.length - 1)).each do |i|
    mixed += str1[i]
    mixed += str2[i]
  end
  mixed[0..(mixed.length - 2)]
end

def demix(data = '')
  str1 = ''
  str2 = ''

  (0..(data.length - 1)).step(2).each do |i|
    str1 += data[i] if data[i]
    str2 += data[i + 1] if data[i + 1]
  end

  str1 + str2
end

a = mix('Streng geheim')
puts 'codiert: ' << a
b = demix(a)
puts 'wieder decodiert: ' << b

puts 'Vorgabe per Mix "decodiert":'
c = mix('Srn eemtegghi')
puts '"decodiert": ' << c

                

Lösung von: Ich Bins (tubs)

import math
from itertools import zip_longest

def encode(s):
    l = math.ceil(len(s)/2)
    a, b, out = s[:l], s[l:], ""
    for x in zip_longest(a, b, fillvalue=""):
        out += "".join(x)
    return out

def decode(s):
    a, b = "", ""
    for i in range(len(s)):
        if i % 2 == 0:
            a += s[i]
        else:
            b += s[i]
    return a+b

s = input("Input: ")
print(f"Encode: {encode(s)}")
print(f"Decode: {decode(s)}")
                

Lösung von: Name nicht veröffentlicht

// C++ 14 | VS-2022
#include <iostream>
#include <string>

std::string encode_text(const std::string& str) {
	std::string out{};
	auto odd{ str.length() / 2 + (str.length() & 1 ? 1 : 0) };
	for (size_t i{ 0 }; i < odd; i++) {
		out.push_back(str[i]);
		out.push_back(str[i + odd]);
	}
	if (str.length() & 1) out.push_back(str.back());
	return out;
}

std::string decode_text(const std::string& str) {
	std::string t1, t2;
	for (size_t i{ 0 }; i < str.length(); i+=2) {
		t1.push_back(str[i]);
		t2.push_back(str[i + 1]);
	}
	return t1.append(t2);
}

int main() {
	const auto s1{ "streng_geheim" };
    std::cout << encode_text(s1) << "\n";

	const auto s2{ "sgterheenigm_" };
	std::cout << decode_text(s2) << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

"Streng geheim" → "Sgterheenigm "

Srn eemtegghi → "Streng geheim"

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Schwer
Webcode: 5z5i-vp58
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen