কে সেই বহুভুজ?


14

টপোলজিকাল পৃষ্ঠতলের প্রতিনিধিত্ব করতে একটি সুবিধাজনক এবং দরকারী উপায় সাথে আছেন মৌলিক বহুভুজ । বহুভুজের প্রতিটি পাশ অন্য পক্ষের সাথে মেলে এবং এটি সমান্তরাল বা অ্যান্টি-প্যারালাল হতে পারে। উদাহরণস্বরূপ এখানে একটি টরাসের মৌলিক বহুভুজটি রয়েছে :

অর্ধবৃত্তাকার পার্শ্বচিত্রের মূর্তি

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

এটি কিছুটা কৌশলযুক্ত হতে পারে। আপনি যদি নীচের বহুভুজ যেখানে একই প্রান্তটি একটি বিপরীত দিকে চলেছে:

ক্লিন বোতল

আপনি কিছু ঝামেলায় নিজেকে খুঁজে পেতে পারেন। কারণ বহুভুজটি ক্লিন বোতলকে উপস্থাপন করে যা তিন মাত্রায় এমবেড করা যায় না। আপনি উইকিপিডিয়া থেকে এখানে একটি চিত্র দেখিয়েছেন যে কীভাবে আপনি এই বহুভুজটিকে ক্লিন বোতলে ভাঁজ করতে পারবেন:

একটি ক্লিন বোতল ভাঁজ করা


আপনি যেমন অনুমান করতে পারেন যে এখানে কাজটি হল একটি মৌলিক বহুভুজ নেওয়া এবং এটি কোন পৃষ্ঠের তা নির্ধারণ করা। চারতরফা বহুভুজের জন্য (কেবলমাত্র তলগুলি আপনার পরিচালনা করতে হবে) এখানে 4 টি পৃথক পৃষ্ঠ রয়েছে।

তারা হয়

  • অর্ধবৃত্তাকার পার্শ্বচিত্রের মূর্তি

  • ক্লিন বোতল

  • গোলক

  • সম্ভাব্য বিমান

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

উদাহরণস্বরূপ প্রদত্ত টরাস আবাব হয়ে যাবে এবং ক্লিন বোতলটি আব - আব হয়ে যাবে । আমাদের চ্যালেঞ্জের জন্য আমরা এটিকে আরও সহজ করে তুলব, বাঁকানো প্রান্তকে নেতিবাচক দিয়ে চিহ্নিত করার পরিবর্তে আমরা সেই চিঠিগুলি মূলধন করে দেব।

কার্য

একটি স্ট্রিং দেওয়া হয়েছে এটি নির্ধারণ করে যে এটি কোনও মৌলিক বহুভুজ উপস্থাপন করে এবং এর যথাযথ পৃষ্ঠের সাথে সম্পর্কিত এমন কোনও মান আউটপুট দেয়। আপনার উপরিভাগের ঠিক নামকরণ করার দরকার নেই, আপনার কেবল 4 টি আউটপুট স্বতন্ত্র মান প্রয়োজন যা প্রতিটি 4 টি পৃষ্ঠের একটিকেই পঞ্চম মানের সাথে অনুচিত ইনপুট উপস্থাপন করে represent সমস্ত মৌলিক কেসগুলি সরল পরীক্ষার বিভাগে আচ্ছাদিত , প্রতিটি গাড়িই একরকম বা অবৈধের কাছে সমকামী হবে।

বিধি

  • পক্ষগুলি সর্বদা a এবং b এর লেবেলযুক্ত হবে না তবে তারা সর্বদা বর্ণ সহ লেবেলযুক্ত থাকবে।

  • বৈধ ইনপুটটিতে 4 টি বর্ণ, দুটি প্রকারের এবং অন্য দুটিতে থাকবে two বৈধ ইনপুট জন্য আপনাকে অবশ্যই সর্বদা সঠিক পৃষ্ঠটিকে আউটপুট করতে হবে।

  • আপনার অবৈধ ইনপুট (উপরিভাগের প্রতিনিধিত্বকারী 4 টিরও কোনও মানের আউটপুট নয়) বাতিল করা উচিত। কোনও ইনপুট প্রত্যাখ্যান করার সময় আপনি কিছু করতে পারেন, যতক্ষণ না এটি 4 পৃষ্ঠ থেকে পৃথকযোগ্য ble

  • এটি তাই আপনার উত্স কোডে বাইটের সংখ্যা হ্রাস করা লক্ষ্য।

টেস্ট

সাধারণ পরীক্ষা

abab Torus
abAb Klein Bottle
abaB Klein Bottle
abAB Projective Plane
aabb Klein Bottle
aAbb Projective Plane
aabB Projective Plane
aAbB Sphere
abba Klein Bottle
abBa Projective Plane
abbA Projective Plane
abBA Sphere

ট্রিকিয়ার টেস্ট

ABAB  Torus
acAc  Klein Bottle
Emme  Projective Plane
zxXZ  Sphere
aaab  Bad input
abca  Bad input
abbaa Bad input
ab1a  Bad input

কেন ababএকটি টরাস এবং aabbএকটি ক্লিন বোতল হয়?
নিল

@ নীল ababপ্রথম অনুচ্ছেদে উদাহরণ, আপনি সেখানে ব্যাখ্যাটির জন্য দেখতে পারেন। এখানে একটি চিত্র দেখানো হচ্ছে কেন ক্লিন বোতল aabbহিসাবে একই abAb
পোস্ট রক গার্ফ হান্টার

1
আমাদের কী খারাপ ইনপুটগুলি পরিচালনা করতে এবং খারাপ হিসাবে চিহ্নিত করতে হবে? সমস্ত সম্ভাব্য স্ট্রিং? মুদ্রণযোগ্য এএসসিআইআই? দৈর্ঘ্যের কোন সীমা? আমরা যদি একটি ফাংশন লিখি, এটি একটি নন-স্ট্রিং অবজেক্টটি পাস হতে পারে? সত্যিই, পুরো ইনপুট প্রক্রিয়াজাতকরণ ব্যবসাটি একটি গিরগিটির চ্যালেঞ্জ হিসাবে আমাকে আঘাত করে।
এক্সএনওর

1
@ ওয়েট উইজার্ড সেক্ষেত্রে আপনি কি দয়া করে শিরোনাম এবং শরীরে এটি পরিষ্কার করতে পারেন? এটি নিয়মাবলী অবধি গণিতের মতো পড়ে এবং এমনকি কেবল শ্রেণিবদ্ধের পরিবর্তে গেম চেঞ্জিংয়ের প্রয়োজনীয়তা যাচাইয়ের জন্য মিস করা সহজ।
xnor

2
পৃথকভাবে, আমি মনে করি যে একটি ব্যাখ্যা একটি স্ট্রিংকে একটি নির্দিষ্ট শ্রেণিতে শ্রেণিবদ্ধ করা হয়েছে তার থেকে অনুপস্থিত, যেহেতু আপনি লোককে শ্রেণিবদ্ধকরণের পিছনে গণিতটি করবেন বলে আশা করছেন না। আমি মনে করি পরীক্ষার কেসগুলি থেকে আমি নিয়মগুলি ধাঁধা দিতে পারি, তবে এটি আদর্শের থেকে অনেক দূরে।
xnor

উত্তর:


6

রেটিনা , 123 বাইট

i`(.)(\1..)
$2$1
iG`^([a-z])(?!\1)([a-z])(\1\2|\2\1)$
(..)\1
T
.*(.).\1.*|(.)(.)\3\2
B
(.)..\1|.(.)\2.
P
i`(.)..\1
S
....
P

এটি অনলাইন চেষ্টা করুন! আমার কোডে একটি বাগ চিহ্নিত করার জন্য এবং কীভাবে কিছু বাইট সংরক্ষণ করতে হয় তার জন্য @ জোনাথন অ্যালেনকে ধন্যবাদ; আমি নিজেও আরও কিছু বাইট গল্ফ করেছি যাতে আমি তাকে নির্দিষ্ট ব্যক্তির জন্য কৃতিত্ব দিতে পারি না। ব্যাখ্যা:

i`(.)(\1..)
$2$1

প্রথম দুটি বর্ণ যদি একই হয় (ক্ষেত্রে উপেক্ষা করে), প্রথম বর্ণটি চতুর্থ হতে সরান। এটি আমার পরীক্ষার প্রয়োজনের সংখ্যা হ্রাস করে।

iG`^([a-z])(?!\1)([a-z])(\1\2|\2\1)$

যদি ঠিক চারটি অক্ষর না থাকে, বা প্রথম দুটি অক্ষর একই হয়, বা শেষ দুটি অক্ষর প্রথম দুটিটির সদৃশ হয় না, তবে সবকিছু মুছে ফেলুন।

(..)\1
T

টরাস হ'ল সহজ কেস: এক জোড়া চিঠি, পুনরাবৃত্ত মিলের কেস।

.*(.).\1.*|(.)(.)\3\2
B

যদি জুটির কোনওটির সাথে কেস মেলে (তবে এই ক্ষেত্রে জুটির অন্য কোনওটির সাথে মিল থাকতে হবে), তবে এটি ক্লিন বোতল। বিকল্পভাবে, যদি জোড়টি কেস মেলে তবে বিপরীত হয়, তবে এটি ক্লিন বোতলও।

(.)..\1|.(.)\2.
P

অন্যদিকে জুটিটি যদি বিপরীত হয় তবে এই জুটির মধ্যে কেবল একটির ক্ষেত্রেই মেলে, তবে এটি একটি অভিক্ষিপ্ত বিমান।

i`(.)..\1
S

এবং যদি জুটিটি বিপরীত হয় তবে দুটির ক্ষেত্রেও মেলে না, তবে এটি গোলক। ( i`.(.)\1.কাজ করবে।)

....
P

বাকি সবই একটি অভিক্ষিপ্ত বিমান।


1
@ জোনাথান অ্যালান টিপটির জন্য ধন্যবাদ; আশা করি এই সংস্করণটির আরও ভাল বৈধতা আছে।
নিল

যদি কেবলমাত্র আমি যুক্তিটি নিজেই বের করতে পারতাম: পি
জোনাথন অ্যালান

1

জেলি , 52 51 58 বাইট

+7 বাইট, আমি দেখতে পেয়েছি যে আমি যে ম্যাপিংটি ব্যবহার করেছি তা কিছু (উদাহরণস্বরূপ) কেস পরিবর্তনের পরিস্থিতিতে কাজ করে না।

“nḲ⁾⁶ƥ¦ṃṗḋ’b4s4‘µṙJ;U$µ€
,ŒsṢÞṪµŒlĠL€⁼2,2ȧ⁸i@€ṢeЀ¢TṪ’:3,8

একটি মোনাডিক লিঙ্কটি একটি স্ট্রিং নিয়েছে এবং নিম্নলিখিত পাঁচটি স্বতন্ত্র, সামঞ্জস্যপূর্ণ মানগুলি প্রত্যাবর্তন করবে:

  • [-1,-1] - ভুল ইনপুট
  • [0,0] - অভিক্ষিপ্ত বিমান
  • [1,0] - ক্লিন বোতল
  • [2,0] - গোলক
  • [2,1] - টরাস

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষার স্যুটটি দেখুন

কিভাবে?

যে কোনও মৌলিক বহুভুজ হ'ল:

  • আবর্তনের অধীনে অপরিবর্তিত - কেউ স্টিয়ারিং হুইলের মতো কাগজ ঘুরিয়ে দিতে পারে
  • প্রতিবিম্বের অধীনে অপরিবর্তিত - কেউ কাগজ ঘুরিয়ে দিতে পারে
  • কেস রিভার্সালের অধীনে অপরিবর্তিত - এক ব্যক্তি aAগুলি এবং / অথবা অদলবদল bBs এর কোনও কার্যকারিতা ছাড়াই পরিবর্তন করতে পারে - যেহেতু আমরা যে দিকনির্দেশগুলি প্রকৃত লেবেলটি অপ্রয়োজনীয় সেগুলি মেলাতে চাই।

এর মতো নয়টি সমতা শ্রেণি রয়েছে। কোডটি চারটি পূর্ণসংখ্যার তালিকাগুলি তৈরি করে যার মধ্যে নয়টি সমতুল্য শ্রেণীর একটির উদাহরণ উপস্থাপন করে, প্রতিটিটির চারটি আবর্তন তৈরি করে, সেগুলির প্রতিটি প্রতিফলিত করে এবং তারপরে প্রতিটি তালিকায় ইনপুটটির কোনও অনুবাদকৃত ফর্ম উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন। ক্লাসগুলি অর্ডার করা হয়েছে P,P,P,K,K,K,S,S,T, সুতরাং ০ টি-ভিত্তিক সূচক পূর্ণসংখ্যার প্রতিটি [3,8]ফলনকে চারটি বৈধ আউটপুট দ্বারা ভাগ করে নেওয়া হয় (সূচীকরণটি 1-ভিত্তিক এবং অস্তিত্বের জন্য পরমাণু eফেরত দেয় 0, সুতরাং অবৈধ ক্ষেত্রে 1প্রতিটি [3,8]ফলনের দ্বারা বিয়োগ করে পূর্ণসংখ্যার ভাগ করে নেওয়া হয়) [-1,-1])।

“nḲ⁾⁶ƥ¦ṃṗḋ’b4s4‘µṙJ;U$µ€ - Link 1, symmetries of the 9 equivalence classes: no arguments
“nḲ⁾⁶ƥ¦ṃṗḋ’              - base 250 number                 1704624888339951310984
           b4            - convert to base 4               [1,1,3,0,1,2,2,0,1,2,3,0,0,2,2,0,1,3,1,0,2,1,2,0,2,3,1,0,3,1,2,0,2,0,2,0]
             s4          - split into 4s                   [[1,1,3,0],[1,2,2,0],[1,2,3,0],[0,2,2,0],[1,3,1,0],[2,1,2,0],[2,3,1,0],[3,1,2,0],[2,0,2,0]]
               ‘         - increment (vectorises)          [[2,2,4,1],[2,3,3,1],[2,3,4,1],[1,3,3,1],[2,4,2,1],[3,2,3,1],[3,4,2,1],[4,2,3,1],[3,1,3,1]]
                µ     µ€ - for €ach:                       ...e.g. [2,2,4,1]:
                  J      -   range of length               [1,2,3,4]
                 ṙ       -   rotate left by (vectorises)   [[2,4,1,2],[4,1,2,2],[1,2,2,4],[2,2,4,1]]
                     $   -   last two links as a monad:
                    U    -     upend (reverse each)        [[2,1,4,2],[2,2,1,4],[4,2,2,1],[1,4,2,2]]
                   ;     -     concatenate                 [[2,4,1,2],[4,1,2,2],[1,2,2,4],[2,2,4,1],[2,1,4,2],[2,2,1,4],[4,2,2,1],[1,4,2,2]]

,ŒsṢÞṪµŒlĠL€⁼2,2ȧ⁸i@€ṢeЀ¢TṪ’:3,8 - Main link: string s      e.g. "xOxO"
 Œs                               - swap case                     "XoXo"
,                                 - pair with s                   ["xOxO","XoXo"]
    Þ                             - sort by:
   Ṣ                              -   sort                        ["xOxO","XoXo"]
     Ṫ                            - tail                          "XoXo"
      µ                           - monadic chain separation, call that v
       Œl                         - convert to lowercase          "xoxo"
         Ġ                        - group indices by value        [[2,4],[1,3]]
          L€                      - length of each                [2,2]
             2,2                  - 2 pair 2                      [2,2]
            ⁼                     - equal? (1 if so, 0 if not)    1
                 ⁸                - link's left argument, v       "XoXo"
                ȧ                 - and (v if equal, 0 if not)    "XoXo"
                     Ṣ            - sort v                        "XoXo"
                  i@€             - first index for €ach          [1,3,1,3]
                         ¢        - call the last link (1) as a nilad
                       Ѐ         - map over right:
                      e           -   exists in?                  [0,0,0,0,0,0,0,0,1]
                          T       - truthy indexes                [                9]
                           Ṫ      - tail (empty list yields 0)    9
                            ’     - decrement                     8
                              3,8 - 3 pair 8                      [3,8]
                             :    - integer division (vectorises) [2,1]

দ্রষ্টব্য: 11 বাইট ( ŒlĠL€⁼2,2ȧ⁸) কেবলমাত্র সঠিক ফর্ম হিসাবে ইনপুট স্ট্রিংকে বৈধতা দেয় - এই কোড ব্যতীত প্রতিটি উদাহরণ কেস ab1aহিসাবে ব্যতিক্রম হয় যেমন এটি ছিল যে abBaকোনও প্রজেটিভ প্লেন।

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