Loading...
More C++ Posts
//Leif Messinger//Compile with C++ 20#include <iostream>#include <ranges>#include <vector>#include <functional>#include <cctype> //toupper#include <cxxabi.h>template <typename T>void printType(){std::cout << abi::__cxa_demangle(typeid(T).name(), NULL, NULL, NULL) << std::endl;}template <typename T>class Slicer{public:T begin_;T end_;T trueEnd;Slicer(T begin, T end): begin_(begin), end_(begin), trueEnd(end){}template<typename U>Slicer(U&& vec) : begin_(vec.begin()), end_(vec.begin()), trueEnd(vec.end()){}Slicer& finish(){begin_ = end_;end_ = trueEnd;return (*this);}Slicer& to(long int index){begin_ = end_;if(index > 0){end_ = (begin_ + index);}else{index *= -1;end_ = (trueEnd - index);}return (*this);}Slicer& operator[](long int index){return to(index);}T begin(){return this->begin_;}T end(){return this->end_;}Slicer& operator()(std::function<void(decltype(*begin_))> func) {for(decltype(*begin_) thing : (*this)){func(thing);}return (*this);}};static_assert(std::ranges::range< Slicer<std::vector<int>::const_iterator> >);int main(){std::string vec = "abcdefghijklmnopqrstuvwxyz";Slicer<std::string::const_iterator> bruh(vec);//printType<decltype(bruh)>();bruh.to(3)([](char yeet){std::cout << yeet;}).to(-1)([](char yeet){std::cout << char(std::toupper(yeet));}).finish()([](char yeet){std::cout << yeet << yeet << yeet << yeet << yeet;});std::cout << std::endl << std::endl;int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};Slicer<int*> arrSlicer(arr, arr + (sizeof(arr)/sizeof(int)));std::cout << "[";arrSlicer.to(-1)([](int yeet){std::cout << yeet << ", ";}).finish()([](int yeet){std::cout << yeet << "]" << std::endl;});return 0;}
//Constant prefix notation solver using bruh//Could make it infix or postfix later#include<string>#include<vector>#include<iostream>std::vector<long double> bruhBuff;long double operator ""bruh(long double a){bruhBuff.push_back(a);return a;}long double operator ""bruh(const char op){if(bruhBuff.size() < 2) throw "Bruh weak";long double b = bruhBuff.back();bruhBuff.pop_back();long double a = bruhBuff.back();bruhBuff.pop_back();switch(op){case (int)('+'):return a + b;case (int)('-'):return a - b;case (int)('*'):return a * b;case (int)('/'):return a / b;}return 69l;}int main(){1.0bruh;2.0bruh;std::cout << '+'bruh << std::endl;return 0;}
#include <bits/stdc++.h>#define MAXSIZE 50000#define INF 100000using namespace std;vector<int> adj[MAXSIZE]; //Adjacency Listbool visited[MAXSIZE]; //Checks if a node is visited or not in BFS and DFSbool isConnected = true; //Checks if the input graph is connected or notint dist[MAXSIZE], discover[MAXSIZE], finish[MAXSIZE]; //Distance for BFS, in time and out time for DFSint t = 1; //Time used for DFSint u, v, i, j, k, N = 0;stack<int> st; //Stack for TopSortmultiset<pair<int, int>> s; //collection of pairs to sort by distancepair<int, int> current; //pointer variable to a position in the multisetvoid BFS(){queue<int> q; //queue for BFSq.push(1); //pushing the sourcedist[1] = 0; //assign the distance of source as 0visited[1] = 1; //marking as visitedwhile(!q.empty()){u = q.front();q.pop();for(i=0; i < adj[u].size(); i++){v = adj[u][i]; //Adjacent vertexif(!visited[v]) //if not visited, update the distance and push onto queue{visited[v] = 1;dist[v] = dist[u]+1;q.push(v);}}}for(i = 1; i <= N; i++){s.insert(make_pair(dist[i], i)); //for sorted distance}cout << "BFS results:" << endl;//prints BFS results and checks if the graph is connectedwhile(!s.empty()){current = *s.begin();s.erase(s.begin());i = current.second;j = current.first;if(j == INF) //if any infinite value, graph is not connected{cout << i << " INF" << endl;isConnected = false;}else{cout << i << " " << j << endl;}}//marks blocks of memory as visitedmemset(visited, 0, sizeof visited);}void dfsSearch(int s){visited[s] = 1; //marking it visiteddiscover[s] = t++; //assigning and incrementing timeint i, v;for(i = 0; i < adj[s].size(); i++){v = adj[s][i];if(!visited[v]) //if vertex is not visited then visit, else continue{dfsSearch(v);}}st.push(s); //pushed onto stack for TopSort if it was calledfinish[s] = t++; //out time}void DFS(){for(i = 1; i <= N; i++){if(visited[i]) //if visited continue, else visit it with DFS{continue;}dfsSearch(i); //embedded function to actually perform DFS}for(i=1;i<=N;i++){s.insert(make_pair(discover[i], i)); //minheap for sorted discovery time}cout << "DFS results:" << endl;while(!s.empty()) //Prints DFS results as long as the multiset is not empty{current = *s.begin(); //duplicates the pointer to first object in the multisets.erase(s.begin()); //erases the first object in multiseti = current.second;cout << i << " " << discover[i] << " " << finish[i] << endl; //prints discover times and finish times}}void TopSort(){//call DFS so we can have a sorted stack to printfor(i=1;i<=N;i++){if(visited[i]){continue;}dfsSearch(i);}cout<<"Topological Sort results:"<<endl;//print sorted results from DFSwhile(!st.empty()){i = st.top();st.pop();cout << i << endl;}//declare blocks of memory as visitedmemset(visited, 0, sizeof visited);}int main(){string str, num, input;int selection, connectedChoice = 0;//get to input any file, more freedom than declaring file in command linecout << "Enter the exact name of your input file [case sensitive]: ";cin >> input;ifstream inputFile(input); //Read the input file//checks if the ifstream cannot openif(inputFile.fail()){cout << endl << "No input files matching that name. Terminating..." << endl;return 0;}//Read until the end of filewhile(!inputFile.eof()){getline(inputFile, str); //read the current lineif(str == ""){continue;}if(!isdigit(str[0])) //checks to see if the first item in a line is a digit or not{cout << "Invalid file format. You have a line beginning with a non-digit. Terminating..." << endl;return 0;}stringstream ss;ss << str; //convert the line to stream of stringsss >> num; //read the line numstringstream(num) >> u;while(!ss.eof()){ss>>num;if(stringstream(num) >> v){adj[u].push_back(v); //read the adjacent vertices}}N++; //calculate the number of verticessort(adj[u].begin(), adj[u].end()); //sort the adjacency list in case it is not sorted}//creates arbitrary values for distance, will check later if INF remainfor(i = 1; i <= N; i++){dist[i] = INF;}cout << endl << "Valid Input file loaded!" << endl;while(selection != 4){cout << "************************************************" << endl;cout << "What type of analysis would you like to perform?" << endl;cout << "1: Breadth-First Search" << endl;cout << "2: Depth-First Search" << endl;cout << "3: Topological Sort" << endl;cout << "4: Quit" << endl;cout << "************************************************" << endl;//read user input and execute selectioncin >> selection;switch(selection){case 1:cout << endl;BFS();cout << endl;cout << "Would you like to know if the graph is connected?" << endl;cout << "1: Yes" << endl;cout << "Any other key: No" << endl;cin >> connectedChoice;switch(connectedChoice){case 1:if(!isConnected){cout << "The graph is not connected." << endl << endl;}else{cout << "The graph is connected!" << endl << endl;}break;default:break;}break;case 2:cout << endl;DFS();cout << endl;break;case 3:cout << endl;TopSort();cout << endl;break;case 4:return 0;default:cout << endl << "Invalid selection." << endl; //loops the selection prompt until a valid selection is input.}}}
#include "stdio.h"#include <stdlib.h>int main (int argCount, char** args) {int a = atoi(args[1]);int b = atoi(args[2]);unsigned int sum = 0;unsigned int p = 1;for (unsigned int i = 1; i < b; i++) {p = p * i;}// (b!, (1 + b)!, (2 + b)!, ..., (n + b)!)for (unsigned int i = 0; i < a; i++) {p = p * (i + b);sum = sum + p;}printf("y: %u\n", sum);return 0;}
#include <iostream>#include "PlaylistNode.h"using namespace std;void PrintMenu(string title);int main() {string plTitle;cout << "Enter playlist's title:" << endl;getline(cin, plTitle);PrintMenu(plTitle);return 0;}void PrintMenu(string title) {Playlist list;string id;string sname;string aname;int length;int oldPos;int newPos;char choice;while(true) {cout << endl << title << " PLAYLIST MENU" << endl;cout << "a - Add song" << endl;cout << "d - Remove song" << endl;cout << "c - Change position of song" << endl;cout << "s - Output songs by specific artist" << endl;cout << "t - Output total time of playlist (in seconds)" << endl;cout << "o - Output full playlist" << endl;cout << "q - Quit" << endl << endl;cout << "Choose an option:" << endl;cin >> choice;cin.ignore();if (choice == 'q') {exit(1);}else if (choice == 'a') {cout << "\nADD SONG" << endl;cout << "Enter song's unique ID: ";cin >> id;cin.ignore();cout << "Enter song's name: ";getline(cin,sname);cout << "Enter artist's name: ";getline(cin,aname);cout << "Enter song's length (in seconds): ";cin >> length;list.AddSong(id, sname, aname, length);}else if (choice == 'd') {cout << "\nREMOVE SONG" << endl;cout << "Enter song's unique ID: ";cin >> id;list.RemoveSong(id);}else if (choice == 'c') {cout << "\nCHANGE POSITION OF SONG" << endl;cout << "Enter song's current position: ";cin >> oldPos;cout << "Enter new position for song: ";cin >> newPos;list.ChangePosition(oldPos, newPos);}else if (choice == 's') {cout << "\nOUTPUT SONGS BY SPECIFIC ARTIST" << endl;cout << "Enter artist's name: ";getline(cin, aname);list.SongsByArtist(aname);}else if (choice == 't') {cout << "\nOUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)" << endl;cout << "Total time: " << list.TotalTime() << " seconds" << endl;}else if (choice == 'o') {cout << endl << title << " - OUTPUT FULL PLAYLIST" << endl;list.PrintList();}else {cout << "Invalid menu choice! Please try again." << endl;}}}
#include <iostream>#include <string> //Should already be in iostream#include <cstdlib>//A word score adds up the character values. a-z gets mapped to 1-26 for the values of the characters.//wordScore [wordValue]//Pipe in the input into stdin, or type the words yourself.//Lowercase words onlyint characterValue(const char b){return ((b >= 'a') && (b <= 'z'))? ((b - 'a') + 1) : 0;}int main(int argc, char** argv){//The first argument specifies if you are trying to look for a certain word scoreint wordValue = (argc > 1)? std::atoi(argv[1]) : 0;std::string line;while(std::getline(std::cin, line)){int sum = 0;for(const char c : line){sum += characterValue(c);}if(wordValue){ //If wordValue is 0 or the sum is the correct valueif(wordValue == sum){std::cout << line << std::endl;}} else {std::cout << sum << "\t" << line << std::endl;}}return 0;}