Bã•ã‚“ã¯Brainf*ckãŒå¤§å¥½ãã§ã€å¦æ ¡ã§å‡ºã•ã‚ŒãŸèª²é¡Œã‚‚å…¨ã¦Brainf*ckを使ã£ã¦æ出ã—ã¦ã„る。 最近ãã‚“ãªBã•ã‚“ã«æ´—脳ã•ã‚Œã€å…ˆç”ŸãŒèª²é¡Œã‚’解ã言語をBrainf*ckã«é™å®šã—ã¦ã—ã¾ã£ãŸã€‚
ã“ã®ã¾ã¾ã§ã¯çš†ãŒå˜ä½ã‚’è½ã¨ã—ã¦ã—ã¾ã†ã€‚ ã‚ãªãŸã¯ã€Brainf*ckプãƒã‚°ãƒ©ãƒ を生æˆã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作るã“ã¨ã§ã€çš†ã®å˜ä½ã‚’æ•‘ã„出ã™æ‰‹ä¼ã„ã‚’ã™ã‚‹ã“ã¨ã«ã—ãŸã€‚
ã‚‚ã¡ã‚ã‚“ã€Brainf*ckプãƒã‚°ãƒ©ãƒ を生æˆã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã¯Brainf*ckã§è¨˜è¿°ã™ã‚‹å¿…è¦ã¯ãªã„。
指定ã•ã‚ŒãŸæ–‡å—列sを出力ã™ã‚‹Brainf*ckプãƒã‚°ãƒ©ãƒ を生æˆã›ã‚ˆã€‚
ジャッジã§ç”¨ã„ã‚‹Brainf*ckã®è¨€èªžä»•æ§˜ã‚’記ã™ã€‚
Brainf*ckプãƒã‚°ãƒ©ãƒ ã¯æ–‡å—列ã§è¨˜è¿°ã•ã‚Œã‚‹ã€‚ プãƒã‚°ãƒ©ãƒ æ–‡å—列ã¯è§’括弧([ãŠã‚ˆã³])ã®å¯¾å¿œãŒå–ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚‹ãŒã€ãれ以外ã®åˆ¶é™ã¯ãªã„。
Brainf*ckプãƒã‚°ãƒ©ãƒ ãŒå®Ÿè¡Œã•ã‚Œã‚‹æ™‚ã€ãƒã‚¤ãƒˆé…列ã¨ãã®è¦ç´ を指ã—示ã™ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’æŒã¤ã€‚ãƒã‚¤ãƒˆé…列ã¯ç„¡é™ã®å¤§ãã•ã‚’æŒã¡ã€8bitéžè² æ•´æ•°ã®æƒ…å ±ã‚’ä¿æŒã™ã‚‹ã“ã¨ãŒã§ãる。 ã“れをC言語ã§è¡¨ã™ã¨æ¬¡ã®ã‚ˆã†ã«ãªã‚‹ã€‚
unsigned char memory[100000]; // ãƒã‚¤ãƒˆé…列(実際ã«ã¯ã‚‚ã£ã¨åºƒå¤§ãªé ˜åŸŸã‚’確ä¿ã™ã‚‹ï¼‰ unsigned char *ptr = memory; // ãƒã‚¤ãƒˆé…列ã®è¦ç´ を指ã—示ã™ãƒã‚¤ãƒ³ã‚¿ãƒ¼
Brainf*ckã§ã¯1ã¤ã®å‘½ä»¤ã¯1æ–‡å—ã§è¡¨ã•ã‚Œã€å‘½ä»¤ã«ã¯ä»¥ä¸‹ã®7種類ãŒã‚る。
æ–‡å— | æ„味 | C言語ã§ã®è¨˜è¿°æ³• |
---|---|---|
+ | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®å€¤ã‚’1増やã™ã€‚値ãŒ255ã®æ™‚ã¯0ã«ãªã‚‹ã€‚ | (*ptr)++; |
- | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®å€¤ã‚’1減らã™ã€‚値ãŒ0ã®æ™‚ã¯255ã«ãªã‚‹ã€‚ | (*ptr)--; |
> | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®ä½ç½®ã‚’æ£ã«1ãšã‚‰ã™ã€‚ | ptr++; |
< | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®ä½ç½®ã‚’è² ã«1ãšã‚‰ã™ã€‚ | ptr--; |
[ | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®å€¤ãŒ0ãªã‚‰ã°ã€å¯¾å¿œã™ã‚‹]ã«é£›ã¶ã€‚ãã†ã§ãªã‘ã‚Œã°æ¬¡ã®å‘½ä»¤ã«é€²ã‚€ã€‚ | while(*ptr) { |
] | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®å€¤ãŒ0ãªã‚‰ã°ã€å¯¾å¿œã™ã‚‹[ã«é£›ã¶ã€‚ãã†ã§ãªã‘ã‚Œã°æ¬¡ã®å‘½ä»¤ã«é€²ã‚€ã€‚ | } do while(*ptr); |
. | ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒç¤ºã™ãƒã‚¤ãƒˆé…列ã®è¦ç´ ã®å€¤ã‚’ASCIIコードã¨è¦‹ãªã—ã€æ–‡å—を出力ã™ã‚‹ã€‚ | putchar(*ptr); |
命令ã¯å…ˆé ã‹ã‚‰é †ã«å®Ÿè¡Œã•ã‚Œã€å‘½ä»¤ã‚’表ã™æ–‡å—ã§ã¯ãªã„æ–‡å—ã¯ã‚³ãƒ¡ãƒ³ãƒˆã¨ã—ã¦ç„¡è¦–ã•ã‚Œã‚‹ã€‚
以上ã®Brainf*ckã®ä»•æ§˜ã¯ãŠãŠã‚ˆã一般ã«ä½¿ã‚ã‚Œã¦ã„ã‚‹Brainf*ckã¨åŒæ§˜ãªã‚‚ã®ãªã®ã§ã€http://ja.wikipedia.org/wiki/Brainfuckãªã©ã‚’å‚考ã«ã™ã‚‹ã“ã¨ãŒã§ãる。ãŸã ã—ã€ã‚¸ãƒ£ãƒƒã‚¸ã«ç”¨ã„ã‚‹Brainf*ckã¯ã€ä¸€æ–‡å—入力命令を使用ã™ã‚‹ã“ã¨ã¯ã§ããªã„ã®ã§æ³¨æ„ã™ã‚‹ã“ã¨ã€‚
1è¡Œã«1000æ–‡å—以内ã®æ–‡å—列sãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚
Brainf*ckコードを20000æ–‡å—以内ã§å‡ºåŠ›ã›ã‚ˆã€‚実行çµæžœãŒsã«ä¸€è‡´ã—ãŸä»»æ„ã®ãƒ—ãƒã‚°ãƒ©ãƒ ãŒAcceptã•ã‚Œã‚‹ã€‚
ABC
++++++++[>++++++++<-]>+.+.+.
HelloWorld!!
+++++++++[>++++++++<-]>.<+++++[>+++++<-]>++++.+++++++..+++.[>+>+<<-]++++[>------<-]>.>.+++.-- ----.--------.[-]++++++[>+++++<-]>+++..
入力ã«ç©ºç™½ãŒå«ã¾ã‚Œã‚‹ã“ã¨ã¯ãªã„。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+++++++++++++++++++++++++++++++++.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.
ã“ã®ã‚±ãƒ¼ã‚¹ã¯33ã‹ã‚‰126ã®ASCIIã‚³ãƒ¼ãƒ‰ã‚’é †ç•ªã«ä¸¦ã¹ãŸã‚‚ã®ã§ã‚る。