gpt4 book ai didi

language-agnostic - Code Golf : recognize ascii art boxes

转载 作者:行者123 更新时间:2023-12-03 22:51:04 25 4
gpt4 key购买 nike

不久前在做一些数据结构工作时想到了这个,尽管它会成为一个很好的 Code Golf :给定一个包含 ascii 艺术矩形的二维字符数组,生成一个矩形的坐标和大小列表。

  • 任何可简单转换的输入或输出格式都可以(例如:char**、字符串列表、标准输入行;四个整数列表、结构、大小的固定数量 +/- 等)。
  • 同样,输出不需要按任何特定顺序排列。
  • 对于无效输入或格式错误的矩形,您不需要任何有用的东西,但是您不应该为不在输入中的矩形生成看起来有效的坐标。
  • 没有两个有效的矩形共享 + (尽管 + 可能不仅作为矩形的一部分出现)
  • 你可以假设所有的矩形都至少是 3x3:每边都有一个 -|在里面。

  • 例子:
    "        "
    " +-+ | "
    " | | \-"
    " +-+ "
    (2,1;3,3)

    "+--+ +--+"
    "| | | |"
    "+--+ +--+"
    (0,0;4,3), (6,0;4,3)

    " +---+ "
    "->|...| "
    " +---+ "
    (2,0;5,3)

    "+-+ +--+ +--+"
    "| | | | | |"
    "+-+ | | + -+"
    " | | "
    " +--+ +-+ "
    " +--+ | "
    " +--+ +-+ "
    (0,0;3,3), (4,0;4,5) # (2,5;4,2) is fine, but not needed

    最佳答案

    Perl,167 165 159 个字符

    (156 个字符,如果您不将 slurping stdin 计算到 @a,只需删除最后 3 个字符并将代表您输入的字符串列表分配给 @a)

    从标准输入获取输入。换行不重要,为了可读性而添加。注意 +++ 的使用运算符;P

    map{$l=$i++;while($c=/\+-+\+/g){$w=$+[0]-2-($x=$-[0]);
    $c++while$a[$l+$c]=~/^.{$x}\|.{$w}\|/;
    print"($x,$l;",$w+2,",$c)\n"if$a[$c+++$l]=~/^.{$x}\+-{$w}\+/}}@a=<>

    在您接受的版本中保持自由,170 个字符
    map{$l=$i++;while($c=/\+-*\+/g){pos=-1+pos;$w=$+[0]-2-($x=$-[0]);
    $c++while$a[$l+$c]=~/^.{$x}\|.{$w}\|/;
    print"($x,$l;",$w+2,",$c)\n"if$a[$c+++$l]=~/^.{$x}\+-{$w}\+/}}@a=<>

    在你接受的版本上保持保守,177 个字符
    map{$l=$i++;while($c=/\+-+\+/g){$w=$+[0]-2-($x=$-[0]);
    $c++while$a[$l+$c]=~/^.{$x}\|.{$w}\|/;print
    "($x,$l;",$w+2,",$c)\n"if$c>1&&$a[$c+++$l]=~s/^(.{$x})\+(-{$w})\+/$1v$2v/}}@a=<>

    评论版:
    @a=<>;          # slurp stdin into an array of lines
    $l=0; # start counting lines from zero
    map{ # for each line
    while(/\+-+\+/g){ # match all box tops
    $c=1; # initialize height

    # x coordinate, width of box - sides
    $w=$+[0]-2-($x=$-[0]);

    # increment height while there are inner parts
    # of a box with x and w coinciding with last top
    # (look into next lines of array)
    $c++ while $a[$l+$c]=~/^.{$x}\|.{$w}\|/;

    # if there is a box bottom on line + height
    # with coinciding x and w, print coords
    # (after incrementing height)
    print "($x,$l;",$w+2,",$c)\n"
    if $a[$c+++$l]=~/^.{$x}\+-{$w}\+/
    }
    $l++ # line++
    }@a

    super 测试用例:
    +--+  +-+ +-+  +++   +---+   +-+  +-+-+  +-++-+
    |SO| | | | | +++ |+-+| | | | | | | || |
    +--+ +-+-+-+ +++ ||+|| +-+ +-+-+ +-++-+
    | | |+-+| | |
    +-+-+-+ +---+ +-+
    | | | |
    +-+ +-+


    ++ +-+ ++ +-+ +- + +--+ +--+ +--+
    || +-+ ++ +-+-+ | | | | | | |
    ++ | | | | | | | | |
    +-+ +--+ + -+ +--+ +--+

    关于language-agnostic - Code Golf : recognize ascii art boxes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681841/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com