From 0a7021255c99665a4c934b738cf1d947c782a64f Mon Sep 17 00:00:00 2001 From: "Christoph J. Scherr" Date: Tue, 5 Sep 2023 15:27:45 +0200 Subject: [PATCH] add regex task --- TODO.md | 12 +++- Tasks.md | 53 ++++++++++++++ data/metasyntactic.md | 164 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 data/metasyntactic.md diff --git a/TODO.md b/TODO.md index f80b651..c134c63 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,10 @@ -# Things i would like to add to this repository -Caesar-encryption, decryption, brute force -calculate determinante (german, idk the english word) of a matrix +# Things that tasks would be cool +## Kryptography +- [ ] Caesar-encryption, decryption, brute force + +## Math +- [ ] calculate determinant of a matrix + +## General Tech +- [ ] Regex diff --git a/Tasks.md b/Tasks.md index cfcc2d8..ff6c801 100644 --- a/Tasks.md +++ b/Tasks.md @@ -229,3 +229,56 @@ just make your passwords longer than that, and give attackers no chance to break force. + +## String Parsing with Regular Expressions + +Difficulty: 2/5 + +
+Text + +The text is large, read it [here](data/metasyntactic.md) and find the raw text for your program +[here](). + +
+ +1. Use a regular expression (regex) to find all instances of a uppercase character with a +following vowel character, in which no 'x', z' or 'y' follows the vowel in the given Text. +It is not allowed to store the text in a variable, you must load it from an outside source, such as +a file. + +Examples: + +| Original | is Match? | +|----------|-----------| +| Foo | yes | +| Baz | no | +| Qux | no | +| foo | no | +| BAR | yes | + +A hint that you don't want to miss: use [regex101.com](https://regex101.com) if you are not already +a REGEX expert. + +
+Hints + +- Use `http.server.SimpleHTTPRequestHandler` and `io.BytesIO`. +- Define your own class that inherits `SimpleHTTPRequestHandler`. +- You don't need to implement `do_GET()`. +- Implement your own `send_head()` method. This is the method that writes your response (not + completely on it's own, but unless you feel like inspecting standard libraries, just do what + I'm saying.). +- `send_head()` should take no arguments (other than `self`) and return some readable buffer. +- Don't forget to set the headers for HTTP before sending the body. +- Your OS might block hosting to ports < 1000. Try to host your web server to `localhost:8080`. + +
+
+Solution + +Take a look at the provided Code Example. + +[Code Example](src/miniweb.py) + +
diff --git a/data/metasyntactic.md b/data/metasyntactic.md new file mode 100644 index 0000000..d9cd321 --- /dev/null +++ b/data/metasyntactic.md @@ -0,0 +1,164 @@ +# Metasyntactic variable + +## Tools + +From Wikipedia, the free encyclopedia +This article is about metasyntactic variables in computer science and programming. For metasyntactic +variables as used in formal logic, see Metavariable (logic). For usage in spoken languages, see +Placeholder name. + +A metasyntactic variable is a specific word or set of words identified as a placeholder in computer +science and specifically computer programming. These words are commonly found in source code and are +intended to be modified or substituted before real-world usage. For example, foo and bar are used in +over 330 Internet Engineering Task Force Requests for Comments, the documents which define +foundational internet technologies like HTTP (web), TCP/IP, and email protocols.[1][2] + +By mathematical analogy, a metasyntactic variable is a word that is a variable for other words, +just as in algebra letters are used as variables for numbers.[1] + +Metasyntactic variables are used to name entities such as variables, functions, and commands whose +exact identity is unimportant and serve only to demonstrate a concept, which is useful for teaching +programming. +Common metasyntactic variables + +Due to English being the foundation-language, or lingua franca, of most computer programming +languages, these variables are commonly seen even in programs and examples of programs written for other spoken-language audiences. + +The typical names may depend however on the subculture that has developed around a given programming +language. + +## General usage + +Metasyntactic variables used commonly across all programming languages include foobar, foo, bar, +baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, and thud; several of these words +are references to the game Colossal Cave Adventure.[1][3] + +A complete reference can be found in a MIT Press book titled The Hacker's Dictionary. + +## Japanese + +In Japanese, the words hoge (ほげ)[4] and fuga (ふが) are commonly used, with other common words +and variants being piyo (ぴよ), hogera (ほげら), and hogehoge (ほげほげ).[5][circular reference] +The origin of hoge as a metasyntactic variable is not known, but it is believed to date to the early +1980s.[5] + +## French + +In France, the word toto is widely used, with variants tata, titi, tutu as related placeholders. +One commonly-raised source for the use of toto is a reference to the stock character used to tell +jokes with Tête à Toto.[citation needed] + +## Turkish + +In Turkey, the words hede and hödö (usually spelt hodo due to ASCII-only naming constraints of +programming languages) are well-known metasyntactic variables stemmed from popular humorous cartoon +magazines of the 90's like LeMan. The words don't mean anything, and specifically used in place of +things that don't mean anything. The terms have been popularized to the masses by the actor and +stand-up comedian Cem Yılmaz in the late 90's and early 2000's.[6] + +## Usage examples +A screenshot of a metasyntactic variable FOO assigned and echoed in an interactive shell session. + +## C +See also: C programming language + +In the following example the function name foo and the variable name bar are both metasyntactic +variables. Lines beginning with // are comments. + +```c +// The function named foo +int foo(void) +{ + // Declare the variable bar and set the value to 1 + int bar = 1; + + return bar; +} +``` + +## C++ +See also: C++ + +Function prototypes with examples of different argument passing mechanisms:[7] + +```cpp +void Foo(Fruit bar); +void Foo(Fruit* bar); +void Foo(const Fruit& bar); + +Example showing the function overloading capabilities of the C++ language + +void Foo(int bar); +void Foo(int bar, int baz); +void Foo(int bar, int baz, int qux); +``` + +## Python + +Spam, ham, and eggs are the principal metasyntactic variables used in the Python programming +language.[8] This is a reference to the famous comedy sketch, "Spam", by Monty Python, the eponym +of the language.[9] In the following example spam, ham, and eggs are metasyntactic variables and +lines beginning with # are comments. + +```python +# Define a function named spam +def spam(): + + # Define the variable ham + ham = "Hello World!" + + # Define the variable eggs + eggs = 1 + + return +``` + +## IETF Requests for Comments + +Both the IETF RFCs and computer programming languages are rendered in plain text, making it +necessary to distinguish metasyntactic variables by a naming convention, since it would not be +obvious from context. + +Here is an example from the official IETF document explaining the e-mail protocols (from RFC 772 - +cited in RFC 3092): + +```text + All is well; now the recipients can be specified. + + S: MRCP TO: + R: 200 OK + + S: MRCP TO: + R: 553 No such user here + + S: MRCP TO: + R: 200 OK + + S: MRCP TO:<@Y,@X,fubar@Z> + R: 200 OK + + Note that the failure of "Raboof" has no effect on the storage of + mail for "Foo", "bar" or the mail to be forwarded to "fubar@Z" + through host "X". +``` + +(The documentation for texinfo emphasizes the distinction between metavariables and mere variables +used in a programming language being documented in some texinfo file as: "Use the @var command to +indicate metasyntactic variables. A metasyntactic variable is something that stands for another +piece of text. For example, you should use a metasyntactic variable in the documentation of a +function to describe the arguments that are passed to that function. Do not use @var for the names +of particular variables in programming languages. These are specific names from a program, so +@code is correct for them."[10]) + +Another point reflected in the above example is the convention that a metavariable is to be +uniformly substituted with the same instance in all its appearances in a given schema. This is in +contrast with nonterminal symbols in formal grammars where the nonterminals on the right of a +production can be substituted by different instances.[11] +Example data +SQL + +It is common to use the name ACME in example SQL Databases and as placeholder company-name for the +purpose of teaching. The term 'ACME Database' is commonly used to mean a training or example-only +set of database data used solely for training or testing. ACME is also commonly used in +documentation which shows SQL usage examples, a common practice with in many educational texts as +well as technical documentation from companies such as Microsoft and Oracle.[12][13][14]