fork download
  1. import re
  2.  
  3. for item in (lambda n: (re.sub(r"""
  4. (?:
  5. \t*
  6. (?:(?:(?:\\.|[_a-zA-Z!&|^#@$])(?:\\.|[_.:a-zA-Z!&|^@0-9#])*)\s*)*
  7. (?:(?:\\.|[_a-zA-Z!&|^@])(?:\\.|[_.:a-zA-Z!&|^@0-9])*[\#](?:\\.|[_.:a-zA-Z!&|^@0-9])* | [\#](?:\\.|[_.:a-zA-Z!&|^@0-9])*)
  8. (?:(?:(?:\\.|[_a-zA-Z!&|^#@$])(?:\\.|[_.:a-zA-Z!&|^@0-9#])*)\s*)*
  9. (?: # LEVEL 1 nesting
  10. [\(\[]
  11. (?:(?:(?:\\.|[_a-zA-Z!&|^#@$])(?:\\.|[_.:a-zA-Z!&|^@0-9#])*)\s*)*
  12. (?:(?:\\.|[_a-zA-Z!&|^@])(?:\\.|[_.:a-zA-Z!&|^@0-9])*[\#](?:\\.|[_.:a-zA-Z!&|^@0-9])* | [\#](?:\\.|[_.:a-zA-Z!&|^@0-9])*)
  13. [\)\]]
  14. )*
  15. )
  16. (?P<LINES>
  17. [;]?
  18. \r?\n?
  19. )
  20. """,
  21. lambda m: (", " if not m.group("LINES") else "" if m.group("LINES").find('\n') >= 0 else " ").join(
  22. (lambda s:
  23. (lambda i_fill, i_rev:
  24. (s.replace('#' , str(i)) for i in range(1, 2 + k) ) if i_fill < 0 and i_rev < 0 else
  25. (s.replace('#!', str(i)) for i in reversed(range(1, 2 + k))) if i_fill < 0 and i_rev >= 0 else
  26. ((s[:i_fill] + str(i) if i < 2 + k else s[i_fill + len('##'):])
  27. for i in range(1, n + 1))
  28. )(s.find('##'), s.find('#!'))
  29. )(m.group(0).replace('\\', ''))
  30. ), r"""
  31. template<class T#>
  32. struct tuple<T##void> : base\<#\, T#\>
  33. {
  34. tuple(T# const &a#) : base\<#\, T#\>(a#) { }
  35. template<size_t i> struct g;
  36. template\<\> struct g\<#\>\ \{\ typedef\ base\<#\,\ T#\>\ type\;\ \};
  37. template<size_t i> typename g<i>::type::type &get() { return this->base<i>::get(); }
  38. template<size_t i> typename g<i>::type::type const &get() const { return this->base<i>::get(); }
  39. };
  40. template<class R, class P#>
  41. tuple<P##void> make_tuple(P# a#)
  42. { return tuple<P##void>(a#); }
  43. """, flags=re.VERBOSE) for k in range(n)))(4): print item
Success #stdin #stdout 0.27s 10856KB
stdin
Standard input is empty
stdout
template<class T1>
struct tuple<T1, void, void, void> : base<1, T1> 
{
	tuple(T1 const &a1) : base<1, T1>(a1) { }
	template<size_t i> struct g;
	template<> struct g<1> { typedef base<1, T1> type; };
	template<size_t i> typename g<i>::type::type &get() { return this->base<i>::get(); }
	template<size_t i> typename g<i>::type::type const &get() const { return this->base<i>::get(); }
};
template<class R, class P1>
tuple<P1, void, void, void> make_tuple(P1 a1)
{ return tuple<P1, void, void, void>(a1); }


template<class T1, class T2>
struct tuple<T1, T2, void, void> : base<1, T1>, base<2, T2> 
{
	tuple(T1 const &a1, T2 const &a2) : base<1, T1>(a1), base<2, T2>(a2) { }
	template<size_t i> struct g;
	template<> struct g<1> { typedef base<1, T1> type; };
	template<> struct g<2> { typedef base<2, T2> type; };
	template<size_t i> typename g<i>::type::type &get() { return this->base<i>::get(); }
	template<size_t i> typename g<i>::type::type const &get() const { return this->base<i>::get(); }
};
template<class R, class P1, class P2>
tuple<P1, P2, void, void> make_tuple(P1 a1, P2 a2)
{ return tuple<P1, P2, void, void>(a1, a2); }


template<class T1, class T2, class T3>
struct tuple<T1, T2, T3, void> : base<1, T1>, base<2, T2>, base<3, T3> 
{
	tuple(T1 const &a1, T2 const &a2, T3 const &a3) : base<1, T1>(a1), base<2, T2>(a2), base<3, T3>(a3) { }
	template<size_t i> struct g;
	template<> struct g<1> { typedef base<1, T1> type; };
	template<> struct g<2> { typedef base<2, T2> type; };
	template<> struct g<3> { typedef base<3, T3> type; };
	template<size_t i> typename g<i>::type::type &get() { return this->base<i>::get(); }
	template<size_t i> typename g<i>::type::type const &get() const { return this->base<i>::get(); }
};
template<class R, class P1, class P2, class P3>
tuple<P1, P2, P3, void> make_tuple(P1 a1, P2 a2, P3 a3)
{ return tuple<P1, P2, P3, void>(a1, a2, a3); }


template<class T1, class T2, class T3, class T4>
struct tuple<T1, T2, T3, T4> : base<1, T1>, base<2, T2>, base<3, T3>, base<4, T4> 
{
	tuple(T1 const &a1, T2 const &a2, T3 const &a3, T4 const &a4) : base<1, T1>(a1), base<2, T2>(a2), base<3, T3>(a3), base<4, T4>(a4) { }
	template<size_t i> struct g;
	template<> struct g<1> { typedef base<1, T1> type; };
	template<> struct g<2> { typedef base<2, T2> type; };
	template<> struct g<3> { typedef base<3, T3> type; };
	template<> struct g<4> { typedef base<4, T4> type; };
	template<size_t i> typename g<i>::type::type &get() { return this->base<i>::get(); }
	template<size_t i> typename g<i>::type::type const &get() const { return this->base<i>::get(); }
};
template<class R, class P1, class P2, class P3, class P4>
tuple<P1, P2, P3, P4> make_tuple(P1 a1, P2 a2, P3 a3, P4 a4)
{ return tuple<P1, P2, P3, P4>(a1, a2, a3, a4); }