স্ল্যাশগুলিতে অঙ্কন


23

একটি প্রোগ্রাম লিখুন যা পাঠ্যগুলির একটি আয়তক্ষেত্রাকার ব্লকে X'র এবং .' এর সমন্বয়ে তৈরি হয় , যেমন এই রুক্ষ A:

......
..XX..
.X..X.
.XXXX.
.X..X.
.X..X.

এই গ্রিডের একটি প্রতিনিধিত্ব আউটপুট 45 ডিগ্রি ঘড়ির কাঁটার বিপরীতে ঘুরিয়ে দিয়ে স্ল্যাশ আঁকুন - প্রসঙ্গের উপর নির্ভর করে এগিয়ে বা পিছনে - সর্বত্র Xএকটি .বা গ্রিডের পাশের অংশ (বাকি জায়গাগুলি পূরণ করে):

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

ইনপুটতে থাকা আকারটি Xস্ল্যাশ দ্বারা বজায় রাখার সময় পর্যন্ত পেছনের এবং শীর্ষস্থানীয় স্থানগুলির সংখ্যা (এবং নিউলাইনগুলি) কোনও বিষয় নয় । এটির অতিরিক্ত সারি বা কলামগুলি ছাঁটাই করা ঠিক আছে .

I / O এর জন্য আপনি স্টিডিন / স্টডআউট / ফাইলগুলি / কমান্ড লাইন প্যারামিটারগুলির যে কোনও সংমিশ্রণ ব্যবহার করতে পারেন। উদাহরণস্বরূপ আপনার স্ক্রিপ্টটি X.প্যাটার্নের কোনও ফাইলের নাম নিতে পারে এবং স্ল্যাশ প্যাটার্ন দিয়ে ফাইলটি পুনরায় লিখতে পারে। অথবা আপনার স্ক্রিপ্ট X.স্ট্যান্ডিন লাইন থেকে রেখার মাধ্যমে প্যাটার্নটি গ্রহণ করতে পারে ( dহয়ে গেলে টিপুন ) এবং ফলাফলকে স্টাডআউটে আউটপুট দেয়।

ইনপুটটি যথেচ্ছভাবে বড় হতে পারে তবে আপনি ধরে নিতে পারেন এটি সর্বদা ভাল ফর্ম্যাট হয়েছে।

এর বাইরে কোনও অক্ষর / \এবং নিউলাইনগুলি কোনও আউটপুটে থাকা উচিত।

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। আপনি যদি নন-এএসসিআইআই অক্ষর ব্যবহার করেন তবে https://mothereff.in/byte-coutter কে বাইট কাউন্টার হিসাবে ব্যবহার করুন ।

বোনাস: আপনি যদি আপনার প্রোগ্রামের একটি অক্ষর পরিবর্তন করতে (প্রতিস্থাপন করুন, অপসারণ করতে পারবেন না) মাইনাস 50 বাইট করুন যাতে এটি স্ল্যাশ গ্রিডকে 45 ডিগ্রি ঘড়ির কাঁটার দিকে ঘুরিয়ে দেয় , যেমন:

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

ইনপুট নমুনা

XXXXXXXXX
X.......X
X.XXXXX.X
X.X...X.X
X.X.X.X.X
X.X...X.X
X.XXXXX.X
X.......X
XXXXXXXXX

XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...X
X...X...............X...............X...........X...................X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...XXXXX...XXXXX...XXXXX...X...X
X...............X.......X...X...........X...........X...X...X.......X...X
XXXXXXXXX...X...XXXXXXXXX...XXXXXXXXX...XXXXX...X...X...X...XXXXXXXXX...X
X.......X...X...............X...........X...X...X...X...X...........X...X
X...X...XXXXXXXXXXXXX...X...X...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...............X...X...X.......X...........X...........X.......X...X
X...XXXXXXXXXXXXX...XXXXX...XXXXX...X...XXXXX...XXXXXXXXX...X...XXXXX...X
X...........X.......X...X.......X...X.......X...........X...X...........X
X...XXXXX...XXXXX...X...XXXXX...X...XXXXXXXXX...X...X...X...XXXXXXXXXXXXX
X.......X.......X...X...X.......X.......X.......X...X...X.......X.......X
XXXXXXXXXXXXX...X...X...X...XXXXXXXXX...X...XXXXX...X...XXXXX...XXXXX...X
X...........X...X...........X.......X...X.......X...X.......X...........X
X...XXXXX...X...XXXXXXXXX...XXXXX...X...XXXXX...XXXXX...XXXXXXXXXXXXX...X
X...X.......X...........X...........X.......X...X...X...............X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...X...X...XXXXXXXXXXXXX...X...X
X...X...........X...X...X...X...X...........X...............X...X.......X
X...XXXXXXXXX...X...X...X...XXXXX...XXXXXXXXX...XXXXXXXXX...X...XXXXXXXXX
X...X.......X...X...X...........X...........X...X.......X...............X
X...X...XXXXX...XXXXX...XXXXX...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...................X...........X...............X...............X...X
X...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

( গোলকধাঁধা উত্স )

সম্পর্কিত প্রশ্নাবলী:
স্ল্যাশ ব্যবহার করে হিলবার্ট বক্ররেখা আঁকুন
একটি তির্যক বরাবর একটি অনুভূমিকভাবে সাজানো, ডান-কোণযুক্ত ASCII আকারটি প্রান্তিক করুন


একক চরিত্রের পরিবর্তে একটি সাদা বর্ণের অক্ষর (বা প্রতীকের একটি সাদা স্থান) দিয়ে কি গ্রহণযোগ্য?
মনিকা পুনরায় ইনস্টল করুন - ζ--

@ হেক্সাফ্রাকশন শিওর
ক্যালভিনের

আমাদের যা দরকার তা হল এর উত্তরের কেউ এটিফ্ল্যাটিজটস্লویতে । তারপরে আমরা "স্ল্যাশগুলিতে স্ল্যাশগুলিতে অঙ্কন করি"।
জাস্টিন

উত্তর:


10

পাইথন 2 - 236, 228, 226, 221, 250, 248 246 - 50 = 196

s=input().split()
s=zip(*s[::-1])
X=len(s[0])+2
d=('.',)
B=[d*X]
s=B+[d+tuple(l)+d for l in s]+B
Y=len(s)
for x in range(X,-Y,-1):print' '*abs(x)+''.join(' \\'[s[y-1][x+y-1]!=s[y-1][x+y]]+' /'[s[y-1][x+y]!=s[y][x+y]]for y in range(1,Y)if 0<x+y<X)

আমি alচ্ছিক বোনাস বৈশিষ্ট্য যুক্ত করেছি যা ঘড়ির কাঁটার দিক থেকে ঘড়ির কাঁটার দিকে দিকটি পরিবর্তন করে। মূলত, দ্বিতীয় লাইনটি 90 ডিগ্রি দ্বারা ইনপুটটি কেবল ঘোরান। উভয় বিকল্পের মধ্যে স্যুইচ করতে, s=zip(...)এমন কিছু দ্বারা প্রতিস্থাপন করুন S=zip(...)(অর্থাত্ একটি ভেরিয়েবলকে বরাদ্দ করুন যা আবার ব্যবহার করা হবে না)।

.XX.X....X...XX.X.X
X...X...X.X.X...X.X
.X..X...XXX..X..XXX
..X.X...X.X...X.X.X
XX..XXX.X.X.XX..X.X

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

আপনি sandwiching দ্বারা 5bytes বাঁচাতে পারে sসঙ্গে Bদ্বারা s=B+s+B
বীটডেমগুইস

1
@ বিটডেমগুইস: ধন্যবাদ! এতো সহজ! :)
ফালকো

7

ম্যাটল্যাব - 286 - 50 = 236

minified:

S=input('');x=rot90(reshape(input('','s'),S),1);S=size(x);D=sum(S);[r,c]=ind2sub(S,find(x==88));A=zeros(D);f=@(o,p)sub2ind([D D],r+c+o-1,c-r+S(1)+p);A(f(1,1))=1;t=f(0,0);A(t)=A(t)+1;A(f(1,0))=3;t=f(0,1);A(t)=A(t)+3;fprintf('%s',char([(1-mod(A,2))*32+(A==1)*47+(A==3)*92,ones(D,1)*13]'))

সম্প্রসারিত:

S = input('');
x = rot90( reshape( input('','s'), S ), 1 );
S = size( x );
D = sum( S );
[r,c] = ind2sub( S, find( x==88 ) );
A = zeros( D );
f = @(o,p) sub2ind( [D D], r+c+o-1, c-r+S(1)+p );

A(f(1,1)) = 1;
t = f(0,0); A(t) = A(t)+1;
A(f(1,0)) = 3;
t = f(0,1); A(t) = A(t)+3;

fprintf( '%s', char( [(1-mod( A, 2 ))*32 + (A==1)*47 + (A==3)*92, ones( D, 1 )*13]' ) )

কোডটি টাইপ করার জন্য কাস্ট মুছে ফেলে 6 টি অক্ষর (বর্তমান সীসা বাঁধতে) দ্বারা আরও কমানো যেতে পারে char, তবে এটি ম্যাটল্যাব-এর একটি সতর্কতার ফলে আসে এবং আমি নিশ্চিত ছিলাম না যে এটি অনুমোদিত কিনা।

অতিরিক্ত 13 টি অক্ষর দ্বারা এটি হ্রাস করা যেতে পারে যদি ইনপুটটির "চিহ্নিত করা" ফর্ম্যাট যেমন দরকার হয় ['X..';'.X.';'..X']তবে আমি বুঝতে পারি না এটিরও অনুমতি দেওয়া হয়েছিল। বর্তমানে স্ক্রিপ্টটি কেবল দুটি সংখ্যা (সারি এবং কলামের মাত্রা) গ্রহণ করে এবং তারপরে গ্রিড অক্ষরের একক স্ট্রিংয়ে পড়ে।

বোনাস

পরিবর্তন করে 1কলে x = rot90( ..., 1 );একটি থেকে 0, একটি হিসাবে The CW 45 ° ঘূর্ণন করার জন্য একটি CCW 45 ° ঘূর্ণন থেকে রূপান্তর পরিবর্তন। আসলে, সব সম্ভব 45 ° + N · 90 ° ঘুর্ণন সম্ভব থেকে এই প্যারামিটারটি পদবিন্যাস দ্বারা হয় 0থেকে 3

নমুনা আউটপুট:

XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX

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

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

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

3

পার্ল - 409

while(<>){$a[$.]=[/./g]}$l=$#a<($g=@{$a[1]})?$#a:$g;$r=$#a+$g-1;for$d(1..$r){for$e(1..$l){if(($b=$a[$c=($d>$g?$d-$g:0)+$e][$n=-($d-$c+1)])&&$n<0){$h[$d][$e]=$b;}}$h[$d]=[(0)x(($l-{@$h[$d]})/2),@{$h[$d]}];}sub z{"\0"x((reverse(1..$g),(2..$r-$g+1))[int($q++/2)-1]).join'',map{$_ eq'X'?($q%2?'/\\':'\/'):"\0\0"}@_}@i="\0"x2x$l;for$f(@h){$i[$#i]=(z@$f)^$i[$#i];$i[$#i+1]=z@$f}for$j(@i){print$j=~s/[\0s]/ /gr."\n"}

স্টিডিন এবং প্রিন্ট থেকে স্টাডআউট পর্যন্ত পড়ুন।

উদাহরণ ফলাফল:

XXX
X..
XXX
..X
XXX

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

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