Loading...
More C++ Posts
#include <iostream>int main(){const char* const hello = "Hello, world!";const char* bruh = hello;char* const yeet = hello;std::cout << bruh << std::endl;std::cout << yeet << std::endl;return 0;}/*Place your bets!Will the program:a.) Print "Hello, world!" twice?b.) Compile error on line 5 (bruh initialize line) because the pointer gets implicit cast to non-const?c.) Compile error on line 7 (yeet initialize line) because the char gets implicit cast to non-const?d.) Both b and c?e.) Compile error line 11 (print yeet) because the pointer is constant and can't be incrementedf.) Print "Hello, world!" then print the pointer address in hexadecimalg.) Both b and e?h.) Both c and e?i.) B, c, and e?*/// The answer is in this base 64 string:// T25seSBjLikKVGhlIGNvbXBpbGVyIGRvZXNuJ3QgYXBwcmVjaWF0ZSB5b3UgbWFraW5nIHRoZSBjaGFyYWN0ZXJzIHRoZSBwb2ludGVyIHJlZmVycyB0byBub24tY29uc3QsIGJ1dCBpdCdzIGZpbmUgd2l0aCB5b3UgY29weWluZyBhIGNvbnN0YW50IHZhbHVlLCBpLmUuIHRoZSBwb2ludGVyLCB0byBhIG5vbi1jb25zdGFudCB2YXJpYWJsZS4KSWYgeW91IHJlcGxhY2UgdGhhdCBsaW5lIHdpdGggY2hhciogY29uc3QgeWVldCA9IGNvbnN0X2Nhc3Q8Y2hhciogY29uc3Q+KGhlbGxvKTsgSXQnbGwgcHJpbnQgIkhlbGxvLCB3b3JsZCEiIHR3aWNlLCB3aGljaCBpcyB2ZXJ5IHN0cmFuZ2UgY29uc2lkZXJpbmcgdGhhdCB5ZWV0IGlzIGEgY29uc3QgcG9pbnRlciwgc28geW91J2QgdGhpbmsgaXQgd291bGQgcHJpbnQgYXMgYSBoZXhhZGVjaW1hbCBiZWNhdXNlIGlmIHlvdSB0cnkgdG8gKCsreWVldCkgd2hpbGUgbG9vcGluZyB0aHJvdWdoIHRoZSBzdHJpbmcsIHlvdSdkIGdldCBhbiBlcnJvciwgYmVjYXVzZSBpdCdzIGNvbnN0IGFuZCBjYW4ndCBiZSBjaGFuZ2VkLgpJbnN0ZWFkIG9mIHVzaW5nIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIG9zdHJlYW06Om9wZXJhdG9yPDwsIHRoZXkgbWFrZSBpdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHlwZSBjb25zdCBjaGFyKiwgYW5kIEMrKyBoYXMgbm8gcHJvYmxlbXMgcHJvbW90aW5nIGEgdmFyaWFibGUgdG8gY29uc3RhbnQgd2hlbiBpbXBsaWNpdCBjYXN0aW5nLCBhbmQgaXQgaGFzIG5vIHByb2JsZW1zIGltcGxpY2l0IGNhc3RpbmcgdGhlIGNvbnN0IHBvaW50ZXIgdG8gYSBub3JtYWwgcG9pbnRlciBiZWNhdXNlIGl0J3MgbWFraW5nIGEgY29weS4gVGhlIHBvaW50ZXIgZ2V0cyBjb3BpZWQgYmVjYXVzZSB0aGUgcG9pbnRlciBpcyBwYXNzZWQgYnkgdmFsdWUsIG5vdCByZWZlcmVuY2Uu
/*Good morning! Here's your coding interview problem for today.This problem was asked by LinkedIn.A wall consists of several rows of bricks of various integer lengths and uniform height. Your goal is to find a vertical line going from the top to the bottom of the wall that cuts through the fewest number of bricks. If the line goes through the edge between two bricks, this does not count as a cut.For example, suppose the input is as follows, where values in each row represent the lengths of bricks in that row:[[3, 5, 1, 1],[2, 3, 3, 2],[5, 5],[4, 4, 2],[1, 3, 3, 3],[1, 1, 6, 1, 1]]The best we can we do here is to draw a line after the eighth brick, which will only require cutting through the bricks in the third and fifth row.Given an input consisting of brick lengths for each row such as the one above, return the fewest number of bricks that must be cut to create a vertical line.AUTHORS NOTE:Makes following assumptions:- Each row is same length- Data is in file called "data.dat" and formatted in space-separated rows- The cuts at the beginning and end of the wall are not solutionsThis requires the following file named data.dat that is a space separated file, or similar formatted file:----START FILE----3 5 1 12 3 3 25 54 4 21 3 3 31 1 6 1 1----END FILE----*/#include <algorithm>#include <iostream>#include <fstream>#include <map>#include <sstream>#include <string>#include <vector>using namespace std;int main(){vector<vector<int>> wall;ifstream in;in.open("data.dat");if(!in.good()){cout << "ERROR: File failed to open properly.\n";}/* Get input from space separated file */string line;while(!in.eof()){getline(in, line);int i;vector<int> currv;stringstream strs(line);while(strs >> i)currv.push_back(i);wall.push_back(currv);}/* Convert each value from "length of brick" to "position at end of brick" */for(int y = 0; y < wall.size(); y++){wall.at(y).pop_back(); //Delet last valfor(int x = 1; x < wall.at(y).size(); x++) //Skip the first bc data doesn't need changewall.at(y).at(x) += wall.at(y).at(x-1);}/* Check output. COMMENT OUT */// for(auto row : wall)// {// for(int pos : row)// cout << pos << " ";// cout << endl;// }/* Determine which ending position is most common, and cut there *///Exclude final position, which will be the size of the wallint mode = -1;int amt = -1;vector<int> tried;for(auto row : wall){for(int pos : row) //For each pos in the wall{//Guard. If pos is contained in the list, skip posif(find(tried.begin(), tried.end(), pos) != tried.end())continue;tried.push_back(pos);/* Cycle through each row to see if it contains the pos */int curramt = 0;for(auto currrow : wall){if( find( currrow.begin(), currrow.end(), pos ) != currrow.end() )curramt++;}//cout << pos << " " << curramt << endl;if(curramt > amt){amt = curramt;mode = pos;}}}cout << "Please cut at position " << mode << endl;cout << "This will cut through " << (wall.size() - amt) << " bricks." << endl;return 0;}
#include <iostream>#include <vector>#include <utility>#include <algorithm>#include <chrono>using namespace std;#include <stdio.h>#include <Windows.h>int nScreenWidth = 120; // Console Screen Size X (columns)int nScreenHeight = 40; // Console Screen Size Y (rows)int nMapWidth = 16; // World Dimensionsint nMapHeight = 16;float fPlayerX = 14.7f; // Player Start Positionfloat fPlayerY = 5.09f;float fPlayerA = 0.0f; // Player Start Rotationfloat fFOV = 3.14159f / 4.0f; // Field of Viewfloat fDepth = 16.0f; // Maximum rendering distancefloat fSpeed = 5.0f; // Walking Speedint main(){// Create Screen Bufferwchar_t *screen = new wchar_t[nScreenWidth*nScreenHeight];HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);SetConsoleActiveScreenBuffer(hConsole);DWORD dwBytesWritten = 0;// Create Map of world space # = wall block, . = spacewstring map;map += L"#########.......";map += L"#...............";map += L"#.......########";map += L"#..............#";map += L"#......##......#";map += L"#......##......#";map += L"#..............#";map += L"###............#";map += L"##.............#";map += L"#......####..###";map += L"#......#.......#";map += L"#......#.......#";map += L"#..............#";map += L"#......#########";map += L"#..............#";map += L"################";auto tp1 = chrono::system_clock::now();auto tp2 = chrono::system_clock::now();while (1){// We'll need time differential per frame to calculate modification// to movement speeds, to ensure consistant movement, as ray-tracing// is non-deterministictp2 = chrono::system_clock::now();chrono::duration<float> elapsedTime = tp2 - tp1;tp1 = tp2;float fElapsedTime = elapsedTime.count();// Handle CCW Rotationif (GetAsyncKeyState((unsigned short)'A') & 0x8000)fPlayerA -= (fSpeed * 0.75f) * fElapsedTime;// Handle CW Rotationif (GetAsyncKeyState((unsigned short)'D') & 0x8000)fPlayerA += (fSpeed * 0.75f) * fElapsedTime;// Handle Forwards movement & collisionif (GetAsyncKeyState((unsigned short)'W') & 0x8000){fPlayerX += sinf(fPlayerA) * fSpeed * fElapsedTime;;fPlayerY += cosf(fPlayerA) * fSpeed * fElapsedTime;;if (map.c_str()[(int)fPlayerX * nMapWidth + (int)fPlayerY] == '#'){fPlayerX -= sinf(fPlayerA) * fSpeed * fElapsedTime;;fPlayerY -= cosf(fPlayerA) * fSpeed * fElapsedTime;;}}// Handle backwards movement & collisionif (GetAsyncKeyState((unsigned short)'S') & 0x8000){fPlayerX -= sinf(fPlayerA) * fSpeed * fElapsedTime;;fPlayerY -= cosf(fPlayerA) * fSpeed * fElapsedTime;;if (map.c_str()[(int)fPlayerX * nMapWidth + (int)fPlayerY] == '#'){fPlayerX += sinf(fPlayerA) * fSpeed * fElapsedTime;;fPlayerY += cosf(fPlayerA) * fSpeed * fElapsedTime;;}}for (int x = 0; x < nScreenWidth; x++){// For each column, calculate the projected ray angle into world spacefloat fRayAngle = (fPlayerA - fFOV/2.0f) + ((float)x / (float)nScreenWidth) * fFOV;// Find distance to wallfloat fStepSize = 0.1f; // Increment size for ray casting, decrease to increasefloat fDistanceToWall = 0.0f; // resolutionbool bHitWall = false; // Set when ray hits wall blockbool bBoundary = false; // Set when ray hits boundary between two wall blocksfloat fEyeX = sinf(fRayAngle); // Unit vector for ray in player spacefloat fEyeY = cosf(fRayAngle);// Incrementally cast ray from player, along ray angle, testing for// intersection with a blockwhile (!bHitWall && fDistanceToWall < fDepth){fDistanceToWall += fStepSize;int nTestX = (int)(fPlayerX + fEyeX * fDistanceToWall);int nTestY = (int)(fPlayerY + fEyeY * fDistanceToWall);// Test if ray is out of boundsif (nTestX < 0 || nTestX >= nMapWidth || nTestY < 0 || nTestY >= nMapHeight){bHitWall = true; // Just set distance to maximum depthfDistanceToWall = fDepth;}else{// Ray is inbounds so test to see if the ray cell is a wall blockif (map.c_str()[nTestX * nMapWidth + nTestY] == '#'){// Ray has hit wallbHitWall = true;// To highlight tile boundaries, cast a ray from each corner// of the tile, to the player. The more coincident this ray// is to the rendering ray, the closer we are to a tile// boundary, which we'll shade to add detail to the wallsvector<pair<float, float>> p;// Test each corner of hit tile, storing the distance from// the player, and the calculated dot product of the two raysfor (int tx = 0; tx < 2; tx++)for (int ty = 0; ty < 2; ty++){// Angle of corner to eyefloat vy = (float)nTestY + ty - fPlayerY;float vx = (float)nTestX + tx - fPlayerX;float d = sqrt(vx*vx + vy*vy);float dot = (fEyeX * vx / d) + (fEyeY * vy / d);p.push_back(make_pair(d, dot));}// Sort Pairs from closest to farthestsort(p.begin(), p.end(), [](const pair<float, float> &left, const pair<float, float> &right) {return left.first < right.first; });// First two/three are closest (we will never see all four)float fBound = 0.01;if (acos(p.at(0).second) < fBound) bBoundary = true;if (acos(p.at(1).second) < fBound) bBoundary = true;if (acos(p.at(2).second) < fBound) bBoundary = true;}}}// Calculate distance to ceiling and floorint nCeiling = (float)(nScreenHeight/2.0) - nScreenHeight / ((float)fDistanceToWall);int nFloor = nScreenHeight - nCeiling;// Shader walls based on distanceshort nShade = ' ';if (fDistanceToWall <= fDepth / 4.0f) nShade = 0x2588; // Very closeelse if (fDistanceToWall < fDepth / 3.0f) nShade = 0x2593;else if (fDistanceToWall < fDepth / 2.0f) nShade = 0x2592;else if (fDistanceToWall < fDepth) nShade = 0x2591;else nShade = ' '; // Too far awayif (bBoundary) nShade = ' '; // Black it outfor (int y = 0; y < nScreenHeight; y++){// Each Rowif(y <= nCeiling)screen[y*nScreenWidth + x] = ' ';else if(y > nCeiling && y <= nFloor)screen[y*nScreenWidth + x] = nShade;else // Floor{// Shade floor based on distancefloat b = 1.0f - (((float)y -nScreenHeight/2.0f) / ((float)nScreenHeight / 2.0f));if (b < 0.25) nShade = '#';else if (b < 0.5) nShade = 'x';else if (b < 0.75) nShade = '.';else if (b < 0.9) nShade = '-';else nShade = ' ';screen[y*nScreenWidth + x] = nShade;}}}// Display Statsswprintf_s(screen, 40, L"X=%3.2f, Y=%3.2f, A=%3.2f FPS=%3.2f ", fPlayerX, fPlayerY, fPlayerA, 1.0f/fElapsedTime);// Display Mapfor (int nx = 0; nx < nMapWidth; nx++)for (int ny = 0; ny < nMapWidth; ny++){screen[(ny+1)*nScreenWidth + nx] = map[ny * nMapWidth + nx];}screen[((int)fPlayerX+1) * nScreenWidth + (int)fPlayerY] = 'P';// Display Framescreen[nScreenWidth * nScreenHeight - 1] = '\0';WriteConsoleOutputCharacter(hConsole, screen, nScreenWidth * nScreenHeight, { 0,0 }, &dwBytesWritten);}return 0;}
#include <iostream>using namespace std;main{cout << "No tabbing. That's very sad :(\n";cout << "No in-editor highlighting either :(((\n";cout << "Descriptions might be niice too.";}
// Iterative C++ program to// implement Stein's Algorithm//#include <bits/stdc++.h>#include <bitset>using namespace std;// Function to implement// Stein's Algorithmint gcd(int a, int b){/* GCD(0, b) == b; GCD(a, 0) == a,GCD(0, 0) == 0 */if (a == 0)return b;if (b == 0)return a;/*Finding K, where K is thegreatest power of 2that divides both a and b. */int k;for (k = 0; ((a | b) & 1) == 0; ++k){a >>= 1;b >>= 1;}/* Dividing a by 2 until a becomes odd */while ((a & 1) == 0)a >>= 1;/* From here on, 'a' is always odd. */do{/* If b is even, remove all factor of 2 in b */while ((b & 1) == 0)b >>= 1;/* Now a and b are both odd.Swap if necessary so a <= b,then set b = b - a (which is even).*/if (a > b)swap(a, b); // Swap u and v.b = (b - a);} while (b != 0);/* restore common factors of 2 */return a << k;}// Driver codeint main(){int a = 12, b = 780;printf("Gcd of given numbers is %d\n", gcd(a, b));return 0;}
#include <string>#include <iostream>#include "PlaylistNode.h"using namespace std;PlaylistNode::PlaylistNode() {uniqueID = "none";songName = "none";artistName = "none";songLength = 0;nextNodePtr = 0;}PlaylistNode::PlaylistNode(string uniqueID_, string songName_, string artistName_, int songLength_) {uniqueID = uniqueID_;songName = songName_;artistName = artistName_;songLength = songLength_;nextNodePtr = 0;}void PlaylistNode::InsertAfter(PlaylistNode* ptr) {this->SetNext(ptr->GetNext());ptr->SetNext(this);}void PlaylistNode::SetNext(PlaylistNode* ptr) {nextNodePtr = ptr;}string PlaylistNode::GetID() {return uniqueID;}string PlaylistNode::GetSongName() {return songName;}string PlaylistNode::GetArtistName() {return artistName;}int PlaylistNode::GetSongLength() {return songLength;}PlaylistNode* PlaylistNode::GetNext() {return nextNodePtr;}void PlaylistNode::PrintPlaylistNode() {cout << "Unique ID: " << uniqueID << endl;cout << "Song Name: " << songName << endl;cout << "Artist Name: " << artistName << endl;cout << "Song Length (in seconds): " << songLength << endl;}Playlist::Playlist() {head = tail = 0;}void Playlist::AddSong(string id, string songname, string artistname, int length) {PlaylistNode* n = new PlaylistNode(id, songname, artistname, length);if (head == 0) {head = tail = n;}else {n->InsertAfter(tail);tail = n;}}bool Playlist::RemoveSong(string id) {if (head == NULL) {cout << "Playlist is empty" << endl;return false;}PlaylistNode* curr = head;PlaylistNode* prev = NULL;while (curr != NULL) {if (curr->GetID() == id) {break;}prev = curr;curr = curr->GetNext();}if (curr == NULL) {cout << "\"" << curr->GetSongName() << "\" is not found" << endl;return false;}else {if (prev != NULL) {prev ->SetNext(curr->GetNext());}else {head = curr->GetNext();}if (tail == curr) {tail = prev;}cout << "\"" << curr->GetSongName() << "\" removed." << endl;delete curr;return true;}}bool Playlist::ChangePosition(int oldPos, int newPos) {if (head == NULL) {cout << "Playlist is empty" << endl;return false;}PlaylistNode* prev = NULL;PlaylistNode* curr = head;int pos;if (head == NULL || head == tail) {return false;}for (pos = 1; curr != NULL && pos < oldPos; pos++) {prev = curr;curr = curr->GetNext();}if (curr != NULL) {string currentSong = curr->GetSongName();if (prev == NULL) {head = curr->GetNext();}else {prev->SetNext(curr->GetNext());}if (curr == tail) {tail = prev;}PlaylistNode* curr1 = curr;prev = NULL;curr = head;for (pos = 1; curr != NULL && pos < newPos; pos++) {prev = curr;curr = curr->GetNext();}if (prev == NULL) {curr1->SetNext(head);head = curr1;}else {curr1->InsertAfter(prev);}if (curr == NULL) {tail = curr1;}cout << "\"" << currentSong << "\" moved to position " << newPos << endl;return true;}else {cout << "Song's current position is invalid" << endl;return false;}}void Playlist::SongsByArtist(string artist) {if (head == NULL) {cout << "Playlist is empty" << endl;}else {PlaylistNode* curr = head;int i = 1;while (curr != NULL) {if (curr->GetArtistName() == artist) {cout << endl << i << "." << endl;curr->PrintPlaylistNode();}curr = curr->GetNext();i++;}}}int Playlist::TotalTime() {int total = 0;PlaylistNode* curr = head;while (curr != NULL) {total += curr->GetSongLength();curr = curr->GetNext();}return total;}void Playlist::PrintList() {if (head == NULL) {cout << "Playlist is empty" << endl;}else {PlaylistNode* curr = head;int i = 1;while (curr != NULL) {cout << endl << i++ << "." << endl;curr->PrintPlaylistNode();curr = curr->GetNext();}}}