• Jul 30, 2023 •LeifMessinger
1 like • 6 views
//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; }
• Nov 18, 2022 •AustinLeath
0 likes • 2 views
#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; } } }
• Aug 31, 2020 •joshwrou
1 like • 3 views
#include <iostream> using namespace std; int main() { cout << "Hello World!\n"; // Prints out "Hello World" return 0; }
• Jul 16, 2024 •LeifMessinger
0 likes • 15 views
//===============Header File================== #include <iostream> #include <sstream> //stringbuf #include <utility> //exchange //Couple rules: //Characters given through the getter functions have to be removed from the buffer. //This is so that bufferEmpty() == buffer.in_avail() > 0 basically always. //skipWhitespace doesn't remove the text from the buffer, but it does return the number of characters. //nextWord will trim whitespace before the word //nextInt will trim non-numbers before the number //hasNextInt and hasNextWord will trim the whitespace. If you think you need it, you should get nextWhitespace before doing any of those. //Whitespace after a word or an int is left on the buffer. //nextWhitespace will (get and) remove whitespace until the end of the line, including the newline character, but stops before the next line. //nextWhitespace won't read the next line when called before the end of the line, and it won't prompt the user for the next line if interactive. //If nextWhitespace is called after reading the end of the line, then it will read a new line into the buffer, which will prompt the user. //It acts like nextLine, but if there's something non-whitespace on the current line it stops there. class Scanner { public: std::stringbuf buffer; std::istream& input; Scanner(std::istream& in = std::cin) : buffer(), input(in) {} //Buffer debugging bool fillBuffer(); bool bufferEmpty(); void printBufferEmpty(); std::string getBuffer(); size_t bufferLength(); void printBufferStats(); //Int bool hasNextInt(); int nextInt(); //Word bool hasNextWord(); std::string nextWord(); //Line bool hasNextLine(); //Whitespace size_t skipWhitespace(); //Prob should be private, but I don't believe in that private shit. bool hasNextWhitespace(); std::string nextWhitespace(); std::string nextWhitespaceAll(); std::string nextLine(); }; //===============Source File================== bool Scanner::fillBuffer() { //Returns if it had to get the next line from the input. const bool badInput = input.eof() || input.bad(); const bool shouldFillBuffer = bufferEmpty() && !badInput; if (shouldFillBuffer) { std::string line; if (std::getline(input, line)) { buffer.str(buffer.str() + line + "\n"); } } return shouldFillBuffer; } bool Scanner::bufferEmpty(){ return buffer.str() == ""; } void Scanner::printBufferEmpty(){ std::cout << "The buffer is " << (bufferEmpty()? "" : "not") << " empty." << std::endl; } std::string Scanner::getBuffer(){ return buffer.str(); } size_t Scanner::bufferLength(){ return buffer.str().length(); } void Scanner::printBufferStats(){ if(bufferEmpty()){ std::cout << "The buffer is \"\"" << std::endl; return; } std::cout << "The length of the buffer is " << bufferLength() << std::endl; if(buffer.sgetc() == '\r'){ std::cout << "The buffer is \\r\\n" << std::endl; }else if(buffer.sgetc() == '\n'){ std::cout << "The buffer is \\n" << std::endl; } } bool Scanner::hasNextInt() { return hasNextWord() && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-'); } int Scanner::nextInt() { if (!hasNextInt()) { //Will fill the buffer if not filled. Will also trim whitespace. return 0; } std::string num; size_t charactersRead = 0; while (buffer.in_avail() > 0 && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-')) { num += buffer.sbumpc(); ++charactersRead; } buffer.str(buffer.str().erase(0, charactersRead)); return std::stoi(num); } bool Scanner::hasNextWord() { nextWhitespaceAll(); return buffer.in_avail() > 0; } std::string Scanner::nextWord() { if (!hasNextWord()) { //Will fill the buffer if not filled. Will also trim whitespace. return ""; } std::string word; size_t charactersRead = 0; while (buffer.in_avail() > 0 && !std::isspace(buffer.sgetc())) { word += buffer.sbumpc(); ++charactersRead; } buffer.str(buffer.str().erase(0, charactersRead)); return word; } bool Scanner::hasNextLine() { return (!bufferEmpty()) || fillBuffer(); } size_t Scanner::skipWhitespace() { //Returns characters read size_t charactersRead = 0; while (buffer.in_avail() > 0 && std::isspace(buffer.sgetc())) { buffer.sbumpc(); ++charactersRead; } return charactersRead; } bool Scanner::hasNextWhitespace(){ fillBuffer(); return buffer.in_avail() > 0 && std::isspace(buffer.sgetc()); } std::string Scanner::nextWhitespace() { if (!hasNextWhitespace()) { //Will fill the buffer if not filled return ""; } const size_t charactersRead = skipWhitespace(); std::string whitespace = buffer.str().substr(charactersRead); buffer.str(buffer.str().erase(0, charactersRead)); return whitespace; } std::string Scanner::nextWhitespaceAll(){ std::string whitespace; while(hasNextWhitespace()){ std::string gottenWhiteSpace = nextWhitespace(); whitespace += gottenWhiteSpace; } return whitespace; } std::string Scanner::nextLine(){ if (!hasNextLine()) { return ""; } fillBuffer(); //Swap out the old buffer with an empty buffer, and get the old buffer as a variable. std::string line = std::exchange(buffer, std::stringbuf()).str(); //Remove the newline. if(line[line.length() - 1] == '\n' || line[line.length() - 1] == '\r' ) line.pop_back(); if(line[line.length() - 1] == '\r' || line[line.length() - 1] == '\n' ) line.pop_back(); return line; } //=================Word and Int test================= while(bruh.hasNextInt() || bruh.hasNextWord()){ std::cout << "started loop" << std::endl; if(bruh.hasNextInt()){ std::cout << "Int: " << bruh.nextInt() << " " << std::endl; }else{ std::cout << "Word: " << bruh.nextWord() << " " << std::endl; } bruh.nextWhitespace(); } //===================Line test====================== for(int count = 1; bruh.hasNextLine(); ++count){ std::string line = bruh.nextLine(); std::cout << "Line " << count << ": " << line << std::endl; }
• Oct 23, 2022 •LeifMessinger
0 likes • 1 view
//Leif Messinger //Finds all sets of 5 5 letter words that don't have duplicate letters in either themselves or each other. //First it reads the words in and puts them in groups of their bitmasks //After that, we recurse on each group. Before doing that, we remove the group from the set of other groups to check it against. #include <cstdio> //getchar, printf #include <cassert> //assert #include <vector> #include <set> #include <algorithm> //std::copy_if #include <iterator> //std::back_inserter #define CHECK_FOR_CRLF true #define MIN_WORDS 5 #define MAX_WORDS 5 #define WORD_TOO_LONG(len) (len != 5) const unsigned int charToBitmask(const char bruh){ assert(bruh >= 'a' && bruh <= 'z'); return (1 << (bruh - 'a')); } void printBitmask(unsigned int bitmask){ char start = 'a'; while(bitmask != 0){ if(bitmask & 1){ putchar(start); } bitmask >>= 1; ++start; } } //Pointer needs to be deleted const std::set<unsigned int>* getBitmasks(){ std::set<unsigned int>* bitmasksPointer = new std::set<unsigned int>; std::set<unsigned int>& bitmasks = (*bitmasksPointer); unsigned int bitmask = 0; unsigned int wordLength = 0; bool duplicateLetters = false; for(char c = getchar(); c >= 0; c = getchar()){ if(CHECK_FOR_CRLF && c == '\r'){ continue; } if(c == '\n'){ if(!(WORD_TOO_LONG(wordLength) || duplicateLetters)) bitmasks.insert(bitmask); bitmask = 0; wordLength = 0; duplicateLetters = false; continue; } if((bitmask & charToBitmask(c)) != 0) duplicateLetters = true; bitmask |= charToBitmask(c); ++wordLength; } return bitmasksPointer; } void printBitmasks(const std::vector<unsigned int>& bitmasks){ for(unsigned int bruh : bitmasks){ printBitmask(bruh); putchar(','); putchar(' '); } puts(""); } //Just to be clear, when I mean "word", I mean a group of words with the same letters. void recurse(std::vector<unsigned int>& oldBitmasks, std::vector<unsigned int> history, const unsigned int currentBitmask){ //If there's not enough words left if(oldBitmasks.size() + (-(history.size())) + (-MIN_WORDS) <= 0){ //If there's enough words if(history.size() >= MIN_WORDS){ //Print the list printBitmasks(history); } return; //To make it faster, we can stop it after 5 words too }else if(history.size() >= MAX_WORDS){ //Print the list printBitmasks(history); return; } //Thin out the array with only stuff that matches the currentBitmask. std::vector<unsigned int> newBitmasks; std::copy_if(oldBitmasks.begin(), oldBitmasks.end(), std::back_inserter(newBitmasks), [¤tBitmask](unsigned int bruh){ return (bruh & currentBitmask) == 0; }); while(newBitmasks.size() > 0){ //I know this modifies 'oldBitmasks' too. It's intentional. //This makes it so that the word is never involved in any of the child serches or any of the later searches in this while loop. const unsigned int word = newBitmasks.back(); newBitmasks.pop_back(); std::vector<unsigned int> newHistory = history; newHistory.push_back(word); recurse(newBitmasks, newHistory, currentBitmask | word); } } int main(){ const std::set<unsigned int>* bitmasksSet = getBitmasks(); std::vector<unsigned int> bitmasks(bitmasksSet->begin(), bitmasksSet->end()); delete bitmasksSet; recurse(bitmasks, std::vector<unsigned int>(), 0); return 0; }
• Apr 16, 2023 •LeifMessinger
0 likes • 0 views
#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 only int 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 score int 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 value if(wordValue == sum){ std::cout << line << std::endl; } } else { std::cout << sum << "\t" << line << std::endl; } } return 0; }