Most devolving

もっとも退化的

受賞者:Philip Blakely

引用元:https://www.ioccc.org/2011/blakely/blakely.c

審査員・作者による説明:https://www.ioccc.org/2011/blakely/hint.html

動作

基本的な動作はライフゲーム

$ cat glider
         
         
         
         
    ##   
    # #  
    #    
         
         

$ gcc -Do=char -Dn=return -Dd=int -Dz=memset -Dk=sizeof -include stdio.h -include string.h -include unistd.h -o blakely blakely.c

$ ./blakely < glider
---------




    ##
    # #
    #


---------




    ##
   ##
     #


---------




   ###
   #
    #


---------



    #
   ##
   # #



---------



   ##
   # #
   #



...

何かコマンドライン引数を指定すると、指定された状態になる直前の状態を逆計算していくモードになる。

$ ./blakely - < glider
---------




    ##
    # #
    #


---------




     #
    ##
    # #


---------





    ###
    #
       #

ソースコードをライフゲームの状態として順方向にシミュレーションすると、4世代進んだところで円周率になる。

$ ./blakely < blakely.c
------------------------------------------------------------
# ####### #################### ### ########################
####  #   #  ##############################################
#      #     ####### # # # ####### # # # # ##### # # # # ##
#         #                 # # #         # # # #
#  # #  # #     #
####### #            #  # #         ##       #     #  # #
#  #  ##  #  ##   ## # ## #  #   #  ### #  #    ## # ## #
#     #      ### #     ##      ### # #  #      #     ##
#  #  ## # #       #      #      ##     ##  #    #      #
#  ###                 ## #       ## # ###           ## #
#    ## #  #   #  ##  #      ##    # #  #       ##  #
# # #                   ##        # #### # #          ##  #
      ##    # #             # #     ####
#       #                          # ## #   # # # # # ##  #
### #     # # ### # # # # ### # #            #######
# ## #     ########## #### #####           #### # # ##
### #       ## ###  # # ####### # #              #     ##
             # ###       # # #          #   ##            #
#         #               #        # ####           #     #
#    ## # #           #           #    #   ##     # # #
##   #  #    ##    #  #  #      #   #  # #        #
   ## #          # # #   #       #     #       # # ###   ##
    #    ##       #    #          #   ###     # ## ##   ###
##     #       #   ##  ##   #  # # ##  #        #
#  # ### # #   #  # # ## #       ###  ###       #   ###
       ##           #    #      #    # # #          ##
   # #     #   #      ##     #   #            # # #####
#                # #                                ## #
##    # # # # #  ##  #    # # # # # # # # ##  #
## #   ############# # #######################          # #
###   ### # # ########### ########### # #   ###          ##
## #            ## # # #   ####### #                    #
                             ####             #      #
##        #   #          #     ##       #          # #
 #   ## # #       # #  # #         ## # #      # #      #
#    #  #     # ###### #    # #    #  #    #    #  #  ##
#  ## #           #  ##  #  #    ## #          ###   ####
#   #    ##          #            #    ##  #   ## #    # #
##     #       #  #  ## # #   ##     #       #  ### #  #
#  # ### # #   #  ###            # ### # #      ##  # # #
#      ##           ## #  #  #       ##          #  #
#  # #     #     # #             # #     #            ##
#                    ##                           #       #
#       # #                 # #       #     # #           #
   # # ##### # # # #     # ##### # #       ### # # #
  ###### ######### ## #############################   #   #
  ### ################## ################# #######        #
#### #  #  # #   #  #        # # # ##  # # # # #   #      #
###                           #                        #
#       #         #    # #            #         # #  # #
     #  #  #       #  #  #   ###   #  #  #    ###### #    #
#  # # #   #  ## #   # #    ##   # # #   #      #  ##  #  #
#   #    #       # #  ##  #       #    #           #
##   ##  ##           #            ##  ##       #  ## # #
#   # # ## #      ## ### ##  ##   # # ## #      ###
      #    #          #             #    #        ## #  #
#       ##        # #  #        ###   ##       # #        #
#           # # #         #                        ##   ###
##          ## #     #                      #             #
##### ################################################## ##
------------------------------------------------------------
 #           ############################################
  #          #       # # #         # # # #       # # # #  #
  #          #       # # #         # # #           # # #  #
         #    #   #        ## # ##        # # # #
   # ###                                     #
        #           # ###           # #           # ###
   #         # #  # #            ###  ##        # #
     #  # # ## #   ## ###          # ## #        ## ###
   #  ##      #                       #
   #    # #       ##   # #       # #  ##        ##   # #
      #                                   #
                              #
       #                                             #
       #   #  #             #  #              # # #
 ## #       #     # # # # #   #            #          #
     #              # #         ##          #       #
 ## #      #        # #                    #  #  #
            ## # #      #    ##       # #                #
         #      #         #           # #  # #     # #
     ###                           ###               #
         #        # ###          #    ##         ##
   ##    #         ## # #        #             # #   #  # #
   ###            #   ##        ####  # #        # # #  # #
    ## # #        # ##          ##  ##          #  #     #
                    # ## #       # # #              # #
     # ## #        #            #      #       # #

           #    ##    #      #   #             #
  #     # # # #       # # # # # # # # # #    #
##                                                        #
## #  #   # #                         # # #   #         # #
 #     #           # # ## #        ##         #          #
  #                                                 #
         #              #       #      #            #
     ###       #  # ###        #   ###          # # # ##
         #             #     #         #          #  #
   ##    #        #          #   ##    #          #  #
   ###              #  # #       ###          #   ## #
    ## # #        #  ##           ## # #          #  ###
                  #    # #    #                     #  #
     # ## #          #             # ## #       ##    #


       ## ##               ## ##           ## #   #
  ## #       # # # ##  # #       # #    ##       #

                                                         ##
     ## #  # # # #  # #   ##     #     # # # # #
 # #                          #                       #
                        #    # #                # ###
    # ###         #   ##    ###   # ###              #
     ## # #     #   ## ##   ##     ## # #       #
    #   ##      # #  # #          #   ##          #  # #
    # ##           ##   ###       # ##          #  ##
      # ## #         # #            # ## #      #    # #
     #            # #   #         #                #
                                 #                      # #
            # ##                 #                        #
            ####                                          #

------------------------------------------------------------

                                        #         #
             ##           #       #     #         #
      #                                      #
      ###              #                     #       #
    # ##           # # #          ## ###         # # #
         #  ##      #             ##              #
    # ##    ## #   ### #           ###           ### #
    # ###  # ##   # # #           # #           # # #
      #                               ##




                   #   #       ##
    ##              # #                    ##
            #          #
            #   #                           #
      #         #                   # #             #
      # #            #              ##            # #
    ### #           # ##          # ###         ###
   # #            # #                 #          #  #
      # #         #   ##           ###           #      # #
   # ##             #   #            ##           ## #   #
    ## # #          # #          ##  ##         #

                                                #
           #           #     #   #
           #           #     #   #
 #       #   #                       #   #               #
##                                                        #
 #                                                       #
                       ###
      #              #              #               #
      # #            ###            # #          #  # #
    ### #          # ##       #   ### #           # ##
   # #                  #        # #             ##  ##
      # #          # ##             # #          ### #
   # ##            # ###         # ##             #  # #
    ## # #           #            ## # #         #     #








                              #                    #
       #               #    #  #     #             ###
      # ##           ##             # ##         # ##
    # #            ###  #   # #   # #                 #
    #   ##       #   # #          #   ##         # ##
      #   #        ### ###          #   #        # ###
      # #            # #            # #            #

                                 ##                      #
            #  #                                          #
            #  #
             ##
------------------------------------------------------------



      #
        #             #               #             #
     ##             # #           ### #           # #
        #   ###
      #    #          #              #              #
        #    ##     # #             # #           # #
     ##





                      ##
                                           ##

       #                            #              #
      #              ##                           #
    # #            ## #            ## #         # #
                                      #
      ##             # #            #            # ##    #
        #          #  #           ##             ##      #
    ##               #               ##



          # #

###                                                      ##
                        #
                        #
       #             #               #               #
      #                #            #               #
    # #             ##            # #             # #
                       #                              #
      ##             #              ##             # #
        #              #              #            ##
    ##              ##            ##                  #








                                                   #
       ##             #              ##              #
     ## #            ###     #     ## #           ##
                       #                             #
       # #        #    # #           # #           #
     #  #            # #           #  #              #
       #             # #             #            ##





------------------------------------------------------------




     ###             #             # #             #
       #     #       #             # #             #
     ###    ##       #             ###             #
       #             #               #             #
     ###             #               #             #










     ###            ###            ###           ###
     #              # #              #           #
     ###            ###            ##            ###
       #              #            #             # #
     ###            ###            ###           ###










     ###            ###            ###             ###
     #                #            #               # #
     ###            ###            ###             ###
       #              #              #             # #
     ###            ###            ###             ###










      ###            ###            ###           ###
      # #            # #            # #             #
      ###              #            ###           ###
        #              #              #             #
      ###              #            ###           ###







解説

入力する初期状態は正方形である必要がある。 スペースが空きセル、改行は行の区切り、それ以外の文字は生きているセルとして扱われる。

逆方向に計算するのは基本的にブルートフォースとのこと。

コード形状は動作で示した通り、4世代後に円周率を生成するライフゲームの配置になっている。 60x60で計算するのは無理なので、数字ごとに16個のパーツに分割し、それぞれに逆計算をして結合したとのこと。 ただしそれだけでは文字の数が足りないので、実行直後に死ぬ部分をたくさん入れてどうにか詰め込んだらしい。

賞名のdevolvingは「譲り渡す」という意味だが、ここではevolving(進化する)の反対という意味で使っている洒落。