mirror of
https://github.com/Hizenberg469/Algorithms-snippets.git
synced 2026-04-19 22:52:23 +03:00
playground updated
This commit is contained in:
0
playground/IOFiles/correct_answer.txt
Normal file
0
playground/IOFiles/correct_answer.txt
Normal file
0
playground/IOFiles/output.txt
Normal file
0
playground/IOFiles/output.txt
Normal file
0
playground/IOFiles/testcase.txt
Normal file
0
playground/IOFiles/testcase.txt
Normal file
59
playground/Makefile
Normal file
59
playground/Makefile
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
BUILD_DIR = build
|
||||||
|
OBJS_DIR = $(BUILD_DIR)/objs
|
||||||
|
|
||||||
|
SOLUTION_BINARY = $(BUILD_DIR)/solution
|
||||||
|
BRUTEFORCE_BINARY = $(BUILD_DIR)/$(notdir Stress_Testing/bruteForce)
|
||||||
|
GENERATOR_BINARY = $(BUILD_DIR)/$(notdir Stress_Testing/generator)
|
||||||
|
CODEDIRS = . ./Stress_Testing
|
||||||
|
INCDIRS = .
|
||||||
|
|
||||||
|
|
||||||
|
CXX = g++
|
||||||
|
DEPFLAGS = -MP -MMD
|
||||||
|
CXXFLAGS = -Wall -Wextra -g \
|
||||||
|
$(foreach D,$(INCDIRS), -I$(D)) \
|
||||||
|
$(DEPFLAGS)
|
||||||
|
|
||||||
|
CXXFILES = $(foreach D, \
|
||||||
|
$(CODEDIRS), \
|
||||||
|
$(wildcard $(D)/*.cpp))
|
||||||
|
|
||||||
|
OBJECTS = $(patsubst %.cpp, $(OBJS_DIR)/%.o, $(notdir $(CXXFILES)))
|
||||||
|
DEPFILES = $(patsubst %.cpp, $(OBJS_DIR)/%.d, $(notdir $(CXXFILES)))
|
||||||
|
|
||||||
|
all: $(SOLUTION_BINARY) \
|
||||||
|
$(GENERATOR_BINARY) \
|
||||||
|
$(BRUTEFORCE_BINARY)
|
||||||
|
|
||||||
|
|
||||||
|
$(SOLUTION_BINARY): $(OBJS_DIR)/solution.o | $(OBJS_DIR)
|
||||||
|
$(CXX) -o $@ $<
|
||||||
|
|
||||||
|
$(GENERATOR_BINARY): $(OBJS_DIR)/generator.o | $(OBJS_DIR)
|
||||||
|
$(CXX) -o $@ $<
|
||||||
|
|
||||||
|
$(BRUTEFORCE_BINARY): $(OBJS_DIR)/bruteForce.o | $(OBJS_DIR)
|
||||||
|
$(CXX) -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
$(OBJS_DIR)/%.o: %.cpp | $(OBJS_DIR)
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
$(OBJS_DIR)/%.o: Stress_Testing/%.cpp | $(OBJS_DIR)
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(SOLUTION_BINARY) \
|
||||||
|
$(BRUTEFORCE_BINARY) \
|
||||||
|
$(GENERATOR_BINARY) \
|
||||||
|
$(OBJECTS) \
|
||||||
|
$(DEPFILES)
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "make clean: To remove executable, objects and dependency files."
|
||||||
|
@echo "make $(SOLUTION_BINARY): To build $(SOLUTION_BINARY) only."
|
||||||
|
@echo "make all: To build for Stress_Testing."
|
||||||
|
|
||||||
|
-include $(DEPFILES)
|
||||||
|
|
||||||
|
.PHONY: clean help all
|
||||||
42
playground/Stress_Testing/bruteForce.cpp
Normal file
42
playground/Stress_Testing/bruteForce.cpp
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const int N = int(2e5) + 9;
|
||||||
|
|
||||||
|
int n, k, h;
|
||||||
|
int need = int(1e9);
|
||||||
|
int cnt[N];
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
scanf("%d %d", &n, &k);
|
||||||
|
for(int i = 0; i < n; ++i){
|
||||||
|
int x;
|
||||||
|
scanf("%d", &x);
|
||||||
|
h = max(h, x);
|
||||||
|
need = min(need, x);
|
||||||
|
++cnt[x];
|
||||||
|
}
|
||||||
|
|
||||||
|
int pos = N - 1;
|
||||||
|
int res = 0;
|
||||||
|
long long sum = 0;
|
||||||
|
int c = 0;
|
||||||
|
while(true){
|
||||||
|
long long x = sum - c * 1LL * (pos - 1);
|
||||||
|
if(x > k){
|
||||||
|
++res;
|
||||||
|
h = pos;
|
||||||
|
sum = pos * 1LL * c;
|
||||||
|
}
|
||||||
|
|
||||||
|
--pos;
|
||||||
|
if(pos == need) break;
|
||||||
|
c += cnt[pos];
|
||||||
|
sum += cnt[pos] * 1LL * pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(h != need) ++res;
|
||||||
|
|
||||||
|
cout << res << endl;
|
||||||
|
}
|
||||||
31
playground/Stress_Testing/generator.cpp
Normal file
31
playground/Stress_Testing/generator.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int rnd(int a,int b){
|
||||||
|
return a + rand() % ( b - a + 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]){
|
||||||
|
|
||||||
|
int seed = atoi(argv[1]);
|
||||||
|
|
||||||
|
srand(seed);
|
||||||
|
|
||||||
|
int n = rnd(1,20);
|
||||||
|
|
||||||
|
int k = rnd(20, 40);
|
||||||
|
|
||||||
|
cout << n << ' ' << k << '\n';
|
||||||
|
|
||||||
|
int val = 0;
|
||||||
|
for(int i = 0 ; i < n ; i++ ){
|
||||||
|
|
||||||
|
val = rnd(0,50);
|
||||||
|
|
||||||
|
cout << val << ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << '\n';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
83
playground/run.sh
Normal file
83
playground/run.sh
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Creating .txt files
|
||||||
|
TESTCASE_FILE=IOFiles/testcase.txt
|
||||||
|
OUTPUT_FILE=IOFiles/output.txt
|
||||||
|
CORRECT_ANSWER_FILE=IOFiles/correct_answer.txt
|
||||||
|
|
||||||
|
if ! [ -f $TESTCASE_FILE ]; then
|
||||||
|
echo "No $TESTCASE_FILE detected"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -f $OUTPUT_FILE ]; then
|
||||||
|
echo "No $OUTPUT_FILE detected"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -f $CORRECT_ANSWER_FILE ]; then
|
||||||
|
echo "No $CORRECT_ANSWER_FILE detected"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#Executables.
|
||||||
|
|
||||||
|
SOLUTION=build/solution
|
||||||
|
|
||||||
|
make $SOLUTION
|
||||||
|
|
||||||
|
# Read and split test cases and answers based on empty lines
|
||||||
|
echo "Running test cases..."
|
||||||
|
pass_count=0
|
||||||
|
fail_count=0
|
||||||
|
|
||||||
|
# Separate test cases and expected outputs by empty lines
|
||||||
|
mapfile -t test_cases < <(awk -v RS= '1' "$TESTCASE_FILE")
|
||||||
|
mapfile -t expected_outputs < <(awk -v RS= '1' "$CORRECT_ANSWER_FILE")
|
||||||
|
|
||||||
|
# Ensure number of testcase is same as number of output.
|
||||||
|
if [ ${#test_cases[@]} -ne ${#expected_outputs[@]} ]; then
|
||||||
|
echo "The TestCase and answer count should be same."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
for (( test_num = 0 ; test_num < ${#test_cases[@]} ; test_num++))
|
||||||
|
do
|
||||||
|
test_case=${test_cases[test_num]}
|
||||||
|
expected_output=${expected_outputs[test_num]}
|
||||||
|
|
||||||
|
if ! echo "$test_case" | ./$SOLUTION > "$OUTPUT_FILE"; then
|
||||||
|
echo -e "\033[0;31mTest #$(($test_num+1)): Execution failed\033[0m"
|
||||||
|
echo "solution executable didn't executed successfully"
|
||||||
|
let fail_count++
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
test_output=$(<"$OUTPUT_FILE")
|
||||||
|
|
||||||
|
if diff -q -Z <(echo "$test_output") <(echo "$expected_output") > /dev/null; then
|
||||||
|
echo -e "\033[0;32mTest #$(($test_num+1)): PASS\033[0m"
|
||||||
|
let pass_count++
|
||||||
|
else
|
||||||
|
echo -e "\033[0;31mTest #$(($test_num+1)): FAIL\033[0m"
|
||||||
|
echo "Test case:"
|
||||||
|
echo $test_case
|
||||||
|
echo "Your output:"
|
||||||
|
echo $test_output
|
||||||
|
echo "Correct output:"
|
||||||
|
echo $expected_output
|
||||||
|
let fail_count++
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
#Sumary
|
||||||
|
echo -e "\033[0;32mPassed test: $pass_count\033[0m"
|
||||||
|
echo -e "\033[0;31mFailed test: $fail_count\033[0m"
|
||||||
|
|
||||||
|
# Exit with appropriate status
|
||||||
|
if [ $fail_count -eq 0 ]; then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
9
playground/solution.cpp
Normal file
9
playground/solution.cpp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
int a,b;
|
||||||
|
cin >> a >> b;
|
||||||
|
cout << a << ' ' << b << '\n';
|
||||||
|
}
|
||||||
47
playground/stress.sh
Normal file
47
playground/stress.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "Provide the limit of stress testing"
|
||||||
|
echo "$0 'test case limit'"
|
||||||
|
echo "$0 -1 (for unlimited)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#Required tools
|
||||||
|
SOLUTION=build/solution
|
||||||
|
GENERATOR=build/generator
|
||||||
|
BRUTEFORCE=build/bruteForce
|
||||||
|
|
||||||
|
#Build necessary things
|
||||||
|
make all
|
||||||
|
|
||||||
|
#Files
|
||||||
|
TESTCASE_FILE=IOFiles/testcase.txt
|
||||||
|
OUTPUT_FILE=IOFiles/output.txt
|
||||||
|
CORRECT_ANSWER_FILE=IOFiles/correct_answer.txt
|
||||||
|
|
||||||
|
pass_count=0
|
||||||
|
|
||||||
|
while (( 1 ))
|
||||||
|
do
|
||||||
|
./generator > $TESTCASE_FILE
|
||||||
|
./SOLUTION < $TESTCASE_FILE > $OUTPUT_FILE
|
||||||
|
./BRUTEFORCE < $TESTCASE_FILE > $CORRECT_ANSWER_FILE
|
||||||
|
|
||||||
|
if diff -q -Z $OUTPUT_FILE $CORRECT_ANSWER_FILE >> /dev/null; then
|
||||||
|
echo -e "\033[0;31mTest #$(($pass_count+1)): FAIL\033[0m"
|
||||||
|
echo "Test case:"
|
||||||
|
cat $TESTCASE_FILE
|
||||||
|
echo "Your output:"
|
||||||
|
cat $OUTPUT_FILE
|
||||||
|
echo "Correct output:"
|
||||||
|
cat $CORRECT_ANSWER_FILE
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[0;32mPassed test: #$(($pass_count+1))\033[0m"
|
||||||
|
|
||||||
|
if [ $1 -ne -1 ] || [ $pass_count -lt $1 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user