• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

ngb.to Coders auf "Codewars"

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
Ach mann, ich hatte das mit dem Sudoku gerade gelöst, aber als ich auf "final submit" gedrückt habe bin ich nur auf die "du kannst die Lösung noch nicht sehen" Seite gekommen und meine Lösung war futsch :( Speichert euren Code besser nochmal lokal bevor ihr ihn abgebt. Das ist echt ärgerlich wenn man da ne weile dran sitzt und dann ist alles auf einmal weg, obwohl man vorher schon mehrmals "gespeichert" (Strg+S) hat.

Ich könnte das selbe jetzt nochmal runterschreiben, aber das wäre ja langweilig, jetzt wird doch noch ein bisschen gegolft.

Die alphabet wars Reihe habe ich auch angefangen, ich finde es aber ein bisschen blöd dass die späteren Teile in immer weniger Programmiersprachen verfügbar sind. Die ersten beiden habe ich mit C++ gemacht, die dritte dann mit C (ist immerhin eine gute Übung mit Arrays) und die letzten beiden werde ich dann wohl mit C# lösen.

EDIT: Der Fehler beim Absenden hängt wohl mit dem Login-Status zusammen. Die Seite kommt wohl nicht so ganz mit klar wenn man Tabs im Browser offen lässt und die Session abläuft. Ich habe mich neu eingeloggt und bin dann mit dem Browser Zurück Button zur Kata zurück und war dann wieder ausgeloggt :-S, weil man nach dem Login sonst nicht so ohne weiteres zurück kommt. Funktioniert hat es erst als ich mich in einem anderen Tab eingeloggt habe und dann den mit der Kata neu geladen habe.

Und die Lösung für das sudoku hat auch funktioniert und ist nur noch halb so lang wie im ersten Versuch.
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #22
@exomo: ich glaube am einfachsten, nicht die Eingabe zu verlieren, besteht darin, sich das Training mit Code-URL zu bookmarken - so bin ich immer auf das Kata zurückgekommen und hatte gleich den Code von der letzten Sitzung. Das sollte auch funktionieren den Code von einer anderen Sitzung wiederherzustellen.

@An alle: Ihr seid ganz schön auf Zack! :) - Macht Spaß auf die Punktetabelle zu luchsen und sich zu vergleichen. :coffee:

Trainiert ihr eigentlich eine oder mehrere Sprachen und in welchen Sprachen programmiert ihr?
Wollen wir uns mal einen Überblick geben, dass man schauen kann wer eventuell in welcher/n Sprache/n programmiert. Ich würde das gerne mal zusammenfassen bzw. einen Überblick bekommen.

Ich schreibe aktuell in C++, will aber auch dann noch einmal mit Python anfangen oder Javascript, irgendwas dazwischen.
Wobei, es giert natürlich schon ein wenig dass man in einer Sprache auf ein neues Level kommt. :o

Herzlichen Glückwunsch auch an dieser an Burner, der fleißig Katas löst und @exomo ebenfalls, der/die mich langsam aber sicher überholt haben. :)
 

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
Trainiert ihr eigentlich eine oder mehrere Sprachen und in welchen Sprachen programmiert ihr?
Hauptsächlich mache ich die Katas in C++. C und C# will ich auch noch mehr machen, Python eventuell auch. Abseits von den Programmiersprachen wollte ich auch SQL trainieren, ich habe aber gemerkt dass ich da im Moment so gar nicht zurecht komme, unter anderem weil PostgreSQL (in den Katas verwendet) sich teilweise von MySQL (habe ich bisher eingesetzt) unterscheidet.

C++ bin ich eigentlich ganz fit, da habe ich auch schon schwierigere Aufgaben gemacht, zum Beispiel mit templates.
C ist mir eigentlich zu mühsam, aber gerade deshalb kann es auch nicht schaden mal damit ein paar Aufgaben zu lösen.
C# hat teilweise noch elegantere möglichkeiten als C++.
Python habe ich zwar schon mal ein bisschen mit gearbeitet, aber ich bin nie so richtig fit geworden, das wäre hier eine gute Möglichkeit mal etwas aufzuholen.
SQL gehört eigentlich auch zu den "Basic skills" aber das habe ich in den letzten Projekten so gut wie nicht gebraucht und nie mehr als ein paar ganz einfache SELECT statements.

Das ist schon ein bisschen zu viel was ich mir da vorgenommen habe. Leider habe ich auch nicht endlos Zeit. Jetzt über die Feiertage und so mache ich noch ein bisschen was, danach muss ich mal sehen wie oft ich noch dazu komme ein paar Katas zu lösen.
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
@An alle: Ihr seid ganz schön auf Zack! :) - Macht Spaß auf die Punktetabelle zu luchsen und sich zu vergleichen. :coffee:
Wo finde ich die denn? Meinst du die "Honor"-Tabelle, oder gibt's da was Ausführlicheres?
Trainiert ihr eigentlich eine oder mehrere Sprachen und in welchen Sprachen programmiert ihr?
Ich trainiere aktuell ausschließlich Python. Die meisten Katas sind ja eher algorithmischer Natur - da will ich eine Programmiersprache zur Hand haben, in der ich mich kurz und präzise ausdrücken kann.
Vielleicht fang ich irgendwann mal mit Kotlin an - hab die Sprache für ein kleineres Projekt verwendet, und war direkt begeistert. Codewars könnte sich ganz gut eignen, um darin etwas Übung zu bekommen.
Oder ich beiße wirklich mal in den sauren Apfel und schreib C++. Ich mag die Sprache zwar nicht sonderlich, muss aber beruflich öfters damit arbeiten.

PS: Ist die Seite bei euch auch teilweise ätzend lahm?
 

Cybergreek

Boardgrieche

Registriert
21 Nov. 2017
Beiträge
365
Ich war bisher in JavaScript und PHP unterwegs, SQL wird demnächst auch mal angegangen. Wobei aber leider die dafür investierte Zeit stark nachgelassen hat.

PS: Ist die Seite bei euch auch teilweise ätzend lahm?
Jepp, das ist sie leider. Hab lange gebraucht zu merken, dass da oben oft ein Ladebalken ist.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
@exomo: ich glaube am einfachsten, nicht die Eingabe zu verlieren, besteht darin, sich das Training mit Code-URL zu bookmarken - so bin ich immer auf das Kata zurückgekommen und hatte gleich den Code von der letzten Sitzung. Das sollte auch funktionieren den Code von einer anderen Sitzung wiederherzustellen.
Ich hatte das jetzt auch. Wenn er dich ausloggt (ka warum evtl wie exomo meinte mit mehreren tabs??) und du machst weiter und abschickst, dann bist du hinterher ausgeloggt und wenn du dich einloggst, dann ist der code nicht mehr da..
Vor dem einloggen wieder zurück gehen ging glaube ich auch nicht...

Ich mache ausschließlich Ruby Katas.
Und versuche Rakorium zu erreichen :-D. Habe auch geschaut, welche du gemacht hast und dann auch ein paar davon gemacht :-D. Aber du warst zuletzt immer noch 200 Punkte vor mir :-).
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
Ich code in Clojure. Funktionale Programmierung FTW! :cool:

An den kommenden Feiertagen dann hoffentlich auch wieder mehr.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
Ich habe mir PHP (Wollte PowerShell aber das gab es am Startbildschirm am Anfang nicht) ausgesucht.
Dann nach dem Anmelden gesehen das es doch PowerShell gibt...

Also habe ich aktuell PHP, PowerShell und SQL.. VB.NET würde ich noch nehmen - aber hier gibt es nur c# … darin hab ich zwar auch schon nen Projekt entwicklt - aber das ist irgendwie nicht so "mein" Syntax ...
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #29
Was Programmiersprachen angeht scheinen wir gut aufgestellt zu sein, allerdings auch sehr breit aufgefächert mit nur wenig Schnittmenge. Kann das sein?

Ich möchte an dieser Stelle mal "Maze Runner" in den Raum werfen: https://www.codewars.com/kata/maze-runner

Fand die Aufgabe sehr angenehm und habe es in Python und Javascript gelöst. Wobei die Javascript Variante etwas anders gestrickt ist, weil ich diese danach geschrieben hatte. Vielleicht mache ich auch noch die PHP Variante.

Nur, würde ich gerne dazu einladen das in Python oder Javascript zu versuchen - vielleicht kann man dann auch ein paar Lösungen begutachten. Andere Aufgaben wären natürlich auch interessant, falls ihr selbst ein schönes Kata gefunden und bearbeitet habt.

Edit:
Wenn ihr Lösungen von andere finden wollt, solltet ihr "ngb.to Coders" als Clan angeben, damit wird man verknüpft und kann Lösungen anderer Member einsehen, nachdem man seien abgegeben hat.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Ja, Schnittmenge an Sprachen ist leider klein.
Unten meine Ruby-Lösung. Ziel war gewesen, ein wenig mit inject (aka reduce aka fold) zu spielen. So richtig zufrieden bin ich mit dem Ergebnis nicht, aber es ist "ok-ish".
Am besten nicht gucken bevor eine eigene Lösung erarbeitet wurde.

[src=ruby]def maze_runner(maze, directions)
row = maze.detect{|aa| aa.include?(2)}
start_coordinates = [[row.index(2), maze.index(row)]]
coordinates = directions.inject(start_coordinates) do |coordinates, direction|
new_position = resolve_direction(coordinates.last, direction)
coordinates << new_position
end
result = coordinates.map{|coordinate| resolve_coordinate(coordinate, maze)}
if result.include? "Dead"
return "Dead"
elsif result.include? "Finish"
return "Finish"
else
return "Lost"
end
end

def resolve_coordinate coordinate, maze
if coordinate.any?{|e| e<0 || e>=maze.length}
return "Dead"
end
return maze_number_to_result maze[coordinate.last][coordinate.first]
end

def maze_number_to_result number
case number
when 0
return "Safe"
when 1
return "Dead"
when 2
return "Start"
when 3
return "Finish"
end
end

def resolve_direction position, direction
position = position.clone
case direction
when "N"
position[1] -= 1
when "S"
position[1] += 1
when "E"
position[0] += 1
when "W"
position[0] -= 1
end
return position
end
[/src]

Vllt hat ja jemand Bock auf ne objektorientierte Lösung? Bessere funktionale Lösungen fände ich auch gut :D.
Habe gerade gesehen, einige haben es wohl rekursiv gelöst, das ist vermutlich auch ganz witzig.

--- [2019-01-08 23:09 CET] Automatisch zusammengeführter Beitrag ---

Ok, nachdem die Lösung etwas unzufriedenstellend war, hier noch eine OO Lösung.
Irgendwo steckt noch ein kleiner Bug, einer der 58 Tests schlägt noch fehl. Aber es ist schon spät geworden :D.
Einige Methoden werden nicht gebraucht und sind nur der Vollständigkeit halber implementiert. Habe mal wieder stark C++ vermisst, wo OO Programieren einfach viel toller ist.

[src=ruby]def maze_runner(maze, directions)
# Translate parameters into object oriented world
maze = Maze.new maze
directions = directions.map{|dir| Direction.new dir}
path = Path.new maze.start.coordinate, directions

# Solve the problem
maze.walk(path)
end


class Coordinate
def initialize coordinate
@x = coordinate.first
@y = coordinate.last
end

def ==(other)
return self.get == other.get
end

def get
return [@x, @y]
end

def +(direction)
case direction.name
when "N"
Coordinate.new [@x, @y - 1]
when "S"
Coordinate.new [@x, @y + 1]
when "E"
Coordinate.new [@x + 1, @y]
when "W"
Coordinate.new [@x - 1, @y]
end
end
end

class Direction
attr_reader :name

def initialize name
@name = name
end

def ==(other)
return self.name == other.name
end
end

class Path
def initialize start, directions
@start = start
@directions = directions
end

def coordinates
coordinates = [@start]
@directions.each do |direction|
coordinates << coordinates.last + direction
end
return coordinates
end
end

class Field
attr_reader :coordinate

def initialize type, coordinate
@type = type
@coordinate = coordinate
end

def at?(coordinates)
coordinates.each do |coordinate|
if @coordinate == coordinate
return true
end
end
return false
end

def not_at?(coordinates)
return !at?(coordinates)
end

def type
case @type
when 0
return "Safe"
when 1
return "Wall"
when 2
return "Start"
when 3
return "Finish"
end
end

end


class Maze
def initialize maze
@size = maze.length
@maze = []
maze.each.with_index do |row, row_index|
row.each.with_index do |entry, column_index|
coordinate = Coordinate.new [column_index, row_index]
@maze << Field.new(entry, coordinate)
end
end
end

def walk path
if path.coordinates.map{|c| outside?(c)}.any?
return "Dead"
end
if @maze.select{|field| field.at?(path.coordinates)}.select{|field| field.type == "Wall"}.any?
return "Dead"
end
if path.coordinates.include? finish.coordinate
return "Finish"
end
return "Lost"
end

def outside? coordinate
coordinate.get.min < 0 || coordinate.get.max > @size
end

def start
@maze.find{|field| field.type == "Start"}
end

def finish
@maze.find{|field| field.type == "Finish"}
end

def walls
@maze.select{|field| field.type == "Wall"}
end

def safes
@maze.select{|field| field.type == "Safe"}
end

end[/src]
 
Zuletzt bearbeitet:

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Weiß jemand, ob/wie man zu fehlschlagenden Python-Tests mehr Details kriegen kann? Ist bei der Maze-Aufgabe ja ganz nett, wenn der Testcase sagt, welcher Ergebnis er *eigentlich* erwartet hätte. Aber die Inputdaten wären schon hilfreich. Wenn von 150 Tests 6 fehlschlagen, macht nebelstochern nach der Ursache nur bedingt Spaß.

--- [2019-01-09 21:13 CET] Automatisch zusammengeführter Beitrag ---

Oder sieht jemand einen Fehler im Code?

[src=python]# -*- coding: utf-8 -*-

from typing import Sequence, Tuple

WALL: int = 1
START: int = 2
FINISH: int = 3
EMPTY: Tuple[int, int] = (0, START)


class Pos:
def __init__(self, x: int, y: int):
self.x: int = x
self.y: int = y


def _find_start_finish(maze: Sequence[Sequence[int]]) -> Pos:
for ridx, row in enumerate(maze):
for fidx, field in enumerate(row):
if field == START:
return Pos(fidx, ridx)

raise LookupError('No start position found in maze.')


def maze_runner(maze: Sequence[Sequence[int]], directions: Sequence[str]) -> str:
pos = _find_start_finish(maze)

for dir in directions:
if dir == 'N':
pos.y -= 1
elif dir == 'S':
pos.y += 1
elif dir == 'W':
pos.x -= 1
elif dir == 'E':
pos.x += 1
else:
raise ValueError(f'Invalid direction: {dir}')

try:
field_type = maze[pos.y][pos.x]
except IndexError:
# we stumbled out of the maze
return 'Dead'
else:
if field_type == WALL:
return 'Dead'
elif field_type == FINISH:
return 'Finish'
elif field_type not in EMPTY:
raise ValueError(f'Invalid field type "{field_type}" at position ({pos.x},{pos.y})')

return 'Lost'
[/src]
 
Zuletzt bearbeitet:

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
@Brother John: Die Inputs kannst du dir einfach mit [kw]print()[/kw] selber ausgeben.

Den Fehler in deinem Code glaube ich zu sehen: Was passiert denn, wenn du nach links oder oben aus dem Labyrinth fällst? ;)
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Oh, print-Ausgaben sieht man? Hätte ich echt mal testen können. :D

Out-of-Bounds sollte … ah, Shit! Python und negative Indexe! … OK, und dann ist alles grün.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #34
Den Fehler habe ich auch bis eben gesucht, aber dann auch gefunden, ich war nur nicht schnell genug! :o

Das Debugging ist manchmal schon kompliziert aber generell kann man sich etwas Debug Output ausgeben lassen. Klappt eigentlich in der Regel bei allen Sprachen recht gut.


Edit: Im übrigen gefällt mir der OO Weg und das Validieren des Inputs auf Fehler und Reaktionen auf selbige mit Exceptions.

Eigentlich schon fast zu viel des Guten ;)
 
Zuletzt bearbeitet:

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
Danke für den Tipp zu Codewars, macht echt Spaß. Habe ganz vergessen, wie "unbequem" NASM ist.

Habe mich leider nicht über deinen (Splits) Link registriert, aber ngb.to Coders als Clan eingegeben. Ich sehe unter Allies aber nur meinen eigenen Account. Muss ich von jemandem als Clan Member freigeschaltet werden, oder hab ich sonst etwas falsch gemacht?

Ich habe den Account über eine Wegwerf-Adresse registriert. Weil ich gleich einloggen konnte, hab ich die dann überhaupt nicht mehr geschaut, ob dort ein Mail angekommen ist. Kann es dran liegen, dass ich die Adresse nicht verifiziert habe? Kann man die Verifizierungsmail nochmals zuschicken lassen?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #36
Habe mich leider nicht über deinen (Splits) Link registriert, aber ngb.to Coders als Clan eingegeben. Ich sehe unter Allies aber nur meinen eigenen Account. Muss ich von jemandem als Clan Member freigeschaltet werden, oder hab ich sonst etwas falsch gemacht?

Hi, ich sehe dich leider nicht in der "Social" Liste bei den Clanmitgliedern.

Du musst es wie folgt eingeben: [kw]ngb.to Coders[/kw]
Wenn alles korrekt ist, wirst du automatisch mit allen anderen verlinkt, auch wenn deine Email nicht bestätigt ist.

Ich habe den Account über eine Wegwerf-Adresse registriert. Weil ich gleich einloggen konnte, hab ich die dann überhaupt nicht mehr geschaut, ob dort ein Mail angekommen ist. Kann es dran liegen, dass ich die Adresse nicht verifiziert habe? Kann man die Verifizierungsmail nochmals zuschicken lassen?

Es kommt definitiv eine Registrierungs-Email, aber andere im Clan haben (das kann ich über den Link sehen) ihre Email nicht bestätigt, konnten sich aber der Gruppe anschließen.
Ob man die Email nochmal zuschicken kann weiß ich aber leider nicht.

Ich denke bei der Eingabe ist was krumm, dass du uns andere deswegen nicht direkt siehst.

Edit:
Es gibt die Möglichkeit den Account in den "Account Settings" komplett zu löschen: "Delete my account".

Wenn ich richtig gehe, sollte das erlauben das man sich neu anmelden kann bzw. unter der einer anderen Email mit gleichem Benutzernamen.

Codewars sagt:
After deleting your account you are free to sign up again using the same email address.

Eventuell geht das auch mit gleichem Benutzernamen.
 
Zuletzt bearbeitet:

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich behalte die Seite mal im Hinterkopf. Vielleicht habe ich demnächst mal Zeit und Muße mich an sowas zu probieren. Wäre dann vermutlich C++. Ggf. auch Python und PHP
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #40
@Roin: Super Sache. Ich hab auch mehrere Katas in mehreren Sprachen gebaut.

Lohnt sich auf jeden Fall, gerade auch damit man sehen kann in welcher Sprache man wie steht, bzw. durch die anderen Lösungen, was man besser machen könnte.

Nur die Aufgaben mit Formeln, ist nicht so meines... aber sonst, gut. ;)
 
Oben