Mehrdimensionale Felder (Felder)
Schreiben Sie ein einfaches Kodierungsprogramm, das ein zweidimensionales Array mit 26 Spalten und 2 Zeilen enthält. Die 1. Zeile soll die Zeichen A - Z, die 2. Zeile - das Code-Alphabet, d. h. das um einen bestimmten Wert verschobene "normale" Alphabet aus der 1. Zeile - z. B.: 2. Zeile: C D E F G H I J K L M N O P Q R S T U V W X Y Z A B. Nun soll ein beliebiger Text eingegeben werden (Eingabeende mit ";"), wobei nur Kleinbuchstaben, Großbuchstaben und das Sonderzeichen ";" als Eingabezeichen erlaubt sind, alle anderen Zeichen sollen ignoriert werden. Wenn das Zeichen ";" eingegeben wird, soll das Programm den kodierten (ausgetauschten) Text ausgeben und sich beenden.
0 Kommentare
7 Lösung(en)
from string import ascii_letters, ascii_lowercase as l, ascii_uppercase as u
lines, cur, shift = [], None, 24
mapped = str.maketrans(ascii_letters, l[-shift:] + l[:-shift] + u[-shift:] + u[:-shift])
while not cur or cur[-1] != ";":
lines.append(cur := input())
for line in lines:
print("".join(filter(lambda x: ord(x) in mapped, line)).translate(mapped))
Lösung von: Name nicht veröffentlicht
/*==================================================================*\
| Ich hätte für eine cäsar-verschlüsselung wohl sicher nicht den |
| umweg über ein mehrdimensionales array genommen; genauso sicher |
| hätte ich mir das getu mit der einzelzeicheneingabe und dem |
| abschließenden semikolon erspart. Aber sei's drum. |
\*==================================================================*/
// hier der kern des ganzen:
// das zweidimensionale array
let RotatedCharDict = function(offset) {
let out = [];
for (let i = 65; i <= 90; i++) {
out.push([String.fromCharCode(i), '']);
out[out.length-1][1] = (i + offset > 90) ?
String.fromCharCode(i + offset - 26) : String.fromCharCode(i + offset);
}
return out;
}
// ausgabemaske
document.write('<div id="code"></div>');
let myTable = new RotatedCharDict(3), // A => C, B => D &c.
listening = true, //......................................... s. u.
code = document.getElementById('code');
// eingabe
document.addEventListener('keypress', function(evt) {
if (listening) { //.......................................... s. o.
if (evt.key == ';') listening = false;
else {
let c = evt.key.toUpperCase(),
out = '';
for (let i = 0; i < myTable.length; i++)
if (myTable[i][0] == c) out = myTable[i][1];
code.innerHTML += (out == '') ? evt.key : out;
}
}
});
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
zeichen = [['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
['C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B']]
print('Text eingeben: ', end='')
eingabe = []
from pynput import keyboard
# The event listener will be running in this block
with keyboard.Events() as events:
for event in events:
if event.key == keyboard.KeyCode.from_char(';'):
break
else:
if (str(event.key)[1:2]).upper() in zeichen[0]:
eingabe.append(str(event.key)[1:2].upper())
eingabe.pop(-1)
text = ''
a = 1
for i in eingabe:
if a == 1: text += i; a = 0
else: a = 1
def code(text, a):
if a == 0: b = 1
else: b = 0
t = ''
for i in text:
try:
index = zeichen[a].index(i)
t += zeichen[b][index]
except:
pass
return t
verschlüsselt = code(text,0)
print('\nverschlüsselt:', verschlüsselt)
entschlüsselt = code(verschlüsselt,1)
print('entschlüsselt:',entschlüsselt)
Lösung von: Alex Groeg (Freies Lernen)
# frozen_string_literal: false
# Klasse fuer Caesar-Verschluesselung
class MultiDimField
@encode_dict = nil
@decode_dict = nil
@shift = 0
ENCODE = true
DECODE = false
attr_accessor :encode_dict, :decode_dict, :shift
def do_the_shift
alphabet = ('A'..'Z').to_a
(0..25).each do |i|
@encode_dict[alphabet[i]] = alphabet.rotate(@shift)[i]
end
@decode_dict = @encode_dict.invert
end
def initialize(shift = 1)
@encode_dict = @decode_dict = {}
@shift = shift
do_the_shift
end
def code_char(char, direction = ENCODE)
dict = direction == ENCODE ? @encode_dict : @decode_dict
out = char == char.capitalize ? dict[char] : dict[char.capitalize].downcase
return char if out.nil?
out
end
def code_string(str, direction = ENCODE)
out = ''
str.each_char do |c|
out += code_char(c, direction)
end
out
end
end
# Testcode:
my_caesar = MultiDimField.new(2)
test_char = my_caesar.code_char('a')
puts test_char # => c
test_string = my_caesar.code_string('Hallo, Welt!')
puts test_string # => Jcnnq, Ygnv!
puts my_caesar.code_string(test_string, MultiDimField::DECODE) # => Hallo, Welt!
Lösung von: Ich Bins (tubs)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Swaping {
private final static char[] ALPHABET = new char[26];
private static final char[] SHIFTED_ALPHABET = new char[26];
protected static String getUserInput() throws IOException {
return new BufferedReader(new InputStreamReader(System.in)).readLine();
}
protected static String swapString(String input) {
StringBuilder builder = new StringBuilder();
for(char c : input.toCharArray()){
if(c == ';'){return builder.toString();}
for(int i = 0; i < ALPHABET.length; i++){
char testedChar = ALPHABET[i];
if(testedChar == c){builder.append(SHIFTED_ALPHABET[i]);}
}
}
return "failure";
}
protected static void fillAlphabets(int key) {
for (int i = 0; i < ALPHABET.length; i++) {
ALPHABET[i] = (char) (97+i);
SHIFTED_ALPHABET[i] = (char) ((i+key)%26+97);
}
}
}
Lösung von: Name nicht veröffentlicht
// NET 6.x | C# 10.x | VS-2022
static string EncryptText(string text, int move, char eof, bool toUpper = true)
{
var getChar = (char c) => c is >= 'A' and <= 'Z' ? (char)('A' + ((c - 39 + Math.Abs(move)) % 26)) : c;
return new string(text.Split(eof)[0].Select(c => char.IsUpper(c) || toUpper ? getChar(char.ToUpper(c)) : char.ToLower(c)).ToArray());
}
var text = "Das hier ist ein Beispieltext; der auch noch weitergeht!";
Console.WriteLine(EncryptText(text, 5, ';', true));
Lösung von: Jens Kelm (@JKooP)
// C++ 14 | VS-2022
#include <iostream>
std::string encrypt_text(std::string txt, int move, char eof, bool upper_case = true) {
const auto& get_char{ [&move](char c) { return c >= 'A' && c <= 'Z' ? (char)('A' + ((c - 39 + abs(move)) % 26)) : c; } };
std::string txt_out{};
for (const auto& s : txt.substr(0, txt.find(eof)))
txt_out += isupper(s) || upper_case ? get_char(toupper(s)) : tolower(s);
return txt_out;
}
int main() {
auto txt{ "Das hier ist ein Beispieltext; der auch noch weitergeht!" };
std::cout << encrypt_text(txt, 5, ';', true) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: