একটি কিউব অন পিঁপড়া


33

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

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

পিপীলিকার পথটি প্রান্তটি শুরু করতে পারে এমন কিনারা সহ পুনরায় পুনরাবৃত্তি করতে পারে তবে এটি পুরো ক্রমটির পরে যেখানে শেষ হয় সেখানে কী ঘটে তা গুরুত্বপূর্ণ।

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

(সম্পাদনা করুন: যদি আপনার ভাষা কোনও নামযুক্ত ফাংশন করতে না পারে তবে এটি পরিবর্তে এসটিডিআইএন / প্রিন্টিং বা স্ট্যাকের মাধ্যমে ইনপুট এবং আউটপুট দিয়ে ফাংশনটি কার্যকর করতে পারে that's যদি এটি সম্ভব না হয় তবে এটিকে একটি স্নিপেট তৈরি করুন যাতে ইনপুট এবং আউটপুট সংরক্ষণ করা হয়) ভেরিয়েবল।)

ইনপুট

একটি ক্রম left/ rightদৈর্ঘ্য সিদ্ধান্ত 0থেকে 31আপনার পছন্দের একটি বিন্যাসে প্রতিনিধিত্ব সমেত। এটি অক্ষরের একটি স্ট্রিং R/ L, সংখ্যার একটি তালিকা 1/ -1বা বুলিয়ানগুলির একটি অ্যারে হতে পারে। আপনার কোডের জন্য পদ্ধতির নাম বা স্ট্রিং কার্যকর হওয়ার মতো চিটচিটে কিছুই নেই।

নীচের পরীক্ষার কেসগুলি থেকে আলাদা হলে দয়া করে পরীক্ষার কেসগুলি আপনার ফর্ম্যাটে পোস্ট করুন।

আউটপুট

True/ False, 0/ 1অথবা আপনার ভাষায় অ্যানালগগুলি।

জয়ের মানদণ্ড

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

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

True কেস (প্রতি লাইনে এক, দ্বিতীয় খালি তালিকা):

1 1 1 1

-1 -1 -1 -1
1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
-1 1 1 -1 -1 1 1 -1
1 1 1 -1 -1 -1 -1 1
1 -1 -1 1 -1 -1
1 1 1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

False কেস (প্রতি লাইনে একটি):

1
1 1
1 1 1
-1 1
1 -1 -1 -1 1
1 -1 -1 1 1
-1 1 -1 1
1 1 1 1 -1
-1 -1 1 -1 1 -1 -1 1
1 -1 1 1 1 1 -1 -1 -1 1 1 -1 -1 -1

এখানে একই পরীক্ষাগুলির ক্ষেত্রে L'গুলি এবং R' গুলি রয়েছে।

True মামলা:

RRRR

LLLL
RLRLRL
RRLLRRLL
LRRLLRRL
RRRLLLLR
RLLRLL
RRRRLLLLRLLRLL
LLLRLLRRLRLRRRRRRRRRRRRRRRRR

False মামলা:

R
RR
RRR
LR
RLLLR
RLLRR
LRLR
RRRRL
LLRLRLLR
RLRRRRLLLRRLLL

অতিরিক্ত creditণের চ্যালেঞ্জ

একই জিনিস, তবে একটি ঘনক্ষেত্রের পরিবর্তে ডোডেকহেড্রন সহ । ধারণাগুলির জন্য হান্ট দ্য উইম্পাস দেখুন ।


এটি কি নামযুক্ত ফাংশন ছাড়া ভাষার ব্যবহারকে বাদ দেয়?
মাইক প্রিকআপ

@ মাইকপ্রেকআপ আপনি কি আমাকে এই জাতীয় ভাষার কিছু উদাহরণ দিতে পারেন? আমি বিকল্পগুলি সন্ধান করব।
xnor

আমি আমার সমস্ত কোড গল্ফ জমাগুলি > <> এ করি , এজন্যই আমি জিজ্ঞাসা করি। এটিতে একটি স্ট্যাক রয়েছে যা আপনি আরোগুলিকে উপরের অংশে লোড করতে পারেন এবং তারপরে ফলাফলটি স্ট্যাকের উপরে রেখে দিতে পারেন, তবে এটি ঠিক কোনও নামকৃত কার্য নয়।
মাইক প্রিকআপ

@ মাইকপ্রিপআপ ঠিক আছে, আমি তার জন্য একটি ভাতা রেখেছি। যদি এখনও কোনও ভাষার জন্য কোনও সমস্যা থাকে তবে দয়া করে আমাকে বলুন, আমি কোনও ভাষা বাদ দিতে চাই না।
xnor

আমি বেফুঞ্জ এবং> <> এবং এই ধরণের ভাষা সম্পর্কে
ভাবতে পারি

উত্তর:


21

গল্ফস্ক্রিপ্ট, 24 টি অক্ষর (কেবলমাত্র ফাংশন বডি জন্য 19)

ম্যাথ এফটিডব্লিউ!

{3,.@{[+~@\{@}*~]}/=}:f;

এই সমাধানটি অনলাইনে পরীক্ষা করুন।

এই ফাংশনটি বাইনারি অ্যারে ইনপুট হিসাবে নেয় (বাম দিকে 0, ডানদিকে 1) এবং সত্যের জন্য 1 এবং মিথ্যা হিসাবে 0 প্রদান করে।

ধারণার দিক থেকে, এটা আবর্তিত করে কাজ করে ঘনক্ষেত্র যাতে পিপীলিকা সবসময় একই অবস্থানে এবং স্থিতিবিন্যাস বজায় রাখে, এবং চেক কিনা ঘনক্ষেত্র পরিশেষে একই সজ্জাতে শেষ পর্যন্ত যেমন শুরু হয়।

বিশেষ করে, আমরা তিনটি মাত্রা, দুই রৈখিক মানচিত্র বাম এবং ডান করিয়া উপস্থাপন করতে পারেন যেখানে একটি 90 ° ঘূর্ণন বাম পালা অনুরূপ প্রায় এক্স অক্ষ, অর্থাত্ মানচিত্র ( এক্স , Y , z- র ) → ( এক্স , z- র , - y ), এবং ডানদিকে বাঁকটি y অক্ষের চারপাশে 90 ° ঘূর্ণনের সাথে মিলে যায় , যেমন মানচিত্র ( x , y , z ) → ( z , y , - x )।

ফাংশনের শুরুতে, আমরা কেবল স্বতন্ত্র ধনাত্মক মান (1, 2, 3) সমন্বিত একটি ত্রি-উপাদান ভেক্টর স্থাপন করি, এতে ঘূর্ণন মানচিত্রের ক্রম প্রয়োগ করি এবং ফলাফলটি ভেক্টরটি প্রাথমিকের সাথে সমান কিনা তা পরীক্ষা করে দেখি।

(আসলে, কয়েকটি অক্ষর সংরক্ষণ করতে, আমি আসলে স্থানাঙ্কগুলিকে রূপান্তর করি যাতে প্রাথমিক ভেক্টরটি (0, 1, 2) এবং মানচিত্রগুলি হ'ল ( x , y , z ) x ( x , z , −1− y ) এবং ( x , y , z ) → ( z , y , −1− x ), তবে শেষ ফলাফলটি একই)

গীত। এই সমাধানের মূল সংস্করণে বাগটি খুঁজে পাওয়ার জন্য গর্বিত হাসেলেলারকে ধন্যবাদ ।


পার্ল, 58 টি অক্ষর

মন্তব্যে অনুরোধ করা হিসাবে, এখানে পার্লের একই সমাধান পোর্ট করা হয়েছে। (এই সংস্করণটি বাস্তবে অপরিকল্পিত স্থানাঙ্কগুলি ব্যবহার করে, যেহেতু রূপান্তর পার্লের কোনও অক্ষর সংরক্ষণ করে না))

sub f{@a=@b=1..3;@a[$_,2]=($a[2],-$a[$_])for@_;"@a"eq"@b"}

এই সমাধানটি অনলাইনে পরীক্ষা করুন।


বোনাস: একটি ডোডেকাহেড্রনের উপর পিপীলিকা (গল্ফস্ক্রিপ্ট, 26 টি অক্ষর)

{5,.@{{2*2%[~\]}*(+}/=}:f;

এই সমাধানটি অনলাইনে পরীক্ষা করুন।

উপরের পিঁপড়-অন-এ-কিউব ফাংশনের মতো, এই ফাংশনটি বাইনারি অ্যারে হিসাবে ইনপুট হিসাবে নেয় (বাম দিকে 0, ডানদিকের জন্য 1) এবং পিঁপড়াটি একই অবস্থানে এবং প্রবর্তন শুরু হওয়ার সাথে সাথে শেষ হলে 1 বা ফিরে আসে অন্যথায়।

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

সুতরাং, আমরা সকলে যা করতে হবে এটি দুই একাধিক বিন্যাসন হয় এল এবং আর যে বাম এবং ডান ঘুর্ণন উপস্থাপন করতে পারেন। বিশেষ করে, এই একাধিক বিন্যাসন 5-চক্র হতে হবে (তাই তাদের আসল অবস্থায় পাঁচবার আয় আবেদন), তারা একে অপরের (অর্থাত শক্তি হবে না আরএল এন কোন জন্য এন ), এবং তারা সম্পর্ক সন্তুষ্ট প্রয়োজন ( এলআর ) 5 = (1), যেখানে (1) সনাক্তকরণের অনুমতিটি বোঝায়। (বাস্তবে, এই মানদণ্ডে বলা হয়েছে যে পথটি LRLRLRLRLRঅবশ্যই মূল অবস্থানে ফিরে যেতে হবে))

স্থির এল বিন্যাস বাম, অর্থাত ম্যাপিং (এটি একটি সহজ পিপা শিফট হতে একটি , , , , ) → ( , , , , একটি ,) যেহেতু এটি মাত্র দুই মধ্যে GolfScript বাস্তবায়িত করা যাবে অক্ষর ( (+), আমরা দেখতে পেলাম যে আর পারমিটেশনের জন্য পাঁচটি সম্ভাব্য পছন্দ রয়েছে । এর মধ্যে আমি ম্যাপিং ( , , সি , ডি , ) chose ( সি , , ডি , , ), যেহেতু এটির তুলনামূলকভাবে কমপ্যাক্ট গল্ফস্ক্রিপ্ট বাস্তবায়নও রয়েছে। (আসলে, আমি এটি প্রথম উপাদানের interleaving দ্বারা বাস্তবায়ন 2*2%প্রাপ্ত ( একটি , , , বি , ), তারপর গত দুটি উপাদান সোয়াপিং [~\], এবং পরিশেষে প্রয়োগের এল বিন্যাস নিঃশর্তভাবে সরাতে একটি শেষ।)

উপরের অনলাইন ডেমো লিঙ্কটিতে একটি ডোডেকাহেড্রনের বৈধ পাথের কিছু পরীক্ষার কেস রয়েছে যা উত্সে ফিরে আসে, যেমন:

           # empty path
1 1 1 1 1  # clockwise loop
0 0 0 0 0  # counterclockwise loop
1 0 0 0 0 1 1 0 0 0 0 1  # figure of 8
1 0 1 0 1 0 1 0 1 0      # grand circle
1 0 0 0 1 0 0 0          # loop around two faces 
1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0  # Hamilton cycle

চমৎকার সমাধান! যেখানে পিঁপড়াটি একই দিক থেকে অন্য দিক থেকে ফিরে আসে সেখানে কী এটি কে বাদ দেয়?
এক্সনর

আমি বুঝতে পারি না - মূলত আপনি এখানে যা করছেন তা 3 বিট ব্যবহার করে পিপড়ার অবস্থানের প্রতিনিধিত্ব করছে তবে 24 টি সম্ভাব্য অবস্থান রয়েছে। কিভাবে?
গর্বিত হাসেলেলার

1
@ প্রফেসহেস্কিলার: বাগটি চিহ্নিত করার জন্য ধন্যবাদ। আমি এটি স্থির করেছি, এবং আমার পরীক্ষার স্যুটটিতে আপনার কাউন্টারের নমুনা যুক্ত করেছি।
ইলমারি করোনেন

1
@ এক্সনর: ডডকেহেড্রনের জন্যও একটি সমাধান যুক্ত করা হয়েছে।
ইলমারি করোনেন

1
দোডেহেড্রনের জন্য দুর্দান্ত জুটির অনুমতি আমি যেগুলি হান্ট উইম্পাসের জন্য ব্যবহার করেছি সেগুলি আরও দীর্ঘ হবে: {[~@]-1%}*[~@]বা ){[~@]-1%}*-1%আপনার প্রতিস্থাপন করুন{2*2%[~\]}*(+
পিটার টেলর

7

পাইথন, 68

1 এবং -1 এর একটি তালিকা নেয়। 3 ডি ঘূর্ণনের উপর ভিত্তি করে: পরীক্ষা করে যে বিন্দুটি (3,2,1) একই ঘূর্ণায়মানগুলির পরে প্রয়োগের পরে একই অবস্থানে শেষ হয়। দুটি সম্ভাব্য ঘূর্ণন রয়েছে, 1 এবং -1 এর সাথে সম্পর্কিত। প্রতিটি এক দুটি স্থানাঙ্ককে অনুমতি দিয়ে এবং তাদের একটির সাইন পরিবর্তন করে সম্পন্ন হয়। পরিবর্তনের সঠিক স্থানাঙ্ক এবং ক্রমতে কোন চিহ্নটি গুরুত্বপূর্ণ নয়।

def f(l):
 p=[3,2,1]
 for d in l:p[d],p[0]=-p[0],p[d]
 return[3,2]<p

সম্পাদনা: এটি সাধারণত "পার্ল, 58" এর মতো একই সমাধান solution


তুমি ঠিক বলেছ, এটা সত্যই।
গর্বিত হাস্কেলর

+1, এটি পাইথন সমাধানে আমার প্রচেষ্টার চেয়ে এখনও কম। আমার কাছে যা আছে তা দেখে, আমি মনে করি আপনি ইনপুটটিকে 0 এবং 1 এর হিসাবে নিয়ে এবং শেষ উপাদানটিকে pএকটি পৃথক ভেরিয়েবলে বিভক্ত করে আরও কয়েকটি অক্ষর সংরক্ষণ করতে পারেন ।
ইলমারি করোনেন

3
বাহ, এই সমস্যাটি পরীক্ষার সমাধান করার সময়, আমি ভেরিয়েবল নামগুলি ছাড়া চরিত্রের জন্য ঠিক একই সমাধান , চরিত্রটি লিখেছিলাম !
xnor

5

ম্যাথামেটিকাল

ইলমারি করোননের সমাধান থেকে অনুপ্রাণিত। ঘনকটির ঘূর্ণমান প্রতিসাম্য গ্রুপটি এস 4 থেকে আইসোমরফিক হয় ।

কিউব, 51 বাইট

Fold[Part,r=Range@4,{{2,3,4,1},{3,4,2,1}}[[#]]]==r&

ইনপুট হিসাবে 1গুলি এবং -1এর একটি তালিকা নেয় ।

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

ডোডেকাহেড্রন, 55 বাইট

Fold[Part,r=Range@5,{{2,3,4,5,1},{3,5,4,2,1}}[[#]]]==r&

ইনপুট হিসাবে 1গুলি এবং -1এর একটি তালিকা নেয় ।

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


আমি অনুসন্ধান করছিলাম যে এটি কীভাবে পাওয়া যাবে যে এটি এস 3-র কাছে সমকামী?
গর্বিত হাসেলেলার

ওফস আমি বোঝাতে
চাইছি

: @proudhaskeller আপনি এটা এখানে পেতে পারেন en.wikipedia.org/wiki/Octahedral_symmetry
alephalpha

5

সি (জিসিসি) , 118 116 107 105 বাইট

-2 বাইট সিলিংক্যাট ধন্যবাদ

f(char*s){char*p,n[]="@ABCDEFG",y;for(;*s;s++)for(p=n;*p;*p++^=*s^82?y%2+1:4-(y&2))y=*p/2^*p;y=n[2]==66;}

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

ধরুন আমরা কিউবকে নিম্নলিখিত সমন্বয়গুলি দিয়েছি:

            (1,1,1)       (1,1,0)
          G +--------------+ C
           /|             /|
          / |            / |
         /  |    (0,1,0)/  |
(0,1,1) +--------------+ D |
      H |   |          |   |
        |   |          |   |
        | F +----------|---+ (1,0,0)
        |  /(1,0,1)    |  / B           x
        | /            | /           y / 
        |/             |/            |/  
      E +--------------+ A      z ---*   
        (0,0,1)       (0,0,0)

যদি আমরা কোণার ডি থেকে শুরু করি, তবে সি বা এইচ এ সরানো পরিবর্তে আমাদের চারপাশে ঘনক্ষন ঘোরানো হিসাবে ভাবা যেতে পারে। ডান সরানো মানে জেড অক্ষের চারপাশে ঘড়ির কাঁটা ঘোরানো এবং বামদিকে সরানো অর্থ X অক্ষের চারদিকে ঘড়ির কাঁটার দিকে ঘোরানো। এগুলি শুধুমাত্র দুটি ঘূর্ণন যা আমাদের যত্ন নেওয়া উচিত। যেহেতু প্রতিটি আবর্তন ঠিক 90 ডিগ্রি হয় তাই আমরা কোণগুলি "স্লাইডিং" প্রান্তগুলি ধরে কল্পনা করতে পারি। ডানদিকে চলার জন্য, এর অর্থ এ -> বি, বি -> সি, সি -> ডি, ডি -> এ অন্য পক্ষের E -> F ইত্যাদি করছে বাম দিকে সরানোর জন্য, আমরা পরিবর্তে এ -> ই, ই পেয়েছি > এইচ ইত্যাদি

যেহেতু প্রতিটি কোণটি কেবল একটি প্রান্তে স্লাইড হয়, এর অর্থ প্রতিটি ঘোরার জন্য প্রতিটি বিন্দুর মাত্রার এক মাত্র পরিবর্তন হয়। বি যখন সি তে চলে আসে তখন কেবল তার y উপাদান পরিবর্তিত হয় এবং যখন এইচ ডি তে চলে আসে কেবল তার z উপাদান পরিবর্তিত হয় ইত্যাদি। অধিকন্তু, যেহেতু স্থানাঙ্কগুলি 0 এবং 1 এর মধ্যে সীমাবদ্ধ রয়েছে, আমরা প্রতিটি বিন্দুকে বাইনারি সংখ্যা হিসাবে ভাবতে পারি, যথাযথ বিটটি চলাফেরার সাথে ফ্লিপ করে।

আমরা দেখতে পাচ্ছি যে ডানদিকে চলাচলের জন্য, এ এবং সি তাদের এক্স এর ফ্লিপ করে, যখন ডি এবং বি তাদের y এর ফ্লিপ করে। যদি আমরা ঘনক্ষেত্রের সেই দিকটির দিকে তাকানোর জন্য দৃষ্টিভঙ্গি পরিবর্তন করি এবং z উপাদানটিকে উপেক্ষা করি (যা যাইহোক এই ঘূর্ণনের জন্য পরিবর্তন হয় না) আমরা পাই:

D (0,1)         C (1,1)
 +-------------+
 |             |
 |             |
 |             |
 |             |
 |             |
 |             |
 +-------------+
A (0,0)         B (1,0)

একটি নিদর্শন উত্থিত হয়: পয়েন্টগুলির জন্য যেগুলি তাদের x, x == y ফ্লিপ করে, যখন বিপরীতটি তাদের y এর উল্টানো পয়েন্টগুলির জন্য সত্য। এটি অন্য ধরণের আবর্তনের জন্য ধারণ করে তবে x এর পরিবর্তে z সহ।

অন্য কথায়:

Right
    if (x == y) x = !x
    if (x != y) y = !y

Left
    if (z == y) z = !z
    if (z != y) y = !y

এখন আমরা সহজেই সমস্ত ঘোরার মধ্য দিয়ে যেতে পারি, এবং শেষে দেখুন ফাইনাল ডিটি আমাদের প্রাথমিক ডিটির সাথে মেলে কিনা see

প্রতিটি পয়েন্টকে একক সংখ্যা হিসাবে সংরক্ষণ করা একটি প্রদত্ত, তবে সি-তে একটি চর অ্যারে নির্ধারণ করা কোনও ইনট অ্যারের চেয়ে অনেক বেশি কমপ্যাক্ট। আমরা এমন অক্ষর বাছাই করতে যত্ন নিই যার নীচের তিনটি বিট 000.১১১ এর সাথে মেলে, কেবলমাত্র বাকি বিটগুলি উপেক্ষা করা সম্ভব করে তোলে। স্থানাঙ্কগুলি উল্টিয়ে দেওয়া উপযুক্ত বিটমাস্কের সাথে কেবল XOR'ing এর বিষয়।


1
দীর্ঘ ব্যাখ্যার জন্য অনেক ধন্যবাদ, অন্যান্য উত্তরগুলি আমার মাথায় বেশ ক্লিক করে না, তবে এই তাত্ক্ষণিকভাবে তা উপলব্ধি করে।
নিট

4

পাইথন - 110, 150

-1বাম 1দিকে, ডান দিকে ঘোরার জন্য পূর্ণসংখ্যার তালিকায় নিয়ে যায় ।

কিউব, ১১০:

def f(l):
    c,p='07'
    for d in l:a="100134462634671073525275"[int(c)::8];c,p=a[(a.index(p)+d)%3],c
    return'1'>c

টেস্ট:

l=map(int,'1 1 1 1'.split())
print f(l)

ডোডেকাহেড্রন, 150:

def f(l):
    c,p='0J'
    for d in l:a="I5H76E8BBA8F76543100JI0J21D3A5C7E9CJI2132H4GF94C6D98AHGBEDGF"[int(c,36)::20];c,p=a[(a.index(p)+d)%3],c
    return'1'>c

1
আপনি তিন মিনিটের মধ্যে কীভাবে এটি লিখেছেন তা বরং এটি চিত্তাকর্ষক :
পি

6
এই বস প্রশ্নের উত্থাপিত হওয়ার জন্য বেশ কিছুক্ষণ অপেক্ষা করেছিলেন। ;-)
ভেক্টরাইজড

আমি পাইথন ৩.২-তে এটি চালানোর সময় আমি "টাইপআরার: বাফার ইন্টারফেসের সাথে প্রত্যাশিত একটি অবজেক্ট" পেয়ে যাচ্ছি।
xnor

@ এক্সনর সম্পাদিত, এখন অজগর ২. আশা করি এটি কার্যকর হয়েছে।
ভেক্টরাইজড

4

মার্বেলস 188

একটি নতুন ভাষা দেখানোর উদ্দেশ্যে ইলমারী করোননের অ্যালগরিদমকে নির্লজ্জ চুরি ।

এই স্ক্রিপ্টটি বামদিকে 0x00 এবং স্টিডিনের ডানদিকে 0x01 এর স্ট্রিং প্রত্যাশা করবে, তার পরে 0x0A (নিউলাইন) থাকবে। এটি একটি ব্যর্থ মামলায় "0" এবং সাফল্যের জন্য "1" ফলাফল দেয়।

......@5@3FF
@0@1@2\\]]@5
010203@4=A@4
&0&0&0&0/\
MVMVMVMV..
@0@1@2@3..!!
:MV
}2}2}1}0}1}0}3
&0&1&0&1~~~~<A@P
{0{1{1{0&1&0=0&1
}0}1}2@P{2{2&030
=1=2=3&2FF}3..//
&2&2&231&2{3
\/\/\/&2!!..//

উদাহরণ রান:

# echo -e "\x0\x0\x0\x1\x0\x0\x1\x1\x0\x1\x0\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1\x1" | marbelous.py ant-on-a-cube.mbl
1

1
আমি এই ভাষাটির বিবরণ পড়ার পূর্ব পর্যন্ত এই উত্তরটি কতটা ক্রেজি তা বুঝতে পারি নি। এটি একটি গল্ফ ভাষার জন্য সত্যিই দুর্দান্ত ধারণা!
xnor

@ এক্সনর গল্ফ অঙ্গনে এটি কখনও গুরুতর প্রতিযোগী হওয়ার সম্ভাবনা কম তবে এটি এখনও কিছুটা মজাদার :)
স্পার

4

পাইথন 2 , 57 বাইট

f=lambda l:reduce(lambda n,x:n%4*64+n/4*16**x%63,l,27)<28

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

এটি ক্রমবিন্যাস উপস্থাপনা ব্যবহার করে

0: abcd -> dabc
1: abcd -> dcab

যেখানে বাম এবং ডান (0 এবং 1) 4 টি উপাদানের দৈর্ঘ্য -4 চক্রের সাথে মিল রয়েছে। আমরা নির্দেশিত ক্রিয়াকলাপ প্রয়োগ করে ইনপুটটি নিয়ে পুনরাবৃত্তি করি এবং ফলাফলটি প্রাথমিক মানের সমান কিনা তা পরীক্ষা করে দেখি।

আমরা a,b,c,dচার-উপাদান তালিকা হিসাবে শুরু 0,1,2,3। আমরা তাদেরকে একটি একক বেস -4 সংখ্যায় সংশ্লেষ করি n=abcd, প্রাথমিক মানটি বেস 4 এর n=27সাথে সঙ্গতিপূর্ণ হয় 0123We আমরা প্রতিটি আদেশকে গাণিতিকভাবে ইনস্ট্যান্ট করি n

যেহেতু উভয় ফলাফলই শুরু হয় d, আমরা এটিকে n%4উত্তোলন করতে পারি d, তারপরে n%4*64এটিকে সঠিক অবস্থানে নিয়ে যেতে d___। অন্যান্য ডিজিটের হয় abc, যেমন নিষ্কাশিত n/4। আমাদের সেগুলি নীচের তিনটি মানের মধ্যে সন্নিবেশ করা প্রয়োজন।

দিকনির্দেশের জন্য x=0, আমরা abcযেমনটি সন্নিবেশ করি এবং এর জন্য x=1আমরা সেগুলি ঘোরাই cab। যেমন ঘূর্ণন অর্জন করা যেতে পারে *16%63, যা লাগে abcকরার abc00জন্য cab। ( %63এটি ভুল হয়ে যাবে a==b==c==3, তবে এই মানগুলি সম্ভব নয়)) যেহেতু স্রেফ %63করাই একটি অনিচ্ছুক, তাই নির্দেশ-নির্ভর এক্সপ্রেশনটি প্রয়োজন হিসাবে *16**x%63দেয় abcবা দেয় cab


পাইথন 2 , 55 বাইট

f=lambda l:reduce(lambda n,x:n^(n*8%63|7*8**x),l,10)<11

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


3

Haskell,, 104 103 99 97 96/ 67 64 অক্ষর

আমি মনে করি ডান / বামের সমতুল্য এই জাতীয় ডেটাটাইপ দিক হবে:

Direction = R | L

সুতরাং আমি আমার উত্তরে ধরে নিয়েছি যে তারা উপলব্ধ ছিল।
সম্পাদনা: বাস্তবে বুঝতে পেরেছি যে বুলিয়ানরা সংক্ষিপ্ত কোডের দিকে নিয়ে যাবে। সত্যটি একটি বাম বাঁককে উপস্থাপন করে এবং মিথ্যা একটি ডানদিকে ঘুরিয়ে উপস্থাপন করে (যদিও প্রযুক্তিগতভাবে কোডটি উল্টে থাকলে একই কাজ করবে; এটি প্রতিসাম্যপূর্ণ)

96 টি অক্ষর:

m[p,l,r]b|b=[p%l,7-r-l,r]|0<1=[p%r,l,7-r-l]
p%x|odd$div p x=p-x|0<1=p+x
g l=foldl m[0..2]l<[0,2]

জি একটি ফাংশন যা দিকনির্দেশের একটি তালিকা দিলে পিপীলিকা তার জায়গায় ফিরে না আসার আবহাওয়া ফিরিয়ে দেয়।

অবস্থানের উপস্থাপনের ব্যাখ্যা: পিপিলির অবস্থানটি তিনটি পূর্ণসংখ্যার হিসাবে কোড করা হয়। প্রথম পূর্ণসংখ্যার পিঁপড়াটি যে শিরোনামে চলছে তার প্রতিনিধিত্ব করে। প্রথম বিটটি উপস্থাপন করে যদি ভার্টেক্সটি উপরের / নীচের অর্ধে থাকে, দ্বিতীয়টি বাম / ডান অর্ধেক এবং তৃতীয়টি পিছনের / সামনের অর্ধেক হয়। এটি এমনভাবে করা হয়েছে যাতে একটি ভার্টেক্স থেকে প্রতিবেশী ভার্টেক্সে স্থানান্তরিত করা একটি বিট উল্টিয়ে done

দ্বিতীয় পূর্ণসংখ্যা হ'ল পরিমাণটি যে পিঁপড়ের ভার্টেক্সটি বামে যেতে পারলে তা পরিবর্তিত হত। উদাহরণস্বরূপ, যদি পিপড়াটি ভার্টেক্স 3 এ থাকে এবং দ্বিতীয় পূর্ণসংখ্যা 4 হয় তবে বাঁদিকের প্রান্তটি বাঁক দেওয়ার পরে 7. টি হয় note দ্রষ্টব্য এটি সর্বদা 2 এর শক্তি হবে কারণ সঠিকভাবে এক বিটটি একটি ভার্টেক্সকে স্থানান্তরিত করে বিটকে উল্টানো হয়।

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

কিছু খেয়াল করার বিষয় হ'ল বাম দিকে ঘোরার সময়, তৃতীয় পূর্ণসংখ্যা একই থাকবে এবং দ্বিতীয়টি 1 2 থেকে 4 এর মধ্যে হবে যা দ্বিতীয় পূর্ণসংখ্যা বা তৃতীয়টি নয়, যা 7 এর সমান হয় - দ্বিতীয় পূর্ণসংখ্যা - তৃতীয় পূর্ণসংখ্যা।

আমি অবস্থানটি উপস্থাপনের এই উপায়টি বেছে নিয়েছি কারণ (পূর্ববর্তী অনুচ্ছেদে যেমন বলা হয়েছিল) পরবর্তী অবস্থানের গণনা করা তুচ্ছ ছিল।

ফাংশন ব্যাখ্যা:

(%) ফাংশনটি হ'ল ফাংশন যা বর্তমান ভার্টেক্স এবং এটি পরিবর্তন করতে পরিমাণ নেয় এবং এটি পরিবর্তন করে। এটি পরিবর্তিত হতে চলেছে এবং এটি ফ্লিপ করে (খুব সংখ্যক উপায়ে)।

মি ফাংশন এমন একটি ফাংশন যা পিঁপড়ির অবস্থান এবং দিকনির্দেশনা নেয় এবং আমরা আগে উল্লিখিত নোটটি ব্যবহার করে নতুন অবস্থানে ফিরে আসে।

তারপরে এই ফাংশনটি তৈরি করতে মি ফাংশনটি ভাঁজ (যা reduceজাভাস্ক্রিপ্টের মতো ধরণের , তবে কিছুটা আরও অভিব্যক্তিপূর্ণ) ব্যবহার করে একত্রিত করা হবে, এই প্রশ্নের উত্তর।


হাস্কেল, characters৪ টি অক্ষর

@ আলফালফার উত্তরে অনুপ্রাণিত হয়ে এখানে এটির সংস্করণ হ্যাশকেলে পোর্ট করা আছে:

m[a,b,c,d]p|p=[b,c,d,a]|0<1=[b,d,a,c]
g l=foldl m[0..3]l<[0,1,3]



সম্পাদনা: লিমি করোনেনের উত্তরের কারণে আমি এখন অবিশ্বাস্যভাবে বোকা বোধ করি। সম্ভবত আমি তার উত্তরটি হাসেলকে পোর্ট করব। অন্য সম্পাদনা: মূঢ় যেমন লাগছে না তার উত্তর হিসাবে হয় ভুল ছিল
সম্পাদনা: আসলে tuples ব্যবহার থেকে তাদের হিসাবে তালিকা ব্যবহার করে স্যুইচ Ordউদাহরণস্বরূপ এবং [ ... ]অন্বিত চিনি এটা খাটো করে তোলে


1
এটি এত মার্জিত দেখাচ্ছে, বিশেষত ভাঁজ। এটি [0,1,2,3]একটি ভেরিয়েবলকে বরাদ্দ করতে আরও অক্ষর বাঁচাতে পারে এবং এটিকে অভিব্যক্তির ইনপুট এবং ফলাফলের জন্য চেক হিসাবে ব্যবহার করতে পারে?
xnor

@ এক্সনর কারণ আপনার মন্তব্যটি আমার মন সিদ্ধান্ত নিয়েছে যে এটি গল্ফঙের সাথে আসে [0..3]... আমি জানি না কেন আমি আগে এটি লক্ষ্য করিনি। ধন্যবাদ। কিন্তু এখন আপনার কৌশল কার্যকর হয় না। আচ্ছা ভালো.
গর্বিত হাস্কেলর

3

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

f=(<28).foldl(\n x->mod n 4*64+mod(div n 4*16^x)63)27

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

আমার পাইথন উত্তর হিসাবে একই যুক্তি , এমনকি ভেবেছি modএবং divলিখতে আরও দীর্ঘ।


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

r=[1..3]
f=(==r).foldl(\[x,y,z]->(!!)[[x,-z,y],[-z,y,x]])r

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


3

এপিএল (ডায়ালগ ইউনিকোড) , 22 বাইট ( অ্যাডামের এসবিসিএস )

f←{x∊(-@3∘⌽⌽)/⍵,x←⊂⍳3}

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

এইচ.পি.ভিজ পরামর্শ দিলেন যে পদক্ষেপগুলি উল্টিয়ে দেওয়া কোনও পার্থক্য রাখে না এবং এর ফলশ্রুতি -২ বাইট হয়।

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

ফাংশনটির নাম দেওয়া হয়েছে f, এবং পরীক্ষার ক্ষেত্রে, 1একটি বাম পালা (বুলিয়ান ট্রু) 0উপস্থাপন করে এবং ডানদিকে ঘুরিয়ে (বুলিয়ান মিথ্যা) উপস্থাপন করে। খালি তালিকা উপস্থাপন করে।


3

এপিএল (ডায়ালগ) , 21 বাইট

f←{x≡(↓∪⊢∘⌽)/⍵,x←⊂⍳4}

এটি অনলাইন চেষ্টা করুন! (এরিক আউটগোল্ফরের উত্তর থেকে পরীক্ষার পরিবেশটি ব্যবহার করে )

আমি বাম এবং ডান হিসাবে 1এবং হিসাবে নিতে 2। এটি নিম্নলিখিত ক্রিয়াকলাপ ব্যবহার করে abcd:

1 : bcda
2 : cdba

আমি আবেদন সংশ্লিষ্ট একাধিক বিন্যাসন 1এবং 2করতে ⍳4 : 1 2 3 4, এবং চেক যদি এটা অপরিবর্তিত



3

বাশ , 71 65 বাইট

f()(a=1234;for i;{ a=`tr 1-4 4$[$i?123:312]<<<$a`;};((a==1234));)

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

পূর্ববর্তী অনেক উত্তরের মত, 1234-> 4123 এবং 1234-> 4312 দ্বারা উত্পন্ন ঘনকটির ঘূর্ণনের গোষ্ঠীর উপস্থাপনা ব্যবহার করে। অক্ষরের পরিবর্তে সংখ্যাগুলি ব্যবহার করে যাতে আমি একটি গাণিতিক প্রসারণ সহ একটি টার্নারি অপারেটর ব্যবহার করতে পারি। এর ইনপুটটি 0 এর এবং 1 এর ফাঁকে ফাঁকে আলাদা করা এবং প্রস্থান কোডের মাধ্যমে আউটপুট প্রত্যাশা করে।

@ ম্যানটওয়ার্কের মন্তব্যে 6 বাইট সংরক্ষণ করা হয়েছে!


1
দেখুন ডেনিস এর ব্যাশ ডগা পরামিতি তালিকা উপর লুপিং সংক্রান্ত।
manatwork

3

ব্রেনফাক , ১১৯ বাইট, ১৩7 বাইট

S4

কিউব, 119 বাইট

++++>+++>++>+>,[+++[->+++<]<<<<[->>>>+<<<<]>[>]<+[[-]<[->+<]<<<[->>>+<<<]>[>]],]<[[<]>[->]<[>>]<]<[>>-<]-[----->+<]>--.

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

++++>+++>++>+    Initialize tape as 4 3 2 1

>,[              For each input byte:

  +++[->+++<]       Add 3 and multiply by 3; if input is R, this will be 255

  <<<<[->>>>+<<<<]  Move first number to end (BCDA)

  >[>]<+[           If input wasn't R:

    [-]                Zero input cell (which is now negative 18)

    <[->+<]            Move previously moved number one slot further (BCD_A)

    <<<[->>>+<<<]      Move first number into vacated slot (CDBA)

  >[>]]

,]

<[[<]>[->]<[>>]<]     Determine whether tape is still 4 3 2 1

<[>>-<]               If not: subtract 1 from output cell

-[----->+<]>--.       Create "1" in output cell and output

ডোডেকাহেড্রন, 137 বাইট

+++++>++++>+++>++>+>,[+++[->+++<]<<<<<[>>>>>+[<]>-]>[>]<+[[-]<<[[->>+<<]<<]>[>>>>>>+[<]<-]>>[>]],]<[[<]>[->]<[>>]<]<[>>-<]-[----->+<]>--.

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

দুটি প্রোগ্রামের মধ্যে একমাত্র পার্থক্য হ'ল সেটআপ এবং অনুমতি। এখানে ব্যবহৃত বাম DCAEBঅনুক্রমটি হ'ল যা মনে হয় এটি গল্ফিয়াস্ট কনজুগেট উপলভ্য।


1

জেলি , 14 বাইট

3RðW;ṙN1¦ṚƊ/⁼⁸

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

1= বাম দিকে, 0ডানদিকে ঘুরুন। আমার ডায়ালগ সমাধানের উপর ভিত্তি করে।

দুর্ভাগ্যক্রমে, জেলি নামক কার্যাদি নেই। যদি আমি কোনও অন্তর্নিহিত ইনপুট ব্যবহার করতে না পারি এবং এটি কোনও ভেরিয়েবলের মধ্যে অনুমান করার প্রয়োজন হয় তবে একই দৈর্ঘ্যের এই সংস্করণটি করবে:

3RµW;®ṙN1¦ṚƊ/⁼

এটি অনুমান করে যে ইনপুটটি নিবন্ধটিতে রয়েছে (© / ®)।


0

পার্ল - 120, 214

বুলিয়ানগুলির একটি অ্যারে (তালিকা) নেয়।

কিউব (120):

sub e{$a=$b=0;for$c(@_){$_=(13,62,53,40,57,26,17,'04')[$b];$d=s/$a/($b-1)%8/e;($a,$b)=($b,substr($_,$c^$d,1))}return!$b}

ডোডেকাহেড্রন (214):

sub e{$a=$b='00';for$c(@_){$_=('01041102090307040500061807160308091502101114121019131714151016081706131819051200'=~/\d{4}/g)[$b];$d=s/$a/sprintf'%02d',($b-1)%20/e;($a,$b)=($b,substr($_,($c^$d)*2,2));}return!($b+0)}

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