012
18.06.2004, 19:57 Uhr
0xdeadbeef
Gott (Operator)
|
Ha! Einen hab ich noch oben drauf:
C++: |
#include <iostream> #include <string>
#include <boost/spirit/core.hpp> #include <boost/spirit/utility/confix.hpp> #include <boost/spirit/utility/escape_char.hpp>
void char_to_cout(char c) { std::cout.put(c); } void seq_to_cout(const char *b, const char *e) { while(b != e) std::cout.put(*b++); }
int main() { std::string s;
while(std::cin) s += fin.get(); boost::spirit::parse(s.c_str(), *(boost::spirit::confix_p('"', *boost::spirit::c_escape_ch_p, '"')[&seq_to_cout] | boost::spirit::comment_p("/*", "*/") | boost::spirit::comment_p("//") | boost::spirit::anychar_p[&char_to_cout])); }
|
5 Semikolons, 5 Kommas. Liest von stdin. Ich schätze, kürzer wirds nicht - hab ich jetzt gewonnen? Whitespaces rausgenommen gibt das 564 Zeichen - das ist schon fast C-Golf...
Wenn ich namespaces und kürzere Namen benutze, komm ich auf 445 Zeichen. Wobei...wenn ich mich recht entsinne, hatten wir für Golf
C++: |
#include <iostream> using namespace std;
|
schon vorausgesetzt - dann sind es 404:
C++: |
#include <string> #include <boost/spirit/core.hpp> #include <boost/spirit/utility/confix.hpp> #include <boost/spirit/utility/escape_char.hpp> using namespace boost::spirit;void x(char c){cout<<c;}void y(const char*b,const char*e){while(b-e)cout<<*b++;}int main(){string s; while(cin)s+=cin.get();parse(s.c_str(),*(confix_p('"',*c_escape_ch_p,'"')[&y]|comment_p("/*","*/")|comment_p("//")|anychar_p[&x]));}
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 18.06.2004 um 21:01 Uhr von 0xdeadbeef editiert. |