- Lua 100%
| rockspecs | added rockspec [ci skip] | |
| spec | New repo for this module | |
| .drone.yml | removed lua5.4 step, cause most of the modules are not available yet [ci skip] | |
| cc.lua | try to load json.lua or dkjson | |
| LICENSE | New repo for this module | |
| lua-cc-1.2.1-0.rockspec | added rockspec [ci skip] | |
| README.md | try to load json.lua or dkjson | |
Coding Challenge Modul
Eine kleines Modul, zum Challenge fetchen und submitten. Außerdem kann man sich die durchschnittliche Dauer für alle Lösungsdurchläufe ausgeben lassen.
Es wurde von mir geschrieben um wiederkehrende Aufgaben wie fetchen, submitten etc. beim Lösen der Coding Challenges vom Youtube Channel The Morpheus Tutorials zu vereinfachen. Meine Lösungen die dieses Modul nutzen liegen hier: coding_challenge_loesung
Warning
I am not a programmer, so here's a warning: This code was written in an exploratory way. If you encounter problems, see something wrong or something was implemented in a weird way, I would be happy if you tell me about it or create a pull request. Thank you. :)
Nutzungsbeispiel
> CC = require('cc')
> cc = CC.new(1, { nojson = true })
> cc:solve(function(ch) return { token = tostring(ch) } end, true)
Success 200
> cc:runtime_avg()
0.000003s
Inhalt
Abhängigkeiten
Funktionen
new(cn[, opts])
Erstellt neues Coding Challenge Instanz.
Parameter:
- cn: (number) Nummer der Challenge, also z.B. 3 für die dritte Challenge
- opts: (table) options (opt)
- opts.nojson: (bool) auf
truesetzen wenn die Challenge nicht als JSON bereitgestellt wird - opts.get_path: (string) der Pfad wird der get URL hinzugefügt. Bei einer Challenge gab es mal die Möglichkeit die Werte sortiert übermittelt zu bekommen indem mal
/sortedals Pfad angab. - opts.post_path: (string) selbe wie
get_pathnurPOSTrequest, alsosubmit()
Returns:
(table) Objekt table
Usage:
local cc = CC.new(15)
fetch()
Abrufen einer Challenge.
Parameter:
nil
Returns:
(table|string) wenn opts.nojson auf true gesetzt ist, wird ein String returned, sonst eine Table.
Usage:
local challenge = cc:fetch()
solve(fn, sbmt)
Lösen der Challenge. Dies ist eigentlich nur ein Wrapper für die Lösungsfunktion, welcher die Ausführungszeit misst. Wird dies nicht benötigt kann man auch die Lösungsfunktion ohne solve() nutzen.
solve() ruft fetch() auf um eine neue Challenge zu bekommen. Sollte man also eine for-Loop nutzen, brauch man nur solve() nutzen.
Parameter:
- fn: (function) die Funktion, welche die Challenge löst.
fnnimmt ein Parameter (table) entgegen. - sbmt: (bool) Wenn
truewird direktsubmit()mit dem zurückgegebenen Wert vonfnaufgerufen.
Returns:
(void | string, number) Das Ergebnis | Wenn sbmt = true
Usage:
local result = cc:solve(function(c) return c.word end)
submit(data[, header])
Übermitteln der Lösung.
Parameter:
- data: (table) Übergabe der Daten in Form einer table, welche dann in JSON umgewandelt wird.
- headers: (table) Werden zusätzliche Header benötigt, können diese als Tabelle übergeben werden
Returns:
(string, number) Return value 1 ist der Status Text ob Success oder Error und value 2 ist der HTTP Statuscode
Usage:
local resp = cc:post({ token = 'blubb' })
local c2 = c2:post({
token = 'blubb'
},
{
headers = {
['X-Clacks-Overhead'] = 'GNU Terry Pratchett'
}
})
runtime_avg()
Durchschnittliche Zeit aller Lösungs Durchläufe. Für Benchmark.
Parameter:
nil
Returns:
(string) the time in seconds
Usage:
cc:runtime_avg() -- Output: 0.000004
Beispiele
- C15: palindrome.lua
Tests
Um die Tests laufen zu lassen wird gambiarra benötigt. Einfach gambiarra.lua herunterladen und in den Ordner spec/ packen und die Tests mit lua lib/spec/cc_spec.lua ausführen.