একটি শেপ সিম্প্লিফায়ার লিখুন


19

ভূমিকা

আমার কাছে প্রচুর ASCII শিলা রয়েছে। এগুলি ড্যাশ, পাইপ, বনাম, কেরেটস, কোণ বন্ধনী, স্ল্যাশ এবং স্পেস দিয়ে নির্মিত। উদাহরণ:

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

আমি এগুলি এড়াতে চাই:

 /\
/  \
\  /
 \/

কোণে সব গোল হয়ে গেছে। আরও জটিল উদাহরণ:

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

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

আরেকটি ক্ষয়ের পরে তা হয়ে উঠত

  /\
 /  \------\
<           \
 \          /
  \--------/

এবং অন্য:

  /\------\
 <         \
  \        /
   \------/

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি এমন একটি প্রোগ্রাম লিখুন যা একবারে কোনও ইনপুট ক্ষয় করতে পারে। আপনি ধরে নিতে পারেন যে কেবলমাত্র একটি শিলা রয়েছে এবং আপনি ধরে নিতে পারেন এটি একটি বন্ধ লুপ। ইনপুটটিতে কেবল অক্ষর থাকবে /\ -| <> ^V \nএবং একটি আয়তক্ষেত্র তৈরি করতে পিছনে স্থান থাকবে। প্রোগ্রামটি হয় STDIN এবং আউটপুট থেকে STDOUT এ ইনপুট পেতে পারে বা কোনও ফাংশন হতে পারে। প্রতিটি সারির শেষে একটি নতুন লাইন চরিত্র। ক্ষয় অবশ্যই নীচে বর্ণিত বিধিগুলি অনুসরণ করবে (দ্রষ্টব্য: উদাহরণগুলিতে শিলাটি সম্পন্ন হয়নি, এটি ব্যাখ্যা করার জন্য সহজ)। আউটপুট অবশ্যই ইনপুট হিসাবে একই আকারে, ইনপুট হিসাবে একই আকারে থাকতে হবে। তবে পিছনের জায়গাগুলি বাদ দেওয়া যেতে পারে।

স্ল্যাশগুলি পাইপলাইন এবং ড্যাশগুলিতে ছড়িয়ে পড়বে এবং জুড়ে চলে যাবে।

/---
|
|

 /--
/
|

  /-
 /
/

যদি দুটি স্ল্যাশ একসাথে একত্রিত হয় তবে উপযুক্ত চরিত্রটি বাইরে <>^Vব্যবহার করা হবে।

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

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

  /-\
 /   \
<     >
 \   /
  \-/

   ^
  / \
 <   >
  \ /
   V

শিলার একটি অংশ যদি মার্জ করতে পারে তবে তা হবে। দ্রষ্টব্য: যদি একটি অংশ একীভূত করতে পারে তবে অন্যটি (উদাহরণস্বরূপ, /\দ্বিতীয় পংক্তিতে) মার্জ করতে না পারে, তবে যেটি একীভূত করতে পারে সেটি (উদাহরণটি দেখুন)।

          /\
 /\-^-/\-/  \--
 |
 <
 |
 /
 \
 |
 /
/
\
 \
 |
 |


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

অবশেষে, সমস্ত শিলা কিছুই হয়ে যাবে না।

<>  ^  /\
    V  \/

পরীক্ষার মামলা

পরীক্ষা 1:

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

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

  /\
 /  \------\
<           \
 \          /
  \--------/


  /\------\
 <         \
  \        /
   \------/


   /-----\
  <       \
   \      /
    \----/

    /---\
   <     \
    \    /
     \--/

     /-\
    <   \
     \  /
      \/

      ^
     < \
      \/

পরীক্ষা 2:

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

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

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

  /\
 /  \
 \  /
  \/

  /\
  \/

পরীক্ষা 3:

          ^    /\
 /\--/\--/ \--/  \-\
 \                 |
 |                 |
 /                 |
 \                 |
 |                 |
 |                 |
 /                 |
<                  |
 \                 |
 |                 |
 |                 |
 /                 |
/                  |
\                  |
 \-----------------/


  /-------^----/\-\
 /                 \
 |                 |
 |                 |
 |                 |
 |                 |
 |                 |
 |                 |
 <                 |
 |                 |
 |                 |
 |                 |
 |                 |
 /                 |
 \                 /
  \---------------/


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

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

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

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

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

        /---\
       /     \
      /       \
     /         \
    /           \
   /             \
  /               \
 /                 \
 \                 /
  \               /
   \             /
    \           /
     \         /
      \       /
       \     /
        \---/

         /-\
        /   \
       /     \
      /       \
     /         \
    /           \
   /             \
  /               \
  \               /
   \             /
    \           /
     \         /
      \       /
       \     /
        \   /
         \-/

          ^
         / \
        /   \
       /     \
      /       \
     /         \
    /           \
   /             \
   \             /
    \           /
     \         /
      \       /
       \     /
        \   /
         \ /
          V

          ^
         / \
        /   \
       /     \
      /       \
     /         \
    /           \
    \           /
     \         /
      \       /
       \     /
        \   /
         \ /
          V

          ^
         / \
        /   \
       /     \
      /       \
     /         \
     \         /
      \       /
       \     /
        \   /
         \ /
          V

          ^
         / \
        /   \
       /     \
      /       \
      \       /
       \     /
        \   /
         \ /
          V

          ^
         / \
        /   \
       /     \
       \     /
        \   /
         \ /
          V

          ^
         / \
        /   \
        \   /
         \ /
          V

          ^
         / \
         \ /
          V

          ^
          V

স্কোরিং

এটি , তাই বাইটের স্বল্প সংখ্যক প্রোগ্রাম সহ প্রোগ্রামটি!

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।


1
কি আউটপুট জন্য"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"
TSH

আমি সত্যিই নিয়মগুলি বোধ করি বলে মনে করি না। 45 ডিগ্রি ঘোরানো হলে শিলাগুলি আলাদাভাবে ক্ষয় হয় er তবে যাই হোক।
ব্যবহারকারী 202729

আমি মনে করি এটির জন্য রেটিনা সত্যই ভাল কাজ করবে।
জেরি যেরেমিয়া

উত্তর:


1

মরিচা

আমি কিছুক্ষণ পরে এটি ছেড়ে দিয়েছি, নির্দেশাবলীর ধরণটি দ্বিধাগ্রস্থ বলে মনে হচ্ছে। তবে আমি কিছু সঙ্কুচিত চেহারার পাথর পেয়েছি (আউটপুট দেখুন)। আমি আরও নিশ্চিত যে এখানে চেষ্টা করার সাথে সাথে 1 টি মাত্রিক স্ট্রিংয়ের পরিবর্তে এটি 2 মাত্রিক স্থানে করা দরকার। আমার মূল "ইস্যু" হ'ল আমি প্রদত্ত ইনপুটটিকে স্থানটি 'ভিতরে' বা 'বাইরের' শৈল হিসাবে চিহ্নিত করে রূপান্তর করেছি, দুর্ভাগ্যক্রমে এই সময়ে এটি ভিতরে এবং উপরের / নীচের প্রান্তগুলির মধ্যে পার্থক্য করতে পারে না।

enum State {
 OutsideLeft,CrossLI,Inside,CrossRI,OutsideRight,
}    

const INPUT: &str = r#"
/----\
|     \------\
|            |
|            |
\------------/
"#;


fn precycle( mut data:Vec<char> ) -> Vec<char> {
    let mut state = State::OutsideLeft;
    let mut curcol = 0;
    let mut curline:Vec<char> = Vec::new();
    let mut lastline:Vec<char> = Vec::new();
    for mut i in 0..data.len() {
        if data[i]=='\n' { 
            lastline = curline.to_vec();
            lastline.push(' ');
            curline.clear();
            curline.push(' ');
            curcol = 0;
        } else {
            curline.push(data[i]);
            curcol += 1;
        }
        let n = curcol%lastline.len();
        let n2 = lastline.len()-n;
        //println!("[{}]",lastline.iter().collect::<String>());
        //println!("[{}]",curline.iter().collect::<String>());
        //println!("({}{})({}{})>",data[i],state,lastline[n],curline[n]);
        //print!("{}{}>",data[i],state);
        match state {
        State::OutsideLeft  =>  {
            if      data[i]=='/' { state = State::CrossLI; }
            else if data[i]=='\\' { state = State::CrossLI; }
            else if data[i]=='|' { state = State::CrossLI; }
            else if data[i]=='<' { state = State::CrossLI; }
            if      data[i]==' ' { }
        } State::CrossLI => {
            if      data[i]=='/' { state = State::CrossRI; }
            else if data[i]=='\\' { state = State::CrossRI; }
            else if data[i]=='|' { state = State::CrossRI; }
            else if data[i]=='>' { state = State::CrossRI; }
            if data[i]==' ' { data[i]='-'; }
            if data[i]=='-' { state = State::Inside; }
        } State::Inside => {
            if      data[i]=='/' { state = State::CrossRI; }
            else if data[i]=='\\' { state = State::CrossRI; }
            else if data[i]=='|' { state = State::CrossRI; }
            else if data[i]=='>' { state = State::CrossRI; }
            if      data[i]==' ' { data[i] = '-'; }
        } State::CrossRI => {
            if  data[i]==' ' { state = State::OutsideRight; }
            if  data[i]=='\n' { state = State::OutsideLeft; }
        } State::OutsideRight => {
            if  data[i]==' ' { }
            if  data[i]=='\n' { state = State::OutsideLeft; }
        } } 
        match state {
        State::CrossLI => {
            if curline[n]=='|' && lastline[n]=='.' { data[i]='9'; curline[n]='9'; }
        }
        State::CrossRI => {
            if curline[n]=='|' && lastline[n]=='.' { data[i]='8'; curline[n]='8'; }
            if curline[n]=='.' && lastline[n]=='8' { data[i-n-n2+1]='>'; }
            if curline[n]=='.' && lastline[n]=='|' { data[i-n-n2+1]='6'; }
        }
        State::OutsideLeft => {
            if curline[n]=='.' && lastline[n]=='|' { data[i-n-n2+1]='7'; curline[n] = '7'; }
            if curline[n]=='.' && lastline[n]=='9' { data[i-n-n2+1]='<'; }
        }
        _ => { }
        }
        //print!("{} ",state);

    }
    for mut i in 0..data.len() {
        if data[i]=='9' {data[i]='/'}
        if data[i]=='8' {data[i]='\\'}
        if data[i]=='7' {data[i]='\\'}
        if data[i]=='6' {data[i]='/'}
    }
    data
}

fn cycle( data:String ) -> String {
    data
    .replace(r#"^"#,r#"."#)
    .replace(r#"V"#,r#"."#)
    .replace(r#"/-\"#,r#".^."#)
    .replace(r#"\-/"#,r#".V."#)
    .replace(r#"-/\-"#,r#"----"#)
    .replace(r#"-\/-"#,r#"----"#)
    .replace(r#"/\-"#,r#"/--"#)
    .replace(r#"-/\"#,r#"--\"#)
    .replace(r#"\/-"#,r#"\--"#)
    .replace(r#"-\/"#,r#"--/"#)
    .replace(r#"./\."#,r#"...."#)
    .replace(r#".\/."#,r#"...."#)
    .replace(r#"/\"#,r#".."#)
    .replace(r#"\/"#,r#".."#)
    .replace(r#"-\"#,r#"\."#)
    .replace(r#"-/"#,r#"/."#)
    .replace(r#"/-"#,r#"./"#)
    .replace(r#"\-"#,r#".\"#)
    .replace(r#"->"#,r#">."#)
    .replace(r#"<-"#,r#".<"#)
    .replace(r#".-"#,r#"--"#)
    .replace(r#"-."#,r#"--"#)
}

fn main() {
    let mut inputv: Vec<char> = INPUT.chars().collect();
    let mut input0: Vec<char> = inputv;
    for j in 1..18 {
        let mut inputa = precycle( input0 );
        let pdata = inputa.iter().collect::<String>().replace("."," ");
        println!("{}",pdata);
        let mut input2 = cycle( inputa.iter().collect::<String>() );
        input0 = input2.chars().collect();
    }
}

আউটপুট

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


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


  /\  
 /--\------\  
<-----------\ 
 \----------/ 
  \--------/  



  /\------\   
 <---------\  
  \--------/  
   \------/   



   /-----\    
  <-------\   
   \------/   
    \----/    



    /---\     
   <-----\    
    \----/    
     \--/     



     /-\      
    <---\     
     \--/     
      \/      



      ^       
     <-\      
      \/      





     <\       






     <\       






     <\       






     <\       






     <\       






     <\       






     <\       






     <\       






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