ক্লিন টোপোললিগ্লটস


43

ক্লেইন একটি 2D ভাষা যা আমি ডিজাইন করেছি যা 12 টি বিভিন্ন টপোলজিকাল পৃষ্ঠগুলিতে এম্বেড করা যেতে পারে। ক্লেইন প্রোগ্রামটি কমান্ড লাইন আর্গুমেন্টগুলি পরিবর্তন করে বিভিন্ন পৃষ্ঠে চালানো যেতে পারে।

টপোলজি প্রোগ্রামের প্রান্তটি বন্ধ হয়ে গেলে নির্দেশ পয়েন্টারটি কোথায় যায় তা নির্ধারণ করে। প্রান্ত থেকে সরে যাওয়ার সময় আইপিটি মিলবে রঙের সাথে একটি প্রান্তে ঝাঁপিয়ে যাবে এবং তীরের সাথে তুলনামূলকভাবে তার অবস্থানটি বজায় রাখবে, অর্থাৎ পয়েন্টারটি তীর মাথা থেকে তার দূরত্বটি সংরক্ষণ করবে।

উদাহরণস্বরূপ টোপোলজি 000, বেশিরভাগ 2 ডি ভাষার দ্বারা ব্যবহৃত টপোলজি , যখন কোনও প্রান্তটি সরে যায় তখন নির্দেশ পয়েন্টারটিকে অন্য দিকে ঘুরিয়ে দেয়।

কার্য

টাস্কটি বেশ সহজ, একটি ক্লিন প্রোগ্রাম লিখুন যা চালানো হলে টপোলজিটি আউটপুট হবে এটি চালিত হয় individual স্বতন্ত্র সংখ্যাগুলি ফাঁক দিয়ে পৃথক হতে পারে। (যেমন 000এবং 0 0 0উভয়ই অনুমোদিত আউটপুট)। আপনি -Aকমান্ড লাইন পতাকাটি ব্যবহার করতে বা উপেক্ষা করতে বাছাই করতে পারেন এটি ব্যবহার করা আপনার বাইটের জন্য লাগবে না।

এটি তাই সংক্ষিপ্ত উত্তরটি বিজয়ী হবে।

এখানে একটি অনলাইন পরীক্ষা ড্রাইভার যা একবারে সমস্ত টপোলজির পরীক্ষা করতে ব্যবহার করা যেতে পারে। পূর্ণসংখ্যার মোডে চলার জন্য মুছে ফেলুন -A


18
ভাল ভাষা-নির্দিষ্ট চ্যালেঞ্জের দুর্দান্ত উদাহরণের জন্য +1। :)
মার্টিন এন্ডার

1
@ স্টেফেনস নং। আমি আপনাকে এটি নিখরচায় দেব :)
গম উইজার্ড

1
আইপি মুভমেন্টগুলি আমার মাথায়
ব্যাথা দিচ্ছে

2
দয়া করে চিত্রটি ঠিক করুন ...
ব্যবহারকারী 202729

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

উত্তর:


35

52 48 বাইট

./@$0<$
21\./01
..>..!\
@
.<..<\
20//\11
@01$00@

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

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

ব্যাখ্যা

ক্লিনে আইপি ডানদিকে যাচ্ছে উপরের বাম কোণে শুরু হয়। আমি আমার প্রোগ্রামটি যে প্রথম পদক্ষেপটি করতে চেয়েছিলাম তা হ'ল প্রথম এবং তৃতীয় বিট নির্ধারণের জন্য প্রোগ্রামটির শীর্ষে আইপি প্রেরণ করা। টপোলজির উপর নির্ভর করে আইপি প্রোগ্রামটি পুনরায় প্রবেশ করবে:

             ^
            I|P
            ./.....
201, 211 -->.......<-- 100, 110
            .......
            .......
            .......
200, 210 -->.......<-- 101, 111
            .......
             ^   ^
             |   |
            000 001
            010 011

আমি স্থির করেছি যে আমার প্রোগ্রামটি টপোলজির তৃতীয় বিটটি দ্বিতীয় বিটের আগে রেকর্ড করবে $তবে শেষ হওয়ার আগে সেগুলি (ব্যবহার করে ) অদলবদল করবে । সে লক্ষ্যে আমি উপরে বর্ণিত আইপি-র প্রবেশের পয়েন্টগুলিতে প্রতিটি টোপোলজির প্রথম এবং তৃতীয় বিটগুলি পুশ করার জন্য কোড যুক্ত করেছি।

./.....
21...01
.......
.......
.......
20...11
.0...0.

এরপরে আমি টপোলজগুলিতে তাদের প্রথম বিটটির সাথে 1বা 2হিসাবে ফোকাস করেছি । আমি তাদের পুনরায় সমন্বিত করার সিদ্ধান্ত নিয়েছি এবং উত্তর দিকের সাথে সংযুক্ত না করে পাশের দিকে তাদের পাঠিয়ে দেব যাতে আমি তাদের দ্বিতীয় বিটটি নির্ধারণ করতে পারি।

                      ./.....
                      21\./01
                      ..>....--> 200, 201, 210, 211
                      .......
100, 101, 110, 111 <--....<..
                      20/.\11
                      .0...0.
                        ^ ^
                        | |
                        / \
                      110 100
                      111 101
                      210 200
                      211 201

সুবিধাজনকভাবে এটি তাদের দ্বিতীয় বিট দ্বারা টোপোলজিকে পুনরায় গোষ্ঠীভুক্ত করেছিল যাতে আমি এটিকে স্ট্যাকের দিকে ঠেলে দিতে পারি।

./.....
21\./01
..>....
.......
....<..
20/.\11
.01.00.

এর পরে আমার কেবল দ্বিতীয় এবং তৃতীয় বিট অদলবদল করতে হবে এবং প্রোগ্রামটি শেষ করতে হবে।

./.$...
21\./01
..>....
@......
....<..
20//\11
.01$00.

এখন টপোলজিসগুলি তাদের প্রথম বিট হিসাবে 1বা 2হিসাবে কাজ করেছে, আমি 0সঠিক আউটপুট দেওয়ার সাথে টপোলজগুলি তৈরি করতে ফোকাস করতে পারি । প্রথম পদক্ষেপটি তাদের পুনরায় সংযুক্ত করছিল যাতে তারা তাদের দ্বিতীয় বিটের ভিত্তিতে দুটি গ্রুপে বিভক্ত হতে পারে।

                      ./.$...
                      21\./01
                      ..>....<-- 010, 011
                      @......
000, 001, 010, 011 <--.<..<<.<-- 000, 001
                      20//\11
                      .01$00.

আমি প্রথম সেই টপোলজগুলিতে 1তাদের দ্বিতীয় বিট হিসাবে ফোকাস করেছি । এগুলি একটি চ্যালেঞ্জ উপস্থাপন করেছে কারণ তাদের জন্য আইপি টপোলজিকরা 2তাদের প্রথম বিট হিসাবে ইতিমধ্যে ব্যবহৃত লাইনে ছিল । যেহেতু line লাইনে একাধিক নির্দেশাবলীর পক্ষে ফিট করা কঠিন হবে (নির্দেশটি ব্যবহার করে একটি একক নির্দেশ লাফানো যায় !) এবং আমি পুরো জায়গাতেই কম চলছিলাম, তাই আমি সিদ্ধান্ত নিয়েছি যে লাইনটি আইপিটি পুনর্নির্দেশ করে একটি বিদ্যমান 1নির্দেশ পুনরায় ব্যবহার করতে হবে দ্বিতীয় বিট ধাক্কা।

./.$...
21\./01
..>..!\
@......
.<..<<.
20//\11
.01$00.

1তাদের দ্বিতীয় বিট হিসাবে টপোলজিসের জন্য এখন যা করা ছিল তা হ'ল দ্বিতীয় এবং তৃতীয় বিটের ক্রম স্থির করে শেষ করা।

       ^
       |
 ./.$..$
 21\./01
 ..>..!\
 @......
 .<..<<.
 20//\11
 @01$00@
 ^     ^
 |     |
011   010

শেষ পর্যন্ত 0তাদের দ্বিতীয় বিট হিসাবে টপোলজিসে রয়ে গেল । প্রোগ্রামটিতে খুব বেশি স্থান অবশিষ্ট ছিল না যেখানে বৃহত্তম অব্যবহৃত স্থান শীর্ষ লাইনে ছিল তাই এটি সেখানে ছিল যে আমি টপোলজির জন্য 0তাদের দ্বিতীয় বিট হিসাবে আইপি পুনর্নির্দেশ করলাম ।

./.$.<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@

আমার এখনও 0দ্বিতীয় বিটের জন্য চাপ দেওয়া এবং দ্বিতীয় এবং তৃতীয় বিটের ক্রম ঠিক করার পাশাপাশি প্রোগ্রামটি শেষ করার দরকার ছিল। ভাগ্যক্রমে, আমি একটি বিদ্যমান $নির্দেশ পুনরায় ব্যবহার করতে সক্ষম হয়েছিলাম যাতে নির্দেশাবলী 0এবং @বাকি জায়গাগুলিতে ফিট করে।

./@$0<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@

চূড়ান্ত প্রোগ্রামটি পাওয়ার জন্য অবশেষে ন্যাপগুলি লাইনগুলির প্রান্ত থেকে ছিনিয়ে নেওয়া যায়।


15

116 88 86 77 69 61 60 59 58 54 53 50 বাইট

\2..@2
/1\<$00
/>!..>!
0//
@0$10@1
011\.<0
\.<@>1@

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


1
@ হোয়াইট উইজার্ড আপনি কীভাবে এটি 0.o তৈরি করেছেন এবং সম্ভবত আপনার কিউবিক্সের জন্য
স্টিফেন

@ স্টেফেনস আপনি যদি -dপতাকাটি দিয়ে ক্লেইন চালান তবে তা ঠিক তা করবে। দুর্ভাগ্যক্রমে এটি টিআইওতে কাজ করে না।
গম উইজার্ড

15

44 41 40 38 37 বাইট

\\1.>2
/0./
@./$(\
$>0!>
11$/10
$.@.1

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

পরীক্ষামূলক চালক.

6 বাই 6 বর্গ ব্যবহার করে। 8 বর্গ 8 বর্গের সাথে আমি যে সংক্ষিপ্ততমটি পেতে পারি তা যদি কেউ এর উন্নতির চেষ্টা করতে চায় তবে 38 বাইট

ব্যাখ্যা:

এক প্রথম পাস-থ্রু কোড উপশব্দের জন্য প্রথম দুটি সংখ্যার এনকোড 0এবং 1। জন্য 2, এটি তৃতীয় নম্বর এনকোড পরে প্রথম।

     201  200
     211  210
       |  |
       v  v
   -> \\1.>2
 IP<- /../..  <- 000, 001
      ...$..
      .>0...
      .1..10  <- 010, 011
      ....1.
       ^  ^
       |  |
     100  110
     101  111

তারপরে আমরা চূড়ান্ত নম্বরটি নির্ধারণের জন্য তৃতীয় প্রান্তটি দিয়ে আইপিগুলি পাস করি। আমরা একই উপসর্গের সাথে আইপিগুলি একত্রিত করি।

     201  200
     211  210
       |  |
       v  v
   -> \\1.>2  -> 0,2 or 1,2
 IP<- /../..  <- 000, 001
      ...$..
      .>0!>.  -> 1
      .1./10  <- 010, 011
      ....1.
       ^ |^
       | v|
       | 0|
     100  110
     101  111

জন্য 0এবং 1উপসর্গ, তারা উভয় তৃতীয় সংখ্যা সিদ্ধান্ত নিতে উপরের প্রান্ত বের হয়ে আসল।

     201  200
     211  210
       |  |
       |10|
       vvvv
   -> \\1.>2  -> 2
 IP<- /0./..  <- 000, 001
      @./$..
      .>0!>.  -> 1
      .1./10  <- 010, 011
      ....1.
       ^ |^
       | v|
       | 0|
     100  110
     101  111

জন্য 2উপসর্গ, আইপিএস নীচে প্রান্ত থেকে কোণে আসা আউট।

     201  200
     211  210
       |  |
       |10|
       vvvv
   -> \\1.>2  -> 2
 IP<- /0./..  <- 000, 001
      @./$(\
      $>0!>.  -> 1
      11$/10  <- 010, 011
      $.@.1.
      ^^ |^^
      || v||
      1| 0|0
     100  110
     101  111

উভয় প্রান্তই প্রথম এবং তৃতীয় সংখ্যাটিকে অদলবদল করে, দ্বিতীয় সংখ্যাটি ধাক্কা দেয় এবং তৃতীয়টির সাথে এটি সজ্জিত করে সঠিক ক্রমটি পেতে।

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