아스키 아트 줄이기


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
이상한 보너스를 추가하는 경우 -0.5 (설명을 정의하십시오)-반올림 한 후에도 여전히 공감합니다. 또한 이것은 코드 골프가 아니라 코드 도전입니다.
Howard

이 문자의 대부분은 브라우저에서 올바르게 렌더링되지 않습니다. :(
Victor Stafusa

내 리눅스에서 xterm -xrm 'XTerm*renderFont:false' &이것을 올바르게 표시 할 수있는 콘솔 창을 여는 데 사용 합니다.
F. Hauri

답변:


4

GolfScript (90 자)

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

이 중 많은 부분이 거친 배열을 처리합니다. 불쾌한 테스트 사례 :

xx
xxx
xxx
xx
x

는 문자가 포함 된 4 개의 셀 중 하나만 포함 된 3 개의 서로 다른 2x2 격자를 포함합니다.

설상가상으로는 zip쌍으로 열을 절단하는 전위는 동일한 출력 제공 을위한을 ["xx" "xxx"]zip하고 ["xxx" "xx"]zip. 따라서 모든 줄의 길이가 동일하고 짝수 개의 줄이 있는지 확인하기 위해 채우기를 시작합니다.

이 프로그램은 인터프리터가 "▗▖▄▝▐▞▟▘▚▌▙▀▜▛█"를 길이가 48자인 문자열로 취급한다고 가정합니다. 질문의 지시에 따라 16 자로 계산합니다. 더하기 구분 기호.

이 기능을 최대한 활용하여 테스트했지만 실제로 해당 문자를 올바르게 렌더링하는 고정 폭 글꼴을 찾을 수 없습니다.


마음으로 두 번째 테스트에서 코드가 실패한 것 같습니다 ...하지만 좋습니다! 당신이 1 인 +1!
F. Hauri

1
흠. 나는 zip비정형 배열 에 사용하지 않는 경향이 있으며 , 예를 들어 ["##" "###"]. 나는 나의 접근 방식을 재고해야 할 것이다.
피터 테일러

Freemono, Unifont, Code2000 및 Fixedsys Excelsior는 모두 이러한 문자를 올바르게 렌더링합니다.
primo

@primo, Unifont는 그 문자들에 거의 모노 스페이스가 없습니다. Fixedsys Excelsior도 정확하지 않지만 충분히 가깝습니다.
피터 테일러

예! 지금 당신은 그것을 가지고 있습니다! 작은 말 : 출력 끝에 두 개의 빈 줄이 있습니다. 이것은 규칙을 어 기지 않습니다! (참고 : 점수가 약간 변경되었습니다. 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

펄 (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.