diff --git a/tasks/votincev_d_alternating_values/common/include/common.hpp b/tasks/votincev_d_alternating_values/common/include/common.hpp new file mode 100644 index 0000000000..7aa3bb1726 --- /dev/null +++ b/tasks/votincev_d_alternating_values/common/include/common.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +#include "task/include/task.hpp" + +namespace votincev_d_alternating_values { + +using InType = std::vector; +using OutType = int; +using TestType = std::string; +using BaseTask = ppc::task::Task; + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/data/test1.txt b/tasks/votincev_d_alternating_values/data/test1.txt new file mode 100644 index 0000000000..f30935c438 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test1.txt @@ -0,0 +1,3 @@ +0 +10 +1 3 5 8 6 7 9 5 8 2 \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/data/test10.txt b/tasks/votincev_d_alternating_values/data/test10.txt new file mode 100644 index 0000000000..ad69d5b91f --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test10.txt @@ -0,0 +1,3 @@ +791 +1521 +-55.1 -55.1 93.4 41.6 61.0 97.1 -86.1 -83.4 47.1 -87.3 18.9 -27.5 -27.6 -91.5 -85.3 75.5 -5.5 -71.6 -70.4 17.2 -42.0 -64.3 -60.8 -65.0 1.1 -24.2 -58.4 44.8 -31.0 -44.5 98.3 12.1 60.8 -92.5 -97.7 -19.1 -39.1 49.5 -84.2 23.4 65.9 -62.1 9.6 97.3 -5.2 40.8 99.5 -76.4 40.1 7.2 -31.1 47.1 -95.7 54.6 -49.9 -33.5 99.9 -35.4 3.1 79.4 -24.9 41.3 86.3 -90.8 -14.3 -74.3 16.2 16.4 -44.4 43.4 61.3 99.9 77.7 -98.0 -74.3 23.7 -47.5 99.6 -85.1 -29.8 -32.4 -42.9 64.0 -74.7 -48.6 70.0 -23.3 -47.0 -66.7 -88.9 -53.0 -59.4 -73.4 -0.6 -23.1 17.7 6.7 -93.6 -26.6 -11.4 -72.8 15.2 -53.8 -71.3 64.2 23.8 -9.1 49.0 48.0 -39.3 86.4 95.3 2.7 33.9 -33.8 -99.1 -17.9 -93.7 -71.8 79.1 -28.1 13.9 90.2 22.9 -77.9 -80.0 -82.0 -91.6 -91.9 59.1 44.6 -9.6 47.0 -33.3 -72.0 -55.4 -60.1 -95.3 -49.9 33.5 10.8 55.9 81.7 90.2 -9.6 42.6 21.5 52.9 -86.3 59.1 -99.5 73.1 43.9 -64.6 -15.6 -56.3 -65.8 17.9 -13.9 -8.2 -40.1 -41.7 58.6 65.4 -69.7 -35.2 -40.6 -4.4 50.5 -77.9 -23.1 50.0 -88.7 93.7 16.0 72.4 -94.4 -17.7 -57.9 14.3 -49.0 -39.8 82.2 -11.7 31.6 -18.3 56.3 -0.8 88.4 -10.8 -98.4 9.7 37.3 -69.3 97.1 24.1 17.3 -82.9 -49.7 -38.6 -59.6 -25.7 30.3 -48.1 41.9 -77.1 51.8 -55.7 55.8 29.1 81.0 -48.3 27.2 96.8 16.2 -48.4 17.7 58.6 -92.2 -21.0 64.9 4.8 99.8 48.9 -97.5 -42.2 36.3 -71.4 11.5 -71.2 -82.8 49.3 -59.6 31.1 12.6 -87.6 7.1 41.7 51.6 -62.3 -63.2 69.4 -54.7 90.9 -75.2 19.8 -23.1 -23.8 -56.0 39.4 12.3 97.5 8.0 -1.2 96.5 -48.0 -83.0 -1.2 -29.2 -75.8 -35.0 -26.2 30.4 -79.0 -61.5 25.5 -0.6 -86.2 45.2 20.1 -50.4 -28.4 -45.1 13.9 -77.8 67.0 -83.4 96.7 66.3 94.4 -8.9 -8.6 -56.0 -18.3 -82.0 -0.9 -96.7 -58.7 7.6 -11.3 54.1 -67.6 36.0 -67.6 10.6 84.1 -67.9 -18.2 -10.7 -7.8 78.2 88.7 -74.3 -23.1 -45.6 -50.2 -83.7 63.8 -94.7 -22.6 96.8 -58.6 -61.3 74.0 -79.6 12.1 76.2 25.5 -60.1 -21.0 -68.9 6.4 19.7 -39.5 85.3 -47.3 47.0 -36.4 -16.3 46.5 82.0 18.1 67.3 48.7 75.8 65.3 16.2 -90.5 55.4 -25.3 -75.3 -88.9 -22.1 -28.6 21.9 -39.4 12.6 -17.2 -14.7 37.9 -43.1 58.8 49.8 -68.1 -10.9 -30.9 -3.2 5.6 30.1 81.0 86.2 -73.5 63.3 -55.2 91.7 10.2 57.2 -12.9 18.0 -49.0 -81.6 -30.2 -22.7 27.6 -38.0 -2.5 -81.6 20.1 89.6 12.7 -52.3 90.7 -86.6 -32.3 80.1 12.8 -17.0 4.5 -13.6 -36.0 -42.5 -33.7 -10.3 -34.8 86.5 -62.2 66.9 -39.6 -12.8 29.3 -82.4 72.8 85.7 32.3 85.5 56.1 99.8 -96.0 20.3 -25.2 -27.8 -62.5 16.2 -36.5 51.2 95.4 -86.4 -99.5 -7.7 59.1 41.6 -35.5 93.3 92.4 -4.3 -24.0 81.2 25.8 12.2 -3.0 97.1 51.4 31.4 -12.6 3.1 -10.6 -8.3 -98.2 1.4 59.8 13.7 23.4 22.5 56.8 21.4 64.9 3.5 -42.8 -8.3 59.9 -23.3 34.1 13.2 -50.0 -18.5 -36.9 38.1 8.9 -3.5 63.8 -41.0 51.9 8.6 -20.6 81.2 -60.3 22.2 -50.7 80.2 16.1 -0.7 46.5 -10.5 97.6 -88.2 -49.6 91.4 -9.2 -99.1 89.6 57.5 -13.9 61.7 9.2 10.7 -58.7 56.3 -41.3 15.8 -11.7 34.6 -94.2 -0.7 -80.1 -72.3 -42.8 24.1 65.0 -72.6 80.5 66.9 -73.6 25.3 75.1 -51.9 -44.7 -14.9 -11.7 53.8 -58.6 -70.3 -88.1 -58.0 54.5 -36.2 -41.1 -62.7 45.9 6.0 69.7 29.2 8.3 -82.5 8.0 28.9 -33.3 -93.1 86.3 63.9 -77.4 24.4 7.8 34.4 -60.2 -27.2 -25.8 -14.6 -29.7 68.8 -64.1 74.5 -80.8 33.2 -3.4 -72.3 75.2 -97.4 44.3 54.3 -45.4 61.3 -80.1 -6.1 35.0 -38.7 -59.6 84.1 -80.4 68.9 56.0 -47.0 -14.4 36.3 -83.4 81.4 -88.3 72.4 -8.9 74.3 40.1 -70.0 82.8 80.4 -1.2 -2.2 -68.1 -54.4 -36.6 75.6 44.9 38.5 98.9 -89.3 58.3 28.0 63.5 46.4 -15.7 -88.0 7.3 62.1 -11.9 -20.4 -43.6 89.6 -5.0 98.5 -0.4 -57.8 -19.2 57.1 -94.4 -73.2 20.6 -8.7 48.1 -88.3 72.7 -22.8 -57.1 74.7 4.9 -15.9 -35.4 69.3 68.1 -20.9 -48.6 -72.4 50.5 6.8 73.4 -66.6 -66.9 -8.2 1.2 19.5 43.9 3.2 -85.9 50.7 -28.5 -52.7 73.7 -52.0 -24.9 69.1 35.3 2.7 57.3 -69.6 -61.1 5.3 -92.2 13.2 -69.2 -4.4 73.5 39.9 -98.3 12.8 90.5 43.1 32.4 -50.1 62.8 91.1 -63.1 98.9 74.5 -95.8 -70.3 95.1 -10.2 -97.2 -74.1 9.6 96.5 79.6 -39.8 -5.3 -80.7 -54.3 -82.5 -75.3 60.2 -41.5 22.1 11.0 -40.2 59.0 57.1 78.0 -90.0 -87.0 -45.7 40.9 -84.0 -79.1 76.6 -0.6 78.5 -35.4 73.2 42.9 -99.6 -62.3 77.1 92.7 93.6 -84.3 -55.2 -70.4 -31.5 -4.2 16.7 91.2 70.4 29.5 60.0 -55.0 99.8 1.2 99.1 48.4 93.8 1.4 35.4 -11.4 78.1 25.6 -95.3 -34.3 24.1 45.9 66.1 -3.5 90.9 -86.8 13.4 -1.3 84.0 36.4 39.5 37.9 71.8 -28.3 -5.7 98.0 -81.2 -41.5 57.8 4.8 77.6 65.2 90.1 23.2 43.7 -16.6 -1.3 -32.1 -28.2 95.8 94.5 -50.1 -97.1 -16.3 -82.4 -96.7 56.3 -88.8 71.4 69.7 56.5 89.9 56.5 -21.0 -2.3 68.5 69.3 41.7 -91.1 -58.0 -19.5 -54.1 37.2 -78.5 -26.3 77.2 -62.3 -9.9 81.8 32.2 -2.8 61.5 -89.3 -51.0 99.1 8.3 70.9 64.1 38.6 17.7 37.1 59.1 94.4 -79.5 74.3 -11.9 21.5 30.6 -75.7 37.3 -26.2 38.1 12.5 -59.2 -55.9 80.5 43.6 -72.7 9.9 -45.9 -98.1 -21.1 14.0 9.6 7.5 10.3 -51.0 77.9 2.0 57.3 -37.8 31.1 -7.5 56.8 -34.0 64.6 -9.6 10.6 -98.5 -35.4 52.7 -65.1 5.6 -12.2 94.7 67.1 54.6 10.5 -90.4 93.4 -86.2 3.8 67.4 -10.8 -89.3 75.6 80.6 92.5 -8.0 -49.5 3.9 44.9 58.4 45.4 16.6 -32.4 -57.7 -35.0 23.3 21.0 85.3 89.1 16.9 -61.2 -47.4 34.3 66.3 22.2 85.3 34.4 -87.5 67.3 -66.8 -16.7 -77.3 -55.2 -40.4 -28.3 -84.4 14.5 -70.6 82.0 -92.6 84.7 -43.0 -95.0 42.8 78.6 26.5 -74.7 -47.6 -72.3 52.8 10.9 92.7 -34.2 69.4 52.9 13.0 54.0 -1.4 58.9 -91.5 -40.7 8.1 -76.5 88.7 -98.6 -73.2 2.9 -95.1 -34.5 83.2 -70.7 -10.5 -20.8 -15.1 -71.7 -15.3 60.0 79.7 -20.9 -1.4 35.7 65.2 36.3 -94.6 75.4 -40.5 -38.3 58.3 -35.8 -54.2 -11.3 32.4 -78.7 -1.1 90.9 -36.4 37.7 42.9 -96.1 -16.1 70.5 -31.2 -71.3 12.5 3.8 -71.2 -20.8 -68.4 -60.2 -23.0 70.9 -90.7 79.3 98.8 20.0 -18.6 -62.8 -40.1 -10.0 -57.8 59.6 -24.3 -91.6 16.1 -6.7 91.6 40.5 94.5 -25.6 -87.9 -48.0 -48.4 86.5 -3.4 -15.4 68.0 61.8 89.4 67.6 -3.5 -11.0 61.5 26.5 -61.6 -96.2 -72.3 -45.5 43.3 66.9 -97.3 17.2 -7.5 42.2 64.0 -38.8 -25.1 -30.3 -80.4 98.6 62.6 44.0 32.4 -54.3 61.7 -91.9 -40.7 17.1 70.6 -10.1 -50.5 77.2 -52.5 64.8 28.9 -81.8 -39.0 -29.7 39.3 -88.0 70.9 -98.8 90.2 62.5 73.0 -65.0 95.4 91.2 25.6 52.0 -98.5 61.1 -72.7 58.9 26.5 -93.5 86.7 34.9 -39.9 3.3 -16.4 -85.7 -62.7 -55.5 -49.3 8.2 37.9 -74.5 33.2 -79.0 52.7 -36.9 -52.7 25.1 -19.6 -41.9 -66.3 1.4 -40.0 -39.9 19.2 -29.8 -0.3 -24.6 -87.1 -13.1 83.8 55.7 56.7 -16.2 -47.4 -75.4 -70.7 64.5 -47.4 -71.7 -93.2 93.4 -99.9 30.0 58.2 -20.8 -96.3 84.8 30.4 14.8 42.4 -40.1 41.1 61.9 9.1 -75.1 -19.2 59.4 49.7 89.4 12.5 40.5 -47.8 5.8 60.6 80.0 41.7 -9.9 -64.1 -22.0 16.6 -0.5 14.9 13.6 67.5 89.7 -64.5 60.9 77.3 -75.0 -12.5 96.8 -3.5 75.0 -33.5 73.8 -9.7 36.1 -58.6 75.5 87.9 -69.4 88.0 75.0 80.1 97.2 98.9 50.7 17.0 -28.1 -6.1 82.3 -75.5 29.5 -15.5 -12.7 -97.4 -85.9 -43.1 66.1 55.4 -70.8 23.8 15.6 96.8 -43.3 5.8 82.5 50.5 -44.9 69.1 0.9 -37.0 76.8 22.0 8.2 25.8 -59.2 30.2 -70.3 -13.9 12.6 -67.8 86.6 -76.5 98.3 -18.9 36.0 -70.6 71.4 -61.2 -14.3 16.1 -87.2 16.2 2.9 -89.5 53.6 63.4 99.1 98.9 -1.5 -12.1 -49.4 -69.4 -76.8 10.2 -18.8 80.1 39.8 -84.8 83.8 -14.7 82.6 -71.4 7.9 76.6 -44.3 61.1 43.1 -88.9 22.0 26.8 -23.0 27.9 97.1 34.3 91.0 -33.2 73.9 -44.8 36.4 -84.4 89.4 -34.4 -26.1 -64.0 86.2 36.1 29.3 -100.0 51.9 -70.2 62.0 3.7 97.9 -42.2 -38.7 -41.6 -95.5 92.8 -18.5 77.1 67.6 56.5 12.8 -63.4 68.9 -71.6 94.4 57.3 -42.0 -84.3 -48.9 68.0 56.7 52.5 52.5 -83.8 49.9 31.9 -25.1 86.4 89.2 44.5 23.5 96.9 -45.4 -31.9 -37.2 63.1 -82.3 -63.5 -41.5 86.9 -38.8 75.8 76.5 -32.4 61.3 -88.6 96.0 -3.0 -18.5 -90.6 67.6 -90.8 -27.2 -82.3 91.7 58.0 40.2 57.2 80.3 -96.9 30.4 47.9 53.3 -8.2 30.7 -31.4 38.2 -99.0 15.7 -29.8 93.0 -35.9 -22.2 67.5 -84.3 25.0 -69.5 87.8 98.0 -67.6 10.0 -42.2 3.2 24.8 84.2 -66.0 -57.0 67.2 29.8 79.0 -75.8 -4.8 83.2 48.2 44.2 -66.7 72.6 8.4 17.9 -9.4 -23.0 55.7 -14.4 -14.6 -18.1 67.6 -51.3 -22.5 40.2 -44.4 -50.7 17.6 45.7 89.5 -38.7 79.0 12.1 22.5 3.2 -83.6 -63.8 -84.5 -78.8 49.1 -30.0 56.8 69.8 -29.9 -26.3 28.1 24.5 -36.5 63.4 -98.2 41.9 -32.9 73.7 -63.4 70.5 -81.6 7.0 -24.2 43.2 -14.8 -85.9 -58.2 52.6 -74.1 14.9 -16.2 89.2 -89.7 91.5 84.9 -90.4 94.0 43.5 -31.8 -11.9 14.3 -13.7 -93.1 36.1 13.7 -54.8 23.1 -20.3 -73.4 94.2 73.8 3.6 15.4 -75.1 -10.5 58.8 -17.6 -42.4 1.1 78.6 6.7 98.3 57.9 -62.2 -98.3 18.3 -47.8 74.1 84.0 -59.6 85.2 67.0 98.8 98.2 31.6 -46.6 -70.8 -44.0 -36.9 84.1 -65.5 -21.2 -78.5 54.2 -88.9 -38.6 -78.9 -7.6 -44.9 63.7 -64.5 -33.5 -36.5 -64.3 -97.4 33.2 95.0 -57.8 -11.4 93.7 37.6 -66.3 90.2 -24.2 -49.6 -5.0 15.1 61.1 -56.5 42.4 -16.7 96.1 -4.6 59.6 98.5 85.8 -91.2 7.5 53.4 -94.5 -9.3 -84.5 -58.1 -85.8 62.9 -80.1 45.5 61.5 -21.6 62.4 46.3 80.9 -95.5 49.6 -85.7 -35.6 21.6 53.6 3.3 -82.9 -51.8 -59.0 -7.7 25.6 62.9 26.3 55.2 66.0 -46.4 76.1 -87.1 -95.8 23.7 88.9 26.2 -80.2 13.9 76.0 -32.4 12.4 97.4 15.4 86.0 25.4 89.0 55.3 diff --git a/tasks/votincev_d_alternating_values/data/test2.txt b/tasks/votincev_d_alternating_values/data/test2.txt new file mode 100644 index 0000000000..4bf73b8630 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test2.txt @@ -0,0 +1,3 @@ +6 +12 +0 1 0 -1 0 -1 0 1 0 -1 0 1 \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/data/test3.txt b/tasks/votincev_d_alternating_values/data/test3.txt new file mode 100644 index 0000000000..ebc2692c22 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test3.txt @@ -0,0 +1,3 @@ +13 +14 +1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/data/test4.txt b/tasks/votincev_d_alternating_values/data/test4.txt new file mode 100644 index 0000000000..3a09ac1c2d --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test4.txt @@ -0,0 +1,3 @@ +0 +1 +1 \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/data/test5.txt b/tasks/votincev_d_alternating_values/data/test5.txt new file mode 100644 index 0000000000..aa47d0d46d --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test5.txt @@ -0,0 +1,2 @@ +0 +0 diff --git a/tasks/votincev_d_alternating_values/data/test6.txt b/tasks/votincev_d_alternating_values/data/test6.txt new file mode 100644 index 0000000000..6900927981 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test6.txt @@ -0,0 +1,3 @@ +11 +12 +0.5 -1.2 0.8 -0.3 1.1 -0.9 0.7 -1.5 0.2 -0.6 1.3 -0.4 \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/data/test7.txt b/tasks/votincev_d_alternating_values/data/test7.txt new file mode 100644 index 0000000000..1b507a04f6 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test7.txt @@ -0,0 +1,3 @@ +496 +1000 +-69.4 -51.8 -83.8 -12.8 43.4 -18.4 54.3 74.7 84.0 -81.9 1.5 -24.8 -76.6 -16.8 -35.9 51.5 -92.3 30.2 51.5 76.4 -4.2 -83.1 15.0 -74.5 -50.1 41.0 10.0 63.3 -6.8 57.6 -26.5 82.9 -80.0 69.5 -21.5 -98.5 -88.5 -72.8 7.3 50.8 38.3 39.0 7.2 -13.8 -29.3 -2.0 -77.8 44.5 98.0 -56.7 71.6 61.7 10.0 11.2 -75.6 51.2 -95.1 -34.8 14.4 -5.9 25.1 76.7 89.7 7.7 -43.7 77.9 -21.6 4.5 38.9 -80.4 -89.6 73.7 19.0 4.8 38.6 25.6 -43.2 90.2 -91.1 27.1 79.7 -69.5 -71.0 -15.0 -51.3 83.7 59.5 -24.7 53.2 19.8 13.0 -0.1 16.5 11.9 37.9 -49.7 12.4 61.2 28.2 91.3 -97.5 -57.3 -57.4 -15.5 -23.9 -62.1 -38.3 -94.5 -34.0 98.6 24.4 4.8 31.1 -98.5 60.9 96.7 11.4 -44.1 35.8 -65.8 8.7 -97.7 -22.2 2.3 85.7 -96.4 -57.6 -96.5 -9.4 -43.2 26.3 36.0 51.5 -65.6 43.0 -74.6 -18.3 68.4 60.0 -99.5 95.7 -4.4 -30.8 -54.8 -26.6 90.4 14.0 -87.3 -71.9 -26.9 49.9 0.9 -76.9 -91.7 36.3 -37.2 -59.8 -13.8 10.3 28.5 -66.3 -9.3 -52.9 77.1 -5.4 -59.3 -27.4 -27.4 -86.4 59.7 -71.1 53.1 -56.6 -63.8 40.3 -25.6 -68.2 -5.9 -46.6 -37.4 43.3 -94.3 -93.7 -1.2 3.8 -22.4 -38.6 26.3 -87.9 69.0 -79.7 -45.0 17.8 -57.7 -3.7 40.5 -79.9 50.6 -99.1 -81.4 40.4 56.7 67.0 35.7 -54.3 19.7 7.8 -46.7 31.5 80.6 72.1 -19.0 71.7 -21.3 28.3 61.9 -49.1 -80.2 92.5 -90.2 54.7 -5.3 42.8 -33.3 -84.4 39.4 27.2 -75.2 35.5 -26.3 37.6 -84.7 -27.2 -13.4 93.7 -93.0 -80.1 -59.0 -6.7 -28.5 99.5 -71.9 1.3 -1.8 -87.8 -71.4 -78.7 -16.8 54.4 -15.7 -16.7 -21.6 25.4 -61.1 34.7 3.1 -22.1 6.1 12.5 -3.8 -85.6 -65.9 -1.1 -74.5 32.2 -78.6 -12.3 -6.6 -39.7 -30.9 -42.1 9.7 24.5 16.6 -73.8 -91.3 71.4 45.6 3.6 30.4 -34.8 38.1 71.6 -46.6 -25.2 -88.8 -89.6 78.2 -41.4 -91.5 -32.9 83.8 -4.0 -28.7 -54.0 -1.7 -56.7 -66.4 -15.9 -39.4 -19.9 -69.3 21.1 -68.5 8.1 -6.0 63.2 41.4 17.8 -50.4 -2.0 35.6 83.0 19.1 78.3 -24.8 -78.5 14.5 16.4 16.2 73.8 33.6 9.6 82.3 -53.4 8.8 -44.8 -97.4 -53.4 -96.5 9.2 -76.0 -29.0 -1.5 -74.0 -44.9 -96.5 40.0 -58.4 -98.7 -6.6 38.5 -87.2 50.4 0.6 54.2 -10.6 24.7 18.2 -90.7 -53.3 13.5 34.4 -31.6 82.7 12.2 -95.2 63.7 -76.8 72.7 -58.0 -72.7 -39.5 36.9 61.1 -69.1 97.1 49.6 -45.4 -69.0 -72.0 -88.4 31.7 3.2 40.4 68.9 75.1 91.1 86.1 57.0 -98.5 3.5 -49.3 -10.5 82.7 81.4 56.9 83.4 -74.8 -92.8 45.9 28.5 -23.7 -72.4 -4.3 85.2 77.9 -60.4 2.5 42.6 -18.7 17.3 82.4 90.1 -11.8 92.2 -21.0 83.5 86.3 55.5 53.1 -38.6 6.5 68.3 7.1 19.1 96.1 -98.5 6.4 89.6 -29.6 64.1 -9.4 -79.0 38.9 -27.4 72.2 -4.9 -68.6 -44.0 94.2 -65.2 -16.9 -5.8 -15.0 -23.4 -19.8 -78.8 63.5 17.7 -29.6 -42.7 69.7 -84.3 -7.1 25.9 63.3 15.8 -95.3 -50.0 -10.4 93.5 -73.9 -51.1 68.9 16.5 -1.4 82.4 -78.6 55.4 -20.4 -45.6 60.4 46.5 -98.4 -14.6 -28.4 36.8 -0.3 -87.8 -50.0 -29.3 34.2 -29.3 -29.9 -33.2 68.8 72.6 -85.2 69.3 28.6 13.5 55.4 -38.2 -43.9 59.2 -74.0 9.9 -17.6 -98.7 -62.6 39.8 91.0 -71.2 61.5 -77.3 68.6 68.8 59.9 78.8 -0.4 -33.5 -5.3 -84.8 -5.5 -45.4 8.5 -72.9 72.8 -27.1 -7.7 52.2 89.4 92.1 -21.7 3.6 -58.9 -48.0 37.2 -86.3 50.4 30.8 -54.0 87.4 -30.1 11.9 -99.6 74.4 2.6 -58.1 90.6 -99.4 -79.6 -49.6 31.2 -67.2 -31.0 88.8 -69.7 -95.7 7.0 -55.0 -16.6 -16.8 -66.5 -93.1 -17.2 27.5 76.7 -7.6 -5.3 92.2 -96.4 -83.2 -20.0 -59.8 2.6 21.8 76.0 -4.9 74.8 -60.8 -84.0 91.1 -68.1 -88.7 69.6 -50.8 -0.9 -63.1 33.4 57.7 80.2 33.4 -41.5 -42.1 -95.2 -37.2 -17.9 91.3 -2.5 98.2 -52.0 -23.7 -88.1 60.5 -18.6 10.5 29.9 27.7 -98.4 91.1 61.1 -81.2 -94.7 27.2 42.6 -43.8 -57.4 -27.9 64.8 99.3 -17.3 16.6 21.3 75.0 -94.1 73.6 -28.8 -17.7 -76.1 -55.5 54.1 52.1 -30.7 -90.7 -80.3 -82.8 70.5 -8.5 -76.3 85.9 -90.4 94.7 -96.8 91.5 64.2 93.8 -84.7 -74.5 -95.8 22.9 84.2 -43.4 38.4 -84.1 76.7 -69.9 -55.5 0.9 -23.9 80.8 -34.3 82.8 -6.3 -58.6 -50.5 -62.1 -59.9 -4.9 -93.5 80.0 70.4 86.5 -76.1 -37.3 43.7 -81.0 -60.0 -0.5 32.1 54.7 -97.5 -22.4 -14.6 -0.4 -27.0 31.3 13.8 25.9 -28.6 59.7 16.4 -85.7 89.8 -29.9 10.9 -7.0 10.0 77.9 63.3 54.7 23.6 -7.6 -44.7 21.0 72.7 -78.8 52.4 -71.8 60.7 -6.3 -12.8 -1.6 98.6 67.3 -74.1 82.1 -64.9 94.2 97.8 59.9 75.9 58.8 -21.1 -72.5 -96.3 43.5 -34.1 87.7 19.1 -34.2 96.7 18.7 90.7 -81.4 73.3 12.8 -56.4 -50.9 -21.5 84.2 60.9 -72.9 -86.3 -84.7 -43.7 74.0 -95.2 -77.0 23.5 -74.9 8.1 60.7 82.8 -96.3 -36.2 -76.1 59.1 19.7 72.9 67.2 43.6 -28.4 -77.7 -1.8 -32.3 -53.0 8.0 -52.9 -1.7 -93.7 18.6 -59.0 7.5 58.9 -1.5 -79.4 94.7 -91.0 2.3 -53.9 -10.8 -66.3 -62.9 89.2 -33.3 -59.6 23.1 67.9 37.5 16.5 35.0 36.1 46.3 24.7 29.2 -24.6 25.6 93.0 -87.6 73.4 -87.6 25.8 98.1 -55.9 -84.1 -38.9 42.3 27.8 -81.7 55.8 -33.4 69.8 17.9 19.8 -0.3 -11.5 -76.3 -32.9 86.3 14.2 96.2 15.5 -81.4 -65.2 -40.3 -58.1 -25.0 -21.9 -6.4 14.4 -44.8 -36.9 -35.5 93.0 18.3 53.6 -10.9 -45.6 -64.8 -72.5 -45.3 -64.9 -9.2 -49.3 -21.3 -40.1 9.0 95.6 -78.1 93.9 -27.4 80.9 37.1 -46.5 -17.5 93.6 71.2 10.9 -76.4 69.7 -48.1 -72.8 -29.7 78.9 14.1 -56.7 -95.8 78.8 74.9 22.5 -19.0 51.7 62.3 4.4 9.1 62.9 -43.2 -71.7 -91.9 18.1 87.3 24.1 51.0 9.4 30.4 -34.7 54.9 -6.0 40.9 32.3 14.0 -10.9 -81.4 62.9 -98.0 -6.1 30.6 91.8 -54.3 -91.4 72.9 -13.9 80.5 86.1 33.9 -94.7 75.9 -67.2 -17.7 76.5 -47.6 28.7 -65.6 23.6 93.2 -42.3 -18.1 58.8 91.8 -7.3 -5.1 99.4 -28.0 11.9 56.3 -23.7 -89.9 97.1 60.5 -69.2 -27.7 -45.0 52.8 -8.5 41.9 -59.9 -97.5 -87.0 -65.2 -86.0 64.4 51.4 91.6 25.1 -73.1 -51.6 54.9 9.7 80.7 78.3 -2.0 -8.0 -11.0 77.0 -66.7 -8.7 -5.6 -44.8 -41.0 -68.6 34.3 -81.1 98.9 -59.1 15.0 61.4 44.0 -47.2 34.2 29.1 -94.3 -66.4 10.7 37.0 23.8 -70.2 35.4 16.9 -56.7 34.3 -96.5 78.6 -81.8 67.5 49.1 -10.7 33.2 -96.4 33.3 99.9 19.6 -38.6 -89.4 12.3 18.9 -21.6 76.2 -97.7 -75.6 -21.0 -41.2 -62.4 51.7 -54.6 3.4 74.5 82.8 -31.0 46.6 12.2 -96.4 -57.3 45.1 -70.3 69.5 -50.2 14.8 -55.4 diff --git a/tasks/votincev_d_alternating_values/data/test8.txt b/tasks/votincev_d_alternating_values/data/test8.txt new file mode 100644 index 0000000000..4365d0b7ea --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test8.txt @@ -0,0 +1,3 @@ +407 +783 +-63.7 18.5 -59.7 50.7 89.9 -64.5 -78.6 51.2 77.8 -81.4 -95.8 79.7 -97.9 -61.3 37.0 10.2 -63.7 -9.1 96.5 58.4 28.9 37.8 88.9 -9.7 26.3 -23.4 1.0 74.1 28.2 -84.7 -11.2 -27.1 69.1 -46.7 61.0 1.0 78.8 11.5 -44.5 1.5 -23.2 73.5 -57.3 -82.8 -80.0 -34.9 -54.7 42.6 -74.7 -61.0 -75.1 23.5 -65.9 15.2 2.4 52.7 -44.0 61.3 -47.6 -87.7 56.1 -64.5 -47.0 37.9 -29.8 69.6 40.7 85.8 59.5 42.4 87.2 68.6 -56.0 17.9 74.8 65.4 2.3 -32.3 -36.0 2.6 -58.4 -13.7 -40.4 7.5 -95.6 33.3 68.5 92.4 -28.2 -94.6 -18.7 21.6 -57.5 -15.8 -12.2 2.0 -77.9 82.0 28.6 50.9 -60.6 48.5 6.6 -85.6 -21.7 -70.5 -22.8 -1.7 33.2 -80.1 91.4 75.9 0.0 -72.0 -68.2 81.2 -78.1 51.5 -2.6 -39.7 -77.5 -7.9 -24.9 -91.4 -6.8 -7.6 65.2 -85.2 -77.0 -21.0 -34.9 -82.1 -8.3 60.3 17.2 -50.2 -66.4 35.8 73.8 45.2 -56.4 74.5 -20.6 -11.5 -84.3 -34.5 96.8 46.2 -54.0 -45.3 -1.4 96.9 78.4 -31.1 11.8 -12.9 -73.1 93.3 -53.7 42.6 73.7 -60.8 -81.8 -15.7 -97.3 -44.8 -13.7 89.4 -20.2 77.2 8.6 -14.8 -76.0 -40.3 78.7 -70.7 -91.0 7.4 -23.5 -58.9 40.3 -51.4 77.7 21.1 11.5 -95.9 -42.9 84.5 90.9 10.7 45.0 2.0 -20.9 -62.5 -17.3 22.2 0.8 63.7 -20.5 31.2 -71.5 68.2 -12.2 -37.9 46.1 -47.4 -91.3 59.2 43.3 31.8 79.4 -83.7 -95.2 -65.8 -92.3 48.7 52.7 -34.6 78.8 -95.5 3.1 -6.8 27.0 43.8 -88.6 5.4 91.4 -94.8 -77.0 18.2 -39.7 -76.9 13.3 18.3 -31.1 78.9 67.3 92.4 -80.7 -3.6 57.5 51.8 73.0 -73.7 -42.6 17.2 -90.6 93.7 51.5 -73.6 -80.8 97.5 -72.8 84.9 63.7 12.5 -1.3 42.5 40.2 -27.2 -58.7 -72.8 -89.7 -82.0 10.0 38.2 38.5 0.9 96.1 -58.4 92.7 -76.3 71.7 80.0 -91.6 -29.1 11.8 4.7 -70.3 -99.1 -99.2 -84.0 -3.7 -59.0 -52.0 -80.8 53.6 -32.8 44.5 88.2 -26.9 75.0 42.8 -36.8 2.2 -93.8 -18.8 -29.6 -49.4 89.7 83.7 56.0 9.1 -56.0 -71.6 -24.7 84.1 -28.9 13.2 -12.4 67.8 89.0 20.4 -26.8 56.9 42.7 74.7 58.9 -75.4 31.9 -11.1 85.0 2.4 53.3 -25.6 98.8 -4.0 88.0 -13.9 -33.4 -10.1 99.9 -27.1 6.7 -93.7 52.3 68.9 -22.5 77.8 -77.1 -78.6 48.8 -75.2 -28.1 -67.2 35.9 -30.6 57.5 -92.8 98.3 54.6 -6.1 -43.8 21.0 20.7 -29.3 80.6 -15.7 -99.7 36.1 -47.4 -49.6 -96.3 63.1 27.3 98.8 26.3 -69.1 -6.3 5.2 -27.7 20.1 -29.0 -39.2 -40.4 -95.7 -4.6 -98.2 15.3 -86.4 70.0 7.4 33.9 -24.2 -71.2 44.6 -29.7 4.4 -65.7 -21.5 97.8 47.3 82.2 -38.2 49.9 42.1 26.3 -76.3 -97.7 -84.0 60.8 -12.2 66.1 -46.3 7.0 -11.7 -51.5 -16.7 -46.6 57.4 32.9 -21.7 49.8 -39.4 -28.1 40.8 -47.5 8.8 -13.4 71.4 52.1 24.7 -50.4 0.8 7.7 -1.5 -10.5 -23.8 54.7 -19.9 52.8 83.9 -22.1 -63.7 -27.1 -16.7 3.9 90.2 12.2 90.7 66.4 76.4 26.1 12.5 31.5 -24.1 13.9 84.8 53.6 -81.7 84.3 -51.4 72.6 -13.7 42.1 46.0 27.0 -5.7 55.2 -36.8 -32.6 -94.8 50.6 -44.7 -82.4 32.3 59.6 22.3 74.0 40.1 -26.6 91.0 -22.6 52.9 -75.6 -55.2 -30.8 -83.7 13.6 71.6 90.9 57.5 54.5 -7.5 1.8 -98.1 94.0 62.1 43.8 33.8 7.6 -66.7 -57.2 -41.5 22.4 38.7 60.8 -75.0 24.7 19.7 57.9 -99.4 -34.9 95.7 -60.8 -28.2 51.4 -13.0 10.4 -83.3 -13.0 -67.2 -43.5 33.8 91.1 -82.7 -30.3 70.5 39.1 -59.7 -25.3 -46.6 48.6 -87.4 54.5 -87.0 9.4 73.0 59.1 -18.5 26.3 -18.3 49.7 64.0 -24.0 -40.6 50.8 -75.6 -25.0 12.9 30.8 -53.5 16.3 -18.5 32.4 -18.1 -87.6 42.9 97.9 31.9 -42.1 -55.3 34.3 -22.5 -27.8 65.4 4.8 -33.6 -77.0 -57.5 25.1 61.8 -79.9 -66.6 -82.2 34.7 50.5 70.2 26.9 92.0 23.9 61.1 -62.1 73.6 81.9 -42.2 -2.4 64.2 -38.2 71.1 38.8 -80.2 -22.8 94.0 -54.4 -84.1 -3.8 61.1 -77.4 41.7 33.8 17.3 48.9 40.9 -4.9 -36.9 35.0 -88.6 -64.9 -39.8 -70.9 -90.3 -30.5 71.4 -8.7 -8.4 -23.1 92.3 -78.6 -23.7 -51.0 32.3 -25.6 85.9 -81.7 17.7 20.5 -64.2 -97.2 94.9 -9.2 -2.7 89.0 30.5 -87.7 93.6 -99.6 88.7 -26.5 -9.5 49.9 50.8 77.8 -75.4 78.0 -27.6 -74.3 66.0 -15.9 -2.7 -41.1 -79.1 12.5 -96.5 31.5 31.7 -24.6 -77.2 23.0 52.8 -89.0 41.4 -53.8 2.5 -1.0 -0.1 -82.0 -54.6 38.5 -6.7 -74.3 96.7 1.6 -82.7 -19.1 -40.6 39.6 -11.8 -82.3 -16.6 84.3 94.1 -28.0 77.1 -92.8 -13.1 -74.4 21.9 -15.1 38.7 -94.2 -49.7 61.3 -24.6 -19.0 -11.4 -97.8 70.8 49.3 -93.0 84.7 -68.5 -67.6 76.0 -28.9 -81.6 -30.4 -58.1 -87.5 -59.5 -34.1 60.5 71.3 91.0 -35.6 -88.2 76.1 -97.3 28.0 57.9 87.6 -72.2 86.5 77.0 17.6 65.6 80.5 62.1 88.8 38.2 39.3 -20.2 45.3 -42.1 93.8 -95.8 80.0 64.0 76.1 83.6 39.1 -74.9 -3.8 35.1 -34.2 -94.0 6.0 95.6 91.9 14.8 -68.4 -87.0 -0.7 -80.2 39.1 2.7 -21.4 91.2 -89.6 2.0 -45.4 -45.9 74.0 49.0 40.6 -92.9 -33.1 -22.0 21.2 -29.3 42.0 27.9 33.0 -22.5 70.1 -40.6 -72.8 17.3 39.2 21.1 -83.3 17.2 -98.5 52.0 -71.0 -66.4 -44.1 -36.5 -10.3 -90.1 81.0 -30.1 21.3 diff --git a/tasks/votincev_d_alternating_values/data/test9.txt b/tasks/votincev_d_alternating_values/data/test9.txt new file mode 100644 index 0000000000..26845b52a6 --- /dev/null +++ b/tasks/votincev_d_alternating_values/data/test9.txt @@ -0,0 +1,3 @@ +765 +1531 +-97.3 -47.9 23.4 -47.6 -25.5 88.0 -84.9 75.5 32.8 73.7 54.3 98.7 67.1 -21.5 46.8 19.4 22.6 31.5 26.8 -26.4 -90.1 81.1 -28.8 -59.4 -44.0 -87.7 -29.5 43.2 -51.7 -96.2 82.2 97.9 48.6 80.1 -97.1 -44.5 61.0 21.1 11.7 -34.8 19.4 60.6 -37.2 -58.0 -26.8 88.0 20.4 -48.1 31.9 55.6 -35.3 97.6 -80.0 -99.2 15.1 -48.1 -18.6 -70.7 13.0 66.9 -83.1 87.2 -77.9 94.0 -27.1 -46.8 88.5 38.0 6.3 -85.5 -21.4 -6.7 44.2 -66.4 -59.9 16.1 96.1 -16.1 0.1 2.6 -89.5 41.8 -11.1 -98.2 40.6 -2.8 33.0 -11.1 11.9 -27.7 -12.9 52.7 20.7 -48.7 -98.6 -19.1 86.8 -34.5 -76.5 36.5 4.0 -74.2 21.1 -70.9 -34.1 66.5 50.9 88.5 -69.8 -59.7 99.8 -28.1 39.1 -39.0 -47.2 -57.2 -71.1 -59.8 -65.6 -22.8 51.8 -68.9 -46.2 -12.7 -11.4 -35.1 -5.1 6.6 71.9 81.9 17.7 -78.4 30.6 12.1 57.8 -88.4 -26.9 51.1 21.1 60.5 88.2 68.1 -75.8 77.0 -77.5 33.1 27.0 19.0 -62.6 69.9 -61.6 25.0 -69.9 -80.6 67.5 38.8 -34.1 4.5 33.9 40.2 82.9 -42.8 43.1 -89.5 -90.9 -18.1 -69.2 38.8 -10.2 -73.9 26.2 10.2 -42.0 -12.2 89.6 -17.4 -7.3 -3.0 73.3 51.4 93.1 -81.8 70.3 71.4 -79.3 76.4 8.2 39.7 -44.3 51.1 -97.5 86.4 17.2 88.6 -87.3 32.4 58.1 -4.9 44.7 -57.8 31.4 -36.6 42.2 -89.7 53.5 58.5 82.2 77.4 -67.5 -38.8 -13.8 64.9 -5.5 5.8 -98.8 -31.3 57.5 -83.0 -78.8 95.0 -30.4 -59.0 96.7 48.9 9.9 -39.9 -47.0 74.3 42.3 20.6 74.9 64.0 80.1 -11.4 68.1 -14.9 21.3 -79.1 70.1 -99.2 -20.9 7.9 22.5 -68.7 35.6 -25.5 52.6 -53.0 -62.6 -77.2 88.2 81.7 31.2 -10.2 3.9 56.9 97.5 92.7 -69.4 26.6 72.9 -27.7 84.5 -67.7 46.2 -77.6 92.5 -13.3 -30.6 2.0 35.8 69.0 -45.3 7.9 92.8 98.7 -16.1 45.0 -53.3 -49.6 59.3 53.7 74.0 36.2 -8.0 46.8 -20.3 -22.4 17.8 -49.5 34.0 86.5 39.0 75.2 -9.4 -47.0 5.1 44.7 -56.6 4.9 -6.6 31.1 56.1 -90.3 51.1 -84.7 64.8 -48.0 32.7 -6.2 -58.0 -9.7 36.6 -18.5 98.1 -19.5 -62.7 81.2 46.0 2.7 -55.0 32.0 71.3 -48.0 -52.9 14.7 -79.8 -55.2 -86.1 -89.2 50.2 -58.2 -21.3 -91.6 -62.4 -4.2 49.2 -31.5 -61.5 42.3 51.8 99.9 26.2 -61.1 57.5 -82.2 -49.3 53.0 -78.6 75.1 -66.6 69.3 -84.5 28.1 -81.5 -64.5 7.0 -60.4 -53.4 60.4 18.8 -12.7 19.6 55.6 63.4 50.4 -24.4 -5.2 60.6 21.8 76.2 64.0 59.9 20.4 84.6 -3.2 21.3 -98.9 34.3 44.6 -40.4 16.6 28.7 38.3 34.9 -96.6 6.8 68.6 13.4 33.8 -44.2 -27.8 -34.0 33.2 14.7 46.4 89.8 -17.1 44.5 -97.5 68.1 0.9 -43.9 -29.1 -71.6 43.7 15.5 85.5 71.9 -47.6 -63.0 -92.9 -34.1 80.3 37.7 -26.3 -95.0 1.9 14.3 86.3 -39.5 14.7 -70.4 93.2 62.9 55.9 -20.3 33.0 2.8 73.6 -43.0 60.8 -88.2 38.9 -19.8 44.1 49.5 36.9 -17.0 75.9 63.4 -5.0 31.5 76.7 73.7 30.5 85.7 52.0 -82.3 31.0 24.2 28.9 -17.0 -78.8 -77.8 -9.0 -2.6 50.3 24.9 -22.6 -5.4 68.2 -15.3 22.4 19.4 -21.3 -59.8 -81.2 -20.6 80.9 -87.3 -53.2 15.6 -90.8 3.5 -30.6 62.6 -36.8 -68.3 59.7 19.4 43.3 -10.1 -70.2 -40.4 -47.2 20.5 13.2 34.1 16.9 -22.5 -87.7 93.9 47.1 34.4 27.8 -78.1 36.0 -54.0 -93.0 38.7 -71.6 -46.5 87.2 -63.2 53.5 95.2 4.5 62.7 -18.0 11.4 19.4 -1.7 62.6 34.2 -79.5 -61.0 10.4 47.0 1.0 31.9 -11.1 -40.4 28.2 -86.2 26.0 73.9 10.5 71.9 -73.5 -38.2 19.7 94.6 58.1 -12.5 26.0 3.7 39.9 96.3 17.9 60.3 -90.1 -9.0 50.2 -92.3 -16.2 73.3 55.4 99.2 -71.6 59.3 -8.8 -77.6 -84.6 -57.3 -63.5 -6.4 13.9 -82.2 -96.6 -21.4 -69.5 68.3 -96.4 -27.9 38.7 55.7 -82.0 93.6 -54.4 -64.9 -69.9 23.7 -79.3 40.2 -53.3 -51.2 -35.3 -88.4 85.6 -51.0 48.3 -86.2 -0.8 87.1 -63.6 44.8 3.2 48.9 -12.7 -0.5 -78.4 86.0 98.1 -4.7 -97.9 -32.5 -53.7 -96.0 -82.3 52.6 -70.6 -14.1 -47.2 73.6 95.9 60.8 4.6 72.4 56.0 78.0 -40.3 35.9 -15.9 -84.2 -57.4 94.2 66.4 68.7 -78.4 40.4 -23.1 45.7 78.1 96.5 65.0 -4.6 -70.9 -93.4 -89.2 -42.1 -74.1 -97.2 58.3 -76.6 -69.1 14.4 36.0 -31.8 -76.9 94.4 52.3 69.2 98.2 41.0 9.5 -10.0 24.7 32.3 -15.1 87.1 -86.9 64.7 -59.1 78.2 27.3 77.3 -17.6 5.9 -54.7 66.0 15.6 -51.4 57.1 -18.0 -2.2 -39.5 41.9 77.5 5.6 86.3 69.8 -28.8 -8.3 89.5 -86.6 -41.0 -97.3 74.5 -32.5 -46.4 25.5 -25.6 84.2 19.5 -41.3 -40.5 50.3 -8.1 -25.5 24.3 47.3 -91.8 -9.0 -44.1 -16.9 92.5 -36.7 78.9 87.6 -43.4 -82.0 -51.2 -56.6 91.9 28.4 99.3 91.7 22.9 53.5 -98.1 27.1 5.7 19.4 -35.1 -12.6 5.6 39.4 52.6 40.0 40.4 -87.1 -35.9 -29.2 45.6 -2.5 38.4 -3.4 -51.2 4.1 23.1 -70.3 78.1 54.3 -46.9 -32.8 -78.6 -72.9 -77.2 50.7 -15.9 -78.5 -35.5 -78.1 86.7 -23.0 -60.6 96.4 70.6 44.1 8.2 21.4 51.7 -39.3 -99.9 -96.3 24.9 53.9 7.4 -65.2 -70.7 -70.1 7.0 -7.7 86.6 59.2 92.8 83.9 -22.2 -46.9 52.6 25.8 -94.0 40.9 -6.7 0.7 29.3 96.4 96.8 -9.2 -52.2 -91.8 -0.3 84.8 -67.4 -15.4 -35.1 -55.2 54.7 -11.8 24.9 -40.6 -76.2 76.2 14.4 -28.7 31.9 -12.7 45.6 -71.0 -44.6 50.8 14.1 6.1 -40.2 70.4 -35.6 73.8 -20.3 28.7 -76.8 36.1 -94.8 -93.3 81.4 -84.8 73.5 -7.6 -74.0 -0.6 -28.8 70.6 77.6 -54.9 16.6 28.1 27.8 -14.2 72.6 -92.3 47.0 23.9 -79.3 -47.3 76.5 92.3 -12.4 31.3 85.6 97.5 79.0 68.4 18.4 62.6 80.7 -35.6 77.8 -56.9 -39.0 -52.2 -50.0 55.8 77.1 18.8 -22.4 -95.5 18.1 8.2 -97.0 -37.0 19.7 -34.4 19.8 54.5 56.4 -82.9 69.2 38.8 -81.6 -80.6 -51.4 -93.6 79.5 80.7 92.2 -41.4 -38.3 -58.6 -61.3 -48.4 -45.1 -58.3 39.7 -86.6 4.2 9.2 12.0 -72.2 -98.2 -62.9 30.9 94.7 66.9 10.1 -60.8 -76.3 -52.9 67.7 -72.8 2.9 -73.5 73.7 61.9 -90.4 -41.4 73.0 -84.5 59.1 -87.6 89.8 30.5 -85.7 28.7 66.5 15.0 -23.0 -25.2 49.1 -6.2 -41.6 74.0 41.7 3.2 10.7 -1.5 5.2 93.1 -91.2 -18.7 -45.8 -89.9 -11.8 -64.5 -6.3 -69.3 95.0 -70.0 51.3 -96.2 -30.2 -32.1 -2.4 -16.0 -94.0 91.3 -47.6 -14.5 20.1 -12.2 -85.9 55.8 71.9 -68.5 66.1 -17.6 80.0 -95.1 38.5 85.7 88.6 68.1 -60.5 -78.3 -33.5 -59.8 54.5 -16.3 -7.3 83.0 85.0 -77.8 -29.2 -11.5 17.2 -78.2 -30.3 21.2 -21.1 -19.9 81.0 -75.7 58.4 -24.2 -30.9 78.9 32.1 35.4 -87.3 35.3 74.4 66.4 -78.2 12.0 -64.2 -56.0 -71.5 -28.3 35.7 34.4 -97.1 63.5 1.2 -48.5 55.0 3.4 19.1 -95.6 -27.0 81.4 99.9 -12.3 35.0 -42.8 6.7 -91.3 -5.3 -93.0 25.4 -59.8 -48.1 -48.3 -2.5 51.5 93.0 -82.1 17.8 39.1 20.1 -99.1 -79.2 -12.1 -29.7 51.4 72.9 -43.6 45.7 11.7 44.3 -34.9 -83.7 -85.8 -51.2 -24.3 80.9 -78.9 45.6 -37.7 -56.0 -38.1 -91.0 -27.7 10.6 58.1 -22.5 -34.7 60.5 16.4 -42.4 3.5 70.3 24.5 54.4 -50.9 45.9 43.8 79.2 -64.7 66.6 26.6 33.5 85.9 -94.8 -53.3 -56.0 -31.0 -47.7 -45.7 8.8 34.6 3.7 44.2 96.2 0.1 -64.7 -36.6 -5.7 68.0 49.9 -87.9 90.0 29.4 -56.1 46.9 -72.2 -52.4 88.1 -52.5 -48.8 -47.6 -36.0 -27.1 7.2 -17.6 -68.3 -12.3 -98.1 35.5 28.5 -70.4 -69.7 -41.4 63.7 -57.4 33.4 -80.0 48.7 -93.6 4.3 30.0 -43.6 -43.6 48.6 57.6 65.2 -78.6 -59.2 -67.3 -62.3 -81.0 67.6 32.5 -53.8 29.0 -29.2 -67.1 -20.0 1.1 50.6 28.4 -48.9 -52.6 84.5 8.3 -78.0 -68.4 -34.2 38.3 -77.9 45.3 73.3 12.9 -87.4 46.5 48.2 99.5 -65.9 -83.9 7.1 43.1 39.5 64.9 -6.3 -9.1 -37.6 7.7 20.9 4.5 -5.5 94.0 70.8 -88.5 -64.2 -92.7 -19.3 16.3 7.1 -25.0 -29.2 -28.5 -88.7 -29.7 -22.3 -21.2 -92.9 -79.7 -67.2 66.7 59.7 -63.2 11.1 80.1 6.4 -71.0 35.2 -28.5 -0.5 53.8 -7.6 -60.2 96.2 61.4 -0.0 40.4 -86.7 74.7 20.9 1.7 74.2 81.5 79.6 62.0 -26.9 29.2 35.2 31.3 -49.6 -76.1 -24.2 32.4 -45.0 81.1 18.5 62.9 19.3 -6.6 -43.7 -43.3 -99.1 -16.6 -84.3 -15.2 -20.2 61.2 63.7 -63.1 -27.2 -15.5 -80.4 -29.3 -10.4 -37.4 90.7 -90.7 0.1 -15.8 -15.1 -74.7 -9.9 1.7 -39.0 -47.5 -78.0 -62.9 -45.5 -30.7 -7.5 -5.2 -43.8 7.2 -89.6 45.8 -63.7 65.1 31.8 -90.7 -79.4 -79.3 56.8 38.0 11.9 64.4 42.6 72.3 -82.8 49.9 -73.5 86.6 -48.2 59.0 -39.3 -85.8 89.5 -44.7 77.6 -35.3 39.4 19.1 3.4 79.1 41.0 -94.2 45.2 -67.9 3.8 47.0 65.7 66.1 -98.9 -78.0 -8.2 71.9 -53.2 -74.0 35.8 -64.1 49.0 -40.5 12.0 -58.5 5.2 -56.8 -94.3 -91.6 -93.7 54.4 55.1 25.0 8.5 -36.4 88.8 -73.8 -33.3 99.4 -15.9 -67.2 -55.3 77.1 -65.9 90.5 29.6 -31.9 76.5 -5.3 27.6 -3.8 -57.4 -32.8 70.8 7.8 96.3 -75.3 93.3 6.7 -29.0 -30.3 -22.5 40.8 -17.5 -10.3 98.5 -86.8 60.5 74.0 88.3 -50.7 -5.3 30.8 58.2 -21.8 -67.3 -38.3 38.9 -84.1 -76.7 96.6 -12.2 62.2 29.7 -77.7 98.7 -72.0 -36.5 83.2 67.9 -12.0 38.2 -40.6 71.6 -81.9 69.8 3.1 -75.8 38.0 54.9 -77.2 0.3 32.9 -22.0 -98.8 37.9 -91.6 -39.3 63.6 -51.9 65.4 -33.8 90.2 -62.0 76.1 74.1 -22.5 -5.3 69.0 99.7 -48.5 17.4 73.3 21.6 -83.9 0.5 -41.6 -14.6 7.6 7.6 -20.3 90.6 -95.8 56.2 19.4 -51.9 -50.5 -76.4 -2.2 89.9 -92.0 42.9 90.4 -34.5 -79.6 -47.0 -2.0 79.4 -93.5 20.8 -49.6 60.4 43.9 44.5 -21.2 -76.4 33.5 59.2 54.8 -44.4 -29.6 -6.5 89.9 -81.4 -18.5 -90.8 65.5 76.7 72.5 43.5 -10.1 -99.8 39.2 66.0 69.9 -43.7 57.3 -62.8 5.1 91.3 12.7 -2.1 26.9 53.8 60.7 19.3 15.1 -36.7 14.2 11.9 79.0 88.4 76.1 57.6 27.0 50.2 20.5 45.0 -35.8 82.5 70.5 95.1 -75.6 -89.4 -57.9 -29.3 -26.6 -96.2 47.0 -10.2 71.8 -87.3 21.1 71.4 10.9 -77.5 -25.1 -55.9 -83.0 56.6 6.3 -29.0 -96.8 -76.5 -34.6 62.4 -94.7 -68.6 61.1 31.4 87.4 -67.5 61.1 -15.7 -11.8 36.5 87.1 -64.7 -43.1 35.0 0.6 -84.9 81.2 20.3 13.9 5.8 77.7 diff --git a/tasks/votincev_d_alternating_values/info.json b/tasks/votincev_d_alternating_values/info.json new file mode 100644 index 0000000000..da8af46b0d --- /dev/null +++ b/tasks/votincev_d_alternating_values/info.json @@ -0,0 +1,9 @@ +{ + "student": { + "first_name": "Дмитрий", + "last_name": "Вотинцев", + "middle_name": "Сергеевич", + "group_number": "3823Б1ФИ3", + "task_number": "1" + } +} diff --git a/tasks/votincev_d_alternating_values/mpi/include/ops_mpi.hpp b/tasks/votincev_d_alternating_values/mpi/include/ops_mpi.hpp new file mode 100644 index 0000000000..14f943ef45 --- /dev/null +++ b/tasks/votincev_d_alternating_values/mpi/include/ops_mpi.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include + +#include "task/include/task.hpp" +#include "votincev_d_alternating_values/common/include/common.hpp" + +namespace votincev_d_alternating_values { + +class VotincevDAlternatingValuesMPI : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kMPI; + } + explicit VotincevDAlternatingValuesMPI(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; + + // == мои дополнительные функции == + static int ProcessMaster(int process_n, const std::vector &vect_data); + static void ProcessWorker(); + static bool IsSignChange(const double &a, const double &b); + // ================================ +}; + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/mpi/src/ops_mpi.cpp b/tasks/votincev_d_alternating_values/mpi/src/ops_mpi.cpp new file mode 100644 index 0000000000..dce3ecf30b --- /dev/null +++ b/tasks/votincev_d_alternating_values/mpi/src/ops_mpi.cpp @@ -0,0 +1,162 @@ +#include "votincev_d_alternating_values/mpi/include/ops_mpi.hpp" + +#include + +#include +#include + +#include "votincev_d_alternating_values/common/include/common.hpp" + +namespace votincev_d_alternating_values { + +VotincevDAlternatingValuesMPI::VotincevDAlternatingValuesMPI(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +// проверка входных данных не нужна - пустой вектор тоже обрабатывается +bool VotincevDAlternatingValuesMPI::ValidationImpl() { + return true; +} + +// нет ничего в PreProcessing +bool VotincevDAlternatingValuesMPI::PreProcessingImpl() { + return true; +} + +// код MPI +bool VotincevDAlternatingValuesMPI::RunImpl() { + // получаю кол-во процессов + int process_n = 0; + MPI_Comm_size(MPI_COMM_WORLD, &process_n); + + // получаю ранг процесса + int proc_rank = 0; + MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank); + + // вектор значений (его заполняет только 0й процесс) + std::vector vect_data; + + if (proc_rank != 0) { + GetOutput() = -1; // специальное значение + } + + // 0й процесс получает данные + if (proc_rank == 0) { + vect_data = GetInput(); + + // если процессов больше, чем размер вектора — уменьшаем + // например: вектор = 2 элемента, а процессов запущено 4 + process_n = std::min(process_n, static_cast(vect_data.size())); + } + + // рассылаю всем "актуальное" число процессов + // т.к. его мог уменьшить процесс 0 + MPI_Bcast(&process_n, 1, MPI_INT, 0, MPI_COMM_WORLD); + + // если вектор пустой + if (process_n == 0) { + return true; + } + + if (proc_rank == 0) { + GetOutput() = ProcessMaster(process_n, vect_data); // работа 0-го процесса + } else if (proc_rank < process_n) { + ProcessWorker(); // работа процессов-работников + } + + return true; +} + +bool VotincevDAlternatingValuesMPI::PostProcessingImpl() { + return true; +} + +// ============ дополнительные функции ============ + +// вспомогательная, if с такими условиями выглядит страшно +bool VotincevDAlternatingValuesMPI::IsSignChange(const double &a, const double &b) { + return ((a < 0 && b >= 0) || (a >= 0 && b < 0)); +} + +// работа 0-го процесса (главного) +int VotincevDAlternatingValuesMPI::ProcessMaster(int process_n, const std::vector &vect_data) { + int all_swaps = 0; + const int n = static_cast(vect_data.size()); + + // делим на части + const int base = n / process_n; // минимум на обработку + int remain = n % process_n; // остаток (распределяем между первыми) + + int start_id = 0; + + // распределяем работу между процессами-рабочими + for (int worker = 1; worker < process_n; worker++) { + int part_size = base; + + // если остались "лишние" элементы — раздаём по одному первым процессам + if (remain > 0) { + part_size++; + remain--; + } + + // каждому процессу (кроме последнего) даём ещё +1 элемент справа, + // чтобы проверить возможное чередование между границами блоков + part_size++; + + // отправляем размер части + MPI_Send(&part_size, 1, MPI_INT, worker, 0, MPI_COMM_WORLD); + + // отправляем сами данные + MPI_Send(vect_data.data() + start_id, part_size, MPI_DOUBLE, worker, 0, MPI_COMM_WORLD); + + // сдвигаем начало следующего куска + start_id += part_size - 1; // -1 потому что правый сосед был добавлен + } + + // 0й процесс считает пересесчения в своей части + int part_size = n - start_id; + for (int i = start_id + 1; i < start_id + part_size; i++) { + if (IsSignChange(vect_data[i - 1], vect_data[i])) { + all_swaps++; + } + } + + // собираем ответы от всех рабочих процессов + for (int worker = 1; worker < process_n; worker++) { + int tmp = 0; + MPI_Recv(&tmp, 1, MPI_INT, worker, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + all_swaps += tmp; + } + + return all_swaps; +} + +// работа процессов 1,2, ... +void VotincevDAlternatingValuesMPI::ProcessWorker() { + int part_size = 0; + + // получаю, сколько элементов прислал процесс 0 + MPI_Recv(&part_size, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + + // выделяю память под кусок + std::vector data(part_size); + + // получаю свою часть вектора + MPI_Recv(data.data(), part_size, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + + int swap_count = 0; + + // считаю чередования знаков + for (int i = 1; i < part_size; i++) { + if (IsSignChange(data[i - 1], data[i])) { + swap_count++; + } + } + + // отправляю результат назад 0-му процессу + MPI_Send(&swap_count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); +} + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/report.md b/tasks/votincev_d_alternating_values/report.md new file mode 100644 index 0000000000..e6c9c214c8 --- /dev/null +++ b/tasks/votincev_d_alternating_values/report.md @@ -0,0 +1,125 @@ +# Отчет по реализации алгоритма нахождения числа чередований знаков значений соседних элементов вектора + +**Дисциплина:** Параллельное программирование +**Преподаватель:** Нестеров Александр Юрьевич и Оболенский Арсений Андреевич +**Студент:** Вотинцев Дмитрий Сергеевич 3823Б1ФИ3 +**Вариант:** 5 + +## Введение +В рамках данной работы был реализован алгоритм поиска чередований знаков значений соседних элементов вектора: последовательная и параллельная реализация. + +## Постановка задачи +Дан вектор v из N элементов. Необходимо найти число чередований знаков между соседними элементами. +Рассмотрим элементы v[i-1] и v[i] , i = 1,2,...,N. +Если v[i-1] >= 0 и v[i] < 0 - то это чередование +Если v[i-1] < 0 и v[i] >= 0 - то это чередование +(0 считается беззнаковым, грубо говоря +0) + +## Описание алгоритма + +Последовательная версия: +проходимся по всему массиву, сравниваем соседние элементы на чередование, увеличиваем счетчик чередований (если между соседями знак чередуется). + + +## Описание схемы параллельного алгоритма +Пусть у нас P процессов, вектор размера M. Алгоритм: + +0-й процесс делит массив на P частей. Части выделяются следующим образом: +- Вычисляем базовый размер: `base = M / P` +- Вычисляем остаток: `remain = M % P` +- Первые `remain` процессов получают `base + 1` элементов +- Остальные процессы получают `base` элементов +- Каждому процессу добавляется 1 элемент справа для проверки граничных чередований +- Последнему процессу не добавляется лишний элемент + +**Пример для 2 процессов и вектора {0, -1, 2, -3}:** +- Процесс 0: 0, -1, 2 (2 чередования: 0 -> -1, -1 -> 2) +- Процесс 1: 2, -3 (1 чередование: 2 -> -3) +- Итого: 3 чередования + + + +## Результаты экспериментов и выводы + +**Функциональные тесты** содержат 10 тестов: +- Тест1: отсутствие чередований +- Тест2: правильная обработка 0 +- Тест3: максимум чередований +- Тест4: 1 элемент +- Тест5: пустой вектор +- Тест6-10: случайные значения + +**Тест на производительность** - данные генерируются как в Тест3 (максимум чередований): 0, -1, 2, -3, 4, -5... +Это самый "проблемный" случай, так как нужно учитывать чередование между граничными элементами. + +**Результаты производительности (4 процесса):** +| Размер данных (n) | SEQ версия (с) | MPI версия (с) | Ускорение | +|-------------------|----------------|----------------|-----------| +| 10 000 | 0.004 | 0.005 | 0.80× | +| 1 000 000 | 0.146 | 0.200 | 0.73× | +| 10 000 000 | 1.561 | 1.943 | 0.80× | +| 30 000 000 | 4.935 | 6.525 | 0.76× | + +В среднем - MPI версия стабильно проигрывает SEQ. Все дело в том, что в задаче почти нет никаких вычислений, основное - пересылка данных. +И расходы на коммуникацию (пересылку данных) занимает много времени (скорее всего больше, чем происходят сами вычисления). + + +## Заключение +В результате проделанной работы были реализованы версии MPI, SEQ алгоритма нахождения числа чередований знаков значений соседних элементов вектора. +По результат эксперимента можно сделать вывод: MPI версия работает медленней SEQ (в основном из-за пересылки данных и минимума вычислений) + + +## Литература +1. Лекции Сысоева Александра Владимировича +2. Практические занятия Нестерова Александра Юрьевича и Оболенского Арсения Андреевича +3. Интернет + +## Приложения (код параллельной реализации) + +``` +bool VotincevDAlternatingValuesMPI::RunImpl() { + GetOutput() = -1; // специальное значение + + int all_swaps = 0; + + // получаю кол-во процессов + int process_n = 0; + MPI_Comm_size(MPI_COMM_WORLD, &process_n); + + // получаю ранг процесса + int proc_rank = 0; + MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank); + + // вектор значений (его заполняет только 0й процесс) + std::vector vect_data; + + // 0й процесс получает данные + if (proc_rank == 0) { + vect_data = GetInput(); + + // если процессов больше, чем размер вектора — уменьшаем + // например: вектор = 2 элемента, а процессов запущено 4 + process_n = std::min(process_n, vect_data.size()); + } + + + // рассылаю всем "актуальное" число процессов + // т.к. его мог уменьшить процесс 0 + MPI_Bcast(&process_n, 1, MPI_INT, 0, MPI_COMM_WORLD); + + // если вектор пустой + if (process_n == 0) { + return true; + } + + + if (proc_rank == 0) { + all_swaps = ProcessMaster(process_n, vect_data); // работа 0-го процесса + } + else if (proc_rank < process_n) { + ProcessWorker(); // работа процессов-работников + } + + return true; +} +``` \ No newline at end of file diff --git a/tasks/votincev_d_alternating_values/seq/include/ops_seq.hpp b/tasks/votincev_d_alternating_values/seq/include/ops_seq.hpp new file mode 100644 index 0000000000..dfed8d304a --- /dev/null +++ b/tasks/votincev_d_alternating_values/seq/include/ops_seq.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "task/include/task.hpp" +#include "votincev_d_alternating_values/common/include/common.hpp" + +namespace votincev_d_alternating_values { + +class VotincevDAlternatingValuesSEQ : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kSEQ; + } + explicit VotincevDAlternatingValuesSEQ(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; + + // == мои дополнительные функции == + static bool IsSignChange(const double &a, const double &b); + // ================================ +}; + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/seq/src/ops_seq.cpp b/tasks/votincev_d_alternating_values/seq/src/ops_seq.cpp new file mode 100644 index 0000000000..425084ef29 --- /dev/null +++ b/tasks/votincev_d_alternating_values/seq/src/ops_seq.cpp @@ -0,0 +1,45 @@ +#include "votincev_d_alternating_values/seq/include/ops_seq.hpp" + +#include // для size_t +#include + +#include "votincev_d_alternating_values/common/include/common.hpp" + +namespace votincev_d_alternating_values { + +VotincevDAlternatingValuesSEQ::VotincevDAlternatingValuesSEQ(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +bool VotincevDAlternatingValuesSEQ::ValidationImpl() { + return true; +} + +bool VotincevDAlternatingValuesSEQ::PreProcessingImpl() { + return true; +} + +bool VotincevDAlternatingValuesSEQ::RunImpl() { + int all_swaps = 0; + std::vector vect_data = GetInput(); + for (size_t i = 1; i < vect_data.size(); i++) { + if (IsSignChange(vect_data[i - 1], vect_data[i])) { + all_swaps++; + } + } + GetOutput() = all_swaps; + return true; +} + +// вспомогательная, if с такими условиями выглядит страшно +bool VotincevDAlternatingValuesSEQ::IsSignChange(const double &a, const double &b) { + return ((a < 0 && b >= 0) || (a >= 0 && b < 0)); +} + +bool VotincevDAlternatingValuesSEQ::PostProcessingImpl() { + return true; +} + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/settings.json b/tasks/votincev_d_alternating_values/settings.json new file mode 100644 index 0000000000..b1a0d52574 --- /dev/null +++ b/tasks/votincev_d_alternating_values/settings.json @@ -0,0 +1,7 @@ +{ + "tasks_type": "processes", + "tasks": { + "mpi": "enabled", + "seq": "enabled" + } +} diff --git a/tasks/votincev_d_alternating_values/tests/.clang-tidy b/tasks/votincev_d_alternating_values/tests/.clang-tidy new file mode 100644 index 0000000000..ef43b7aa8a --- /dev/null +++ b/tasks/votincev_d_alternating_values/tests/.clang-tidy @@ -0,0 +1,13 @@ +InheritParentConfig: true + +Checks: > + -modernize-loop-convert, + -cppcoreguidelines-avoid-goto, + -cppcoreguidelines-avoid-non-const-global-variables, + -misc-use-anonymous-namespace, + -modernize-use-std-print, + -modernize-type-traits + +CheckOptions: + - key: readability-function-cognitive-complexity.Threshold + value: 50 # Relaxed for tests diff --git a/tasks/votincev_d_alternating_values/tests/functional/main.cpp b/tasks/votincev_d_alternating_values/tests/functional/main.cpp new file mode 100644 index 0000000000..125919b392 --- /dev/null +++ b/tasks/votincev_d_alternating_values/tests/functional/main.cpp @@ -0,0 +1,94 @@ +#include +#include + +#include +#include // для size_t +#include +#include +#include +#include + +#include "util/include/func_test_util.hpp" +#include "util/include/util.hpp" +#include "votincev_d_alternating_values/common/include/common.hpp" +#include "votincev_d_alternating_values/mpi/include/ops_mpi.hpp" +#include "votincev_d_alternating_values/seq/include/ops_seq.hpp" + +namespace votincev_d_alternating_values { + +class VotincevDAlternatigValuesRunFuncTestsProcesses : public ppc::util::BaseRunFuncTests { + public: + static std::string PrintTestParam(const TestType &test_param) { + return test_param; + } + + protected: + // считываем/генерируем данные + void SetUp() override { + TestType param = std::get(ppc::util::GTestParamIndex::kTestParams)>(GetParam()); + std::string input_data_source = + ppc::util::GetAbsoluteTaskPath(PPC_ID_votincev_d_alternating_values, param + ".txt"); + + std::ifstream file(input_data_source); + int expect_res = 0; + file >> expect_res; // считываю предполагаемый ответ + + expected_res_ = expect_res; // устанавливаю его + + int data_count = 0; + file >> data_count; // получаю количество элементов + + std::vector vect_data; + for (int i = 0; i < data_count; i++) { + double elem = 0.0; + file >> elem; + vect_data.push_back(elem); + } + + input_data_ = vect_data; + } + + bool CheckTestOutputData(OutType &output_data) final { + // процессы (кроме 0-го) не сверяются с ответом + if (output_data == -1) { + return true; + } + + // 0й процесс должен иметь правильный результат + return output_data == expected_res_; + } + + InType GetTestInputData() final { + return input_data_; + } + + private: + InType input_data_; + OutType expected_res_ = -1; +}; + +namespace { + +TEST_P(VotincevDAlternatigValuesRunFuncTestsProcesses, CountSwapsFromGenerator) { + ExecuteTest(GetParam()); +} + +const std::array kTestParam = {"test1", "test2", "test3", "test4", "test5", + "test6", "test7", "test8", "test9", "test10"}; + +const auto kTestTasksList = std::tuple_cat(ppc::util::AddFuncTask( + kTestParam, PPC_SETTINGS_votincev_d_alternating_values), + ppc::util::AddFuncTask( + kTestParam, PPC_SETTINGS_votincev_d_alternating_values)); + +const auto kGtestValues = ppc::util::ExpandToValues(kTestTasksList); + +const auto kPerfTestName = + VotincevDAlternatigValuesRunFuncTestsProcesses::PrintFuncTestName; + +INSTANTIATE_TEST_SUITE_P(CountSwapsFromGeneratorr, VotincevDAlternatigValuesRunFuncTestsProcesses, kGtestValues, + kPerfTestName); + +} // namespace + +} // namespace votincev_d_alternating_values diff --git a/tasks/votincev_d_alternating_values/tests/performance/main.cpp b/tasks/votincev_d_alternating_values/tests/performance/main.cpp new file mode 100644 index 0000000000..a4495684f3 --- /dev/null +++ b/tasks/votincev_d_alternating_values/tests/performance/main.cpp @@ -0,0 +1,58 @@ +#include + +#include + +#include "util/include/perf_test_util.hpp" +#include "votincev_d_alternating_values/common/include/common.hpp" +#include "votincev_d_alternating_values/mpi/include/ops_mpi.hpp" +#include "votincev_d_alternating_values/seq/include/ops_seq.hpp" + +namespace votincev_d_alternating_values { + +class VotincevDAlternatigValuesRunPerfTestsProcesses : public ppc::util::BaseRunPerfTests { + InType input_data_; + const int kCount_ = 10000000 + 1; + OutType expected_res_ = 10000000; + + void SetUp() override { + int vect_size = kCount_; + std::vector vect_data; + int swapper = 1; + for (int i = 0; i < vect_size; i++) { + vect_data.push_back(i * swapper); // 0 -1 2 -3 4 -5... + swapper *= -1; + } + + input_data_ = vect_data; + } + + bool CheckTestOutputData(OutType &output_data) final { + // процессы (кроме 0-го) не сверяются с ответом + if (output_data == -1) { + return true; + } + + // 0й процесс должен иметь правильный результат + return output_data == expected_res_; + } + + InType GetTestInputData() final { + return input_data_; + } +}; + +const auto kAllPerfTasks = + ppc::util::MakeAllPerfTasks( + PPC_SETTINGS_votincev_d_alternating_values); + +const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks); + +const auto kPerfTestName = VotincevDAlternatigValuesRunPerfTestsProcesses::CustomPerfTestName; + +TEST_P(VotincevDAlternatigValuesRunPerfTestsProcesses, RunPerfModes) { + ExecuteTest(GetParam()); +} + +INSTANTIATE_TEST_SUITE_P(RunPerf, VotincevDAlternatigValuesRunPerfTestsProcesses, kGtestValues, kPerfTestName); + +} // namespace votincev_d_alternating_values