গল্ফিং ASCII শিল্পের জন্য টিপস


18

আমি মনে করি পিপিসিজিতে ASCII শিল্প প্রশ্নগুলি মজাদার তবে ব্যক্তিগতভাবে আমি মনে করি এটি বেশ শক্ত হতে পারে, বিশেষত যখন প্রশ্নটি হিসাবে ট্যাগ করা হয় ।

আমি ভাবছি যদি এখানে কারও কাছে এমন কিছু টিপস থাকে যা ASCII শিল্প তৈরির জন্য দরকারী be

কেবল অক্ষরগুলি সাজানো সহজ, তবে (সংক্ষিপ্ত) অ্যালগোরিদমের সাহায্যে জিনিসগুলি আরও জটিল হয়ে উঠবে।

আমি ASCII শিল্পের মতো কথা বলছি:

  • ASCII শিল্পে পাঠ্য (অক্ষর)
  • চিত্র (লোগো বা আইকন)

আমি কেবল সাধারণ টিপস সন্ধান করছি, তবে ভাষা-নির্দিষ্ট অনুমোদিত কারণ সেগুলির বেশিরভাগই কোনওভাবেই অনুবাদ করা যেতে পারে।

উত্তর:


8

সংক্ষেপণ অ্যালগোরিদম

আপনি স্ট্রিংয়ে এলজেডএমএ সংক্ষেপণ প্রয়োগ করতে পারেন।
অনেক ভাষা এটি সমর্থন করে।

রান-দৈর্ঘ্যের এনকোডিং

আপনি যেমন প্রসেসিং নির্দেশাবলী ব্যবহার করতে পারেন [char][number](যেমন b12)।
এই সংক্ষেপণ অ্যালগরিদমটি এখানে ব্যবহৃত হয়: /codegolf//a/20589/10920

আরও পঠন: http://en.wikedia.org/wiki/Run-leight_encoding

পূর্ণসংখ্যা প্যাকিং

আপনি ছোট আকারগুলি সংরক্ষণের জন্য পূর্ণসংখ্যার অ্যারে ব্যবহার করতে পারেন যেমন:

// This is an invader!
// (SE line height makes it looks awful)
// ~158 characters

    ##          ##    
      ##      ##      
    ##############    
  ####  ######  ####  
######################
##  ##############  ##
##  ##          ##  ##
      ####  ####       

প্রতিটি স্থান a তে অনুবাদ করা হবে 0
প্রতিটি তীক্ষ্ণ একটি অনুবাদ করা হবে 1

// ~58 characters
// Saved ~100 bytes!
[
  196656,  49344,   262128,  999228,
  4194303, 3407859, 3342387, 62400
]

প্রতিটি বিট তারপর বিটওয়াইস অপারেটর ব্যবহার করে পড়া হয় &

উপরের অ্যালগরিদম আরও বড় সংখ্যার বেস ব্যবহার করে উন্নত করা যেতে পারে:

// ~44 characters
// Integers are in base 36.
// Use `_` as a separator (or a line break).
"47qo_122o_5m9c_lf0c_2hwcf_211ir_1zn03_1c5c"

3
আপনার প্রক্রিয়াকরণের নির্দেশাবলী সাধারণত রান-লেংথ এনকোডিং , এফওয়াইআই হিসাবে পরিচিত ।
ফায়ার

@ ফায়ারফ্লাই ধন্যবাদ! আমি জানতাম না যে এর জন্য কোনও নাম আছে।
ফ্লোরেন্ট

সমানভাবে (আমার ভাষায়) এটি আরও বাড়ানো যেতে পারে কারণ এটি 62 ভিত্তিতে এনকোড করা পূর্ণসংখ্যার সমর্থন করে:[0-9A-Za-z]
সাইওস

5

প্রতিসম সন্ধান করুন

কখনও কখনও প্রয়োজনীয় ASCII শিল্প কোনও পর্যায়ে প্রতিসম হয়। উদাহরণস্বরূপ, আরগিল এএসসিআইআই আর্টের সাথে এর অনুরূপ একটি আউটপুট প্রয়োজন:

    /\        /\
   /  \  /\  /  \
/\/    \/  \/    \/\
\/\    /\  /\    /\/
   \  /  \/  \  /
    \/        \/

একটি কেবল এটি সাধারণভাবে মুদ্রণ করতে পারে, তবে ভাষার উপর নির্ভর করে প্রয়োজনীয় কোডটি কেবলমাত্র ফলাফলের উপরের অর্ধেক উত্পাদন করে, এটির বিপরীত করে এবং অদলবদল করে /এবং ছোট করা যেতে পারে \

স্থানান্তরের চেষ্টা করুন

ইন হওয়া ASCII আর্ট ধনুর্বিদ্যা তীর মুদ্রণের ফলাফলের এই হল, একজন প্রদত্ত স্কেল n:

     /\
    /  \
   /    \
  /      \
  \      /
   \____/
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
   /|  |\
  / |  | \
 /  |  |  \
/   |  |   \
/   |  |   \
/   |__|   \
/  /    \  \
/ /      \ \
//        \\
/          \

আমরা যদি তীরটি একবার দেখে নিই তবে দেখতে পাচ্ছি যে এখানে 8 ধরণের লাইন রয়েছে:

/ \
\ /
\_/
| |
/ | | \
/ |_| \
/ / \ \
/ \

এর ট্রান্সপোজ করার জন্য একই চেষ্টা করা যাক।

                         ///////
                        /     / 
   /\                  /     /  
  /  \                /     /   
 /   _||||||||||||||||||||||    
/    _                     _    
\    _                     _    
 \   _||||||||||||||||||||||    
  \  /                \     \   
   \/                  \     \  
                        \     \ 
                         \\\\\\\

এখানে 10 ধরণের লাইন রয়েছে।

/
/ /
/ \ / /
/ _|
/ _ _
\ _ _
\ _|
\ / \ \
\ \
\

তবে এখানে ধরাটি: নীচের 5টি শীর্ষে 5 টির মতোই অদলবদল করে, অদলবদল /এবং \। পূর্ববর্তী নিয়ম অনুসারে, আপনি প্রথমে প্রথম 5 তৈরি করতে পারবেন, অনুলিপি করতে পারবেন, অনুলিপি করুন এবং শেষ পর্যন্ত তীরটি পেতে ট্রান্সপোজ করতে পারবেন। এটি প্রচুর কোড সংরক্ষণ করতে পারে।


5

অক্ষর, পালানোর ক্রম এবং কনসোল কোডগুলি নিয়ন্ত্রণ করুন

যদি প্রশ্ন তাদের নিষেধ না করে, মেটা সম্পর্কিত বর্তমান sensক্যমত্য হ'ল ASCII শিল্প চ্যালেঞ্জগুলির জন্য নির্দিষ্ট বাইট স্ট্রিমের প্রয়োজন হয় না, তবে আউটপুট যা সঠিক দেখাচ্ছে।

এর অর্থ হল একটি সহায়ক টার্মিনাল ধরে আমরা আমাদের উত্তরগুলিতে ASCII নিয়ন্ত্রণ অক্ষর , এএনএসআই এস্কেপ সিকোয়েন্স এবং লিনাক্স কনসোল কোড ব্যবহার করতে পারি ।

অন্যথায় নির্দিষ্ট না করা থাকলে, এই উত্তরটির বাকী অংশটি লিনাক্স টার্মিনালের আচরণ সম্পর্কে ব্যাখ্যা করবে, যা এখনই পরীক্ষার জন্য আমার কাছে বিদ্যমান।

ASCII নিয়ন্ত্রণ অক্ষর

সমর্থন / ব্যাখ্যা টার্মিনাল থেকে টার্মিনাল এবং অক্ষর থেকে আলাদা হয়ে থাকে। সবচেয়ে পোর্টেবল এক লাইনফীড (করা কর্তব্য \n, \x0a), যা পরের লাইনে শুরুতে চরিত্র চলে আসে।

অন্যান্য দরকারী চরিত্রগুলির মধ্যে রয়েছে:

  • উল্লম্ব ট্যাব ( \v, \x0b) কার্সারকে এক অবস্থান ডান দিকে নিয়ে যায়, তারপরে একটি অবস্থান নীচে।

    $ echo -e 'a\vb'
    a
     b
    
  • ক্যারেজ রিটার্ন ( \r, \x0d) কার্সারটিকে বর্তমান লাইনের শুরুতে সরিয়ে দেয় । পরবর্তী কোনও মুদ্রণযোগ্য অক্ষর বর্তমান লাইনের প্রথম অক্ষরটি ওভাররাইট করবে।

    $ echo -e 'ab\rc'
    cb
    
  • ব্যাকস্পেস ( \b, \x08) কার্সারকে এক অবস্থান বামে সরায়। পরবর্তী কোনও মুদ্রণযোগ্য অক্ষর ব্যাকস্পেসের আগে অক্ষরটি ওভাররাইট করে।

    $ echo -e 'ab\bc'
    ac
    
  • এস্কেপ ( \e, \x1b) নিজে থেকে কিছুই করে না, তবে এএনএসআই এস্কেপ সিকোয়েন্সগুলি (allyচ্ছিকভাবে) এবং লিনাক্স কনসোল কোডগুলির একটি অংশ তৈরি করে।

অনেক ভাষা সোর্স কোডে প্রকৃত নিয়ন্ত্রণ অক্ষরের অনুমতি দেয়।

এএনএসআই পালানোর সিকোয়েন্সগুলি

(এখনও আসতে পারে)

লিনাক্স কনসোল কোড

আরও অনেকগুলি রয়েছে, তবে ASCII আর্টের জন্য সর্বাধিক দরকারী কনসোল কোডগুলি সম্ভবত:

  • ক্রমটি টার্মিনালটি পুনরায় সেট\ec করবে । এটি স্ক্রিনটি সাফ করে, উপরের বাম কোণে কার্সারকে ছাপিয়ে দেয় এবং তাদের পূর্বনির্ধারিত মানগুলিতে সম্মুখ এবং পশ্চাদপটে রঙ, কার্সার ঝলকানো হার ইত্যাদি সেট করে।

  • ক্রমটি \eMএকটি বিপরীত লাইনফিডের কারণ , কার্সারটি একটি অবস্থানকে উপরে নিয়ে যাবে।

    $ echo -e '\na\eMb\n'
     b
    a
    
  • ক্রমটি বর্তমান কলামে ট্যাব স্টপ\eH সেট করে ।

    $ echo -e '   \eHa\n\tb'
       a
       b
    

2

নিদর্শন সন্ধান করুন

এটি সম্ভবত কিছুটা সুস্পষ্ট হতে পারে তবে ... আউটপুটে নিদর্শন, মিল এবং পুনরাবৃত্তির সন্ধান করুন। উদাহরণস্বরূপ, আমি যখন ট্রান্সফর্ম নম্বরটি 7-সেগমেন্ট ডিসপ্লের প্যাটার্ন টাস্কে দেখলাম তখন আমি কীভাবে এটির গল্ফ করতে পারি তা নিয়ে ভাবতে শুরু করেছিলাম এবং মিলগুলির সন্ধান করতে শুরু করি। অক্ষর ম্যাট্রিক্সের উল্লম্ব অংশগুলির মধ্যে যেভাবে অনুভূমিক অংশগুলি চলেছে সে কারণে এটি একবারে তিনটি বিভাগের সাথে ডিল করা সম্ভবত সবচেয়ে সহজ হবে (যেমন প্রথম, শীর্ষস্থানীয় একটির জন্য দুটি "সর্বদা খালি" বিভাগ যুক্ত করা) :

বিভাগগুলি গ্রোপিং

সুতরাং, আপনি ভালো কিছু করতে পারে lc + " "*N + rc + "\n"এন-1 বার এবং তারপর lc + bc*N + rcএকবার প্রতি তিন অংশ জন্য ( lc, bc, rcleft-, bottom-, এবং ডান-সেগমেন্ট অক্ষর, অর্থাত এক হচ্ছে |, _অথবা  )।


2

বেস রূপান্তর ব্যবহার করুন

এই উত্তরটি এমন একটি প্রশ্নের উত্তর ছিল যা এএসসিআইআই শিল্প চেয়েছিল যা চরিত্রগুলি + |-এবং নিউলাইনগুলি নিয়ে গঠিত। যেহেতু কেবলমাত্র 5 টি অক্ষর রয়েছে তাই এগুলি একটি বেস 5 নম্বর হিসাবে বিবেচনা করা যেতে পারে এবং বাইটে 3.45 অক্ষর প্যাকিং করে বাইটে রূপান্তর করা যেতে পারে।

নিয়মিততা শোষণ করুন

প্রায়শই, ডেটাগুলিতে কিছু নিয়মিততা থাকবে, এমনকি যদি সেই নিয়মগুলি মিররিংয়ের মতো নির্দিষ্ট সরঞ্জামগুলিতে নিয়োগের পক্ষে যথেষ্ট দৃ .় না হয়। উদাহরণস্বরূপ, উপরের প্রশ্নে, পাঠ্যটি প্রায় আয়তক্ষেত্রাকার হওয়ায় পছন্দসই আউটপুটটি পুরো টেস্ট জুড়ে মোটামুটি সমানভাবে ফাঁক করে দিয়েছে। আমি আমার কোডটি ছোট করার জন্য এটি ব্যবহার করেছি, পাইথের বিভাজনকে n টুকরো ফাংশনে ব্যবহার করে, তারপর নতুন লাইনে যোগ দিয়ে।

আপনার সরঞ্জামগুলি জানুন এবং কাজের জন্য সঠিক একটিটি চয়ন করুন।

আমার জানা সবচেয়ে শক্তিশালী এবং দক্ষ পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জামগুলি হ'ল:

রেজেক্স ইঞ্জিন ///:, রেটিনা, পার্ল, পাওয়ার / সংক্ষিপ্তসার ট্রেড অফের ক্রম।

আপনি যে জিনিসটি করতে চান তা ব্যবহার করে নিয়মিতভাবে রেগেক্স বিকল্পগুলিতে বর্ণনা করা যেতে পারে যেমন এই উত্তর

অস্পষ্ট পাঠ্য-প্রক্রিয়াকরণ সরঞ্জামগুলি: জেমা ইত্যাদি ((আমি নিশ্চিত অন্য কেউ আছেন তবে তারা খুব অস্পষ্ট)

তাদের যদি এমন কোনও বৈশিষ্ট্য থাকে যা আপনার প্রয়োজন মতো হ'ল, অন্য কিছু নেই। যেমন জেমার পুনরাবৃত্তির সাথে মিলে এই প্রশ্নে

সাধারণ কোড গল্ফিংয়ের ভাষা: সিজেম, পাইথ ইত্যাদি

আপনি যদি কিছু সূক্ষ্ম জটিলতা যথেষ্ট পরিমাণে কাজে লাগান তবে ব্যবহার করুন যে অন্য কোনও সরঞ্জাম কাজ করবে না বা এটি কাজটি আরও ছোট করবে orter

অনেক পদ্ধতির চেষ্টা করুন

এটি প্রতিটি কোড-গল্ফ প্রশ্নে প্রযোজ্য, তবে বিশেষত এখানে। আপনি যতক্ষণ না চেষ্টা করছেন ততক্ষণ কোনও নিয়মিততা কাজে লাগছে কিনা তা আপনি জানতে পারবেন না। সম্ভবত একাধিক ভাষায়।

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