åé¡ã解ãããæ¹åã注æï¼ãã¿ãã¬ãå«ã¿ã¾ãã
RubyKaigiã§æ¼é£¯ãåå¸ããæ¹ã«æãã¦ããã ããããªãã©ã¤ã³ãªã¢ã«ã¿ã¤ã ã©ãæ¸ããã«åå ãã¦ãã¾ããã1æéã§èª²é¡ã®åé¡ã解ãã¦ããã®è§£èª¬ããããã¨ããã¤ãã³ãã§ããããã°ã©ãã³ã°ã³ã³ãã¹ãã®TLE/MLE*1ãæ°ã«ããªãã¦ããçãã¨ãã£ãæãã
ä»åã®åé¡ã¯ãã¡ãï¼mtsmfm blog - オフラインリアルタイムどう書く E08 の問題 - 白黒陣取りゲーム
ç§ã®è§£ç
è¨èªã¯åé¡ãè¦ãã¾ã§ã¯Elixirã§è§£ããã¨æã£ã¦ããã®ã§ãã2åãããåé¡ãè¦ã¦ããã¯ãã¡ã ã¨å¤æãRubyã§è§£ãããæçµçãªã³ã¼ãã®è¦ãç®ã¯ä»ã®Rubyã§è§£ãã人ã¨ã¯ããªãéã£ã¦ããï¼å ·ä½çã«ããã¨eachã§åãã¦å¤ã«ç¨æããã¡ã¢ãªã«æ¸ãè¾¼ãã¹ã¿ã¤ã«vsé åã«mapã¨ããç¹°ãè¿ãã¹ã¿ã¤ã«ï¼ã
解説
å ¥åã®ãã¼ã¹
30è¡ç®ãããã«ãããã¾ããå ¥åãã«ã³ãã§2ã¤ã®æååã«åãããããããæååâé åã«mapãã¾ãããã®éã«æ£è¦è¡¨ç¾ã§åç¹ãã¨ã®æååã«åãããããã¾ãå é¨ã§x座æ¨ã»y座æ¨ãæã¤Hashã«å¤æãã¦ãã¾ãã
é·æ¹å½¢ã®å½¢æãã§ãã¯
22è¡ç®ã¨ããã®ä¸ã«åºã¦ããis_rect?
ã該å½ã³ã¼ãã
is_rect?
ã¯2ç¹ã¨åãè²ã®ç¹ã®é
åãå¼æ°ã¨ããé¢æ°ã§ã
- pt1ã®x座æ¨ã¨pt2ã®y座æ¨ãæã¤ç¹ãåãè²ã®ç¹ã®é åå ã«åå¨ãã
- pt1ã®y座æ¨ã¨pt2ã®x座æ¨ãæã¤ç¹ãåãè²ã®ç¹ã®é åå ã«åå¨ãã
- pt1ã¯pt2ãããå·¦ä¸ã«åå¨ããï¼pt1ã®xã»y座æ¨ã¯ããããpt2ã®ãããããå°ããï¼
â¦ã¨ããæ¡ä»¶ã§ããpt1ã»pt2ã対è§ç·ã¨ããé·æ¹å½¢ããçæã§ãããã©ããã®ãã§ãã¯ãè¡ãã¾ãããé·æ¹å½¢ãã¯ãå·¦ä¸-å³ä¸ã®å¯¾è§ç·ãã¨1対1ã«å¯¾å¿ããã®ã§ãããã«ããé·æ¹å½¢ã®æ°ãè½ã¨ãã»éè¤ã¯çãã¾ããï¼æå¾ã®æ¡ä»¶ãè½ã¨ãã¨ãã®éãã§ã¯ãªãï¼ã
ããããèªåã®è²ã®ç¹åãã2ã¤ã®ç¹ã®çµã¿åããï¼combination(2)
ã§å¾ãï¼ã«å¯¾ãã¦å®è¡ãããã¨ã§èªåã®è²ã®ç¹åä¸ã«åå¨ããé·æ¹å½¢ã®ä¸è¦§ãå¾ããã¨ãã§ãã¾ãã
ãã®ä¸ã«ç¸æã®è²ãå«ããã©ããã®ãã§ãã¯
23è¡ç®ã¨is_valid_rect?
ã該å½ã³ã¼ãã
is_valid_rect?
ã¯2ç¹ã¨ç¸æã®è²ã®ç¹ã®é
åãå¼æ°ã¨ããé¢æ°ã§ãç¸æã®è²ã®é
åã«
- (å·¦ä¸ã®x座æ¨) =< (ç¹ã®x座æ¨) =< (å³ä¸ã®x座æ¨)
- (å·¦ä¸ã®y座æ¨) =< (ç¹ã®y座æ¨) =< (å³ä¸ã®y座æ¨)
- ã¤ã¾ããã辺ä¸ãããã¯å é¨ã«å«ã¾ããããããªç¹
ãåå¨ããªããã¨ã確èªãã¾ãã
ããã22è¡ç®ã§å¾ãããé·æ¹å½¢ã®ä¸è¦§ã«å¯¾ãã¦filterï¼Rubyã ã¨filterãããªãã¦selectãªãã â¦ï¼ãããã¨ã§é¢ç©ã®è¨ç®å¯¾è±¡ã«ãªãé·æ¹å½¢ã®ã¿ãæ®ãã¾ãã
é¢ç©ã®ã«ã¦ã³ã
ãã¦ãæåã¯é¢ç©è¨ç®ã§ãããã¨ããã®ã§ããï¼24ã25è¡ç®ã9ã11è¡ç®ï¼ãããã¯å®è¡ããã¨ããåé¡ãããã¾ãããéè¤ããé åãäºéã«è¨ç®ãã¦ãã¾ãã®ã§ãã
ããã§ããé¢ç©1ã®æ£æ¹å½¢ãããå·¦ä¸ã®æ ¼åç¹ãã«å¯¾å¿ã¥ãã¦æ°ãããã¨ã§ãéè¤ããæ ¼åç¹ãæ°ããªãããã«ããã°éè¤ããã«ã«ã¦ã³ããããã¨ãã§ãã¾ããæ ¼åç¹ã®åæã13ã19è¡ç®ããã®åãåå¾ããå¾ã«uniqãã¦countãã¦ããã®ã26è¡ç®ã
â¦ä»¥ä¸ããç½ã¨é»ããããã«å¯¾ãã¦è¡ãã¨ä»åã®åé¡ã®è§£çãå¾ããã¾ãã
å®éã©ããããããã£ãã
- éè¤ããã®é¢ç©è¨ç®ã¾ã§ï¼35å
- éè¤ã®é¤å»ã«æ°ã¥ãã¦é¢ç©ã対å¿ã¥ãã¦æ£è§£ãå¾ãã¾ã§ï¼50å
Erlang/Elixirã§è§£ãå ´åãListã«å¯¾ããcombinationãèªåã§å®è£
ããå¿
è¦ãããã¾ããnone?
ã¯all?
(Erlangã®all
)ã®å転ãinclude?
ã¯member?
(Erlangã®member
)ããããmap
ã¨flat_map
ã¨filter
ã¯é¢æ°åããã°ã©ãã³ã°ã§ã§ããªãã£ããå°ãã®ã§æ®ãã¯è§£ããã®ã§ã¯ï¼ã¨ãã£ãã¨ããã§ãã
â¦ã¨ããããã§ç§»æ¤ãããcombinationã ããªãã¨ãããã°è§£ãããã¨ã¯ç¢ºèªããã ãã£ã±ãElixirã¯ããã§ããâ¦ãã£ã¡ã®ã»ããå®è¡é度éããï¼å¾®å¦ãªå·®ã ãâ¦ï¼ãä½ããã¿ãã«ããããããã§x座æ¨ã»y座æ¨ãåãåºãã¨ãããã·ã³ãã«ã«æ¸ãã¦ããã®ãã§ããã
*1:Time Limit Exceeded/Memory Limit Exceededã®ãã¨