একটি পিনহোল ক্যামেরার মাধ্যমে সৌরগ্রহণ


28

এই চ্যালেঞ্জ একটি সহজ হওয়া ASCII অত্যাধুনিক দ্বারা অনুপ্রাণিত চ্যালেঞ্জ সূর্যগ্রহণ যে একটি ইনপুট দেওয়া 21 আগস্ট, 2017. ঘটেছে 0 <= n <= 4, আউটপুট অন্ধকার সংশ্লিষ্ট পর্যায় নীচে বর্ণিত:

n=0:
   *****
 **     **
*         *
*         *
**       **
  *******

n=1:
   *****
 **  *****
*   *******
*   *******
**   ******
  *******

n=2:
   *****
 *********
***********
***********
***********
  *******

n=3:
   *****
 *****  **
*******   *
*******   *
******   **
  *******

n=4:
   *****
 **     **
*         *
*         *
**       **
  *******

বিধি

  • আপনি 0 বা 1 সূচক করতে পারেন, আপনি যা চয়ন করেছেন তা জানাতে পারেন।
  • ব্যবহৃত অক্ষরগুলি স্থান এবং *আপনি *(স্থান ব্যতীত) কোনও মুদ্রণযোগ্য চর ব্যবহার করতে পারেন ।
  • চলমান স্থানগুলি alচ্ছিক (আপনার এগুলি থাকতে পারে বা নাও থাকতে পারে)।
  • এটি , সর্বনিম্ন বাইট-কাউন্টটি বিজয়ী।

3
@ মিঃ এক্সকোডার আমি কলমোগোরভ-জটিলতা হিসাবে ইনপুট পাওয়ার চ্যালেঞ্জগুলি ট্যাগ করার বিপক্ষে , যদিও এটি ওপি'র বিবেচনার ভিত্তিতে।
এরিক দ্য আউটগল্ফার

15
বোমার যে এটি শীর্ষ থেকে নীচে প্রতিসাম্য নয়।
অ্যাডমবর্কবার্ক

এছাড়াও, ইতিমধ্যে গ্রহন শুরু হয়েছে ...
এরিক দ্য আউটগল্ফার

@ অ্যাডমবার্কবার্ক হ্যাঁ আমি কিছু বাইট বাঁচাতে পারতাম ...
এরিক দি আউটগলফার

7
"আপনি *স্থান ... সহ" জন্য কোনও চরিত্র ব্যবহার করতে পারেন ? ;)
হ্যাগেন ফন

উত্তর:


13

পাইথন 2 , 161 149 142 135 বাইট

lambda n,u=u' *':u'''   *****
 ****
**
**
****
  *******'''.translate({1:u[0<n<3],2:u[0<n<4],3:u[1<n<4]})

এটি অনলাইন চেষ্টা করুন!

-7 মিঃ এক্সকোডারকে ধন্যবাদ ।


9
ছাপানো অপব্যবহারযোগ্য সুন্দর ব্যবহার।
জ্যাকারি

আমি ইমাসে অনুলিপি না করা পর্যন্ত এই উত্তরের পুরোপুরি প্রশংসা করি নি। উজ্জ্বল!
সিলভিও মায়োলো

পছন্দ করেছেন
এরিক দি আউটগল্ফার

আমি কেবল এই পৃষ্ঠায় উত্তরটি দেখছিলাম এবং এটি কীভাবে কাজ করে তা বুঝতে পারি না। ইমাকস সমস্ত লুকানো অক্ষরকে ^ এ, ^ বি, ^ সে, ইত্যাদি হিসাবে দেখায়
সিলভিও মায়োলো

@ সিলভিওমায়োলো ওহ, কারণ মুদ্রণযোগ্যদের এমন একটি উপস্থাপনা রয়েছে যা কিছুটা ইউনিকোডের মতো দেখা যায়।
এরিক দি আউটগল্ফার

9

কাঠকয়লা , 82 81 55 43 বাইট

-38 বাইট ধন্যবাদ নীলকে!

Nν”{“⟲FEd⧴_³⟲”‖O¿﹪ν⁴«F﹪ν²G↗³↑²↖²↙³*↑¤*¿⁼ν¹‖

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি ভার্জোজ সংস্করণে।

আমি এটা হ্যাক জন্য। : পি আমি সম্ভবত 40 বাইট বাইরের গল্ফ পেয়ে যাব। 26 38 বাইট ... যথেষ্ট বন্ধ?


1
আমি আপনার বেসিক অ্যালগরিদমের কিছু সরলীকরণ করেছি: এটি অনলাইনে চেষ্টা করুন!
নীল

2
চারকোল ব্যবহারে আমার অক্ষমতার পরিবর্তে আমি আমার যুক্তিতে গল্ফ হয়ে উঠলাম। > _> ধন্যবাদ!
সম্পূর্ণরূপে

1
বাহ্যিক "বৃত্ত" মুদ্রণটি স্বল্পতম কাজ করে বলে মনে হচ্ছে। আমি বিজোড় ইনপুটগুলির জন্য বহুভুজ নিয়ে সৃজনশীলও ছিলাম: অনলাইনে চেষ্টা করে দেখুন!
নীল

1) দাম্মিট, আমি ভেবেছিলাম আমি চালাক হয়ে যাচ্ছি PolygonHollow। : পি 2) ওহ, দুর্দান্ত। ধন্যবাদ!
সম্পূর্ণরূপে

5

দারুচিনি গাম , 70 বাইট

Hexdump:

0000000: 6c33 5053 5050 d002 012e 20a5 0002 4026  l3PSPP.... ...@&
0000010: 9001 0568 6c20 07a6 0648 4080 b521 8a19  ...hl ...H@..!..
0000020: 30a6 1644 1093 0de3 a098 6184 6206 422d  0..D......a.b.B-
0000030: 6136 c20c 6374 3380 3cb8 5aa0 1436 36ba  a6..ct3.<.Z..66.
0000040: 5f4c 280f 0f00                           _L(...

এটি অনলাইন চেষ্টা করুন!

এই ভাষাটি কীভাবে ব্যবহার করতে হয় তা জানতে আমি দীর্ঘ সময় অপেক্ষা করেছিলাম । : P: P

সুতরাং, দারুচিনি গাম হ'ল বুবলগাম, তবে এটি বুবলগামের চেয়ে বেশি "বাস্তব" ভাষা।

প্রথম বাইট ( l) মোডটি অভিধান মোডে সেট করে। বাইটের বাকি অংশটি নিম্নোক্ত স্ট্রিংটি সংকুচিত।

0&   *****
 **     **
*         *
*         *
**       **
  *******;1&   *****
 **  *****
*   *******
*   *******
**   ******
  *******;2&   *****
 *********
***********
***********
***********
  *******;3&   *****
 *****  **
*******   *
*******   *
******   **
  *******;4&   *****
 **     **
*         *
*         *
**       **
  *******

এটি মূলত একটি সংখ্যাকে নির্ধারিত প্রতিটি পাঠ্য সহ একটি সন্ধানের টেবিল তৈরি করে। প্রোগ্রামটি তখন ইনপুট নেয় এবং সংশ্লিষ্ট পাঠ্যকে আউটপুট দেয়।


বাইট argument%4বা argument&3সংরক্ষণ করতে পারেন ?
তিতাস

5

জাভাস্ক্রিপ্ট (ES6), 103 102 বাইট

f=
n=>`   *****
 **66733**${s=`
*666777333*`}${s}
**6667333**
  *******`.replace(/\d/g,c=>" *"[c*2>>n&1])
<input type=number min=0 max=4 oninput=o.textContent=f(this.value)><pre id=o>

সম্পাদনা করুন: @arrylyeo ধন্যবাদ 1 বাইট সংরক্ষণ করা।


1
*666777333*\nভেরিয়েবলের মধ্যে স্টোর করে -2 বাইট ।
darrylyeo

@darrylyeo আমি অবশ্যই কিছু ভুল করছি কারণ আমি কেবল 1 বাইট সংরক্ষণ করতে পারি বলে মনে করতে পারি ...
নীল

আমার খারাপ, এটি সত্যিই কেবল 1 বাইট সংরক্ষণ করে।
darrylyeo

4

এসওজিএল ভি0.12 , 40 39 বাইট

"⁽Ρūa╔Ƨ ‘╥▓.4%?52"¹ο1¹‘╬¡╬5.H?:±}.2=?╬8

এখানে চেষ্টা করুন!


যদি এটি কোনওরকম সহায়তা করে, ট্রেলিং স্পেসগুলি alচ্ছিক (আপনার থাকতে পারে এবং নাও থাকতে পারে)। - এসওজিএল জানেন না, তবে বাইটগুলি সংরক্ষণ করতে পারেন
মিঃ এক্সকডার

@ মিঃ এক্সকোডার বিপরীতে এটি করতেন, এসওজিএল যে কোনও জায়গায় এএসসিআইআই শিল্প নিয়ে কাজ করার সময় পেছনের জায়গাগুলি যোগ করে: পি
ডিজাইমা

4

ষষ্ঠ, 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

3

পিএইচপি, 114 + 1 বাইট

জন্য +1 বাইট -R। স্থানান্তরিত ইঙ্গিতটির জন্য @ নিলকে ধন্যবাদ।

for(;$c="   *****
 **66733**
*666777333*
*666777333*
**6667333**
  *******"[$i++];)echo+$c?" *"[$c*2>>$argn&1]:$c;

আন্ডারস্কোর ব্যবহার করে *0-ইনডেক্সড। পাইপ হিসাবে চালান -nRবা এটি অনলাইনে চেষ্টা করুন

পিএইচপি 5.5 বা তার পরে প্রয়োজন:
পুরানো পিএইচপি আক্ষরিক স্ট্রিং ইনডেক্সিং বুঝতে পারে না (পার্স ত্রুটি);
পিএইচপি 7.1 নন-সংখ্যা সংক্রান্ত মান সম্পর্কে অভিযোগ করে ( ঠিক করার +$cসাথে প্রতিস্থাপন করুন $c>0)।


1
আমার মনে হয় " _"[$c*2>>$argn&1]আপনার যদি প্রয়োজন হয় তবে নেতিবাচক শিফট প্যারামিটারগুলি এড়িয়ে চলে।
নিল




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