ব্রিজগুলি ASCII আর্টের সমস্ত কিছুর রূপক


15

( শিরোনামের জন্য জিম ওয়েস্টের কাছে ক্ষমাপ্রার্থী এবং এলোমেলোভাবে তাদের লোগোটির সিস্কোর পাঠ্য উপস্থাপনা দ্বারা অনুপ্রাণিত: .:|:.:|:. ধারণাটির জন্য)

একটি ইনপুট পূর্ণসংখ্যা দেওয়া হয় 1 <= n <= 255, nনীচের নির্মাণের নিয়ম অনুসরণ করে দূরত্বের স্থগিতাদেশ ব্রিজের একটি ASCII আর্ট উপস্থাপন করুন :

  • ব্রিজটির শুরু এবং শেষটি ( nদূরত্বের মধ্যে গণনা করা হয় না ) সর্বদা -|এবং |-তাই সেতুটি যথাযথভাবে পাশের মহাসড়কে সংযোগ করতে পারে।
  • ব্রিজটি নীচের দিকে প্রসারিত হয় না (রোডওয়ে স্তরটি, -সারি দিয়ে তৈরি, নীচের সারিটি)।
  • --এক সারিতে সর্বোচ্চ দুটি রোডওয়ে টুকরা থাকতে পারে , আর কোনও স্প্যানের জন্য সাপোর্টের জন্য সাসপেনশন তারগুলি প্রয়োজন।
  • সাসপেনশন কেবলগুলি \রাস্তা দিয়ে |সোজা লাইনে টাওয়ারগুলি পর্যন্ত প্রসারিত হয় ।
  • |সংলগ্ন সাসপেনশন কেবলগুলিকে সমর্থন করার জন্য টাওয়ারগুলি অবশ্যই লম্বা হতে হবে, তবে লম্বা নয়।
  • ব্রিজটি মাঝারি পয়েন্টটি সম্পর্কে বাম থেকে ডানদিকে ভারসাম্য বজায় রাখতে হবে, যখনই সম্ভব কেন্দ্রের বিভাগগুলির পক্ষে হবে।
  • উপরের সমস্তটি তারগুলির একটি ক্ষুদ্রায়নের ফলস্বরূপ হওয়া উচিত, তবে কেবল স্পষ্ট করে বলতে গেলে, উপরের বিধিগুলি অনুসরণ করার পরেও স্থগিত কেবলগুলির সংখ্যা হ্রাস করতে হবে।

একটি চাক্ষুষ প্রতিনিধিত্ব প্রদান করতে, এখানে প্রত্যাশিত আউটপুট রয়েছে n = 1, 2, 3, ... 15-

1
-|-|-

2
-|--|-

3
-|\-/|-

4
-|\--/|-

5
 |\   /|
-|-\-/-|-

6
 |\    /|
-|-\--/-|-

7
 |\     /|
 | \   / |
-|--\-/--|-

8
 |\      /|
 | \    / |
-|--\--/--|-

9
 |\       /|
 | \     / |
 |  \   /  |
-|\--\-/--/|-

10
 |\        /|
 | \      / |
 |  \    /  |
-|\--\--/--/|-

11
 |\         /|
 | \       / |
 |  \     /  |
 |\  \   /  /|
-|-\--\-/--/-|-

12
 |\          /|
 | \        / |
 |  \      /  |
 |\  \    /  /|
-|-\--\--/--/-|-

13
 |\           /|
 | \         / |
 |  \       /  |
 |\  \     /  /|
 | \  \   /  / |
-|--\--\-/--/--|-

14
 |\            /|
 | \          / |
 |  \        /  |
 |\  \      /  /|
 | \  \    /  / |
-|--\--\--/--/--|-

15
 |\             /|
 | \           / |
 |  \         /  |
 |\  \       /  /|
 | \  \     /  / |
 |  \  \   /  /  |
-|\--\--\-/--/--/|-

ইনপুট

একটি একক ধনাত্মক পূর্ণসংখ্যা কোনো সুবিধাজনক বিন্যাসে , n > 9

আউটপুট

উপরোক্ত নির্মাণকৌশলটি অনুসরণ করে ASCII- আর্ট ব্রিজ।

বিধি

  • নেতৃস্থানীয় বা পিছনের নতুন লাইনের বা হোয়াইটস্পেসগুলি সমস্ত alচ্ছিক, যতক্ষণ না সেতুর অক্ষরগুলি নিজেরাই সঠিকভাবে লাইন করে থাকে।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরে আসতে পারেন।
  • যদি সম্ভব হয় তবে দয়া করে একটি অনলাইন পরীক্ষার পরিবেশের একটি লিঙ্ক অন্তর্ভুক্ত করুন যাতে লোকেরা আপনার কোডটি চেষ্টা করতে পারে!
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।


@ কারাসোকম্পুটিং হাহ, হাল ছাড়বেন না! : ডি
অ্যাডমবর্কবার্ক

আমি হাল ছাড়িনি, কেবল অন্য কোথাও যেতে হয়েছিল এবং আমার অগ্রগতি হারাতে চাইছিল না;)।
যাদু অক্টোপাস উরন 21

5
নিবন্ধন করুন সুতরাং, আরও বেশি পছন্দ করুন # রেজিটেম্পোরারিওয়ালিওয়াকওয়ে।
অ্যাডমবার্কবার্ক 21

উত্তর:


3

05AB1E , 79 59 58 বাইট

"\  "×¹<;£R.sð«¹3‹ið}.BvyD¹Éi¨}R„\/„/\‡«'|.øð.ø}ð'-‡¹2›i»}

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

ব্যাখ্যা:

"\  "×                                                     # Push n copies of "\  ".
      ¹<;£                                                 # Push a[0:(n-1)/2] 
          R.s                                              # Reverse, get substrings.
             ð«                                            # Append a space.
               ¹3‹ið}                                      # If n < 3, push a space.
                     .B                                    # Boxify.
                       vy                      }           # For each...
                         D¹Éi¨}R                           # Dupe, if n is odd, a[0:-1].
                                „\/„/\‡                    # Reverse the slashes.
                                       «'|.øð.ø            # Surround with | and a space.
                                                ð'-‡       # Replace spaces with "-".
                                                    ¹2›i } # If it's more than 2...
                                                        »  # Join stack by newlines.

আরও ভাল সমাধানটি পাওয়া গেল, কীটি ছিল প্রতিটি সংখ্যার জন্য নিম্নলিখিত অ্যারেগুলি নিম্নরূপে ফেরত দেওয়া:

1=[" "]
2=["  "]
3=["\"]
4=["\ "]
5=["\"," \"]
6=["\"," \ "]
7=["\"," \","  \"]
8=["\"," \","  \ "]
Etc...

4

পাইথন 2, 173 বাইট

i=input()
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
b=(i*'/--')[:~-i/2]
for x in range(1,~-i/2):print f((len(b)-x)*'-'+b[:x]).replace('-',' ')
print f(b)

খ এর মানটি মিরর করুন এবং কেন্দ্রীয় যুক্ত করুন "-"
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
বেস প্যাটার্ন (নীচের লাইনের ডান অর্ধেক)
b=(i*'/--')[:~-i/2]
নীচের
for x in range(1,~-i/2):
অংশের স্তরগুলির জন্য লুপ বেস প্যাটার্নের প্রথম x অক্ষর পান এবং "-"
(len(b)-x)*'-'+b[:x]
সমস্ত প্রতিস্থাপন করুন - মুদ্রণের জন্য ফাঁকা স্থান দিয়ে সম্পূর্ণ করুন সমস্ত স্তর (নীচে ব্যতীত)
print f().replace('-',' ')
মুদ্রণ নীচের স্তর
print f(b)


5
আপনার পোস্টে কাঁচা সংস্করণ (কোনও মন্তব্য ছাড়াই) অন্তর্ভুক্ত করা উচিত
ফ্লিপট্যাক

4

বেফুঞ্জ, 150 বাইট

45&3+:00p4+2/:10p`-v
*\00g1-\`*2*+\1-!+v>1+:20p55+00g>::::00g1--!\:20g+00g-:0`\3%!
`1\*!%3\`0:-\g02:\<^_@#-g01<:,$_^#`\0:-1,g3+**4!-g01g02!:+*3*
 |\/-

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

আমি কোডটির একটি অদম্য সংস্করণও সরবরাহ করেছি যা সেতুটি নির্মাণে ব্যবহৃত আর্কিটেকচারকে আরও ভালভাবে প্রদর্শন করে।

        >4                                         5v
        v+3                                       <&<
        >:00                                     p4+v
        v-`p0                                   1:/2<
*+\1-!+v>1+:20p55+00g>::::00g1--!\:20g+00g-:0`\3%!*\00g1-\`*2
-\g02:\<^_@#-g01<:,$_^#`\0:-1,g6+7+**4!-g01g02!:>#+<v*!%3\`0:
        |\/->3#*                             *#`^#1\<

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

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

বিস্তারিত ব্যাখ্যা

আমরা আউটপুট অঞ্চলের প্রস্থ এবং উচ্চতা গণনা করে শুরু করি যা ব্রিজটি রেন্ডার করার জন্য পুনরাবৃত্তি করা প্রয়োজন।

w  = n + 3                (stored at 0,0)
h  = (w + 4)/2            (stored at 1,0)

নোট করুন যে y রেঞ্জটি শূন্য-ভিত্তিক নয়। প্রাথমিক মানটি h5 - (h<5) পর্যন্ত পুনরাবৃত্তি হয় (বর্তমান মান ২,০০০ তে সংরক্ষিত হয়)। এক্স মান থেকে iterated হয় W নিচে 0 এবং স্ট্যাকের মধ্যে সংরক্ষিত হয়।

অভ্যন্তরীণ লুপটি কেবলমাত্র বুলিয়ান শর্তগুলির একটি সিরিজ যা নির্ধারণ করে যে কোনও নির্দিষ্ট এক্স , ওয়াই সমন্বয় কোনও স্থানের সাথে মেলে না যেখানে ফাঁকা স্থানের অক্ষর প্রয়োজন। এই গণনাগুলি দুটি স্লাইডিং অফসেটের উপর ভিত্তি করে তৈরি করা হয়েছে যা সাসপেনশন কেবলগুলির পথ অনুসরণ করে।

loff = y + x - w
roff = y - x 

বিভিন্ন অবস্থার পরে নিম্নলিখিত হিসাবে নির্ধারিত হয়:

left_tower       = (x == w-1)
left_suspension  = (loff > 0) and (loff%3 == 0) and (x < w-1)
right_tower      = (x == 1)
right_suspension = (roff > 0) and (roff%3 == 0) and (x > 1)
bridge_deck      = (y == h)

এই শর্তগুলিকে অফসেটে সঠিক চরিত্রটিতে অনুবাদ করতে, আমাদের কেবল একটি যথাযথ অফসেট দিয়ে তাদের প্রতিটিকে গুণ করতে হবে এবং ফলাফলটির যোগফল দিতে হবে। শর্তগুলি মূল্যায়িত হওয়ার সাথে সাথে এই গণনাটি করা হয়। সুতরাং এটির মতো কিছু দেখাচ্ছে:

char_offset =  left_tower
char_offset += left_suspension * 2
char_offset += right_tower
char_offset += right_suspension * 3
char_offset += !char_offset * bridge_deck * 4

নোট করুন যে অন্য কোনও শর্ত পূরণ হয়েছে কিনা তার ভিত্তিতে সেতু_ডেক মানটি একত্রিত করা হয়েছে, যেহেতু স্থগিতকরণ বা টাওয়ার চরিত্রটি ডেকের চেয়ে অগ্রাধিকার গ্রহণ করবে।

শেষ ফলাফলটি খেলার মাঠের শেষ লাইনে অক্ষর টেবিলের একটি অফসেট। আমরা কেবল সেই অক্ষরটিকে আউটপুট করি এবং লুপটি পুনরাবৃত্তি করি।


একটি ব্যাখ্যা প্রদান যত্ন? এই সমস্ত পায় এবং রাখে তার সাথে অনুসরণ করা শক্ত
মাইল্ডিলিউকোটিওস্ট

আমি অনুগ্রহ যোগ করার পরে আপনিই একমাত্র পোস্ট করতে পারেন, অন্য কেউ যদি আপনাকে মারধর না করে আমি আপনাকে 100 প্রদান করব
ম্যাজিক অক্টোপাস উরান

@ কারাসোকম্পুটিং আমি জানি আপনি এটির চেয়ে ভাল আশা করেছিলেন, তবে এখনও প্রচুর সময় আছে এবং বৈশিষ্ট্যযুক্ত তালিকার শীর্ষের কাছাকাছি যাওয়ার পরে এটি আরও নোটিশ পাওয়া উচিত।
জেমস হোল্ডারেন্স

এটি নিজের মধ্যেই একটি দুর্দান্ত উত্তর, এটি ইতিমধ্যে আমার চেয়ে বেশি ভোট পেয়েছে; ভাল অবশ্যই সঠিক শব্দ নয়।
ম্যাজিক অক্টোপাস উরান

3

ব্যাচ, 241 বাইট

@echo off
set t=set s=
%t%
for /l %%i in (1,1,%1)do call %t% %%s%%
%t% !%s%! 
for /l %%i in (5,2,%1)do call:l 0
:l
%t%%s:\ = \%
%t%%s: /=/ %
%t%%s:!   =!\  %
%t%%s:   !=  /!%
%t%%s:\  !=\ /!%
if %1 gtr 0 %t%%s: =-%
echo %s:!=^|%

দ্রষ্টব্য: লাইনে 5 স্থান অনুসরণ করে শুরু করে ফাঁকা জায়গাগুলির সারি তৈরি করে, তারপরে প্রয়োজনীয় হিসাবে সংযোজন করা, কাঙ্ক্ষিত উচ্চতায় টাওয়ারগুলি তৈরির পুনরাবৃত্তি করা, কোনও অবশিষ্ট স্থান রাস্তা দিয়ে প্রতিস্থাপন করে শেষ end


3

WinDbg, 312 বাইট

r$t4=@$t0+4;.block{j3>@$t0'r$t5=1';r$t5=(@$t0-1)/2};f8<<16 L@$t4*@$t5 2d;f8<<16 L@$t4*(@$t5-1) 20;.for(r$t1=0;@$t1<@$t5;r$t1=@$t1+1){eb2000001+@$t4*@$t1 7c;e1fffffe+@$t4*(1+@$t1) 7c;j2<@$t0'.for(r$t2=@$t1;@$t2>=0;r$t2=@$t2-3){e2000002+@$t4*@$t1+@$t2 5c;e1fffffd+@$t4*(1+@$t1)-@$t2 2f}'};da/c@$t4 8<<16 L@$t4*@$t5

সিউডো-রেজিস্টার সেট করে ইনপুট করা হয় $t0

আমার মনে হচ্ছে দুটি forলুপকে এক সাথে সংযুক্ত করার কোনও উপায় থাকা উচিত ... সম্ভবত আরও কিছু গল্ফিংয়ের সুযোগও রয়েছে ...

এইটি পুরো অঞ্চলটি রাস্তা দিয়ে ভরাট করে, তারপরে সমস্ত স্থানকে শেষ সারি বাদ দিয়ে এবং শেষ পর্যন্ত কলাম এবং তারগুলি তৈরি করে কাজ করে।

r$t4 = @$t0+4;                                * Set width to input+4
.block                                        * Code block, needed for some reason...
{                                             * and .block+j is shorter than .if/.else
    j 3>@$t0                                  * If input is less than 3...
    '
        r$t5 = 1                              * ...set height to 1
    ';                                        * Implicit else...
        r$t5 = (@$t0-1)/2                     * ...set height to (input-1)/2
};
f 8<<16 L@$t4*@$t5 2d;                        * Fill area with -
f 8<<16 L@$t4*(@$t5-1) 20;                    * Fill all but last row with space
.for(r$t1=0; @$t1<@$t5; r$t1=@$t1+1)          * For each row
{
    eb 2000001+@$t4*@$t1 7c;                  * Build the left column with |
    e 1fffffe+@$t4*(1+@$t1) 7c;               * Build the right column (e is the same as last e* call, ie- eb)
    j 2<@$t0                                  * If input is more than 2...
    '
        .for(r$t2=@$t1; @$t2>=0; r$t2=@$t2-3) * ...Enumerate from counter back to 0
        {
            e 2000002+@$t4*@$t1+@$t2 5c;      * Build left cables with \
            e 1fffffd+@$t4*(1+@$t1)-@$t2 2f   * Build right cables with /
        }
    '
};
da /c@$t4 8<<16 L@$t4*@$t5                    * Print the string in lines of length width

1-15 এর নমুনা আউটপুট:

0:000> .for(r$t0=1;@$t0<10;r$t0=@$t0+1){.printf"%d\n",@$t0;r$t4=@$t0+4;.block{j3>@$t0'r$t5=1';r$t5=(@$t0-1)/2};f8<<16 L@$t4*@$t5 2d;f8<<16 L@$t4*(@$t5-1) 20;.for(r$t1=0;@$t1<@$t5;r$t1=@$t1+1){eb2000001+@$t4*@$t1 7c;e1fffffe+@$t4*(1+@$t1) 7c;j2<@$t0'.for(r$t2=@$t1;@$t2>=0;r$t2=@$t2-3){e2000002+@$t4*@$t1+@$t2 5c;e1fffffd+@$t4*(1+@$t1)-@$t2 2f}'};da/c@$t4 8<<16 L@$t4*@$t5}
1
Filled 0x5 bytes
Filled 0x0 bytes
02000000  "-|-|-"
2
Filled 0x6 bytes
Filled 0x0 bytes
02000000  "-|--|-"
3
Filled 0x7 bytes
Filled 0x0 bytes
02000000  "-|\-/|-"
4
Filled 0x8 bytes
Filled 0x0 bytes
02000000  "-|\--/|-"
5
Filled 0x12 bytes
Filled 0x9 bytes
02000000  " |\   /| "
02000009  "-|-\-/-|-"
6
Filled 0x14 bytes
Filled 0xa bytes
02000000  " |\    /| "
0200000a  "-|-\--/-|-"
7
Filled 0x21 bytes
Filled 0x16 bytes
02000000  " |\     /| "
0200000b  " | \   / | "
02000016  "-|--\-/--|-"
8
Filled 0x24 bytes
Filled 0x18 bytes
02000000  " |\      /| "
0200000c  " | \    / | "
02000018  "-|--\--/--|-"
9
Filled 0x34 bytes
Filled 0x27 bytes
02000000  " |\       /| "
0200000d  " | \     / | "
0200001a  " |  \   /  | "
02000027  "-|\--\-/--/|-"
10
Filled 0x38 bytes
Filled 0x2a bytes
02000000  " |\        /| "
0200000e  " | \      / | "
0200001c  " |  \    /  | "
0200002a  "-|\--\--/--/|-"
11
Filled 0x4b bytes
Filled 0x3c bytes
02000000  " |\         /| "
0200000f  " | \       / | "
0200001e  " |  \     /  | "
0200002d  " |\  \   /  /| "
0200003c  "-|-\--\-/--/-|-"
12
Filled 0x50 bytes
Filled 0x40 bytes
02000000  " |\          /| "
02000010  " | \        / | "
02000020  " |  \      /  | "
02000030  " |\  \    /  /| "
02000040  "-|-\--\--/--/-|-"
13
Filled 0x66 bytes
Filled 0x55 bytes
02000000  " |\           /| "
02000011  " | \         / | "
02000022  " |  \       /  | "
02000033  " |\  \     /  /| "
02000044  " | \  \   /  / | "
02000055  "-|--\--\-/--/--|-"
14
Filled 0x6c bytes
Filled 0x5a bytes
02000000  " |\            /| "
02000012  " | \          / | "
02000024  " |  \        /  | "
02000036  " |\  \      /  /| "
02000048  " | \  \    /  / | "
0200005a  "-|--\--\--/--/--|-"
15
Filled 0x85 bytes
Filled 0x72 bytes
02000000  " |\             /| "
02000013  " | \           / | "
02000026  " |  \         /  | "
02000039  " |\  \       /  /| "
0200004c  " | \  \     /  / | "
0200005f  " |  \  \   /  /  | "
02000072  "-|\--\--\-/--/--/|-"

2

জাভা 8, 423 , 412 বাইট

11 বাইট সংরক্ষণ করেছেন কৃতিক্সী লিথোসকে ধন্যবাদ

golfed:

void f(int n){int i,j,k,t=n/2+n%2,u=t-2,q;char v=45;char[][]a=new char[t-1][n+4];for(char[]c:a)Arrays.fill(c,' ');a[u][0]=v;a[u][n+3]=v;for(q=0;q<t-1;q++){a[q][1]='|';a[q][n+2]='|';}for(i=t+1;i>1;i--){if((t-i)%3==0){k=u;for(j=i;j>1;j--)a[k--][j]='\\';}else a[u][i]=v;}for(i=n/2+2;i<n+2;i++){if((i-n/2-3)%3==0){k=u;for(j=i;j<n+2;j++)a[k--][j]='/';}else a[u][i]=v;}for(char[]w:a)System.out.println(new String(w));}

ungolfed:

void f(int n){
    int i,j,k,t=n/2+n%2,u=t-2;
    char v=45;
    char[][] a=new char[t-1][n+4];
    for (char[]c : a) Arrays.fill(c,' ');
    a[u][0]=v;
    a[u][n+3]=v;

    // left and right columns
    for (int q=0;q<t-1;q++){
        a[q][1]='|';
        a[q][n+2]='|';
    }
    // left part of base
    for (i=t+1;i>1;i--){
        if ((t-i)%3==0){
            k=u;
            for (j=i;j>1;j--)
                a[k--][j]='\\';
        }
        else a[u][i]=v;
    }
    // right part of base
    for (i=n/2+2;i<n+2;i++){
        if ((i-n/2-3)%3==0){
            k=u;
            for (j=i;j<n+2;j++)
                a[k--][j]='/';
        }
        else a[u][i]=v;
    }
    for (char[]w : a) System.out.println(new String(w));
}

আপনি গলফ নানাভাবে এই উত্তর, প্রথম, আপনি আপনার সমস্ত int- এ ঘোষণা এক বিবৃতিতে থাকতে পারে করতে পারেন, কিছু int i,j,k,t=n/2+n%2,u=t-2,q=0পরিবর্তে থাকার char v="-";আপনি ব্যবহার করতে পারেন char v=45;এবং আপনি পরিবর্তন করতে পারেন abc%xyz==0থেকে গুলি abc%xyz<1(এটা পরীক্ষিত না হয়েছে)
Kritixi Lithos

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