アスキーアートを減らす


10

この課題は、ペーストcut'nから拡大ASCIIアートが、逆に使用して、PetSCIIベースのハーフブロックの文字を:

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

したがって、目標は、1/2提出されたによって削減することです。サンプルでは、​​文字列から:

 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
             ]])})

与えることができます:

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

いくつかのサンプル:

asciiReduceサンプル

(ほぼ)同じルールで:

  • STDINまたはファイルからの入力
  • 送信された各文字を表す必要があります。空白のみを空にする必要があります
  • これもので、最低のスコアが勝ちます。スコアは次のように計算されます。
    • +1文字単位で、バイト単位ではなく文字単位で数えます。つまり、52文字ではなく20文字をs=' ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█'数えます !!
    • -10 説明のため;
    • +20 外部フォントツールまたはライブラリを使用します。

明確にするために:入力画像は2x2の正方形に分割され、それぞれが1つの文字にマッピングされますか?
Peter Taylor

1
奇妙なボーナスを追加するための-0.5(説明を定義)-まだ賛成票を丸めた後。また、これはコードチャレンジであり、コードゴルフではありません。
ハワード

これらの文字のほとんどは、ブラウザで正しくレンダリングされません。:(
ビクターStafusa 14年

私のLinuxでは、xterm -xrm 'XTerm*renderFont:false' &これを正しく表示できるコンソールウィンドウを開くために使用しています。
F.ハウリ2014年

回答:


4

GolfScript(90文字)

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

これの多くは、不規則な配列の処理に行きます。厄介なテストケース:

xx
xxx
xxx
xx
x

3つの異なる2x2グリッドが含まれ、4つのセルのうち1つだけが文字を含んでいます。

さらに悪いことに、zipペアに列をチョップする転置は、同じ出力できますのために["xx" "xxx"]zip["xxx" "xx"]zip。したがって、最初に、すべての行が同じ長さであり、行数が偶数であることを確認するためにパディングします。

このプログラムは、質問の指示に従ってそれを16文字として数えているにもかかわらず、インタプリタが「▗▖▄▝▐▞▟▘▚▌▙▀▜▛█」を長さ48の文字列として扱うことを想定していることに注意してください。プラス区切り文字。

私はこれをできる限りテストしましたが、実際にこれらの文字を正しく表示するモノスペースフォントが見つかりません。


あなたのコードは心の中で2番目のテストで失敗したようです... あなたが1位になると+1!
F.ハウリ2014年

1
うーん。私はzip不規則な配列を使用する傾向はありません["##" "###"]。たとえば、それがで何をしているように見えるかに驚いています。私のアプローチを再考する必要があります。
Peter Taylor

Freemono、Unifont、Code2000、Fixedsys Excelsiorはすべてこれらの文字を正しくレンダリングします。
プリモ2014年

@ primo、Unifontはこれらの文字で等幅に近いところはありません。Fixedsys Excelsiorも完全には正しくありませんが、十分に近いです。
Peter Taylor

はい!今あなたはそれを持っています!少し注意:出力の最後に2つの空行があります。これは規則に違反しません!(注:スコアは少し変更され、10ポイントを保存できます;-)
F. Hauri


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";
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.