Ascii कला को कम करें


10

यह चुनौती बढ़े हुए ASCII कला से कटा हुआ पेस्ट है , लेकिन उल्टा है , जो कि पेटसेकसी पर आधारित आधा ब्लॉक चार्ट का उपयोग कर रहा है :

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

तो लक्ष्य के लिए कम से कम 1/2ascii- । नमूने के लिए, स्ट्रिंग से:

 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वर्णों द्वारा, वर्णों में गिने जाने के लिए, बाइट्स में नहीं अर्थात्: 20 वर्णों की s=' ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█'गणना करें , 52 नहीं !!
    • -10 स्पष्टीकरण के लिए;
    • +20 बाहरी फ़ॉन्ट उपकरण या लाइब्रेरी के उपयोग के लिए।

तो स्पष्ट करने के लिए: इनपुट छवि को 2x2 वर्गों और प्रत्येक मानचित्र पर एक वर्ण में विभाजित किया गया है?
पीटर टेलर

1
-0.5 विचित्र बोनस जोड़ने के लिए (स्पष्टीकरण को परिभाषित करें) - अभी भी एक चक्कर लगाने के बाद। इसके अलावा यह कोड-चुनौती है और कोड-गोल्फ नहीं है।
हावर्ड

इनमें से अधिकांश चार्ट मेरे ब्राउज़र में सही तरीके से प्रस्तुत नहीं होते हैं। :(
विक्टर स्टैफ़ुसा

मेरे लिनक्स के तहत, मैं xterm -xrm 'XTerm*renderFont:false' &इसे ठीक से प्रदर्शित करने में सक्षम कंसोल विंडो खोलने के लिए उपयोग करता हूं ।
एफ। होरी

जवाबों:


4

गोल्फस्क्रिप्ट (90 वर्ण)

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

इस का एक बहुत ragged सरणियों को संभालने के लिए चला जाता है। गंदा परीक्षण मामला:

xx
xxx
xxx
xx
x

इसमें 4 में से केवल एक सेल के साथ 3 अलग 2x2 ग्रिड शामिल हैं।

बातें बदतर बनाने के लिए zipस्थानांतरण जोड़े में कॉलम काटना ही उत्पादन देता है के लिए ["xx" "xxx"]zipऔर ["xxx" "xx"]zip। इसलिए मैं यह सुनिश्चित करने के लिए शुरू करता हूं कि सभी लाइनें समान लंबाई की हों, और यह भी कि समान संख्या में लाइनें हों।

ध्यान दें कि यह प्रोग्राम मानता है कि दुभाषिया "a" को लंबाई 48 की एक स्ट्रिंग के रूप में मानेगा, भले ही उस प्रश्न के निर्देशों के अनुसार मैं इसे 16 वर्णों के रूप में गिन रहा हूं प्लस सीमांकक।

मैंने इसे अपनी सर्वश्रेष्ठ क्षमता के लिए परीक्षण किया है, लेकिन मुझे एक मोनोस्पेस फ़ेस नहीं मिल रहा है जो वास्तव में उन पात्रों को सही ढंग से प्रस्तुत करता है।


आपका कोड दूसरे टेस्ट में फेल लगता है, दिल से ... लेकिन अच्छा है! +1 के रूप में +1!
एफ। हौरी

1
हम्म। मैं zipragged सरणियों पर उपयोग करने के लिए नहीं है , और मुझे लगता है जैसे यह करने के लिए लगता है द्वारा काफी हैरान हूँ ["##" "###"]। मैं अपने दृष्टिकोण पर पुनर्विचार करने जा रहा हूं।
पीटर टेलर

Freemono, Unifont, Code2000, और Fixedsys Excelsior सभी इन पात्रों को सही ढंग से प्रस्तुत करते हैं।
प्रिमो

@primo, यूनिफोंट उन पात्रों पर कहीं नहीं है। 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";
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.