ASCII पाठ ब्रेल में अनुवाद करें


19

एक प्रोग्राम लिखें जो एएससीआईआई पाठ को ब्रेल आउटपुट में अनुवाद करता है। आवश्यकताएँ:

  • इनपुट स्टड, कमांड लाइन, या कुछ अन्य बाहरी इनपुट स्रोत से आ सकता है।
  • आउटपुट को ब्रेल के रूप में पहचाना जाना चाहिए, आउटपुट का रूप आपके ऊपर है। एक उदाहरण oएक उठाए हुए डॉट के लिए और .एक गैर-उठाए गए डॉट के लिए होगा। पाठ पैटर्न प्रतिनिधित्व जैसे 1-3-4स्वीकार्य नहीं है। लंबी लाइन लपेटने की आवश्यकता नहीं है।
  • न्यूनतम समाधान के लिए केवल 26 वर्णमाला वर्ण और स्थान की आवश्यकता होती है। आपके समाधान द्वारा समर्थित नहीं सभी इनपुट वर्णों को अनदेखा किया जाना चाहिए।

स्रोत कोड में वर्णों की संख्या के अनुसार स्कोरिंग है। जुर्माना और बोनस हैं:

  • आउटपुट के रूप में यूनिकोड ब्रेल वर्णों के उपयोग के लिए +50 जुर्माना ।
  • -50 बोनस का समर्थन करने के लिए राजधानियों, संख्या, और विराम चिह्न।
  • अंग्रेजी और (ग्रेड -2) ब्रेल से सहायक पत्रों और एक-अक्षर के संकुचन के लिए -200 बोनस । (यह एक अलग चुनौती है क्योंकि यह काफी अलग समस्या है।)

नमूना मंगलाचरण और आउटपुट (न्यूनतम समाधान):

$ braille Hello world
o .  o .  o .  o .  o .  . .  . o  o .  o .  o .  o o
o o  . o  o .  o .  . o  . .  o o  . o  o o  o .  . o
. .  . .  o .  o .  o .  . .  . o  o .  o .  o .  . .

"बहादुर प्रयास" को परिभाषित करें। इसके अलावा, लाइन-रैपिंग की आवश्यकता है?
जॉन ड्वोरक

@JDDvorak: धन्यवाद, अद्यतन प्रश्न।
ग्रेग हेवगिल

1
@GregHewgill क्या आप राजधानियों, संख्याओं और विराम चिह्न को बड़ा करने के लिए बोनस बना सकते हैं? वर्तमान में वह 26 + 10 + 12 = 48 अतिरिक्त वर्ण, एक बोनस का ज्यादा नहीं (जब तक आप ब्रेल डेटा को संपीड़ित नहीं करते हैं)
qwr

1
आप वर्णों के बजाय बाइट्स की गणना कर सकते हैं और जुर्माना हटा सकते हैं, लागत लगभग समान है (@ DigitalTrauma का पहला समाधान 85 बाइट्स है)। संपादित करें: मुझे बस एहसास हुआ कि APL जैसी भाषाओं को दंडित किया जाएगा। यह आप पर निर्भर करता है।
nyuszika7h

1
यार ... इस दिलचस्प बनाने के लिए यूनिकोड वर्ण के लिए जुर्माना पर्याप्त नहीं है। मैं देखना चाहता था कि लोग ब्रेल सेट को कैसे एनकोड करने वाले थे।
आलमो

जवाबों:


6

अजगर, 162

l=map((" a c,bif/e d:hjg'k m;lsp o n!rtq%12s. w -u x v   z y"%'').find,raw_input().lower())
for i in 1,4,16:print'  '.join('.o.o    ..oo'[(n&i*3)/i::4]for n in l)

वर्तमान में लोअरकेस अक्षरों और कुछ विराम चिह्नों का समर्थन करता है, लेकिन यह अभी भी प्रगति पर है।

उदाहरण:

$ python braille.py
Hello, world!
o .  o .  o .  o .  o .  . .  . .  . o  o .  o .  o .  o o  . .
o o  . o  o .  o .  . o  o .  . .  o o  . o  o o  o .  . o  o o
. .  . .  o .  o .  o .  . .  . .  . o  o .  o .  o .  . .  o .

6

अजगर - 90 75 + 50 = 125

लोअर केस लेटर्स का इस्तेमाल करें।

for l in input():
 a=ord(l)-96
 if a<0:a=0
 print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[a],end="")

वन-लाइनर (ɐɔıʇǝɥʇu )s के लिए धन्यवाद)

for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")

1
इसे वन-लाइनर क्यों नहीं बनाया? for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")75 अक्षर।
atı

@ forıgotuʎs वाह, मैं maxचाल के बारे में भूल गया । धन्यवाद
qwr

आप सभी गैर-अक्षर वाले पात्रों के लिए सिर्फ for l in input():print((" "*97+"⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵")[ord(l)],end="")
ब्लॉक्स

3

सी, 269

#define C char
#define O*p++=(*t&1)*65+46;*t>>=1;
main(int c,C**v){C b[99]={1,5,3,11,9,7,15,13,6,14},o[99],*q=o,*p=v[1],*t;while(c=*p++)*q++=c=='w'?46:c>='a'&&c<='z'?c-='a'+(c>'w'),b[c%10]|(c>9)*16|(c>19)*32:0;for(c=3;c;c--){p=b;for(t=o;t<q;t++){O;O*p++=32;}puts(b);}}

इस कार्यान्वयन के लिए यह आवश्यक है कि इसके तर्क, यदि इसमें रिक्तियाँ हैं, उद्धृत किया जाना चाहिए:

# braille "hello world"

3

बीबीसी बेसिक 103 ASCII वर्ण या 92 टोकन

A$="HXIKJY[ZQShxikjy{zqsl|Wmon"FORK=1TO26A=ASC(MID$(A$,K))VDU23,K+96,A AND9;0,A/2AND9;0,A/4AND9;:NEXT

संभवतः काफी नहीं है कि ओपी का इरादा क्या है, यह लोअरकेस वर्णों के लिए फ़ॉन्ट को फिर से परिभाषित करता है। VDU 23,n,a,b,c,d,e,f,g,hआठ बाइट्स वाले वर्ण n में 8x8 बिटमैप असाइन करता है। अल्पविराम के बजाय अर्धविराम के साथ एक पैरामीटर का पालन करते हुए इसे दो-बाइट छोटे-एंडियन नंबर के रूप में माना जाता है।

निम्न बिट पैटर्न के अनुसार अक्षरों के aमाध्यम से ब्रेल पैटर्न zA $ में संग्रहीत किए जाते हैं। इसे 9 = बाइनरी 1001और राइटशिफ्ट्स के साथ मास्क द्वारा निकाला जाता है (2 और 4 द्वारा विभाजन का उपयोग मानक बीबीसी बेसिक ऑपरेटर ऑपरेटर के रूप में किया जाता है।)

 8 1
16 2
32 4

अघोषित कोड

A$="HXIKJY[ZQShxikjy{zqsl|Wmon"
FORK=1TO26
  A=ASC(MID$(A$,K))
  VDU23,K+96,A AND9;0,A/2AND9;0,A/4AND9;
NEXT

उदाहरण का उपयोग करें

यह स्क्रीन मोड 6 में स्पष्टता के लिए किया जाता है (जैसे ही आप कमांड लाइन एमुलेटर खोलते हैं, MODE6 टाइप करें।)

दरअसल, कोड चलाने के बाद, ब्रेल में कोई भी लोअरकेस अक्षर (कीबोर्ड इनपुट सहित) दिखाई देता है।

यहाँ छवि विवरण दर्ज करें

Http://bbcbasic.co.uk/bbcwin/bbcwin.html पर एमुलेटर ।

मेरा भी इसी तरह का जवाब देखें: /codegolf//a/28869/15599


2

बैश + कोरुटिल्स

न्यूनतम समाधान - केवल लोअरकेस, 83 (33 यूनिकोड वर्ण + 50 जुर्माना):

tr a-z ⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠭⠽⠵⠺

राजधानियाँ, संख्या और विराम चिह्न, 120 (120 यूनिकोड वर्ण + 50 जुर्माना - 50 बोनस):

a=⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠭⠽⠵⠺
sed 's/\([0-9]\)/⠼&/g;s/\([A-Z]\)/⠠&/g'|tr ",;':\-⎖.!“?”()/a-zA-Z1-90" ⠂⠆⠄⠒⠤⠨⠲⠖⠦⠦⠴⠶⠶⠌$a$a$a

उदाहरण आउटपुट:

$ echo {A..Z} {a..z} {0..9} ".,;:" | ./braille.sh 
⠠⠁ ⠠⠃ ⠠⠉ ⠠⠙ ⠠⠑ ⠠⠋ ⠠⠛ ⠠⠓ ⠠⠊ ⠠⠚ ⠠⠅ ⠠⠇ ⠠⠍ ⠠⠝ ⠠⠕ ⠠⠏ ⠠⠟ ⠠⠗ ⠠⠎ ⠠⠞ ⠠⠥ ⠠⠧ ⠠⠭ ⠠⠽ ⠠⠵ ⠠⠺ ⠁ ⠃ ⠉ ⠙ ⠑ ⠋ ⠛ ⠓ ⠊ ⠚ ⠅ ⠇ ⠍ ⠝ ⠕ ⠏ ⠟ ⠗ ⠎ ⠞ ⠥ ⠧ ⠭ ⠽ ⠵ ⠺ ⠼⠚ ⠼⠁ ⠼⠃ ⠼⠉ ⠼⠙ ⠼⠑ ⠼⠋ ⠼⠛ ⠼⠓ ⠼⠊ ⠲⠂⠆⠒
$ 

1

PHP, 331

<?php $d=split("/",gzinflate(base64_decode("NYzBDQBACIM26o3G/r+LRf2QYAOZe4SCLKgU7A9lEWVOzrQVrAiwghWhLKLMyZlawTTGMIYxPg==")));$d[-65]="......";$i=str_split(preg_replace("/[^a-z ]/","",trim(fgets(STDIN))));$o=["","",""];$S="substr";foreach($i as $c){$v=ord($c)-97;for($x=0;$x<3;$x++)$o[$x].=$S($d[$v],$x*2,2)." ";}echo join($o,"\n");

अब कोई बोनस नहीं।


2
मुझे लगता है कि कोड-गोल्फ में एक छोटे से उद्घाटन टैग का उपयोग करना ठीक है , इसलिए आप 4 वर्णों को सहेजने के <?बजाय उपयोग कर सकते हैं <?php[SPACE]
nyuszika7h

1

जावास्क्रिप्ट - 286

w=prompt().split('');for(i=0;i<w.length;i++){z=w[i];o="o",p=".";b=[1,5,3,11,9,7,15,13,6,14];e=[c="",1,3];g=z.charCodeAt(0)-97;if(g>22)g--;f=e[g/10|0];d=b[g%10];if(g==22){d=14;f=2;}c+=d&1?o:p;c+=d&2?o:p;c+="\n";c+=d&4?o:p;c+=d&8?o:p;c+="\n";c+=f&1?o:p;c+=f&2?"o\n":".\n";console.log(c);}

पहली कोशिश। कोई बोनस नहीं।


2
आप इसे कम कर सकते हैंw=prompt().split("");for(i=0;i<w.length;i++)z=w[i],o="o",p=".",b=[1,5,3,11,9,7,15,13,6,14],e=[c="",1,3],g=z.charCodeAt(0)-97,22<g&&g--,f=e[g/10|0],d=b[g%10],22==g&&(d=14,f=2),c+=d&1?o:p,c+=d&2?o:p,c+="\n",c+=d&4?o:p,c+=d&8?o:p,c+="\n",c+=f&1?o:p,c+=f&2?"o\n":".\n",console.log(c)
वॉलीवेस्ट

1
उस दृष्टिकोण को याद रखना होगा, लूप के लिए अच्छा लंबा एकल विवरण :)
मैट

1

CJam - 51

q{i32%"@`hptdx|lX\bjrvfz~nZ^ck]swg"=i2b1>2/}%zSf*N*

इसे http://cjam.aditsu.net/ पर आज़माएं

उदाहरण इनपुट:

braille is strange

उदाहरण आउटपुट:

10 10 10 01 10 10 10 00 01 01 00 01 01 10 10 11 11 10 
10 11 00 10 10 10 01 00 10 10 00 10 11 11 00 01 11 01 
00 10 00 00 10 10 00 00 00 10 00 10 10 10 00 10 00 00 

यह केवल लोअरकेस लेटर्स और स्पेस को सपोर्ट करता है। अन्य पात्रों को समर्थित वर्णों (विशेष रूप से बड़े अक्षरों में नीचे की ओर) में मैप किया जाता है।

स्पष्टीकरण:

ब्रेल वर्णों को एक उभरे हुए डॉट के लिए 1 और गैर-उठाए गए डॉट के लिए 0, दाएं से बाएं और ऊपर से नीचे तक एन्कोड किया गया है। यह 6 बेस -2 अंक देता है; 1 को प्रमुख शून्य से अलग करने से बचने के लिए पूर्व निर्धारित किया जाता है, फिर संख्या को आधार 10 में और फिर संबंधित ASCII वर्ण में बदल दिया जाता है।
उदाहरण: t -> ⠞ -> 01/11/10 -> 1011110 -> 94 -> ^

कार्यक्रम बिट्स के जोड़े (जैसे [[0 1][1 1][1 0]]) बिट जोड़ों के एक मैट्रिक्स को प्राप्त करने के प्रत्येक चरित्र को वापस धर्मान्तरित करता है । तब मैट्रिक्स को ट्रांसपोज़ किया जाता है और विभाजक जोड़े जाते हैं (पंक्तियों के भीतर रिक्त स्थान, पंक्तियों के बीच की नई रेखाएं)।

qएक स्ट्रिंग में इनपुट को पढ़ता है = वर्णों के सरणी =
{…}%प्रत्येक वर्ण के लिए ब्लॉक लागू होता है
i32%ASCII कोड mod 32 (स्पेस-> 0, a-> 1, b-> 2, z-> 26)
"@`hptdx|lX\bjrvfz~nZ^ck]swg"एक स्ट्रिंग है जिसमें ब्रेल वर्ण होते हैं। एन्कोडेड के रूप में समझाया गया है इससे पहले
=कि स्ट्रिंग से संबंधित एन्कोडेड ब्रेल वर्ण
i2bहो जाता है ASCII कोड हो जाता है तब बेस 2 में परिवर्तित हो जाता है (7 अंकों की एक सरणी प्राप्त करना)
1>अग्रणी 1 अंक को निकालता
2/है सरणी में विभाजित करता है (3) जोड़े
zमैट्रिक्स को स्थानांतरित करता है
Sf*प्रत्येक पंक्ति के साथ जुड़ता है रिक्त स्थान
N*नई पंक्तियों के साथ जुड़ते हैं


0

सी, 249 244

#define B?111:46
#define P(a,b)printf("%c%c ",a B,b B):
a,i;main(int c,char**v){for(char*p;p=v[1],a<3;puts(""),++a)while(i=*p++)i==32?P(0,0)i/97&122/i?c=(i+=(i==119)*17-97-(i>119))%10,a?a^1?P(i/10%3,i/20)P(c>4|c==1,c/3&&c%3-2)P(c<8,5*c/8%2)0;}

इनपुट एक कमांड-लाइन तर्क है, जिसे स्ट्रिंग से रिक्त स्थान होने पर बच जाना चाहिए या उद्धृत किया जाना चाहिए। समर्थित वर्ण लोअरकेस अक्षर और स्थान हैं। असमर्थित वर्ण चुपचाप छोड़ दिए जाते हैं।

संपादित करें: एक शर्त को सरल करके 5 बाइट्स शेव की गईं


0

पर्ल, 195 + मॉन्स्टर = 147

यह यूनिकोड (195 बाइट्स + 2 बाइट्स (फॉर -pl) - 50 बोनस) पर निर्भर किए बिना, पूंजी, संख्या और विराम चिह्न को संभालता है )

~s/([A-Z])/|$1/g,~s/(\d)/#$1/g,tr/1-90/a-ij/;for$i(1,2,4){map{for$j(1,8){$s.=index(" a,b'k;l^cif/msp_e:h*o!r_djg_ntq|_?_-u(v_____x____._)z\"___w_#y",l$
"}$_=$s

इंडेंटेशन के साथ:

~s/([A-Z])/|$1/g,
~s/(\d)/#$1/g,
tr/1-90/a-ij/;
for$i(1,2,4){
  map{
    for$j(1,8){
     $s.=index(" a,b'k;l^cif/msp_e:h*o!r_djg_ntq|_?_-u(v_____x____._)z\"___w_#y",lc($_))&$j*$i?o:_
    }
   $s.=_
  }split//;
  $s.="
"}
$_=$s

नमूना उत्पादन

perl -pl brail.pl
Hello, 99!
___o__o__o__o__o_________o__o__o__o____
___oo__o_o__o___o_o______o_o___o_o__oo_
_o_______o__o__o________oo____oo____o__

0

जावास्क्रिप्ट ईएस 6 - 282 309 297 283 270 - 50 = 232 259 233 220 बाइट्स

यह छोटा होगा, लेकिन बड़े अक्षरों की जाँच करने से चोट लग जाएगी

f=_=>{z='toLowerCase';k=(a,b)=>a%b>~-b/2?1:0;t=(a,b)=>k(a,b)+`${k(a,b/2)} `;b=c=d='';for(v of _){v==v[z]()?0:(b+=0,c+=0,v=v[z](d+=1));$=` ,'-";9015283467@./+^_>#i[s!jwt)a*kue:ozb<lvh\\r(c%mxd?nyf$p&g]q=`.search(v);b+=t($,64);c+=t($,16);d+=t($,4)}alert(`${b}
${c}
${d}`)}

संपादित करें: मुझे दो बाइट्स बचाने के लिए mbomb007 के लिए धन्यवाद - दुर्भाग्य से, मैंने पाया कि थोड़ी सी पिछली गोल्फिंग ने सब कुछ बर्बाद कर दिया था, इसलिए मुझे 27 पात्रों को वापस जोड़ना पड़ा।

संपादित करें: Aaand 12 बाइट्स रिक्त स्थान को स्थानांतरित करके सहेजे गए।

संपादित करें: यह एहसास हुआ कि यह चरित्र के रूप में उत्पादन करने के लिए मूर्खतापूर्ण था, और काफी कुछ बाइट्स को बचाया। मैंने k = (a, b) => a% (2 * b)> b-1? 1: 0 for k = (a, b) => a% b> ~ -b / को स्वैप करके कुछ वर्ण सहेजे हैं। 2 1: 0।


शायद यह string.toLowerCaseएक चर को सौंपने के लिए छोटा होगा ?
mbomb007

संख्या दो अक्षर (जैसे। 3 = ⠼⠉) होनी चाहिए: संख्या उपसर्ग (() और सिफर समकक्ष अक्षर (3 = c = =) में परिवर्तित हो जाते हैं। 1-9-->a-iऔर0-->j
एडम

मैंने अलग-अलग चार्ट देखे हैं - जो मैंने चेक किया था, उस पर ऐसा नहीं था।
मार्कस डायर

और मुझे सिर्फ एहसास हुआ कि मैंने ASCII ब्रेल एन्कोडिंग का उपयोग वास्तविक एससीआई चार्ट के बजाय किया है। तो यह वैसे भी अयोग्य है।
मार्कस डायर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.