クãƒã‚»ã¯è¶…一æµã®è…•ã‚’æŒã£ãŸãƒãƒˆãƒ«ãƒ—ãƒã‚°ãƒ©ãƒžãƒ¼ã§ã‚り,プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã‚³ãƒ³ãƒ†ã‚¹ãƒˆç•Œéšˆã§ãã®åを知らã¬è€…ã¯ã„ãªã„. アルゴリズム,データマイニング,ãƒãƒƒã‚ング,AI,……ã‚ã‚Šã¨ã‚らゆる大会をç·ãªã‚ã«ã—ã¦ããŸï¼Ž ãã‚“ãªã‚¯ãƒã‚»ãŒæ¬¡ã®ç›®æ¨™ã«æ®ãˆãŸç«¶æŠ€ã¯ï¼Œã€Œã‚³ãƒ¼ãƒ‰ã‚´ãƒ«ãƒ•ã€ã§ã‚る.
コードゴルフã¨ã¯ï¼Œä¸Žãˆã‚‰ã‚ŒãŸå•é¡Œã«å¯¾ã—æ£ç”ã‚’è¿”ã™ãƒ—ãƒã‚°ãƒ©ãƒ ã®ã€Œã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®çŸã•ã€ã‚’競ã†ç«¶æŠ€ã§ã‚る. コードゴルフã«ãŠã„ã¦ã¯ï¼Œç•°ãªã‚‹ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžé–“ã§å…¬å¹³ãªæ¯”較ãŒé›£ã—ã„ãŸã‚,使用言語ãŒé™å®šã•ã‚Œã‚‹ã“ã¨ãŒå¤šã„. クãƒã‚»ãŒæ¬¡ã«ç‹™ã£ã¦ã„る大会「ICPC (International Competition of Program Compactness)ã€ã§ã¯ï¼Œ 「AJAGOLã€ã¨å‘¼ã°ã‚Œã‚‹ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã®ã¿ãŒä½¿ç”¨ã§ãるルールã¨ãªã£ã¦ã„る. コードを1ãƒã‚¤ãƒˆã§ã‚‚çŸãã™ã‚‹ãŸã‚,クãƒã‚»ãŒåˆã‚ã«æ³¨ç›®ã—ãŸã®ã¯ï¼Œã€Œå®šæ•°å®£è¨€ã€ã®çŸç¸®ã ã£ãŸï¼Ž
AJAGOLã¯ã„ã«ã—ãˆã®36bitアーã‚テクãƒãƒ£ã«æœ€é©åŒ–ã—ã¦è¨è¨ˆã•ã‚ŒãŸä¼çµ±ã‚る言語ã§ã‚る. 整数を表ç¾ã™ã‚‹ãŸã‚ã«36bit符å·ç„¡ã—æ•´æ•°åž‹ãŒç”¨æ„ã•ã‚Œã¦ãŠã‚Šï¼Œ0 以上 236−1 以下ã®æ•´æ•°ã‚’扱ã†ã“ã¨ãŒã§ãる. ã•ã¦ï¼ŒAJAGOLã®å®šæ•°ã¯é€šå¸¸ï¼Œæ•°å—[0-9]ã‚’ä»»æ„ã®å€‹æ•°ç”¨ã„ãŸå進数ã§å®£è¨€ã•ã‚Œã‚‹ï¼Ž ã¾ãŸï¼Œæ¼”ç®—åã¨ã—ã¦ä»¥ä¸‹ã®è¡¨ã®æ¼”ç®—åを用ã„ã‚‹ã“ã¨ãŒã§ãる.
å„ªå…ˆé †ä½ | 演算å | çµåˆæ€§ | æ„味 |
---|---|---|---|
1 | ( , ) | - | 括弧 |
2 | ^ | å³çµåˆ | 冪乗: a^b := ab |
3 | * | å·¦çµåˆ | ä¹—ç®—: a*b := a×b |
3 | / | å·¦çµåˆ | 除算: a/b := ⌊a÷b⌋ |
4 | + | å·¦çµåˆ | åŠ ç®—: a+b := a+b |
4 | - | å·¦çµåˆ | 減算: a-b := a−b |
ã“ã“ã§ï¼Œå„ªå…ˆé †ä½ã®å€¤ãŒå°ã•ã„演算ã»ã©å„ªå…ˆçš„ã«è¨ˆç®—ã•ã‚Œï¼ŒåŒã˜å€¤ã®ã¨ãã«ã¯çµåˆæ€§ã«å¾“ã£ãŸé †åºã§è¨ˆç®—ã•ã‚Œã‚‹ï¼Ž 例ãˆã° "2^2^3+8/3*2" ã¨ã„ã†è¨ˆç®—å¼ã¯ï¼Œ2^2^3+8/3*2 = 2^8+8/3*2 = 256+8/3*2 = 256+2*2 = 256+4 = 260 ã¨ã„ã†é †åºã§è¨ˆç®—ã•ã‚Œã‚‹ï¼Ž ã¾ãŸï¼Œæ¼”算途ä¸ã®å€¤ãŒ [0,236−1] ã«åŽã¾ã‚‰ãªã„計算やゼãƒé™¤ç®—,ゼãƒã®ã‚¼ãƒä¹—ã¯ï¼ŒAJAGOLã§ã¯å®Ÿè¡Œæ™‚エラーã¨ãªã‚‹ãŸã‚é¿ã‘ã‚‹å¿…è¦ãŒã‚る. 例ãˆã° "2^36-100","1111/0","(2-2)^0" ãªã©ã¯å®Ÿè¡Œæ™‚エラーã¨ãªã‚‹ï¼Ž
超一æµã®ãƒãƒˆãƒ«ãƒ—ãƒã‚°ãƒ©ãƒžãƒ¼ã§ã‚るクãƒã‚»ã¯ï¼Œã“れらã®æ¼”ç®—åを用ã„ã‚‹ã“ã¨ã«ã‚ˆã‚Šï¼Œé€šå¸¸ã‚ˆã‚Šã‚‚çŸã„定数宣言ãŒå¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’見抜ã„ãŸï¼Ž 例ãˆã°ï¼Œ117649ã¯è¨€ã‚ãšã¨çŸ¥ã‚ŒãŸ 76 ã§ã‚ã‚‹ãŒï¼ŒAJAGOLã®å†ªä¹—演算åを用ã„ã‚‹ã“ã¨ã§ "7^6" ã¨3ãƒã‚¤ãƒˆã§æ›¸ãã“ã¨ãŒã§ãる. ã“ã‚Œã¯é€šå¸¸ã® "117649" ã¨ã„ã†å®£è¨€ã§å¿…è¦ã¨ãªã‚‹6ãƒã‚¤ãƒˆã‚ˆã‚Šã‚‚3ãƒã‚¤ãƒˆçŸã„. よã£ã¦ï¼ŒAJAGOLã«ã‚ˆã‚‹ã‚³ãƒ¼ãƒ‰ã‚´ãƒ«ãƒ•ã§ã¯ï¼Œ117649を定数ã¨ã—ã¦ç”¨ã„ãŸã„å ´åˆã«ã¯ "7^6" ã¨å®£è¨€ã™ã‚‹ã®ãŒåŸºæœ¬ã¨ãªã‚‹ï¼Ž
定数宣言ã®çŸç¸®ã¯ã‚³ãƒ¼ãƒ‰ã‚´ãƒ«ãƒ•ã«ãŠã„ã¦æœ€ã‚‚基本的ãªãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã®1ã¤ã§ã‚ã‚‹ãŒï¼Œã‚ãã¾ã§å°æ‰‹å…ˆã®ãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã¨ã‚‚言ãˆã‚‹ï¼Ž ã“ã®ã‚ˆã†ãªã¨ã“ã‚ã«å¤šå¤§ãªæ™‚間を掛ã‘ã¦ã„ã¦ã¯ï¼Œæœ¬è³ªçš„ãªã‚³ãƒ¼ãƒ‰ã®çŸç¸®ã«æ™‚間を割ã‘ãªããªã£ã¦ã—ã¾ã†ï¼Ž ãã“ã§ã‚¯ãƒã‚»ã¯ï¼Œéžè² æ•´æ•°ã‚’å進数ã§å…¥åŠ›ã—ãŸã¨ã,ãれを表ç¾ã™ã‚‹AJAGOL定数宣言ã¨ã—ã¦æœ€ã‚‚çŸã„ã‚‚ã®ã‚’調ã¹ã‚‹ã“ã¨ã«ã—ãŸï¼Ž
入力ã¯è¤‡æ•°ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒƒãƒˆã‹ã‚‰ãªã‚‹ï¼Ž å„データセットã¯æ•´æ•° N (0≤N≤236−1) ã‚’å«ã‚€1è¡Œã§ä¸Žãˆã‚‰ã‚Œã‚‹ï¼Ž 入力ã®çµ‚了㯠−1 ã®ã¿ã‚’å«ã‚€1è¡Œã§è¡¨ã•ã‚Œã‚‹ï¼Ž
å„データセットã«å¯¾ã—,与ãˆã‚‰ã‚ŒãŸæ•´æ•° N を表ç¾ã™ã‚‹æœ€ã‚‚çŸã„AJAGOL定数宣言ã®é•·ã•ã‚’1è¡Œã§å‡ºåŠ›ã›ã‚ˆï¼Ž
117649 1 125000 1610612736 68719476636 -1
3 1 4 6 11