aboutsummaryrefslogtreecommitdiff
path: root/challenge-074/walt-mankowski/cpp
diff options
context:
space:
mode:
author冯昶 <seaker@qq.com>2020-08-25 14:02:24 +0800
committer冯昶 <seaker@qq.com>2020-08-25 14:02:24 +0800
commitec9e40b0acf8571ff15678cddd4f19eded756e72 (patch)
treeb17ef3f9f3664e265fee053a3a818203e60d0bc2 /challenge-074/walt-mankowski/cpp
parentc78c938183297e7e8f494dd4a59fe82494f42774 (diff)
parentfd1f031ae79f262a59491231fb638176af79f92f (diff)
downloadperlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.tar.gz
perlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.tar.bz2
perlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-074/walt-mankowski/cpp')
-rw-r--r--challenge-074/walt-mankowski/cpp/Makefile23
-rw-r--r--challenge-074/walt-mankowski/cpp/ch-1.cpp24
-rw-r--r--challenge-074/walt-mankowski/cpp/ch-2.cpp36
3 files changed, 83 insertions, 0 deletions
diff --git a/challenge-074/walt-mankowski/cpp/Makefile b/challenge-074/walt-mankowski/cpp/Makefile
new file mode 100644
index 0000000000..0192513d07
--- /dev/null
+++ b/challenge-074/walt-mankowski/cpp/Makefile
@@ -0,0 +1,23 @@
+CPP = /usr/bin/c++
+INCLDIRS =
+LIBDIRS =
+LIBS =
+CFLAGS = -std=c++17 -Wall -O3 $(INCLDIRS)
+OBJECTS1 = ch-1.o
+OBJECTS2 = ch-2.o
+
+all: ch-1 ch-2
+
+%.o: %.cpp
+ $(CPP) $(CFLAGS) -c $<
+
+ch-1: $(OBJECTS1)
+ $(CPP) -o $@ $(OBJECTS1) $(LIBDIRS) $(LIBS)
+
+ch-2: $(OBJECTS2)
+ $(CPP) -o $@ $(OBJECTS2) $(LIBDIRS) $(LIBS)
+
+clean:
+ rm -f *~
+ rm -f *.o
+ rm -f ch-1 ch-2
diff --git a/challenge-074/walt-mankowski/cpp/ch-1.cpp b/challenge-074/walt-mankowski/cpp/ch-1.cpp
new file mode 100644
index 0000000000..ebb0563a3a
--- /dev/null
+++ b/challenge-074/walt-mankowski/cpp/ch-1.cpp
@@ -0,0 +1,24 @@
+#include <stdlib.h>
+#include <iostream>
+#include <map>
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+ int target = (argc-1) / 2;
+ int result = -1;
+ map<int,int> cnt;
+
+ for (int i = 1; i < argc; i++) {
+ int x = atoi(argv[i]);
+ if (++cnt[x] > target) {
+ result = x;
+ break;
+ }
+ }
+
+ cout << result << endl;
+}
+
+
+
diff --git a/challenge-074/walt-mankowski/cpp/ch-2.cpp b/challenge-074/walt-mankowski/cpp/ch-2.cpp
new file mode 100644
index 0000000000..ab8b330e19
--- /dev/null
+++ b/challenge-074/walt-mankowski/cpp/ch-2.cpp
@@ -0,0 +1,36 @@
+#include <string>
+#include <iostream>
+#include <map>
+#include <list>
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+ const string s(argv[1]);
+ string out = string(s.length(), ' ');
+ map<char,list<char>::const_iterator> seen;
+ list<char> nr;
+
+ for (size_t i = 0; i < s.length(); i++) {
+ const char c = s[i];
+
+ // have we seen c before?
+ if (seen.find(c) == seen.end()) {
+ nr.push_front(c);
+ seen[c] = nr.cbegin();
+ } else {
+ // remove c from nr
+ if (seen[c] != nr.end()) {
+ nr.erase(seen[c]);
+ seen[c] = nr.end();
+ }
+ }
+
+ // now the FNR is either the last element of nr, or #
+ if (nr.empty())
+ out[i] = '#';
+ else
+ out[i] = *(nr.cbegin());
+ }
+ cout << out << endl;
+}