7-বিভাগের প্রদর্শন ব্যবহার করে শব্দগুলি প্রদর্শন করুন


13

আমার প্রথম প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ সেভেন-স্ল্যাশ প্রদর্শন । এখানে আমার প্রথম চ্যালেঞ্জটিও রয়েছে gment বিভাগের ডিসপ্লে ভিত্তিক।

আমি প্রায়শই সংখ্যার পাশাপাশি, সাধারণ 7 টি সেগমেন্টের ডিসপ্লে ব্যবহার করে কী ধরণের অক্ষর প্রদর্শন করতে পারি সে সম্পর্কে ভাবছি। দেখা যাচ্ছে প্রচুর অক্ষর প্রদর্শিত হতে পারে। প্রকৃতপক্ষে, কে, এম, ভি, ডাব্লু, এক্স অক্ষরগুলি ছাড়াও একটি একক 7-বিভাগের প্রদর্শন ব্যবহার করে প্রদর্শিত হতে পারে। এটি কারণ আপনি ছোট হাতের বা কোনও অক্ষরের উপরের কেসটি প্রদর্শন করতে পারেন। যেমন

"abcdef" হিসাবে প্রদর্শিত হতে পারে

 _     _     _  _
!_!!_ !   _!!_ !_ 
! !!_!!_ !_!!_ !  

নোট প্রতিটি অক্ষর একটি 3x3 ম্যাট্রিক্স গঠিত !এবং _

অবশ্যই, 7-বিভাগের প্রদর্শনটি সংখ্যা এবং প্রতীক প্রদর্শন করতে ব্যবহার করা যেতে পারে:

 _     _  _  _           _  _     _    
  ! _ !_ !_ !      _!  !!_ !_!!  !_!!_!
  !    _!!_ !_!   !_!  ! _!!  !_ ! ! _!

কিছু বর্ণের উপরের এবং নিম্ন উভয় ক্ষেত্রে থাকতে পারে:

 _                 _          
!   _ !_!!_   !   ! ! _ ! !   
!_ !_ ! !! !  !  !!_!!_!!_!!_!

অক্ষরের পুরো সেটটি এখানে রয়েছে:

 _     _  _     _  _  _  _  _                       _
! !  ! _! _!!_!!_ !_   !!_!!_!    _ !_     _     _  _!
!_!  !!_  _!  ! _!!_!  !!_! _!   !_ ! !  !!_!!_!   !  

 _     _     _  _  _                 _  _  _     _           _ 
!_!!_ !   _!!_ !_ !  !_!  !  !!   _ ! !!_!!_! _ !_ !_ ! !!_! _!
! !!_!!_ !_!!_ !  !_!! !  !!_!!_ ! !!_!!    !!   _!!_ !_! _!!_ 

মনোযোগ দিন যে একটি সাদা স্থান ( ), একটি ড্যাশ ( -) এবং একটি প্রশ্ন চিহ্ন ( ?) রয়েছে। চিঠি I, Oএবং Zসংখ্যার সাথে একই হয় 1, 0এবং 2যথাক্রমে।

এই চ্যালেঞ্জটিতে আপনি উপরের--সেগমেন্ট ডিসপ্লের বিন্যাসটি ব্যবহার করে একটি স্ট্রিং প্রদর্শন করতে একটি প্রোগ্রাম বা একটি ফাংশন লিখবেন।

বিধি

  1. আপনি একটি প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন

  2. এটি কোড-গল্ফ, বাইট জেতে সংক্ষিপ্ততম কোড

  3. আপনার প্রোগ্রাম বা ফাংশনটি STDIN বা পরামিতি হিসাবে ইনপুট নিতে হবে। এবং একটি স্ট্রিং STDOUT এ বা স্ট্রিং হিসাবে 3 লাইনে নেতৃত্বাধীন স্থান ব্যতীত তবে নিউলাইন দিয়ে শেষ করা হয়। উপরের / নিম্নতর কেসটি CHIOUসঠিকভাবে পরিচালনা করুন।

  4. আপনি allyচ্ছিকভাবে সাদা স্থানগুলি অনুসরণ করতে পারেন print

  5. আপনাকে অবশ্যই উপরের ফর্ম্যাটটি অনুসরণ করতে হবে। আপনার 7-বিভাগের প্রদর্শনটি তৈরি করতে আন্ডারস্কোর _এবং বিস্ময়কর চিহ্নটি ব্যবহার করে !

  6. আপনাকে অবশ্যই সাদা স্থান ( ), ড্যাশ ( -) এবং প্রশ্ন চিহ্ন ( ?) সমর্থন করতে হবে

  7. যদি স্ট্রিংটিতে অসমর্থিত অক্ষর (কে, মি, ভি, ডাব্লু, এক্স) থাকে তবে একটি একক ত্রুটি অক্ষর (3 দিগন্তের রেখা, উদাহরণ দেখুন) প্রদর্শিত হবে। ৫ টি অসমর্থিত অক্ষর ছাড়াও, আপনি ধরে নিতে পারেন ইনপুটটি কেবলমাত্র সমর্থিত অক্ষর সেট দিয়ে তৈরি।

  8. lবিভ্রান্তির কারণে আমি লোয়ারকেস এল ( ) এর জন্য একটি চিঠি না বেছে নিয়েছি তবে আপনি যদি এত ঝুঁকে থাকেন 1তবে আপনি এটি ডান বা বামে একটির মতো প্রদর্শন করতে পারেন ।

উদাহরণ

$./a.out Start
 _     _    
!_ !_ !_! _ !_
 _!!_ ! !!  !_
$./a.out "7-seg dIsplay"
 _     _  _  _           _  _     _ 
  ! _ !_ !_ !      _!  !!_ !_!!  !_!!_!
  !    _!!_ !_!   !_!  ! _!!  !_ ! ! _!
$./a.out "0123456789 chiou-?"
 _     _  _     _  _  _  _  _                       _
! !  ! _! _!!_!!_ !_   !!_!!_!    _ !_     _     _  _!
!_!  !!_  _!  ! _!!_!  !!_! _!   !_ ! !  !!_!!_!   !
$./a.out "ABCDEFGHIJLNOPQRSTUZ"
 _     _     _  _  _                 _  _  _     _        _
!_!!_ !   _!!_ !_ !  !_!  !  !!   _ ! !!_!!_! _ !_ !_ ! ! _!
! !!_!!_ !_!!_ !  !_!! !  !!_!!_ ! !!_!!    !!   _!!_ !_!!_
$./a.out "abcdefghijlnopqrstuz"
 _           _  _  _                    _  _     _        _
!_!!_  _  _!!_ !_ !  !_      !!   _  _ !_!!_! _ !_ !_     _!
! !!_!!_ !_!!_ !  !_!! !  !!_!!_ ! !!_!!    !!   _!!_ !_!!_
$./a.out "Bad Form"
 _
 _
 _
$./a.out "Hello"
    _       
!_!!_ !  !   _
! !!_ !_ !_ !_!
$./a.out "World"
 _
 _
 _

হ্যাঁ, আপনি ধরে নিতে পারেন কোনও অসমর্থিত প্রতীক নেই। আমার উদ্দেশ্য হ'ল এটি নিশ্চিত করা যে এতে থাকা স্ট্রিংগুলি k, m, v, w, xপ্রদর্শিত না হয়।
কিছু ব্যবহারকারী


আমি মনে করি আপনি \rলাইন ফিড (এলএফ, \n) দিয়ে বিভ্রান্ত গাড়িবহর রিটার্ন (সিআর , )। * নিক্স এলএফ ব্যবহার করে এবং উইন্ডোজ সিআরএলএফ ব্যবহার করে। কেবলমাত্র নির্দিষ্ট লিগ্যাসি সিস্টেমগুলি নিজে সিআর ব্যবহার করে। এখানে আরও তথ্য: en.wikedia.org/wiki/Newline
উইনি

আপনার "8" চরিত্রটিতে একটি বার আছে বলে মনে হচ্ছে "|" পরিবর্তে একটি বিস্ময়কর চিহ্ন "!"! এটা কি উদ্দেশ্য?
coredump

1
@ উইনি, আপনি অবশ্যই ঠিক আছেন। আমি এটি লেখার সময় এটি সন্ধান করতে খুব অলস ছিলাম।
কিছু ব্যবহারকারী

উত্তর:


7

সিজেম, 123 114 112 110 বাইট

Qq_eu";=KMVWX":T&"@"@?" -chiou"Tereu{i"^A^W^G;^Þ¯     ^Þ^Û9³·^É¿»
^@
^P
^Ü^Ò½7¦^_¶´§=   ^O^V&5^U¯¼¹^T³6/"=i2b9Ue[3/"!_!"f.{S?}.+}/N*

উপরের অংশটি ক্যারেট স্বরলিপি ব্যবহার করে, যেহেতু কোডটিতে ছাপিয়ে অক্ষর রয়েছে। এর মধ্যে একটি হ'ল নাল বাইট (^@ ), যার অর্থ এই কোডটি কেবল কমান্ড লাইন থেকে কার্যকর করা যায়।

আরও দুটি বাইটের ব্যয় (মোট ১১২ টির জন্য ), আমরা এটি ঠিক করতে পারি।

Qq_eu";=KMVWX":T&"@"@?" -chiou"Tereu{i"AWG{ÞïIÞÛyó÷Éÿû
@
P
ÜÒýwæ_öôç}IOVfuUïüùTóvo"=i448+2b1>3/"!_!"f.{S?}.+}/N*

এবার, সমস্ত অক্ষর মুদ্রণযোগ্য। সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

উদাহরণ রান

$ LANG=en_US
$ xxd -ps -r > 7seg.cjam <<< 51715f6575223b3d4b4d565758223a5426224022403f22202d6368696f752254657265757b69220117073b9eaf099e9b39b3b789bfbb0a000a100a9c92bd37a61fb6b4a73d090f16263515afbcb914b3362f223d6932623955655b332f22215f2122662e7b533f7d2e2b7d2f4e2a
$ wc -c 7seg.cjam 
110 7seg.cjam
$ echo -n '0123456789 chiou-?' | cjam 7seg.cjam; echo
 _     _  _     _  _  _  _  _                       _ 
! !  ! _! _!!_!!_ !_   !!_!!_!    _ !_     _     _  _!
!_!  !!_  _!  ! _!!_!  !!_! _!   !_ ! !  !!_!!_!   !  
$ echo -n 'ABCDEFGHIJLNOPQRSTUYZ' | cjam 7seg.cjam; echo
 _     _     _  _  _                 _  _  _     _           _ 
!_!!_ !   _!!_ !_ !  !_!  !  !!   _ ! !!_!!_! _ !_ !_ ! !!_! _!
! !!_!!_ !_!!_ !  !_!! !  !!_!!_ ! !!_!!    !!   _!!_ !_! _!!_ 
$ echo -n 'World' | cjam 7seg.cjam; echo
 _ 
 _ 
 _

আইডিয়া (মুদ্রণযোগ্য সংস্করণ)

প্রতিটি চরিত্রটি 9-বিভাগের প্রদর্শনে প্রদর্শিত হতে পারে

!_!
!_!
!_!

এর কিছু অক্ষরের অক্ষর শূন্যস্থান দিয়ে প্রতিস্থাপন করে।

প্রাকৃতিক পাঠের ক্রমে প্রতিটি দেখানো বিভাগকে একটি 1 দিয়ে প্রতি 0 টি দিয়ে দেখানো বিভাগকে প্রতিস্থাপন করে আমরা একটি নির্দিষ্ট অক্ষরটিকে পূর্ণসংখ্যায় পরিণত করতে পারি এবং ফলাফল বাইনারি অঙ্কগুলি বিবেচনা করে ।

প্রথম ও তৃতীয় সেগমেন্ট, দেখানো না হয় তাই এই রেঞ্জ পূর্ণসংখ্যার উত্পাদন করা হবে [0,64) এবং [128,192)

আমরা এই সংখ্যার প্রতিটিকে একটি একক বাইট হিসাবে এনকোড করতে পারি, তবে এর অর্ধেকটি অপ্রিনিত অক্ষরের ফলস্বরূপ। সুতরাং, আমরা অক্ষরে castালার আগে প্রতিটি পূর্ণসংখ্যায় 64 যুক্ত করি , যা কোড পয়েন্টগুলি [64,128) এবং [192,256) এর মধ্যে রয়েছে তা নিশ্চিত করে ।

এই দুটি রেঞ্জের একমাত্র অপ্রিন্টযোগ্য অক্ষর হ'ল দেল (কোড পয়েন্ট 127), যা নিম্নলিখিতটির সাথে সামঞ্জস্যপূর্ণ, অনাকাঙ্ক্ষিত ডিসপ্লে কনফিগারেশন:

!_!
!_!

আমরা প্রতিটি কোড পয়েন্টে 448 == 512 - 64 যোগ করে , বেস 2 তে রূপান্তর করে এবং প্রথম বাইনারি অঙ্কটি সরিয়ে দিয়ে উপরের এনকোডিংটি বিপরীত করতে পারি ।

এই এনকোডযুক্ত সেগমনেটগুলিকে তাদের সংশ্লিষ্ট ASCII অক্ষরের সাথে সংযুক্ত করার একটি কার্যকর উপায় খুঁজতে বাকি রয়েছে।

আমরা অক্ষর মানচিত্র তাহলে " -chiou"এর অক্ষর ";=KMVWX"বড় হাতের অক্ষরে এবং সমগ্র ইনপুট রূপান্তর, কেবলমাত্র আমরা মধ্যে সব অক্ষরের জন্য এনকোডিং সংরক্ষণ করতে পারেন 0(কোড বিন্দু 48) এবং Z, (কোড বিন্দু 90) 43 একটি সীমার দেয়।

এরে ইন্ডেক্স CJam মধ্যে মডুলার, তাই যদি Aদৈর্ঘ্য 43 একটি স্ট্রিং, A86=, A43=এবং A0=একই ফলাফল উত্পাদ। কোড পয়েন্ট with with সহ অক্ষরটি V, তাই আমরা কেবলমাত্র ভ - জেড এবং 0 - ইউ এর এনকোডযুক্ত বিভাগগুলি ক্রমানুসারে সংরক্ষণ করি।

প্রকৃত কোডে, আমরা "খারাপ ফর্ম" চরিত্র হিসাবে অ্যাট চিহ্নটি নির্বাচন করি, স্ট্রিংয়ের সাথে পুরো ইনপুটটি প্রতিস্থাপন করে "@"যদি এতে একটি নিষিদ্ধ চিঠি থাকে এবং উপরের পদক্ষেপগুলি উল্টে দেয়।

কোড (মুদ্রণযোগ্য সংস্করণ)

Q            e# Push an empty array for posterior concatenation.
q            e# Read from STDIN.
_eu          e# Copy the input and convert is to uppercase.
";=KMVWX":T& e# Intersect the result with with T := ";=KMVWX".
"@"@?        e# Select "@" if truthy and the input if falsy.
" -chiou"Ter e# Perform transliteration.
eu           e# Convert everything to uppercase.
{            e# For each character in the modified input:
  i          e#   Push its code point.
  "…"=       e#   Select the corresponding character from the string.
  i448+      e#   Push that character's code point and add 448.
  2b1>       e#   Convert to base 2 and discard the first digit.
  3/         e#   Group into triplets of digits (rows).
  "!_!"      e#   Push that string.
  f.{        e#   For each group of digits:
    S?       e#     Select the corresponding char of "!_!" for 1 and " " for 0.
  }          e#
  .+         e#   Concatenate along the rows with the previous results.
}/           e#
N*           e# Join, separating by linefeeds.

2

পার্ল, 475 469 424 390 280 272 বাইট

$_=<>;die" -
"x3if/[kmvwx]/i;y/chiou/kmvwx/;$_=lc;while(/(.)/g){$z=ord($1=~y/a-z0-9\-\? /{v\x17nWS7z(.F\x16rb?[yBuV> f&|O?(Omxuw)\x7f}@K\0/r);$i.=$z&1?' _ ':$"x3;$m.=($z&16?'!':$").($z&64?'_':$").($z&8?'!':$");$p.=substr("  !  _!_",$z&6,2).($z&32?'!':$")}print"$i
$m
$p
"

মন্তব্য সহ বহু-লাইন:

$_=<>;   # accept input
die" -   # check for invalid chars
"x3if/[kmvwx]/i;
y/chiou/kmvwx/;$_=lc;   # substitute invalid chars, convert to lowercase
while(/(.)/g)   # loop over each character
    # lookup character from string using transliteration and convert to
    # number using ord() for bit checking:
    {$z=ord($1=~y/a-z0-9\-\? /{v\x17nWS7z(.F\x16rb?[yBuV> f&|O?(Omxuw)\x7f}@K\0/r);
    $i.=$z&1?' _ ':$"x3;    # first row
    $m.=($z&16?'!':$").($z&64?'_':$").($z&8?'!':$");   # second row
    $p.=substr("  !  _!_",$z&6,2).($z&32?'!':$")}    # third row
# print result:
print"$i
$m
$p
"

বিভাগগুলিকে এনকোডিং করা বিট নিদর্শনগুলি স্ট্রিংয়ে সংরক্ষণ করা হয় (3 টি অরক্ষিত অক্ষর ব্যবহার \xকরে \0এবং স্থানের জন্য ব্যবহার করে ) এবং পার্ল ট্রান্সলিটেশন অপারেটরটি ব্যবহার করে ইনপুট অক্ষরে ম্যাপ করা হয়।

7 টি বিভাগের 5 টির জন্য, কিছুটা বিপরীতভাবে এবং কোনও স্থান বা বিভাগের অক্ষর আউটপুট করতে টের্নারি অপারেটরের সাথে ব্যবহৃত হয়। নীচে বাম দুটি বিভাগের জন্য (বিটসেটে 2 এবং 4 দ্বারা এনকোডড), 8 টি অক্ষরের স্ট্রিংয়ের একটি স্ট্রিং লুকআপ 2 বাইট সংরক্ষণ করতে ব্যবহৃত হয়।

পার্ল গল্ফ করার টিপসের জন্য ডম হেস্টিংসকে ধন্যবাদ।

পুরানো সংস্করণ (প্যাটার্নগুলি এনকোড করার জন্য রেজিক্সগুলি ব্যবহার করে), 390 বাইট:

$_=<>;if(/[kmvwx]/i){print" -\n"x3;exit}y/chiou/kmvwx/;$_=lc;while(/(.)/g){$z=$1;$i.=($z=~/[acefgopqsz\?0235-9]/?' _ ':'   ');$m.=($z=~/[abce-hlmopqstuy045689]/?'!':' ').($z=~/[abdefhkmnp-twyz\-\?2-689]/?'_':' ').($z=~/[adhijopquyz\?0-4789]/?'!':' ');$p.=($z=~/[a-hj-prtuwxz\?0268]/?'!':' ').($z=~/[b-egjklostuw-z0235689]/?'_':' ').($z=~/[abdg-jmnoqsu-y013-9]/?'!':' ')}print"$i\n$m\n$p\n"

মন্তব্য সহ বহু-লাইন:

$_=<>;   # accept input
if(/[kmvwx]/i){print" -\n"x3;exit}   # check for invalid chars
y/chiou/kmvwx/;$_=lc;   # substitute invalid chars, convert to lowercase
while(/(.)/g)
{$z=$1;$i.=($z=~/[acefgopqsz\?0235-9]/?' _ ':'   '); # first row
$m.=($z=~/[abce-hlmopqstuy045689]/?'!':' ').
($z=~/[abdefhkmnp-twyz\-\?2-689]/?'_':' ').
($z=~/[adhijopquyz\?0-4789]/?'!':' '); # second row
$p.=($z=~/[a-hj-prtuwxz\?0268]/?'!':' ').
($z=~/[b-egjklostuw-z0235689]/?'_':' ').
($z=~/[abdg-jmnoqsu-y013-9]/?'!':' ')} # third row
print"$i\n$m\n$p\n" # print result

স্ট্রিংটি পড়তে হয় এবং একটি রেজিক্স ব্যবহার করে অবৈধ অক্ষরের জন্য চেক করা হয়, যদি পাওয়া যায় তবে তা বেরিয়ে আসছে। তারপরে অনুমোদিত ছোট হাতের অক্ষরগুলি অবৈধ অক্ষরের জন্য প্রতিস্থাপন করা হয় এবং পুরো স্ট্রিংটি লোয়ারকেসে রূপান্তরিত হয়।

প্রথম সারিতে প্রতিটি চিঠিতে 1 টি এবং অন্য দুটিতে 3 টি করে এক সাথে সারিগুলি এক সময়ে তৈরি করা হয়। প্রতিটি সারির জন্য, স্ট্রিংটি একবারে একটি করে অক্ষর প্রক্রিয়া করা হয় এবং প্রতিটি বিভাগের জন্য একটি রেজেক্সের সাথে অক্ষরটি মিলিত হয় কিনা তা পরীক্ষা করে দেখুন! বা _ প্রদর্শিত হবে। একটি রেজেক্স ব্যবহারের অর্থ হ'ল যে বিভাগগুলিকে সেট করা নেই সেখানে অক্ষর প্রতি সেগমেন্টে শূন্য বিট লাগবে কিনা তা সেট করতে হবে কিনা তা এনকোড করতে হবে এবং এটি যেখানে তাদের এটি গড়ে 8 বিটের চেয়ে কিছুটা কম লাগে কারণ রেজেক্স চরিত্রের ব্যাপ্তি হতে পারে ব্যবহার করা হয়েছে। সুতরাং এটি সেটের চরিত্র প্রতি সেগমেন্টে প্রায় 3 বা 4 বিট বা চরিত্রের প্রায় 21-24 বিট তৈরি করে।

এটি লাইন-মোড়ানো পরিচালনা করে না।


1
আরে @ সামগাক, আরও পার্ল প্রেম দেখে খুশি! আমি কয়েকটি জিনিস লক্ষ্য করেছি যা আপনাকে কিছু বাইট ছাঁটাই করতে সহায়তা করতে পারে এবং সেগুলি ভাগ করতে চেয়েছিল! এটি হ্রাস করতে আপনি পার্লের কিছু যাদু ভেরিয়েবল ব্যবহার করতে পারেন; ' 'এর সাথে প্রতিস্থাপন করা যেতে পারে $"এবং ' 'এটি হতে পারে $"x3যা কয়েকটি \nছাঁটাই ছাঁটাই করে দেয়, আরও কয়েকটি থেকে মুক্তি পাওয়ার জন্য আপনার গুলি আক্ষরিক নিউলাইন হতে পারে। আপনার প্রারম্ভিক প্রস্থান ডাই ব্যবহার করে খুব ছোট করা যেতে পারে, যাতে if(/[kmvwx]/i){print" -\n"x3;exit}হয় die" - "x3if(/[kmvwx]/i)। আরও কিছুটা ফাজিংয়ের পাশাপাশি বন্ধনীগুলি এড়াতে আপনি লুপটি পুনরায় সাজিয়ে নিতে পারেন এবং আপনার $zআরও কয়েকটি সঞ্চয় করার দরকার নেই !
ডম হেস্টিংস

1
আমি আশা করি আপনি অসন্তুষ্ট হন না তবে আমি আরও কমানোর দিকে লক্ষ্য করেছি, gist.github.com/dom111/e651b5de8c7e7fc9a6cf । নীচে 323!
ডম হেস্টিংস

@ ডোমহাস্টিংস কোনও অপরাধই মোটেই গ্রহণ করা হয়নি, দুর্দান্ত গল্ফিং টিপসের জন্য ধন্যবাদ! আমি আমার সম্পাদিত উত্তরে আমি তাদের যথাসময়ে ব্যবহার করেছি, যা আমি সেগমেন্টের নিদর্শনগুলির জন্য রেজিক্সের পরিবর্তে বিটওয়াইজ এনকোডিং ব্যবহার করে পরিবর্তন করেছি। দুর্ভাগ্যক্রমে $ z ফিরে এসেছে, এবং এটি থেকে কীভাবে মুক্তি পাবেন তা আমি বুঝতে পারি না। এছাড়াও, $_=lc<>কাজ করে না, কারণ তখন কোডটি আপার এবং লোয়ারকেস চিউ
সামগাক

1

সাধারণ লিপ, 488 416

(lambda(z)(dotimes(r 3)(map()(lambda(c)(do((i 0(+ 17 i))n)((or(and(> i 901)(setf n 146))(=(char-code c)(ldb(byte 8 9)(setf n(ldb(byte 17 i)#36RIL884OIVFXJY4DCQ0O8DPH8MOMR2DSLPP3O4ESYHS234A9HEQYSV8IBDBZI6Z3C3MCVR77OYD3QN5G6CX2UQWGL4UY5R9PKYI1JQ5Y6DC27MQQGUZSCGI8Q9JCYP9N1L4YYKRWM1ZNMSVTSB4792UUWV6Z3906VSP981WCCBMDNJ02)))))(loop for v from(* 3 r)for d across"!_!"do(format t"~:[ ~;~A~]"(logbitp v n)d)))))z)(terpri)))

উদাহরণ

সহ "abcdefg'hijklnopqrstuz", প্রিন্টগুলি:

 _           _  _  _  _           _           _  _     _        _ 
!_!!_  _  _!!_ !_ !   _ !_   !  ! _ !   _  _ !_!!_! _ !_ !_     _!
! !!_!!_ !_!!_ !  !_! _ ! !  !!_! _ !_ ! !!_!!    !!   _!!_ !_!!_ 

মন্তব্য

অক্ষর এবং তাদের উপস্থাপনা বেস 36 এ এই সংখ্যাটিতে এনকোড করা হয়েছে:

IL884OIVFXJY4DCQ0O8DPH8MOMR2DSLPP3O4ESYHS234A9HEQYSV8IBDBZI6Z3C3MCVR77OYD3QN5G6CX2UQWGL4UY5R9PKYI1JQ5Y6DC27MQQGUZSCGI8Q9JCYP9N1L4YYKRWM1ZNMSVTSB4792UUWV6Z3906VSP981WCCBMDNJ02

এই অঙ্কের বাইনারি উপস্থাপনা 17 বিটের গ্রুপে বিভক্ত।

উদাহরণস্বরূপ, 17 টি বিটের শেষ গ্রুপটি 110000111101010যা এখানে দুটি ভাগে বিভক্ত:

  1. 110000, চরিত্রের চর-কোড 0
  2. 111101010, অঙ্কনটির একটি এনকোডিং, নিম্নরূপে সর্বোত্তমভাবে উপস্থাপিত:

    010 (bits 0-2)         _ 
    101 (bits 3-5)   =>   ! !
    111 (bits 6-8)        !_!
    

    প্রথম এবং শেষ "কলাম" এর বিটগুলি !অক্ষরগুলির জন্য, _চরিত্রটির জন্য মধ্যম কলামে থাকে । যখন প্রয়োজন হয়, একটি অক্ষরের বড় হাতের অক্ষর এবং ডাউনসেস উভয়ই সংরক্ষণ করা হয়।

ফাংশনটি ইনপুট স্ট্রিংয়ের উপরে তিনবার পুনরাবৃত্তি করে, আউটপুটটির প্রতিটি লাইনের জন্য একটি, সারণীতে একটি মিলের অক্ষর অনুসন্ধান করে (বা ডিফল্ট 146, ওরফে তিনটি বার), এবং বর্তমান সারিতে উপস্থাপনাটি মুদ্রণ করে।


চ্যালেঞ্জে অংশ নেওয়ার জন্য আপনাকে ধন্যবাদ। আমি লক্ষ্য করেছি যে আপনার আউটপুটে আপনার 'কে' 'এল' হিসাবে প্রদর্শিত হবে। আপনি প্রয়োজনীয়তাটি ভুল বুঝে থাকতে পারেন যে অসমর্থিত অক্ষরটিকে অন্য বৈধ চরিত্রের সাথে মুদ্রণ করা যায় না। এছাড়াও, আমি দেখতে পাচ্ছি যে আপনি 'চরিত্রটি যুক্ত করেছেন , যা দুর্দান্ত; তবে এটি 7-সেগমেন্টের ডিসপ্লে সক্ষম কিনা এর বাইরে এটি প্রদর্শিত হবে। আপনি যদি !1 লাইন দিয়ে নীচে সরান তবে এটি সঠিক হবে।
কিছু ব্যবহারকারী

আমি 'চরিত্রটি আপডেট করব এবং এর জন্য প্রশ্নটি সম্পাদনা করব Kকারণ আসলে, আমি Kইনপুট স্ট্রিংয়ে ("... jlKn ...") ;-) ভুল জায়গায় রেখেছি আপনি কেবল ট্রিপল বারগুলি (ত্রুটি) দেখতে পাচ্ছেন এল পরে এটি লক্ষ্য করার জন্য ধন্যবাদ।
coredump

1

জাভাস্ক্রিপ্ট (ES6), 380 352 324 বাইট

( দ্রষ্টব্য: কোড ক্যারেট নোটেশনটি ব্যবহার করে, কারণ এতে কিছু ছাপানো অক্ষর নেই original মূল কোড পেতে এখানে ক্লিক করুন এবং কাঁচা ডেটা নির্বাচন করুন And এবং না, hসিজেএম প্রোগ্রাম নয় J)

d=s=>{a=' ',u=n=>r>>n&1?'!':a,v=n=>r>>n&1?'_':a,g='ABCDEFGHIJLNOPQRSTUYZabcdefghijlnopqrstuyz0123456789-? ÿ',h='{vUnWSuz(lTb}[;B7V|>O{vFnWSur lTbf[;B7Vd>O}(O/:7w)^??^BK^0^G',x=y=z='';for(i=0;i<s.length;x+=a+v(0)+a,y+=u(4)+v(1)+u(3),z+=u(6)+v(2)+u(5)){q=g.indexOf(s[i++]);if(q<0)return d`ÿ`;r=h.charCodeAt(q)}return x+`
${y}
`+z}

হিসাবে d("7-seg display")বা অনুরূপ বলা হয় । ফায়ারফক্স 40 এ কাজ করে তবে অন্য ব্রাউজারগুলিতে নাও হতে পারে। কিছু কারণে, এইচটিএমএল / জেএস স্নিপেট প্রিন্টযোগ্যগুলি সংরক্ষণ করে না, তবে আপনি এখানে থেকে কাঁচা ডেটা অনুলিপি করতে পারেন ।

Ungolfed:

( নোট: g এবং hমেলে ব্যবধান সহ padded হয়েছে 8, -, ÿএবং spaceতাদের সংশ্লিষ্ট ইউনিকোড মান।)

d = function (s) {
  t = function (n) { return Math.floor(n) % 2; };
  g = 'ABCDEFGHIJLNOPQRSTUYZabcdefghijlnopqrstuyz012345679? 8      -      ÿ      space ';
  h = '{vUnWSuz(lTb}[;B7V|>O{vFnWSur lTbf[;B7Vd>O}(O/:7w)?K \u007f \u0002 \u0007 \u0000';
  x = y = z = '';
  for(var i = 0; i < s.length; i++) {
    q = g.indexOf(s.charAt(i));
    if (q < 0)          // if g does not contain the character
      return d('ÿ');    // ÿ is equivalent to the error character, '\u0007'
    r = h.charCodeAt(q);
    x += ' ' + (r % 2 === 1 ? '_' : ' ') + ' ';
    y += (t(r / 16) === 1 ? '!' : ' ') + (t(r / 2) === 1 ? '_' : ' ') + (t(r / 8) === 1 ? '!' : ' ');
    z += (t(r / 64) === 1 ? '!' : ' ') + (t(r / 4) === 1 ? '_' : ' ') + (t(r / 32) === 1 ? '!' : ' ');
  }
  return x + '\n' + y + '\n' + z;
}

ব্যাখ্যা:

আমি তাত্ক্ষণিকভাবে লক্ষ্য করেছি যে 7 টি বিভাগগুলি, 0/ 1বিটগুলিতে রূপান্তরিত হয়েছে , প্রথম 128 ইউনিকোড অক্ষরগুলির সাথে ভাল যাবে। এই ধারণার সাথে সমস্যাটি হ'ল এই অক্ষরগুলির 1/4 টি প্রিন্টযোগ্য নিয়ন্ত্রণের অক্ষর। আমার কোডে এগুলি ব্যবহার করা এটিকে অবিশ্বাস্যরকম অগোছালো দেখাচ্ছে (বা অবিশ্বাস্য বুদ্ধিমান; আমি কোনটি সিদ্ধান্ত নিই নি)। বাকি কোডটি সহজ রাখার সময় এটি সমাধান করার জন্য, আমি এই ধারণাটি নিয়ে এসেছি:

ব্যতীত -, স্থান , এবং ত্রুটি , অক্ষর কেউই কম উল্লম্ব বিভাগগুলির উভয় অনুপস্থিত ছিলেন। সুতরাং এটি নিশ্চিত করার জন্য যে এই সমস্ত চরিত্রের মধ্যেই রয়েছে 0020এবং 007fআমি কেবলমাত্র এই বিভাগগুলিতে 64 এবং 32 বিটগুলি ম্যাপ করেছি so

     1
    ---
16 |   | 8
  2 ---
64 |   | 32
    ---
     4

অন্যান্য 5 বিভাগের সংখ্যা খুব গুরুত্বপূর্ণ নয়; এগুলি অন্য যে কোনও উপায়ে সাজানো যেতে পারে এবং এখনও একই অক্ষরগুলি "ইন-সীমানা" থাকতে পারে।

উদাহরণস্বরূপ, এখান থেকে এনকোডেড সংস্করণ একটি :

     1
    ---
16 |   | 8
  2 ---
64 |   | 32

Dec: 64 + 32 + 16 + 8 + 2 + 1 = 123
Hex: 40 + 20 + 10 + 8 + 2 + 1 = 7B = u+007B = {

আমি তারপরে প্রতিটি 7-সেগ চরিত্রের এনকোড সংস্করণটি স্টফ করেছিলাম h। তবে, 8ফলস্বরূপ 007f( মুছে ফেলা নিয়ন্ত্রণ কোড; বিভাগগুলি কীভাবে সাজানো থাকে তা ধ্রুবক নয়), স্পেসের ফলে 0000( নাল কোড; এছাড়াও ধ্রুবক) -ফলাফল 0002, এবং ত্রুটির ফলস্বরূপ 0007। আমি সঠিক অবস্থানে কপি-আটকানো কাঁচা বাইট জন্য 8, -এবং ত্রুটি ; স্থান সহজেই সঙ্গে অর্জন করা হয়েছিল \0

এই সমস্ত এনকোডিংয়ের পরে, আমাকে যা করতে হয়েছিল তা হ'ল স্ট্রিংটি ডিকোড করতে এবং এটি 7-সেগ পাঠযোগ্য ফরম্যাটে আউটপুট করে। আমি একটি ব্যবহৃত জন্য লুপ এবং তিনটি ভেরিয়েবল ( x, y, এবং zস্ট্রিং প্রতিটি অক্ষর দিয়ে যেতে এবং আউটপুট তার 7-seg সমতুল্য যোগ করার জন্য, প্রতিটি একটি আউটপুট লাইন সংশ্লিষ্ট)। আমি পছন্দ ÿজন্য ত্রুটি কারণ আমি যতদূর জানি, কোনো কীবোর্ডে না, এবং এটি শেষ অক্ষর চরিত্র u+0000-u+00ffপরিসীমা। এর পরিবর্তে আমি মজাদার এবং বেছে নিতে পারতাম Ξ(গ্রীক বর্ণ XI) পরিবর্তে ....;)

সম্পাদনা করুন 1: সংরক্ষিত তৈরি মিনি- ফাংশন দ্বারা স্থান একটি গুচ্ছ কিনা তা নির্ধারণ করতে !, _অথবা প্রয়োজন হয়।

সম্পাদনা 2: আমি শেষবার এই পোস্টটি দেখার পরে যে কৌশলগুলি শিখেছি তা ব্যবহার করে আরও একগুচ্ছ স্থান বাঁচিয়েছে।

যথারীতি, পরামর্শগুলি ব্যাপকভাবে প্রশংসা করা হয়!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.