শব্দ -> শহর স্কাইলাইন


40

চ্যালেঞ্জ

আপনার প্রোগ্রাম বা ফাংশন STDIN বা একটি ফাংশন প্যারামিটার থেকে একক স্ট্রিং ইনপুট গ্রহণ করবে। আপনি ধরে নিতে পারেন ইনপুটটিতে কেবল বর্ণানুক্রমিক অক্ষর (a-zA-Z), স্পেস এবং সম্পূর্ণ স্টপ থাকবে। ইনপুট কেস সংবেদনশীল, তাই আপনি 'ক' এর সাথে যেমন আচরণ করেন তেমনই আপনার 'এ' আচরণ করা উচিত।

স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য, আপনি নীচের স্পেসিফিকেশন অনুযায়ী কোনও বিল্ডিংয়ের উপস্থাপনা তৈরি করবেন।

প্রতিটি বিল্ডিংয়ের একটি ছাদ থাকতে হবে, উপরের লাইনের একটি আন্ডারস্কোর দ্বারা মনোনীত তারপর দ্বিতীয় লাইনে একটি স্ল্যাশ, স্থান, ব্যাকস্ল্যাশ।

 _
/ \

তারপরে অক্ষরের সংখ্যার (a = 1, b = 2, c = 3 ইত্যাদি) সাথে মিল রেখে আপনার বেশ কয়েকটি মেঝে থাকবে যা প্রতিটি দিকের প্রাচীর (|) এবং মাঝখানে একটি স্থান দ্বারা উপস্থাপিত। নীচের তল (এবং শুধুমাত্র নীচের তল) এর একটি ভিত্তি থাকা উচিত, যা দেয়ালগুলির মধ্যে একটি আন্ডারস্কোর। এটার মত...

|_|

সুতরাং উদাহরণস্বরূপ, 'বি' এর মতো দেখাবে

 _
/ \
| |
|_|

এখন, আমরা জানি যে খুব লম্বা, সরু ভবনগুলি দাঁড়াতে পারে না এবং অবশ্যই বেসে আরও প্রশস্ত হওয়া উচিত, তাই কোনও বাড়তি সমর্থন ছাড়াই কোনও বিল্ডিং তিন তলার বেশি উঁচুতে দাঁড়াতে পারে না। সুতরাং প্রতি তিনটি স্তরে (কম নয়) আপনার একটি 'প্রশস্ত স্তর' যুক্ত করা উচিত। প্রশস্তকরণ স্তরটি এর নীচের অংশের দেয়ালের উপরে সরাসরি একটি স্ল্যাশ এবং ব্যাকস্ল্যাশ নিয়ে গঠিত এবং নীচের অংশটি উপরের অংশটির চেয়ে দুটি স্পেস বেশি হওয়া উচিত। অতিরিক্ত স্তর বিল্ডিংয়ের উচ্চতার দিকে গণনা করে না।

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

উদাহরণস্বরূপ, 'abcdefga' এর মতো দেখাবে।

                           _
                          / \
                     _    | |
                _   / \   | |
           _   / \  | |   | |
          / \  | |  | |  /   \
       _  | |  | |  | |  |   |
    _ / \ | |  | | /   \ |   |
 _ / \| | | | /   \|   | |   |  _
/ \| || |/   \|   ||   |/     \/ \
|_||_||_||___||___||___||_____||_|

স্ট্রিং ইনপুটটিতে স্পেসগুলি একটি ডাবল স্পেস দ্বারা প্রতিনিধিত্ব করা উচিত।

স্ট্রিং ইনপুটটিতে ফুল স্টপগুলি এই জাতীয় ধ্বংসস্তূপের দ্বারা প্রতিনিধিত্ব করা উচিত।

/\/\

আরও উদাহরণ

ইনপুট = Hello world.

আউটপুট =

                                                   _                                                  
                                                  / \                                                 
                                                  | |                                                 
                                                  | |                                                 
                                                  | |                                                 
                                                 /   \                                                
                                                 |   |                                                
                                                 |   |                       _                        
                                                 |   |                      / \                       
                                                /     \                     | |                       
                                                |     |                     | |                       
                                   _            |     |          _          | |                       
                                  / \           |     |         / \        /   \                      
                                  | |          /       \        | |        |   |                      
                                  | |          |       |        | |        |   |                      
                _        _        | |          |       |        | |        |   |        _             
               / \      / \      /   \         |       |       /   \      /     \      / \            
               | |      | |      |   |        /         \      |   |      |     |      | |            
               | |      | |      |   |        |         |      |   |      |     |      | |            
               | |      | |      |   |        |         |      |   |      |     |      | |            
   _          /   \    /   \    /     \       |         |     /     \    /       \    /   \           
  / \         |   |    |   |    |     |      /           \    |     |    |       |    |   |           
  | |         |   |    |   |    |     |      |           |    |     |    |       |    |   |           
  | |         |   |    |   |    |     |      |           |    |     |    |       |    |   |           
  | |    _   /     \  /     \  /       \     |           |   /       \  /         \  /     \          
 /   \  / \  |     |  |     |  |       |    /             \  |       |  |         |  |     |   _      
 |   |  | |  |     |  |     |  |       |    |             |  |       |  |         |  |     |  / \     
 |   |  | |  |     |  |     |  |       |    |             |  |       |  |         |  |     |  | |     
 |   |  | | /       \/       \/         \   |             | /         \/           \/       \ | |     
/     \/   \|       ||       ||         |  /               \|         ||           ||       | | |     
|     ||   ||       ||       ||         |  |               ||         ||           ||       |/   \    
|_____||___||_______||_______||_________|  |_______________||_________||___________||_______||___|/\/\

ইনপুট = lorem ipsum

                                                                                             _                  
                                                                                            / \                 
                                                                              _             | |                 
                                                                             / \            | |                 
                          _                                                  | |            | |                 
                         / \                                                 | |           /   \                
                         | |                                    _            | |           |   |                
                         | |                                   / \          /   \          |   |                
              _          | |                                   | |          |   |          |   |                
             / \        /   \                                  | |          |   |         /     \               
             | |        |   |              _                   | |          |   |         |     |         _     
             | |        |   |             / \                 /   \        /     \        |     |        / \    
    _        | |        |   |             | |                 |   |        |     |        |     |        | |    
   / \      /   \      /     \            | |                 |   |        |     |       /       \       | |    
   | |      |   |      |     |            | |                 |   |        |     |       |       |       | |    
   | |      |   |      |     |           /   \               /     \      /       \      |       |      /   \   
   | |      |   |      |     |           |   |        _      |     |      |       |      |       |      |   |   
  /   \    /     \    /       \          |   |       / \     |     |      |       |     /         \     |   |   
  |   |    |     |    |       |          |   |       | |     |     |      |       |     |         |     |   |   
  |   |    |     |    |       |         /     \      | |    /       \    /         \    |         |    /     \  
  |   |    |     |    |       |         |     |      | |    |       |    |         |    |         |    |     |  
 /     \  /       \  /         \   _    |     |     /   \   |       |    |         |   /           \   |     |  
 |     |  |       |  |         |  / \   |     |     |   |   |       |    |         |   |           |   |     |  
 |     |  |       |  |         |  | |  /       \    |   |  /         \  /           \  |           |  /       \ 
 |     |  |       |  |         |  | |  |       |    |   |  |         |  |           |  |           |  |       | 
/       \/         \/           \ | |  |       |   /     \ |         |  |           | /             \ |       | 
|       ||         ||           |/   \ |       |   |     | |         |  |           | |             | |       | 
|       ||         ||           ||   |/         \  |     |/           \/             \|             |/         \
|_______||_________||___________||___||_________|  |_____||___________||_____________||_____________||_________|

ইনপুট = a.a.a.x.x.x.a.a.a

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

বিধি

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

বিঃদ্রঃ

এটি পিপিসিজিতে আমার প্রথম পোস্ট, তাই দয়া করে আমার দিকে সহজ করুন। এটি স্যান্ডবক্সের মাধ্যমে হয়েছে। কোন নেতিবাচক পয়েন্ট বা সম্ভাব্য উন্নতি দয়া করে একটি মন্তব্য পোস্ট করুন এবং আমি যা করতে পারি তা করব


7
রূপান্তর [a,z]এবং [A,Z]করতে [1,26]একটি অর্থহীন প্রয়োজন মত মনে হয়। কেবলমাত্র একটি তালিকা পূর্ণসংখ্যা ইনপুট হিসাবে ব্যবহার করা ( 0ধ্বংসস্তূপের জন্য ইনপুট হ'ল) ​​আরও ভাল। এছাড়াও, আপনার চ্যালেঞ্জটি স্যান্ডবক্সে থাকার পরে কেবল 21 ঘন্টা পোস্ট করা , একাধিক ব্যবহারকারীর কাছ থেকে কোনও ভোট বা প্রতিক্রিয়া পাওয়ার অপেক্ষা না করে, এটি "স্যান্ডবক্সের মধ্য দিয়ে গেছে" বলে গণ্য হয় না। লোকদের পর্যালোচনা করার জন্য প্রচুর সময় দেওয়ার জন্য, সর্বনিম্ন 48-72 ঘন্টা স্যান্ডবক্সে চ্যালেঞ্জগুলি ছেড়ে দেওয়ার পরামর্শ দেওয়া হয়।
মেগো

2
আমাকে মনে করিয়ে দেয় এই । নিস প্রথম চ্যালেঞ্জ, কিন্তু আমি সুপারিশ করছি পরিবর্তন করার কথা ভাবুন [a,z], [1.26]অংশের ঐ মেগো উল্লেখ করেছে। এটি optionচ্ছিক হওয়া প্রায়শই সেরা (যদি তা চ্যালেঞ্জের মূল অংশ না হয় (এটি এখানে নেই)
স্টিভি গ্রিফিন

2
আমি বলব, এটি খুব সুন্দর প্রথম চ্যালেঞ্জ। সাইটে স্বাগতম!
ডিজেএমসিএমহেম

1
আমি পূর্ণসংখ্যার সাথে অ্যাড ম্যাপিংয়ের বিষয়টিটি বুঝতে পারি। চ্যালেঞ্জের প্রথম পুনরাবৃত্তিতে এটি উপলব্ধি করেছিল তবে স্পষ্টতা এবং সংকোচনের জন্য সম্পাদনা করার পরে (একটি ব্যাকস্টোরি ছিল যা আমি সরিয়েছি) চিঠিগুলি আর প্রাসঙ্গিক নয়। যত তাড়াতাড়ি সম্ভব যথাযথ সম্পাদনা করব
ড্যারেন এইচ

1
আমি ব্যক্তিগতভাবে অ্যাজ, স্পেস, পিরিয়ড পছন্দ করি।
isaacg

উত্তর:


10

জাভাস্ক্রিপ্ট (ES6), 330 326 ... 315 309 বাইট

নীচের তল থেকে শুরু করে এবং প্রতিটি পর্যায়ের মধ্যে বেশ কয়েকটি নিয়মিত অভিব্যক্তি প্রয়োগ করে ASCII শিল্পকে পুনরাবৃত্তভাবে তৈরি করে:

(a,l,R=(E,b)=>E.split`:`.map((e,i)=>l=(l||a).replace(RegExp(e,'g'),b?b.split`:`[i]:n=>(x=(n.charCodeAt()-65)%32)<0?x+1?'/y/y':n+n:x%3+'_'.repeat((x/3<<1)+1)+0)))=>(L=l)?(R('/y:_:/xy:1:2:/xx(x+)y:0(x+)0:3','  :x: _ :3:1: 2$10 :/$1y:0'),L==l?(l=a.join`
`,R('\\d:x:y','|: :\\'),l):f([l].concat(a),l)):f(R('.'),l)

কিভাবে এটা কাজ করে

1) নীচ তল

আমরা ইনপুট স্ট্রিংটিকে নীচের তলায় অনুবাদ করে শুরু করি যেমন:

"ab cd.df.hcab"  -->  "0_01_0  2_00___0/y/y0___02___0/y/y1_____02_00_01_0"

কোথায়:

  • y ব্যাকস্ল্যাশের জন্য একটি সংক্ষিপ্ত নাম (যা পালানোর প্রয়োজন)
  • অঙ্ক ( 0, 1বা 2) শুধু একটা ক্রম আগে _ভবনের বাম প্রাচীর নেই। এটি পরবর্তী 'প্রশস্তকরণ স্তর' এর আগে অবশ্যই তার উপরে স্থাপন করা উচিত দেয়ালের সংখ্যা উপস্থাপন করে।
  • এর ক্রমের পরে অঙ্কটি _হ'ল বিল্ডিংয়ের ডান দেয়াল এবং সর্বদা সেট করা থাকে 0

2) প্রতিটি পর্যায়ের মধ্যে নিয়মিত প্রকাশগুলি প্রয়োগ করা হয়

পুনরাবৃত্ত প্রক্রিয়াটি নিম্নলিখিত নিয়মিত অভিব্যক্তিগুলি ব্যবহার করে পূর্বের তলায় 9 টি প্রতিস্থাপন প্রয়োগ করে:

  1. /\/y/g=> " "(ধ্বংসস্তূপ অপসারণ)
  2. /_/g=> "x"(শক্ত ব্লক দিয়ে ভিত্তি বা বিল্ডিংয়ের শীর্ষটি প্রতিস্থাপন করুন)
  3. /\/xy/g=> " _ "(বিল্ডিংয়ের শীর্ষের সাথে শেষ প্রশস্তকরণ স্তরটি প্রতিস্থাপন করুন)
  4. /1/g=> "3"(সাময়িকভাবে প্রতিস্থাপন 1সঙ্গে 3- শেষ ধাপে দেখুন)
  5. /2/g=> "1"(প্রতিস্থাপন 2সঙ্গে 1)
  6. /\/xx(x+)y/g=> " 2$10 "(একটি নতুন, সংকীর্ণ প্রাচীর সহ একটি প্রশস্ত স্তর প্রতিস্থাপন)
  7. /0(x+)0/g=> "/$1y"(প্রাচীরের শীর্ষকে প্রশস্ত স্তর দিয়ে প্রতিস্থাপন করুন)
  8. /3/g=> "0"(প্রতিস্থাপন 3সঙ্গে 0)

উদাহরণস্বরূপ, এখানে একের পর এক রূপান্তরগুলি রয়েছে 2___0(নীচের তলটি একটি দ্বারা উত্পন্ন 'f'):

"2___0" > "1xxx0" > "0xxx0" > "/xxxy" > " 2x0 " > " 1x0 " > " 0x0 " > " /xy " > "  _  "

                                                                                   _   
                                                                        /xy       /xy  
                                                              0x0       0x0       0x0  
                                                    1x0       1x0       1x0       1x0  
                                          2x0       2x0       2x0       2x0       2x0  
                               /xxxy     /xxxy     /xxxy     /xxxy     /xxxy     /xxxy 
                     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0 
           1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0 
 2___0     2___0     2___0     2___0     2___0     2___0     2___0     2___0     2___0 

নোট : বিল্ডিংয়ের শীর্ষটি তখন ক দ্বারা প্রতিস্থাপিত হয় x। উপরের চিত্রটিতে এটি প্রদর্শিত হয় না।

3) নিয়মিত এক্সপ্রেশন চূড়ান্ত ফলাফল প্রয়োগ

প্রতিস্থাপনের আর কিছু নেই যখন পুনরাবৃত্তি থামে, যার অর্থ আমরা সর্বোচ্চ বিল্ডিংয়ের শীর্ষের বাইরে beyond

আমাদের এখন আরও কয়েকটি নিয়মিত প্রকাশের মাধ্যমে সবকিছু পরিষ্কার করা দরকার:

  1. /\d/g=> "|"(পাইপ দিয়ে অঙ্কগুলি প্রতিস্থাপন করুন)
  2. /x/g=> " "(ফাঁকা জায়গা সহ শক্ত ব্লকগুলি প্রতিস্থাপন করুন)
  3. /y/g=> "\"( yব্যাকস্ল্যাশগুলি দিয়ে প্রতিস্থাপন করুন )

এই ক্ষেত্রে:

  _            _  
 /xy          / \ 
 0x0          | | 
 1x0          | | 
 2x0   -->    | | 
/xxxy        /   \
0xxx0        |   |
1xxx0        |   |
2___0        |___|

ডেমো

let f =

(a,l,R=(E,b)=>E.split`:`.map((e,i)=>l=(l||a).replace(RegExp(e,'g'),b?b.split`:`[i]:n=>(x=(n.charCodeAt()-65)%32)<0?x+1?'/y/y':n+n:x%3+'_'.repeat((x/3<<1)+1)+0)))=>(L=l)?(R('/y:_:/xy:1:2:/xx(x+)y:0(x+)0:3','  :x: _ :3:1: 2$10 :/$1y:0'),L==l?(l=a.join`
`,R('\\d:x:y','|: :\\'),l):f([l].concat(a),l)):f(R('.'),l)

console.log(f('ab cd.df.hcab'));

অবদানকারীরা:
4 বাইট হেডি 8 টি বাইট সংরক্ষণ করেছে ধন্যবাদ নোট দ্য
চার্লসকে ধন্যবাদ জানায়


পূর্ণসংখ্যা হিসাবে যে কোনও ইনপুট নিতে ইচ্ছুক যাকে স্বাগত জানানো হয় তবে আমি প্রস্তাব দিই যে এ জাতীয়
প্রবেশটি

@ mbomb007 - এটি ঠিক আছে। .charCodeAt()যদিও আমার বর্তমান অপ্টিমাইজেশানগুলি কুখ্যাতদের ব্যয়ের জন্য ক্ষতিপূরণ দেয় না ।
আর্নল্ড

আপনি প্রয়োজন হবে না new যেnew RegExp(e,'g')
Hedi

আমি এই পদ্ধতির অনেক পছন্দ। কিছু ধারণা যা সহায়তা করতে পারে: ১. এর মতো একটি চর yব্যবহার করুন আপনার ফরোয়ার্ড স্ল্যাশের জন্য কোনও প্রস্থানের প্রয়োজন নেই। 2. যদি আপনি ব্যবহার _একতলা, আপনি এখনও Regex সঙ্গে শীর্ষ পার্থক্য করতে পারেন: /_ /
চার্লস

1
@ নোটহাট চার্লস - আমি "ডাবল স্পেস" বিধিটি কখনই লক্ষ্য করি নি। ;) এটি স্থির।
আর্নৌল্ড

7

পিএইচপি, 386 376 367 364 362 358 356 বাইট

প্রথম পন্থা; এখনও গল্ফযোগ্য হতে পারে

foreach(str_split($argv[1])as$c)for($n=28,$w='.'!=$c?1+2*ceil(1/3*$n=31&ord($c)):4,$p=$y=0;$y<36;){$s=str_pad("",$w,$y||!$n?" ":_);if($n>26&&!$y){$s="/\\/\\";$n=-1;}elseif($n-->0){$s[$p]=$s[$w-$p-1]="|";if($n%3<1){$o[$y++].=$s;$s=str_pad("",$w);$s[$p]="/";$s[$w-++$p]="\\";}}$o[$y++].=$s;if(!$n)$o[$y++].=str_pad(_,$w," ",2);}for($y=36;$y--;)echo"$o[$y]
";

পিএইচপি, 366 362 361 360 357 বাইট

একটি subfunction সঙ্গে একই পদ্ধতির:

function a($p,$r){global$o,$w,$y;$o[$y++].=str_pad(str_pad($r[0],2*$p,$r[1]).$r[2],$w," ",2);}foreach(str_split($argv[1])as$i=>$c)for($n=28,$w='.'!=$c?1+2*$p=ceil(1/3*$n=31&ord($c)):$p=4,$y=0;$y<36;)if($n>26&&!$y)$o[$n=$y++].="/\\/\\";elseif($n-->0){a($p,$y?"| |":"|_|");if($n%3<1)a($p--,"/ \\");if(!$n)a(1," _");}else a(0,"");for($y=36;$y--;)echo"$o[$y]
";

দ্বিতীয় পদ্ধতির জন্য ভাঙ্গন

function a($p,$r)
{
    global$o,$w,$y;
    $o[$y++].=                  // 3. add result to current line, increase line counter
        str_pad(                // 2. pad ...
        str_pad($r[0],2*$p,$r[1]).$r[2]     // 1. A + inner width(=2*$p-1) times B + C
        ,$w," ",2);             // ... to $w with blanks on both sides # 2==STR_PAD_BOTH
}

foreach(str_split($argv[1])as$i=>$c)
    for(
    $n=28,
    $w='.'!=$c                          // $w=total width
        ?1+2*$p=ceil(1/3*$n=31&ord($c)) // $n=storey count, $p=(inner width+1)/2
        :$p=4                           // $n=28, $p <= $w=4 for rubble
    ,
    $y=0;$y<36;)                        // $y=line counter
        if($n>26&&!$y)
            $o[$n=$y++].="/\\/\\";      // bottom line=rubble, $n=0
        elseif($n-->0)
        {
            a($p,$y?"| |":"|_|");       // add storey
            if($n%3<1)a($p--,"/ \\");   // add widening layer/roof
            if(!$n)a(1," _");           // add roof top
        }
        else
            a(0,"");                    // idk why str_pad doesn´t yield a warning here

for($y=36;$y--;)if($s=rtrim($o[$y]))echo"$s\n"; // output

+16 বাইট যদি নেতৃস্থানীয় নতুন লাইন মঞ্জুরিপ্রাপ্ত নয়:
প্রতিস্থাপন echo"$o[$y]\n;সঙ্গে if($s=rtrim($o[$y]))echo"$s\n";

-3 কোন জন্য বাইট ;<=>?[\]^_{|}~প্রতিস্থাপন 1): ধ্বংসস্তুপের হিসাবে ($n=31&ord($c))সঙ্গে $n, 2) $n=28,$w='.'!=$cসঙ্গে ($n=31&ord($c))<27এবং 3) 4সঙ্গে ($n=28)/7

আর -8 এর জন্য >, ^বা ~ধ্বংসস্তূপ হিসাবে: পূর্বাবস্থায় ফেরা 3)


1
if(!$n){$o[$y++].=str_pad(_,$w," ",2);}বন্ধনীগুলির জন্য -2 বাইটস
জার্গ হালসারম্যান

এবং আউটপুট 3 করা যাবে খাটো বাইট: for($y=36;$y--;)echo"$o[$y]\n";; তবে আমার কাছে একটি নতুন পদ্ধতি রয়েছে যা অন্য 2 বাইট সংরক্ষণ করে।
তিতাস

1
দ্বিতীয় পদ্ধতির জন্য php.net/manual/en/funitions.anonymous.php global গ্লোবালের পরিবর্তে a ($ p, $ r) ব্যবহার ($ o, $ w, $ y) ব্যবহার করুন
জার্গ হালসারম্যান

@ জার্গএলসারম্যান: useকেবল বেনামে কাজ করে for এটি 2 বাইট সংরক্ষণ করতে হবে; তবে আমি সেই ফাংশনটি $a=একটি নাম (+3 বাইট) না দিয়ে পরিবর্তে ভেরিয়েবলে সঞ্চয় করতে হবে এবং $চারটি কলের প্রত্যেকটিতে একটি যুক্ত করতে চাই।
তিতাস

4

পাইথ, 93 79 বাইট

K"/\\"j_.tsm?hJxGdC_m.[hyNk\ +\_mj*hy/k4?nkJ\ \_?%k4"||"Kh=+J=Nh/J3[F*2|@d;Krz0

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ব্যাখ্যা

এটি অনেক দীর্ঘ হওয়ায় আমি এটি ডিফল্টরূপে লুকিয়ে রেখেছি।


4

পার্ল, 147 146 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

STDIN এ ইনপুট দিয়ে চালান, যেমন

citysky.pl <<< " abcdefgxyz."

citysky.pl:

#!/usr/bin/perl -p
s%.%@{[map chr~-ord(lc$&)*4/3-4*(abs||-9),-9..9]}%g;y/M\xa248
A|-\xc6\0-\xff/MA||
A}-\xc6A/d,$a=(lc$a).$_ for($_)x36;*_=a;s/\x9f.*?\K\x9f/\xa3/g;y%A\xc6\x9f-\xa3\x0b-\xff%__/|||\\ %

প্রদর্শিত হিসাবে কাজ করে, তবে \xhhদাবি করা স্কোর পাওয়ার জন্য তাদের আক্ষরিক মান দ্বারা পালিয়ে যাওয়াগুলি প্রতিস্থাপন করে । আপনি এই কমান্ডলাইনটি ব্যবহার করে এটি করতে পারেন:

perl -0pi -e 's/\\x(..)/chr hex $1/eg;s/\n$//' citysky.pl

আমি সত্যিই অন্য কোনও পদ্ধতির অন্বেষণ করি নি, তাই এটি খুব মারাত্মক হতে পারে ...


2

হাস্কেল, 289 বাইট

c?l=c++l++c
c%s=("|"?(drop 2(r s)>>c)):s
g 46=["/\\"?""]
g 32=["  "]
g x="_"%h(mod x 32)
h 1=["/ \\"," _ "]
h x=(" "%h(x-1))!x
v!x|mod x 3/=1=v|z<-'/':r v++"\\"=z:map(" "?)v
r v=v!!0>>" "
f t|l<-map(g.fromEnum)t,m<-maximum(map length l)-1=unlines[l>>= \x->(x++cycle[r x])!!i|i<-[m,m-1..0]]

2

রুবি, 245

->s{a=['']*36
w=' '
s.chars{|c|a[u=0]+=c<?!?w*2:c<?/?"/\\"*2:(h=c.upcase.ord-64
1.upto(1+h+=(h-1)/3){|t|u=[u,l=1+2*((f=h-t)/4)].max
a[t]+=w*(a[0].size-a[t].size)+(f<-1?w:f<0??_:(f%4<1?[?/,?\\]:[?|]*2)*(w*l)).center(u+2)}
"|#{?_*u}|")}
a.reverse}

আপনি যতগুলি চান অতিরিক্ত অতিরিক্ত লাইনগুলিকে অনুমতি দিন, তাই আমি এটি দিয়ে স্বাধীনতা নিচ্ছি। এটি বাদ দিয়ে প্রক্রিয়াটি নিম্নরূপ:

  1. একটি আউটপুট অ্যারে শুরু করুন a
  2. প্রতিটি চর জন্য:
    1. যদি এটি '', যোগ  করুনa[0]
    2. যদি এটি '।', যোগ /\/\করুনa[0]
    3. অন্যথায়:
      1. উচ্চতা গণনা ( c.upcase.ord + (c.upcase.ord-1)/3)
      2. প্রতিটি সারির জন্য a:
        1. সাদা স্থানের সাথে সারিটি প্যাড করুন। a[t]+=w*(a[0].size-a[t].size)
        2. যদি আমরা উপরের এক h, কেন্দ্র একটি_
        3. অন্যথায় যদি আমরা উচ্চতার উপরে, একটি কেন্দ্র 
        4. অন্যথায় যদি আমরা উচ্চতা, কেন্দ্র | |বা / \যথাযথ প্রস্থের ( 1+2*((h-t)/4) এর নীচে থাকি , তবে তার উপর নির্ভর করেh-t%4==0
        5. "|___|"ডান প্রস্থে যোগ করুনa[0]
  3. প্রত্যাবর্তন a.reverse

আমি বাজি ধরছি যদি আমি এড়াতে গণিতটি ব্যবহার করি তবে আমি এটি আরও ছোট করতে পারি reverse


2

পিএইচপি, 297 বাইট

foreach(str_split($argv[1])as$c)for($j=0,$h=ord($c)-64,$g=$h+$f=ceil($h/3),$w=$v=$h<0?$h<-18?2:4:2*$f+1;$j<36;$j++,$g--,$v-=$h>0&&$v>1?($g%4||!$j)?0*$n="|$s|":2+0*$n="/$s\\":$v+0*$n=['','_','',0,'/\/\\'][$v],$o[$j].=str_pad($n,$w,' ',2))$s=str_repeat($j?' ':'_',$v-2);krsort($o);echo join($o,'
');

আরও পঠনযোগ্য সংস্করণ:

foreach (str_split($argv[1]) as $character) {
    for (
        $line = 0,
        $buildingHeight = ord($character) - 64,
        $floorsLeft = $buildingHeight + $supportFloors = ceil($buildingHeight / 3),
        $buildingWidth = $widthOnThisFloor = $buildingHeight < 0
            ? $buildingHeight < -18
                ? 2
                : 4
            : 2 * $supportFloors + 1;

        $line < 36;

        // The body of the for-loop is executed between these statements

        $line++,
        $floorsLeft--,
        $widthOnThisFloor -= $buildingHeight > 0 && $widthOnThisFloor > 1
            ? ($floorsLeft % 4 || !$line)
                ? 0 * $floorString = "|$middleSpacing|"
                : 2 + 0 * $floorString = "/$middleSpacing\\"
            : $widthOnThisFloor + 0 * $floorString = ['', '_', '', 0, '/\/\\'][$widthOnThisFloor],
        $outputArray[$line] .= str_pad($floorString, $buildingWidth, ' ', 2)
    ) {
        $middleSpacing = str_repeat($line ? ' ' : '_', $widthOnThisFloor - 2);
    }
}
krsort($outputArray);
echo join($outputArray, '
');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.