fork download
  1. import std.stdio;
  2. import std.functional;
  3. import std.conv;
  4. import std.range;
  5. import std.algorithm;
  6.  
  7. string[] generateGrayCodes(int length)
  8. {
  9. if(length == 1)
  10. return ["0", "1"];
  11. return memoize!generateGrayCodes(length - 1)
  12. .map!(gray => "0" ~ gray)
  13. .chain(memoize!generateGrayCodes(length - 1)
  14. .retro
  15. .map!(gray => "1" ~ gray)
  16. ).array;
  17. }
  18.  
  19. void main()
  20. {
  21. foreach(n; stdin.byLine.map!(to!int))
  22. n.generateGrayCodes.writeln;
  23. }
Success #stdin #stdout 0s 14968KB
stdin
3
stdout
["000", "001", "011", "010", "110", "111", "101", "100"]