#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
using namespace std;
string replaceWord( const string& text, const string& wordToReplace, const string& replacement) {
regex word_regex( "\\ b" + wordToReplace + "\\ b" ) ;
return regex_replace( text, word_regex, replacement) ;
}
int main( ) {
string code;
string wordToReplace;
string fileFormat;
vector< string> replacementWords;
// Get the code
cout << "Enter your code (end with a line containing only 'END'):\n " ;
string line;
while ( getline( cin , line) && line ! = "END" ) {
code + = line + "\n " ;
}
// Get the word to replace
cout << "Enter word to replace: " ;
getline( cin , wordToReplace) ;
// Get replacement words
cout << "Enter replacement words (one per line, end with a line containing only 'END'):\n " ;
while ( getline( cin , line) && line ! = "END" ) {
if ( ! line.empty ( ) ) {
replacementWords.push_back ( line) ;
}
}
// Get file format
cout << "Enter file format (txt/xpm): " ;
getline( cin , fileFormat) ;
// Generate and save variations
for ( size_t i = 0 ; i < replacementWords.size ( ) ; i++ ) {
string variation = replaceWord( code, wordToReplace, replacementWords[ i] ) ;
string filename = "variation_" + to_string( i + 1 ) + "." + fileFormat;
ofstream outFile( filename) ;
if ( fileFormat == "xpm" ) {
outFile << "XPM1\n " ;
}
outFile << variation;
outFile.close ( ) ;
cout << "Saved: " << filename << "\n " ;
}
cout << "\n Created " << replacementWords.size ( ) << " variations!\n " ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHJlZ2V4PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyByZXBsYWNlV29yZChjb25zdCBzdHJpbmcmIHRleHQsIGNvbnN0IHN0cmluZyYgd29yZFRvUmVwbGFjZSwgY29uc3Qgc3RyaW5nJiByZXBsYWNlbWVudCkgewogICAgcmVnZXggd29yZF9yZWdleCgiXFxiIiArIHdvcmRUb1JlcGxhY2UgKyAiXFxiIik7CiAgICByZXR1cm4gcmVnZXhfcmVwbGFjZSh0ZXh0LCB3b3JkX3JlZ2V4LCByZXBsYWNlbWVudCk7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIGNvZGU7CiAgICBzdHJpbmcgd29yZFRvUmVwbGFjZTsKICAgIHN0cmluZyBmaWxlRm9ybWF0OwogICAgdmVjdG9yPHN0cmluZz4gcmVwbGFjZW1lbnRXb3JkczsKICAgIAogICAgLy8gR2V0IHRoZSBjb2RlCiAgICBjb3V0IDw8ICJFbnRlciB5b3VyIGNvZGUgKGVuZCB3aXRoIGEgbGluZSBjb250YWluaW5nIG9ubHkgJ0VORCcpOlxuIjsKICAgIHN0cmluZyBsaW5lOwogICAgd2hpbGUgKGdldGxpbmUoY2luLCBsaW5lKSAmJiBsaW5lICE9ICJFTkQiKSB7CiAgICAgICAgY29kZSArPSBsaW5lICsgIlxuIjsKICAgIH0KICAgIAogICAgLy8gR2V0IHRoZSB3b3JkIHRvIHJlcGxhY2UKICAgIGNvdXQgPDwgIkVudGVyIHdvcmQgdG8gcmVwbGFjZTogIjsKICAgIGdldGxpbmUoY2luLCB3b3JkVG9SZXBsYWNlKTsKICAgIAogICAgLy8gR2V0IHJlcGxhY2VtZW50IHdvcmRzCiAgICBjb3V0IDw8ICJFbnRlciByZXBsYWNlbWVudCB3b3JkcyAob25lIHBlciBsaW5lLCBlbmQgd2l0aCBhIGxpbmUgY29udGFpbmluZyBvbmx5ICdFTkQnKTpcbiI7CiAgICB3aGlsZSAoZ2V0bGluZShjaW4sIGxpbmUpICYmIGxpbmUgIT0gIkVORCIpIHsKICAgICAgICBpZiAoIWxpbmUuZW1wdHkoKSkgewogICAgICAgICAgICByZXBsYWNlbWVudFdvcmRzLnB1c2hfYmFjayhsaW5lKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIEdldCBmaWxlIGZvcm1hdAogICAgY291dCA8PCAiRW50ZXIgZmlsZSBmb3JtYXQgKHR4dC94cG0pOiAiOwogICAgZ2V0bGluZShjaW4sIGZpbGVGb3JtYXQpOwogICAgCiAgICAvLyBHZW5lcmF0ZSBhbmQgc2F2ZSB2YXJpYXRpb25zCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcGxhY2VtZW50V29yZHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICBzdHJpbmcgdmFyaWF0aW9uID0gcmVwbGFjZVdvcmQoY29kZSwgd29yZFRvUmVwbGFjZSwgcmVwbGFjZW1lbnRXb3Jkc1tpXSk7CiAgICAgICAgc3RyaW5nIGZpbGVuYW1lID0gInZhcmlhdGlvbl8iICsgdG9fc3RyaW5nKGkgKyAxKSArICIuIiArIGZpbGVGb3JtYXQ7CiAgICAgICAgCiAgICAgICAgb2ZzdHJlYW0gb3V0RmlsZShmaWxlbmFtZSk7CiAgICAgICAgaWYgKGZpbGVGb3JtYXQgPT0gInhwbSIpIHsKICAgICAgICAgICAgb3V0RmlsZSA8PCAiWFBNMVxuIjsKICAgICAgICB9CiAgICAgICAgb3V0RmlsZSA8PCB2YXJpYXRpb247CiAgICAgICAgb3V0RmlsZS5jbG9zZSgpOwogICAgICAgIAogICAgICAgIGNvdXQgPDwgIlNhdmVkOiAiIDw8IGZpbGVuYW1lIDw8ICJcbiI7CiAgICB9CiAgICAKICAgIGNvdXQgPDwgIlxuQ3JlYXRlZCAiIDw8IHJlcGxhY2VtZW50V29yZHMuc2l6ZSgpIDw8ICIgdmFyaWF0aW9ucyFcbiI7CiAgICByZXR1cm4gMDsKfQ==
stdin
LyogIEJlcmVjaG51bmcgZGVzIEhhbW1pbmctQWJzdGFuZGVzIHp3aXNjaGVuIHp3ZWkgMTI4LUJpdCBXZXJ0ZW4gaW4gCSovCi8qCWVpbmVyIFRleHRkYXRlaS4gCQkJCQkJCQkJCQkJCSovCi8qICBEaWUgV2VydGUgbSZ1dW1sO3NzZW4gYXVmIGVpbmVyIHNlcGFyYXRlbiBaZWlsZSBnZXNwZWljaGVydCBzZWluCQkJKi8KLyogCQkJCQkJCQkJCQkJCQkJCQkJKi8KLyoJRXJzdGVsbHQ6IDE3LjUuMjAxMAkJCQkJCQkJCQkJCQkqLwovKiAgQXV0b3I6IFRob21hcyBTY2hlZmZsZXIJCQkJCQkJCQkJCQkqLwoKI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKCiNkZWZpbmUgQVJSQVlfU0laRSAzMgoKdW5zaWduZWQgSGFtZGlzdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQp7CiAgdW5zaWduZWQgZGlzdCA9IDAsIHZhbCA9IHggXiB5OwogCiAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBzZXQgYml0cwogIHdoaWxlKHZhbCkKICB7CiAgICArK2Rpc3Q7IAogICAgdmFsICZhbXA7PSB2YWwgLSAxOwogIH0KIAogIHJldHVybiBkaXN0Owp9CgoKCmludCBtYWluICh2b2lkKQp7CgljaGFyIGhleDsKCWludCBpOwoJaW50IGFbQVJSQVlfU0laRV07CglpbnQgYltBUlJBWV9TSVpFXTsKCWludCBoYW1EaXN0ID0gMDsKCUZJTEUqIGZwOwoJCgkvL0FycmF5cyBtaXQgMCBpbml0aWFsaXNpZXJlbgoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKICAJCWFbaV0gPSAwOwogIAkJYltpXSA9IDA7Cgl9CgoJCglmcCA9IGZvcGVuKCZxdW90O2hleC50eHQmcXVvdDssJnF1b3Q7ciZxdW90Oyk7CglpZiAoZnAgPT0gTlVMTCkgCgl7CgkJcHJpbnRmKCZxdW90O0RpZSBEYXRlaSBoZXgudHh0IHd1cmRlIG5pY2h0IGdlZnVuZGVuISZxdW90Oyk7CgkJZXhpdChFWElUX0ZBSUxVUkUpOwoJfQoKCWk9MDsKCXByaW50ZigmcXVvdDsxLlplaWxlIGVpbmxlc2VuLlxuJnF1b3Q7KTsKCiAJd2hpbGUoKGhleD1mZ2V0YyhmcCkpIT0nXG4nICZhbXA7JmFtcDsgaGV4ICE9IEVPRikKICAgIHsKICAgICAgICBhW2ldPXN0cnRvbCgmYW1wO2hleCwwLDE2KTsKCQlpKys7CiAgICB9CglpPTA7CglwcmludGYoJnF1b3Q7Mi5aZWlsZSBlaW5sZXNlbi5cbiZxdW90Oyk7CgogCXdoaWxlKChoZXg9ZmdldGMoZnApKSE9J1xuJyAmYW1wOyZhbXA7IGhleCAhPSBFT0YpCiAgICB7CiAgICAJYltpXT1zdHJ0b2woJmFtcDtoZXgsMCwxNik7CiAgICAgICAgaSsrOwogICAgfQoJZmNsb3NlKGZwKTsKCglwcmludGYoJnF1b3Q7SGFtbWluZy1BYndlaWNodW5nIHBybyBOaWJibGU6XG4mcXVvdDspOwoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKCQlwcmludGYgKCZxdW90OyVpXHQlaVx0JWlcbiZxdW90OyxhW2ldLGJbaV0sSGFtZGlzdChhW2ldLGJbaV0pKTsKCQloYW1EaXN0ICs9IEhhbWRpc3QoYVtpXSxiW2ldKTsKCX0KCXByaW50ZiAoJnF1b3Q7XG5IYW1taW5nLUFid2VpY2h1bmcgZGVyIEhhc2gtV2VydGU6JWRcbiZxdW90OyxoYW1EaXN0KTsKfQoK
/* Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in */
/* einer Textdatei. */
/* Die Werte müssen auf einer separaten Zeile gespeichert sein */
/* */
/* Erstellt: 17.5.2010 */
/* Autor: Thomas Scheffler */
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 32
unsigned Hamdist(unsigned x, unsigned y)
{
unsigned dist = 0, val = x ^ y;
// Count the number of set bits
while(val)
{
++dist;
val &= val - 1;
}
return dist;
}
int main (void)
{
char hex;
int i;
int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
int hamDist = 0;
FILE* fp;
//Arrays mit 0 initialisieren
for (i = 0; i < ARRAY_SIZE; ++i)
{
a[i] = 0;
b[i] = 0;
}
fp = fopen("hex.txt","r");
if (fp == NULL)
{
printf("Die Datei hex.txt wurde nicht gefunden!");
exit(EXIT_FAILURE);
}
i=0;
printf("1.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
a[i]=strtol(&hex,0,16);
i++;
}
i=0;
printf("2.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
b[i]=strtol(&hex,0,16);
i++;
}
fclose(fp);
printf("Hamming-Abweichung pro Nibble:\n");
for (i = 0; i < ARRAY_SIZE; ++i)
{
printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
hamDist += Hamdist(a[i],b[i]);
}
printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}