Coder Social home page Coder Social logo

kata.compliance.dictionary's Introduction

Anagrams Dictionary Kata (game)

Nuestro CEO nos ha pedido que identifiquemos todas las palabras del diccionario en Inglés que son anagramas, es decir, identificar todas las palabras del diccionario que se escriben con las mismas letras de otra palabra, en un orden distinto.

Por entender en qué consiste esto de los anagramas: {bored , robed} son un conjunto de anagramas, igual que {artist, strait, traits} también lo son. Otro ejemplo sería {pores, poser, prose, ropes, spore}. Si os fijáis en cada conjunto, cada una de las palabra del conjunto se escribe con las mismas letras que el resto de palabras, sólo que las letras aparecen en un orden distinto.

Al parecer hay una gran oportunidad en el mercado de los anagramas, y si conseguimos implementar este algoritmo en los próximos MINUTOS, posiblemente generemos dinero suficiente como para vivir sin preocupaciones el resto de nuestras vidas (y las de nuestra descendencia durante varias generaciones, así que esto VA MUY EN SERIO). Eso si, para que el nogocio salga bien, nuestro código ha de ser capaz de generar esta lista de anagramas en el menor tiempo posible. Apuntamos a unos 15 milisegundos.

El objetivo de la Kata es crear una lista de todos los conjuntos de anagramas que existen en el idioma Inglés, partiendo del documento English.txt que podéis encontrar en la carpeta documents del repo.

Enfoque de la Kata

Esta kata es una kata gamificada, pensada para hacerse en varios grupos de Mob (o parejas) a la vez.

Primera fase del juego:

En una primera iteración, cada equipo se centrará en hacer el algoritmo más eficiente (en tiempo de ejecución) posible.

Quien gana esta fase:

  • El primer equipo que llegue a un tiempo de ejecución de 15ms o menos gana.

  • Si nadie llega a esos tiempos, el equipo que tenga un tiempo de ejecución más pequeño al terminar el timebox gana.

IMPORTANTE: buscamos entregar rápido un código muy optimizado así que ¡Viva la complejidad accidental, la sobreingeniería, los shortcuts y las guarrerías locas que se os puedan ocurrir!

Está bien generar legacy en esta parte, usar concurrencia, ChatGPT o lo que sea que os parezca que os puede ayudar a terminar antes y ganar esta parte.

Segunda fase del juego

Asumiendo que hemos conseguido un tiempo de ejecución razonable en la fase anterior, ahora nos toca convertir el código en código bonito y fácil de mantener.

Cómo se gana esta fase:

  • Manteniendo el tiempo de ejecución conseguido con el código anterior (la ejecución debería ser igual de buena que antes, ese es el "valor" que queremos proteger).

  • Teniendo un test de performance sobre el algoritmo anterior, que no sea flacky y nos garantice que el tiempo de ejecución no se ha degradado. (nBench puede ser útil en este punto).

  • Teniendo cobertura de test que "demuestre" que el algoritmo funciona

  • Habiendo conseguido una versión orientada a objetos, con alta cohesión, bajo acoplamiento, SOLID etc etc etc...

El equipo que antes considere que tiene una versión suficientemente buena gana esta parte, siempre que consiga convencer al resto de participantes :)

Tercera fase

Compartimos learnings, estrategias, y lo que veamos que puede tener valor para el resto de personas.

kata.compliance.dictionary's People

Contributors

ziggybcn avatar manelvoxel avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.