减少Ascii艺术


10

这个挑战是来自Enlarge ASCII art剪切粘贴,但是使用基于PetSCII半块字符反转了

string=" ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█"

所以,我们的目标是通过减少1/2submited 。对于示例,从字符串中:

 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OO      OOOOOOO 
OO      OO    OO OO   OO OO          OO       OO    OO OO      OO      
OO      OO    OO OO   OO OOOOO       OO   OOO OO    OO OO      OOOOO   
OO      OO    OO OO   OO OO          OO    OO OO    OO OO      OO      
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OOOOOOO OO      

您必须渲染:

 ▟▀▀▘▟▀▀▙▐▛▀▙▐▛▀▀  ▗▛▀▀ ▟▀▀▙▐▌  ▐▛▀▀ 
 █   █  █▐▌ █▐▛▀   ▐▌ ▜▌█  █▐▌  ▐▛▀  
 ▝▀▀▘▝▀▀▘▝▀▀▘▝▀▀▀   ▀▀▀ ▝▀▀▘▝▀▀▀▝▘   

(甚至:

▗▛▀▀▗▛▀▜▖█▀▜▖█▀▀▘  ▟▀▀▘▗▛▀▜▖█   █▀▀▘ 
▐▌  ▐▌ ▐▌█ ▐▌█▀▘   █ ▝█▐▌ ▐▌█   █▀▘  
 ▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀▘  ▝▀▀▘ ▀▀▀ ▀▀▀▘▀    

;-)

或管道:

wget -O - https://codegolf.stackexchange.com/q/19123/9424 |
    sed -ne '/<pre><code>/,/<\/code><\/pre>/{//{/\//q};s/<pre><code>//;p}'
   ('l2v2l6v2'+  'e1l1v3l2'+
 'v3e1v7e1v7e1v7e1l2v6e1l4v5'+
'e1l6v4e1l8v3e1l7l3v2e1l9l3v1')
 .replace(/[lve]\d/g,function
   (c){return Array(-~c[1]).
      join({l:' ',v:'Love'
         ,e:'\n'}[c[0
             ]])})

可以给:

▗▟█████▙▟█████▄
▜█████████████▛▘
 ▝▀███▙▛█████▀ 
    ▝▀▜██▀▘

一些样本:

减少样本

使用(大约)相同的规则:

  • 来自STDIN或文件的输入
  • 每个提交的字符都必须表示,只有空格必须保持
  • 这也是,因此得分最低。得分计算如下:
    • +1通过字符,以字符为单位,而不是以字节为单位,即:s=' ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█'计数20个字符,而不是52
    • -10 供解释;
    • +20 用于使用外部字体工具或库。

因此,需要澄清一下:输入图像分为2x2的正方形,每个都映射到一个字符上?
彼得·泰勒

1
-0.5用于添加奇怪的奖励(定义说明)-在四舍五入后仍然是赞成。同样,这也是代码挑战而不是代码高尔夫。
霍华德

大多数这些字符在我的浏览器中无法正确呈现。:(
Victor Stafusa 2014年

在我的Linux下,我xterm -xrm 'XTerm*renderFont:false' &用来打开一个控制台窗口,以正确显示该窗口。
F. Hauri 2014年

Answers:


4

GolfScript(90个字符)

n/.,1&[""]*+.{,}%$-1=.1&+{1$,-´' '*+}+%2/{zip 2/{~+0\{32=!1$++}/" ▗▝▐▖▄▞▟▘▚▀▜▌▙▛█"3/=}%n}%

其中很多用于处理参差不齐的数组。讨厌的测试用例:

xx
xxx
xxx
xx
x

包含3个不同的2x2网格,这4个单元格中只有一个完全不包含任何字符。

更糟糕的是,将zip列分成两对的换位为和提供相同的输出。因此,我首先进行填充以确保所有行均具有相同的偶数长度,并确保行数为偶数。["xx" "xxx"]zip["xxx" "xx"]zip

请注意,此程序假定解释器会将“▗▖▄▝▐▞▟▘▚▌▙▀▜▛█”视为长度为48的字符串,即使按照问题中的说明,我将其计为16个字符加上定界符。

我已经尽力进行了测试,但是找不到能够正确呈现这些字符的等宽字体。


您的代码似乎在第二次测试中失败了,但真是令人开心!+1(第一)!
F. Hauri 2014年

1
嗯 我不倾向于zip在不整齐的数组上使用它,并且我对它在eg上的作用感到惊讶["##" "###"]。我将不得不重新考虑自己的方法。
彼得·泰勒

Freemono,Unifont,Code2000和Fixedsys Excelsior都可以正确渲染这些字符。
2014年

@ primo,Unifont在这些字符上几乎没有等距。Fixedsys Excelsior也不太正确,但是已经足够接近了。
彼得·泰勒

是! 现在你拥有了!小提示:输出末尾有两个空行。这不违反任何规则!(注意:得分有些变化,您可以节省10分;-)
F. Hauri 2014年

1

Perl 6,159个字符(192个字节)

(|lines.map(*~' '),'')».comb(/../).rotor(2).map:{my@d='  'xx.max(*.elems);say [~] map {"█▛▜▀▙▌▚▘▟▞▐▝▄▖▗ ".comb[:2(.trans([' ',/./]=>~⑩))]},[Z~] .map:{|$_,|@d}}

在线尝试!


解决了我的问题。
bb94


0

重击(203个字符)

#!/bin/bash
r=" ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█";while IFS= read -r m;do IFS= read -r n;for((l=${#m}>${#n}?${#m}:${#n},i=0; i<l; i+=2)){
printf -ve %-2s "${n:i:2}" "${m:i:2}";e=${e//[^ ]/1};o+=${r:2#${e// /0}:1};};echo "$o";o=;done

要么

r=" ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█"
while IFS= read -r m; do
    IFS= read -r n
    for ((l=${#m}>${#n}?${#m}:${#n},i=0; i<l; i+=2)) {
        printf -ve %-2s "${n:i:2}" "${m:i:2}"
        e=${e//[^ ]/1}
        o+=${r:2#${e// /0}:1}
    }
    echo "$o"
    o=
done

0

Perl(268个字符)

#!/usr/bin/perl -CS
use utf8;my $r=" ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█";while(@v=split"",<>){@w=split"",<>;foreach my $i(0..$#v/2){($a,$b,$c,$d)=qw|0 0 0 0|;$a=1if$w[$i*2]=~/\S/;$b=1if$w[$i*2+1]=~/\S/;$c=1if$v[$i*2]=~/\S/;$d=1if$v[$i*2+1]=~/\S/;print substr($r,ord pack("b8",$d.$c.$b.$a),1);};print "\n";};

要么

#!/usr/bin/perl -CS
use utf8;
my $r = " ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█";
while ( @v = split "", <> ) {
    @w = split "", <>;
    foreach my $i ( 0 .. $#v / 2 ) {
        ( $a, $b, $c, $d ) = qw|0 0 0 0|;
        $a = 1 if $w[ $i * 2 ] =~ /\S/;
        $b = 1 if $w[ $i * 2 + 1 ] =~ /\S/;
        $c = 1 if $v[ $i * 2 ] =~ /\S/;
        $d = 1 if $v[ $i * 2 + 1 ] =~ /\S/;
        print substr( $r, ord pack( "b8", $d . $c . $b . $a ), 1 );
    }
    print "\n";
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.