If the assignment is flexible regarding the current capability on the input signal(s), then I suggest researching a little about "open-collector" gates, as a starting point.
Normally, we're accustomed to logic gates having voltage rails that are separate from the inputs and outputs; and normally inputs have very high input impedance, and outputs have low impedance. But you might want to ignore that for this exercise. If impedance/current requirements are laxed, than this is separation is not always necessary.
As a matter of fact, it is possible to build at least one of your logic gates with a single LED*, using this open-collector [like] scheme. (Following the same idea with the emitter will create yet a different type of gate.) You may not be able to build all types of logic gates with just LEDs alone, but you can build at least a couple of them.
*(If the output state is indicated by the LED lighting up or not)
I'll let you figure out how many types can be built.
[Edit: It also can make a big difference depending on what your inputs representations are. For example, if input state '1' is represented by Vcc; and input '0' by "no-connection" allows for different opportunities than '1' being Vcc and '0' being GND (0 V).]