Seite 2 von 2 ErsteErste 12
Ergebnis 26 bis 37 von 37

Thema: ngb.to Coders auf "Codewars"

  1. #26
    Bot #0384479 Avatar von BurnerR
    Registriert seit
    Jul 2013
    Beiträge
    3.784
    ngb:news Artikel
    1

    Re: ngb.to Coders auf "Codewars"

    @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 :-).

  2. #27

    Re: ngb.to Coders auf "Codewars"

    Ich code in Clojure. Funktionale Programmierung FTW!

    An den kommenden Feiertagen dann hoffentlich auch wieder mehr.

  3. #28
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    5.694
    ngb:news Artikel
    16

    Re: ngb.to Coders auf "Codewars"

    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 ...
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  4. #29
    1998

    Veteran

    (Threadstarter)

    Avatar von theSplit
    Registriert seit
    Aug 2014
    Beiträge
    4.581
    ngb:news Artikel
    1

    Question Re: ngb.to Coders auf "Codewars"

    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.
    Für diesen Beitrag bedankt sich BurnerR
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @ The past; yesterday, the present; here and now; the future; to be shaped. @
    +++ Thom's Inventarverwaltung +++ Pi-Thread +++ IT-Talents Code Competitions +++ NGB-Statistik Opt-Out/Anonymisierung +++ Stonerhead +++ Add-on Flag Cookies +++ Google Image Directlinks +++ dwrox.net

  5. #30
    Bot #0384479 Avatar von BurnerR
    Registriert seit
    Jul 2013
    Beiträge
    3.784
    ngb:news Artikel
    1

    Re: ngb.to Coders auf "Codewars"

    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.

    Spoiler: 


    Code (Ruby):
    1. def maze_runner(maze, directions)
    2.   row = maze.detect{|aa| aa.include?(2)}
    3.   start_coordinates = [[row.index(2), maze.index(row)]]
    4.   coordinates = directions.inject(start_coordinates) do |coordinates, direction|
    5.     new_position = resolve_direction(coordinates.last, direction)
    6.     coordinates << new_position
    7.   end
    8.   result = coordinates.map{|coordinate| resolve_coordinate(coordinate, maze)}
    9.   if result.include? "Dead"
    10.     return "Dead"
    11.   elsif result.include? "Finish"
    12.     return "Finish"
    13.   else
    14.     return "Lost"
    15.   end
    16. end
    17.  
    18. def resolve_coordinate coordinate, maze
    19.   if coordinate.any?{|e| e<0 || e>=maze.length}
    20.     return "Dead"
    21.   end
    22.   return maze_number_to_result maze[coordinate.last][coordinate.first]
    23. end
    24.  
    25. def maze_number_to_result number
    26.   case number
    27.   when 0
    28.     return "Safe"
    29.   when 1
    30.     return "Dead"
    31.   when 2
    32.     return "Start"
    33.   when 3
    34.     return "Finish"
    35.   end
    36. end
    37.  
    38. def resolve_direction position, direction
    39.   position = position.clone
    40.   case direction
    41.   when "N"
    42.     position[1] -= 1
    43.   when "S"
    44.     position[1] += 1
    45.   when "E"
    46.     position[0] += 1
    47.   when "W"
    48.     position[0] -= 1
    49.   end
    50.   return position
    51. end
    52.  


    Vllt hat ja jemand Bock auf ne objektorientierte Lösung? Bessere funktionale Lösungen fände ich auch gut .
    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 .
    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.

    Spoiler: 


    Code (Ruby):
    1. def maze_runner(maze, directions)
    2.   # Translate parameters into object oriented world
    3.   maze = Maze.new maze
    4.   directions = directions.map{|dir| Direction.new dir}
    5.   path = Path.new maze.start.coordinate, directions
    6.  
    7.   # Solve the problem
    8.   maze.walk(path)
    9. end
    10.  
    11.  
    12. class Coordinate
    13.   def initialize coordinate
    14.     @x = coordinate.first
    15.     @y = coordinate.last
    16.   end
    17.  
    18.   def ==(other)
    19.     return self.get == other.get
    20.   end
    21.  
    22.   def get
    23.     return [@x, @y]
    24.   end
    25.  
    26.   def +(direction)
    27.     case direction.name
    28.     when "N"
    29.       Coordinate.new [@x, @y - 1]
    30.     when "S"
    31.       Coordinate.new [@x, @y + 1]
    32.     when "E"
    33.       Coordinate.new [@x + 1, @y]
    34.     when "W"
    35.       Coordinate.new [@x - 1, @y]
    36.     end
    37.   end
    38. end
    39.  
    40. class Direction
    41.   attr_reader :name
    42.  
    43.   def initialize name
    44.     @name = name
    45.   end
    46.  
    47.   def ==(other)
    48.     return self.name == other.name
    49.   end
    50. end
    51.  
    52. class Path
    53.   def initialize start, directions
    54.     @start = start
    55.     @directions = directions
    56.   end
    57.  
    58.   def coordinates
    59.     coordinates = [@start]
    60.     @directions.each do |direction|
    61.       coordinates << coordinates.last + direction
    62.     end
    63.     return coordinates
    64.   end
    65. end
    66.  
    67. class Field
    68.   attr_reader :coordinate
    69.  
    70.   def initialize type, coordinate
    71.     @type = type
    72.     @coordinate = coordinate
    73.   end
    74.  
    75.   def at?(coordinates)
    76.     coordinates.each do |coordinate|
    77.       if @coordinate == coordinate
    78.         return true
    79.       end
    80.     end
    81.     return false
    82.   end
    83.  
    84.   def not_at?(coordinates)
    85.     return !at?(coordinates)
    86.   end
    87.  
    88.   def type
    89.     case @type
    90.     when 0
    91.       return "Safe"
    92.     when 1
    93.       return "Wall"
    94.     when 2
    95.       return "Start"
    96.     when 3
    97.       return "Finish"
    98.     end
    99.   end
    100.  
    101. end
    102.  
    103.  
    104. class Maze
    105.   def initialize maze
    106.     @size = maze.length
    107.     @maze = []
    108.     maze.each.with_index do |row, row_index|
    109.       row.each.with_index do |entry, column_index|
    110.         coordinate = Coordinate.new [column_index, row_index]
    111.         @maze << Field.new(entry, coordinate)
    112.       end
    113.     end
    114.   end
    115.  
    116.   def walk path
    117.     if path.coordinates.map{|c| outside?(c)}.any?
    118.       return "Dead"
    119.     end
    120.     if @maze.select{|field| field.at?(path.coordinates)}.select{|field| field.type == "Wall"}.any?
    121.       return "Dead"
    122.     end
    123.     if path.coordinates.include? finish.coordinate
    124.       return "Finish"
    125.     end
    126.     return "Lost"
    127.   end
    128.  
    129.   def outside? coordinate
    130.     coordinate.get.min < 0 || coordinate.get.max > @size
    131.   end
    132.  
    133.   def start
    134.     @maze.find{|field| field.type == "Start"}
    135.   end
    136.  
    137.   def finish
    138.     @maze.find{|field| field.type == "Finish"}
    139.   end
    140.  
    141.   def walls
    142.     @maze.select{|field| field.type == "Wall"}
    143.   end
    144.  
    145.   def safes
    146.     @maze.select{|field| field.type == "Safe"}
    147.   end
    148.  
    149. end
    Für diesen Beitrag bedankt sich theSplit
    Geändert von BurnerR (08.01.19 um 23:12 Uhr)

  6. #31

    Re: ngb.to Coders auf "Codewars"

    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?

    Spoiler: 

    Code (Python):
    1. # -*- coding: utf-8 -*-
    2.  
    3. from typing import Sequence, Tuple
    4.  
    5. WALL: int = 1
    6. START: int = 2
    7. FINISH: int = 3
    8. EMPTY: Tuple[int, int] = (0, START)
    9.  
    10.  
    11. class Pos:
    12.     def __init__(self, x: int, y: int):
    13.         self.x: int = x
    14.         self.y: int = y
    15.  
    16.  
    17. def _find_start_finish(maze: Sequence[Sequence[int]]) -> Pos:
    18.     for ridx, row in enumerate(maze):
    19.         for fidx, field in enumerate(row):
    20.             if field == START:
    21.                 return Pos(fidx, ridx)
    22.  
    23.     raise LookupError('No start position found in maze.')
    24.  
    25.  
    26. def maze_runner(maze: Sequence[Sequence[int]], directions: Sequence[str]) -> str:
    27.     pos = _find_start_finish(maze)
    28.  
    29.     for dir in directions:
    30.         if dir == 'N':
    31.             pos.y -= 1
    32.         elif dir == 'S':
    33.             pos.y += 1
    34.         elif dir == 'W':
    35.             pos.x -= 1
    36.         elif dir == 'E':
    37.             pos.x += 1
    38.         else:
    39.             raise ValueError(f'Invalid direction: {dir}')
    40.  
    41.         try:
    42.             field_type = maze[pos.y][pos.x]
    43.         except IndexError:
    44.             # we stumbled out of the maze
    45.             return 'Dead'
    46.         else:
    47.             if field_type == WALL:
    48.                 return 'Dead'
    49.             elif field_type == FINISH:
    50.                 return 'Finish'
    51.             elif field_type not in EMPTY:
    52.                 raise ValueError(f'Invalid field type "{field_type}" at position ({pos.x},{pos.y})')
    53.  
    54.     return 'Lost'
    55.  
    Geändert von Brother John (09.01.19 um 21:16 Uhr)

  7. #32
    Mitglied
    Registriert seit
    Jul 2013
    Beiträge
    301
    ngb:news Artikel
    1

    Re: ngb.to Coders auf "Codewars"

    @Brother John: Die Inputs kannst du dir einfach mit print() 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?
    Für diesen Beitrag bedanken sich theSplit, Brother John

  8. #33

    Re: ngb.to Coders auf "Codewars"

    Oh, print-Ausgaben sieht man? Hätte ich echt mal testen können.

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

  9. #34
    1998

    Veteran

    (Threadstarter)

    Avatar von theSplit
    Registriert seit
    Aug 2014
    Beiträge
    4.581
    ngb:news Artikel
    1

    Re: ngb.to Coders auf "Codewars"

    Den Fehler habe ich auch bis eben gesucht, aber dann auch gefunden, ich war nur nicht schnell genug!

    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
    Geändert von theSplit (09.01.19 um 23:11 Uhr)
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @ The past; yesterday, the present; here and now; the future; to be shaped. @
    +++ Thom's Inventarverwaltung +++ Pi-Thread +++ IT-Talents Code Competitions +++ NGB-Statistik Opt-Out/Anonymisierung +++ Stonerhead +++ Add-on Flag Cookies +++ Google Image Directlinks +++ dwrox.net

  10. #35
    \''; DROP TABLE user; --

    Administrator

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.550
    ngb:news Artikel
    80

    Re: ngb.to Coders auf "Codewars"

    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?
    ~❤~

  11. #36
    1998

    Veteran

    (Threadstarter)

    Avatar von theSplit
    Registriert seit
    Aug 2014
    Beiträge
    4.581
    ngb:news Artikel
    1

    Re: ngb.to Coders auf "Codewars"

    Zitat Zitat von electric.larry Beitrag anzeigen
    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: ngb.to Coders
    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.
    Geändert von theSplit (10.01.19 um 08:15 Uhr) Grund: Lösch Account Hinweis für neue Registrierung
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @ The past; yesterday, the present; here and now; the future; to be shaped. @
    +++ Thom's Inventarverwaltung +++ Pi-Thread +++ IT-Talents Code Competitions +++ NGB-Statistik Opt-Out/Anonymisierung +++ Stonerhead +++ Add-on Flag Cookies +++ Google Image Directlinks +++ dwrox.net

  12. #37
    \''; DROP TABLE user; --

    Administrator

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.550
    ngb:news Artikel
    80

    Re: ngb.to Coders auf "Codewars"

    Hab dem Support geschrieben, jetzt sehe ich euch auch bei den Allies. Jippie
    Für diesen Beitrag bedankt sich theSplit
    ~❤~

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •