Python icon indicating copy to clipboard operation
Python copied to clipboard

Concatenate/consolidate all algorithms with different implementations

Open CaedenPH opened this issue 2 years ago • 20 comments

Feature description

There are lots of algorithms with the same concept but different implementations/methods in different files. All these should be moved into one file

CaedenPH avatar Jan 25 '23 19:01 CaedenPH

hello sir Can I take this issue.

mahak-dev avatar Mar 29 '23 19:03 mahak-dev

@CaedenPH Please assign this task to me.

dev-soni-07 avatar Oct 01 '23 06:10 dev-soni-07

@digital-dev-07 Read the contributing guidelines.

If you are interested in resolving an open issue, simply make a pull request with your proposed fix. We do not assign issues in this repo so please do not ask for permission to work on an issue.

tianyizheng02 avatar Oct 01 '23 06:10 tianyizheng02

!assign

Rishikesh63 avatar Oct 03 '23 09:10 Rishikesh63

!assign

Please read the contributing guidelines. We do not assign issues in this repository. Instead open a new pull request and add Fixes: #8098 to the description.

chriso345 avatar Oct 03 '23 09:10 chriso345

Please assign this issue to me. I want to contribute.

anasadh avatar Oct 05 '23 12:10 anasadh

i want to contribute, may someone guide me bit of the process in it

Pranjal-231003 avatar Oct 07 '23 16:10 Pranjal-231003

@Pranjal-231003 The issue here is that some algorithms have multiple implementations, and these implementations are often scattered across multiple files. Sometimes these files will have very different names or will be scattered across multiple directories. This is a problem because it makes it harder for users to compare implementations and harder for contributors to figure out whether an algorithm is in the repo or not. We want to put different implementations of the same algorithm into a single file so that it's all in one place.

For example, this repo used to have factorial_recursive.py and factorial_iterative.py. We combined them into a single file factorial.py, and this file contains both the recursive implementation and the iterative implementation. This is the work that we're asking contributors to do for this issue.

If you want to contribute to solving this issue, look around the codebase and find an algorithm that's implemented by multiple files. Choose one of those files to keep, and copy the code from the other files into this main file. You may need to rename the file or rename some functions when you do this. Once you're done with that and you've confirmed that everything still works, please open a PR and one of us maintainers will get around to reviewing it eventually.

tianyizheng02 avatar Oct 07 '23 19:10 tianyizheng02

I am planning to work on this issue but I am having trouble creating a branch. Could you please help me understand?

adesh1998 avatar Nov 04 '23 00:11 adesh1998

The trick is to always create pull requests on a branch other than master.

  1. Go to https://github.com/adesh1998/Python and click the Sync fork button so your master is up-to-date
  2. Go to https://github.com/adesh1998/Python/branches and click the New branch button at the upper-right and give the branch a name that makes it clear what the intended change is.

If step 1. is not done before step 2. then previous edits can creep in.

cclauss avatar Nov 04 '23 11:11 cclauss

Let's be super careful about deleting the hard work of other people.

  • https://github.com/TheAlgorithms/Python/pull/11142#issuecomment-1793667097

cclauss avatar Nov 05 '23 09:11 cclauss

#EDIT:

This post seems to be this user's only contribution to GitHub -- https://github.com/excellentpu

@CaedenPH Based on your needs, I understand that you want to understand how to connect or merge all algorithms using different implementation methods. Here are some possible methods:

Use module import: In Python, different algorithms can be imported in the form of modules. Create a main file (such as main.py), and then import functions or classes from maths/primelib.py. In this way, all algorithms can be called and managed in a central location.

main.py

from maths.primelib import function1, function2, ...

result1 = function1()
result2 = function2()

Create a collection of algorithm classes: You can create a main class that instantiates and manages all other classes containing algorithms. In this way, all algorithms can be accessed through this main class.

main_class.py

from maths.primelib import AlgorithmClass1, AlgorithmClass2, ...

class MainAlgorithmClass:
    def init(self):
        self.algo1 = AlgorithmClass1()
        self.algo2 = AlgorithmClass2()

    def execute_algo1(self):
        return self.algo1.function()

    def execute_algo2(self):
        return self.algo2.function()

Using the plugin architecture: For more complex situations, you can consider using a plugin architecture. This typically involves defining a set of interfaces, and then each algorithm implements these interfaces. The main program dynamically loads these plugins (algorithms) at runtime. This approach is more flexible, but it is also more complex to implement.

excellentpu avatar Nov 26 '23 14:11 excellentpu