- Joined
- May 11, 2020
- Messages
- 15
- Reaction score
- 0
Hello I posted in the wrong place I think the last time I tried to make a crossword puzzle generator in C++. I manage to crosswords most of the time but I'd like to make it recursive.
I thought of alternating the meaning of the words (vertical / horizontal) with even and odd numbers with a loop like this one but I couldn't figure out how to do it. Can you help me?
Code:
#include <iostream>
#include <string>
#include <algorithm>
#include <bits/stdc++.h>
#include <stdlib.h>
#include <sstream>
#include <ctime>
#include <vector>
using namespace std;
std::vector<double> coord_x;
std::vector<double> coord_y;
std::vector<std::string > commonchar;
char grid[26][26] = {
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
{
'.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' }
};
int random(int from, int to)
{
return rand() % (to - from + 1) + from;
}
std::string find_intersection(std::string &first, std::string &second)
{
std::sort(first.begin(), first.end());
std::sort(second.begin(), second.end());
int length = std::min(first.length(), second.length());
std::string result(length, ' ');
std::set_intersection(first.begin(), first.end(), second.begin(), second.end(), result.begin());
return result;
}
int PlaceHorizontal(int x, int y, std::string &word)
{
coord_x.push_back(x);
coord_y.push_back(y);
int taille = word.length();
for (int j = 0; j != taille; j++)
{
if (grid[x][y + j] == '.' || grid[x][y + j] == word[j])
{
grid[x][y + j] = word[j];
}
else {}
}
}
int PlaceVertical(int x, int y, std::string &word)
{
coord_x.push_back(x);
coord_y.push_back(y);
int taille = word.length();
for (int j = 0; j != taille; j++)
{
if (grid[x + j][y] == '.' || grid[x + j][y] == word[j])
{
grid[x + j][y] = word[j];
}
else {}
}
}
std::string randomword(int randomline)
{
std::string word1;
std::string ifileName = "dicoFrancais.txt";
std::ifstream f(ifileName);
if (!f) std::cerr << "File '" << ifileName << "' couldn't opened!\n";
std::string s;
for (int i = 1; i <= randomline; i++)
{
std::getline(f, s);
word1 = s;
}
return word1;
}
int main(int argc, char *argv[])
{
string word1;
string word2;
string word3;
string word4;
string word5;
string word6;
string word7;
int x_word1_intersection;
int x_word2_intersection;
int x_word23_intersection;
int x_word32_intersection;
int x_word13_intersection;
int x_word31_intersection;
int x_word34_intersection;
int x_word43_intersection;
int x_word45_intersection;
int x_word54_intersection;
int x_word56_intersection;
int x_word65_intersection;
int x_word67_intersection;
int x_word76_intersection;
srand(time(0));
int rand1 = random(1000, 2000);
word1 = randomword(rand1);
int rand2 = random(1000, 2000);
word2 = randomword(rand2);
int rand3 = random(1000, 2000);
word3 = randomword(rand3);
int rand4 = random(1000, 2000);
word4 = randomword(rand4);
int rand5 = random(1000, 2000);
word5 = randomword(rand5);
int rand6 = random(1000, 2000);
word6 = randomword(rand6);
int rand7 = random(1000, 2000);
word7 = randomword(rand7);
std::cout << "Word-1 : " << word1 << "\n";
std::cout << "Word-2 : " << word2 << "\n";
std::cout << "Word-3 : " << word3 << "\n";
std::cout << "Word-4 : " << word4 << "\n";
std::cout << "Word-5 : " << word5 << "\n";
std::cout << "Word-6 : " << word6 << "\n";
std::cout << "Word-7 : " << word7 << "\n";
int x = 8;
int y = 8;
int indice1 = 0;
int indice2 = 0;
int indice3 = 0;
int indice4 = 0;
int indice5 = 0;
int indice6 = 0;
PlaceHorizontal(x, y, word1);
std::string temp1 = word1;
std::string temp2 = word2;
std::string intersec = find_intersection(temp1, temp2);
x_word1_intersection = word1.find_last_of(intersec[0]);
x_word2_intersection = word2.find_last_of(intersec[0]);
PlaceVertical(coord_x[0] - x_word2_intersection, coord_y[0] + x_word1_intersection, word2);
std::string temp3 = word3;
std::string intersec1 = find_intersection(temp2, temp3);
if (intersec[0] = intersec1[0] && intersec1.length() > 0)
{
if (indice1 += 1 <= intersec1.length())
{
indice1 += 1;
}
}
else
{
indice1 = 0;
}
x_word23_intersection = word2.find_last_of(intersec1[indice1]);
x_word32_intersection = word3.find_last_of(intersec1[indice1]);
PlaceHorizontal(coord_x[1] + x_word23_intersection, coord_y[1] - x_word32_intersection, word3);
std::string temp4 = word4;
std::string intersec2 = find_intersection(temp3, temp4);
if (intersec1[indice1] = intersec2[0])
{
if (indice2 += 1 <= intersec2.length())
{
indice2 += 1;
}
}
else
{
indice2 = 0;
}
x_word34_intersection = word3.find_last_of(intersec2[indice2]);
x_word43_intersection = word4.find_last_of(intersec2[indice2]);
PlaceVertical(coord_x[2] - x_word43_intersection, coord_y[2] + x_word34_intersection, word4);
std::string temp5 = word5;
std::string intersec3 = find_intersection(temp4, temp5);
if (intersec2[indice2] = intersec3[0])
{
if (indice3 += 1 <= intersec3.length())
{
indice3 += 1;
}
}
else
{
indice3 = 0;
}
x_word45_intersection = word4.find_last_of(intersec3[indice3]);
x_word54_intersection = word5.find_last_of(intersec3[indice3]);
PlaceHorizontal(coord_x[3] + x_word45_intersection, coord_y[3] - x_word54_intersection, word5);
std::string temp6 = word6;
std::string intersec4 = find_intersection(temp5, temp6);
if (intersec3[indice3] = intersec4[0])
{
if (indice4 += 1 <= intersec4.length())
{
indice4 += 1;
}
}
else
{
indice4 = 0;
}
x_word56_intersection = word5.find_last_of(intersec4[indice4]);
x_word65_intersection = word6.find_last_of(intersec4[indice4]);
PlaceVertical(coord_x[4] - x_word65_intersection, coord_y[4] + x_word56_intersection, word6);
std::string temp7 = word7;
std::string intersec5 = find_intersection(temp6, temp7);
if (intersec4[indice4] = intersec5[0])
{
if (indice5 += 1 <= intersec5.length())
{
indice5 += 1;
}
}
else
{
indice5 = 0;
}
x_word67_intersection = word6.find_last_of(intersec5[indice5]);
x_word76_intersection = word7.find_last_of(intersec5[indice5]);
PlaceHorizontal(coord_x[5] + x_word45_intersection, coord_y[5] - x_word54_intersection, word7);
for (int i = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
std::cout << grid[i][j];
std::cout << " ";
}
std::cout << "\n";
}
}
I thought of alternating the meaning of the words (vertical / horizontal) with even and odd numbers with a loop like this one but I couldn't figure out how to do it. Can you help me?
Code:
#include <iostream>
using namespace std;
int main()
{
//declare variables
int number;
int n;
cout << "Enter value less than 100: ";
cin >> n; //take user input
// print odd values
cout << "The odd numbers are:";
for (number = n + 1 - (n % 2); number <= 100; number += 2)
{
cout << " " << number;
}
cout << endl;
// print even values
cout << "The even numbers are:";
for (number = n + (n % 2); number <= 100; number += 2)
{
cout << " " << number;
}
cout << endl;
return 0; //end of program
}