ষষ্ঠ, 108 বাইট
D:let@a=@"%2?@":@"%4?"X":"\\d"<CR>
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp
:%s/<C-r>a/ /g<CR>
:%s/\d/*/g<CR>
<CR>হয় Enterস্ট্রোক, <C-?>সাথে সঙ্গতিপূর্ণ Control + ?, এবং <Esc>থেকে Escapeস্পষ্টত। এই প্রতিটি গণনা 1 বাইট ( মেটা দেখুন ) এর জন্য। সমাধানটিতে লাইন বিরতি হ'ল পাঠযোগ্যতার জন্য। শুধুমাত্র <CR>বাস্তব Enterস্ট্রোক প্রতিনিধিত্ব করে ।
ইনপুট
প্রতিনিধিত্ব করে ইনপুট ফাইলটিতে কেবলমাত্র 1 টি অক্ষর থাকা উচিত n।
শুরু করা
ষষ্ঠীর মতো শুরু করা উচিত:
vi -u NONE input
ব্যাখ্যা
সমাধানে 3 টি অংশ রয়েছে। আমি দ্বিতীয় অংশটি প্রথম (দ্বিতীয় লাইন) বর্ণনা করব, যেহেতু এটি ব্যাখ্যা করা সবচেয়ে সহজ।
রৌদ্র অঙ্কন
সূর্য আঁকার আদেশটি হ'ল:
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp
সূর্যের সঙ্গে টানা করা আবশ্যক , *, 0, 1এবং 3, এভাবে:
*****
**11033**
*111000333*
*111000333*
**1110333**
*******
একটি প্রতিসাম্য এই অংশটির বাইট আকার হ্রাস করতে সহায়তা করবে তবে এটি তেমন গুরুত্বপূর্ণ নয়। আমি পূর্ণ লাইন ব্যাখ্যা করবে না, কিন্তু প্যাটার্ন *****সহজে শেষ লাইনটি জেনারেট করতে ব্যবহৃত হয়, এবং প্যাটার্ন **1110333**3 অন্যান্য লাইনের ধারণকারী জেনারেট করতে একটি রেফারেন্স হিসাবে গ্রহণ করা হয়েছে 0, 1এবং 3।
এটা ব্যবহার করা খুবই জরুরী 0, 1এবং 3পূরণ করা যাবে সূর্যের অংশ (পরবর্তী ব্যাখ্যা দেখুন) জন্য। এই সূর্য আঁকতে 55 বাইট লাগে এবং সম্ভবত কিছু কৌশল দ্বারা গল্ফ করা যেতে পারে।
অনুযায়ী সূর্য পূরণ n
সূর্যকে সঠিকভাবে পূরণ করতে, নিম্নলিখিত নির্দেশাবলীটি হ'ল:
- যদি
n = 0, তবে 0, 1এবং 3(সমস্ত অঙ্ক) এর সাথে প্রতিস্থাপন করা উচিত
- যদি
n = 1, তার 1সাথে অন্য সংখ্যার সাথে প্রতিস্থাপন করা উচিত*
- যদি
n = 2, তবে 0, 1এবং 3(সমস্ত অঙ্ক) এর সাথে প্রতিস্থাপন করা উচিত*
- যদি
n = 3, তার 3সাথে অন্য সংখ্যার সাথে প্রতিস্থাপন করা উচিত*
- যদি
n = 4, তবে 0, 1এবং 3(সমস্ত সংখ্যা) (যেমন n = 0) দিয়ে প্রতিস্থাপন করা উচিত
এর থেকে, আমরা অনুমান করতে পারি যে প্রয়োজনীয় বিকল্পগুলি হ'ল:
- কিছু অঙ্ক প্রতিস্থাপন
( প্রথম প্রতিস্থাপন )
- অন্যান্য সংখ্যাটি
*( দ্বিতীয় প্রতিস্থাপন ) দ্বারা প্রতিস্থাপন করুন
মনে রাখবেন যে "কিছু অঙ্ক" এর অর্থ "কোনও সংখ্যা নেই" ( n = 2উদাহরণস্বরূপ)। এবং "অন্যান্য সমস্ত অঙ্ক" এছাড়াও "কোনও অঙ্কের নয়" উপস্থাপন করতে পারে, যদি সমস্ত অঙ্কগুলি ইতিমধ্যে প্রথম প্রতিস্থাপনের দ্বারা প্রতিস্থাপন করা হয় ( n = 0উদাহরণস্বরূপ)।
দ্বিতীয় প্রতিকল্পন সহজে লেখা যেতে পারে 11 বাইট :
:%s/\d/*/g<CR>
প্রথম প্রতিকল্পন উপর নির্ভর করে n, তাই আমরা প্রথমে নিরূপণ করা কি ডিজিটের প্রতিস্থাপিত হতে করতে যাচ্ছি না। প্রতিস্থাপন করা অক্ষরগুলি যদি নিবন্ধে সংরক্ষণ করা হয় aতবে প্রতিস্থাপনের আদেশটি 11 বাইটেও লেখা হয় :
:%s/<C-r>a/ /g<CR>
<C-r>aaকমান্ডটি টাইপ করা হলে নিবন্ধের বিষয়বস্তু দ্বারা প্রতিস্থাপিত হয় ।
aপূর্ববর্তী নির্দেশাবলী অনুসরণ করে এর মান গণনা করতে , অ্যালগরিদমটি (সিউডো-কোডে):
n := read()
if (n % 2 != 0)
then
a := n
else
if(n % 4 != 0)
then
a := "X"
else
a := "\d"
"X"স্ট্রিং ব্যবহার করা হয় কারণ কখন n = 2, কোনও অঙ্ক ফাঁকা স্থান দ্বারা প্রতিস্থাপিত হয় না। সূর্য নয় এমন যে কোনও স্ট্রিং এখানে ব্যবহার করা যেতে পারে, যতক্ষণ না প্রথম প্রতিস্থাপন কিছুই না করে।
এটি 31 বাইটে লেখা যেতে পারে :
D # yank and delete the first character of the file (n) to register "" (yank by default) : n = @"
:let@a= # define register "a content
@"%2 # if (n % 2 != 0)
? # then
@" # n
: # else
@"%4 # if (n % 4 != 0)
? # then
"X" # "X"
: # else
"\\d" # "\\d"
<CR> # calculate "a
সমাধান
এই সমস্ত অংশগুলি সঠিক ক্রমে রাখুন, এবং আপনার সমাধান রয়েছে:
D:let@a=@"%2?@":@"%4?"X":"\\d"<CR> # calculate the digits to replace with spaces
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp # draw the sun with spaces, stars, 0, 1 and 3
:%s/<C-r>a/ /g<CR> # replace the pattern stored in register "a with spaces
:%s/\d/*/g<CR> # replace the remaining digits with stars