পাশা ঘূর্ণায়মান


16

পাশা ঘূর্ণায়মান

সুতরাং, আমি কিছুক্ষণ আগে পাশা ঘূর্ণায়িত হয়েছিলাম এবং একটি চ্যালেঞ্জের কথা ভেবেছিলাম।

ইনপুট থেকে নেওয়া জাল এবং চালগুলির একটি তালিকা সহ কিউব দেওয়া হয়েছে, শেষে নীচে স্কোয়ারটি সন্ধান করুন।

কিউব মানচিত্র

আমি উদাহরণের জন্য এই চিত্রটি ব্যবহার করব will

ইনপুট

আপনি চালনার তালিকার সাথে একটি স্ট্রিং নিয়ে যান। স্ট্রিংটিতে কেবলমাত্র মূলধন ASCII বর্ণগুলি এন, এস, ডাব্লু এবং ই রয়েছে These এগুলি ঘনকটিকে সেই দিকের এক ধাপে ঘোরানোর সাথে সামঞ্জস্য করে।

ছবিতে, একটি এন নীচের মুখটিকে 6 তৈরি করবে image এই চিত্রটিতে উত্তর ক্যামেরা থেকে দূরে, দক্ষিণের দিকে, পূর্ব দিকে এবং পশ্চিম বাম দিকে।

আপনি নিম্নোক্ত বিন্যাসে স্ট্রিংটিও নিয়ে যাবেন: 1P 2P 3P 4P 5P 6P, যেখানে প্রতিটি পি N, S, W, E, T, এবং B. T & B এর অবস্থান এবং নীচে এবং শীর্ষে রয়েছে।

নম্বরগুলি সেই সংখ্যার সাথে মুখ, এবং চিঠিটি মুখের অবস্থানের প্রতিনিধিত্ব করে। 4 এস 5 ডাব্লু 6 ই।

চিত্রটিতে অবস্থান 1S 2B 3E 4W 5T 6N।

আউটপুট

আপনার প্রোগ্রামের নীচের দিকের প্রতিনিধিত্ব করে এমন একটি সংখ্যা আউটপুট করা উচিত।

পরীক্ষার কেস

(nothing), 1S 2B 3E 4W 5T 6N -> 2
N, 1S 2B 3E 4W 5T 6N -> 6
NS, 1S 2B 3E 4W 5T 6N -> 2
NWS, 1S 2B 3E 4W 5T 6N -> 2
NWSNWS, 1S 2B 3E 4W 5T 6N -> 2
NWSS, 1S 2B 3E 4W 5T 6N -> 3
NNNNNN, 1S 2B 3E 4W 5T 6N -> 5
SNWEEWS, 1N 2T 3E 4W 5B 6S, 6
SNEEWS, 1N 2T 3W 4S 5B 6E, 4

অন্যান্য বিধি

আপনি ধরে নিতে পারেন কিউবটি অসীম সমতল প্লেনে রয়েছে, সম্ভবত কোনওরকম ঘর্ষণ রয়েছে।

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়, যদিও আমি কোনওটিই পাই না।

অবৈধ ইনপুটের জন্য, আপনার কোডটি সর্বজনীন শুরু করা বাদে কিছু করতে পারে।

কারণ এই প্রোগ্রামটি আমার পাশা উপর ফিট করা উচিত, এটি যতটা সম্ভব ছোট হওয়া উচিত। আমি ফোল্ডারগুলির মতো ভাষার কিছু ব্যতিক্রম সহ বাইটে গণনা করি ।


2
প্রথম পরীক্ষার কেসটির (nothing) -> 2অর্থ কি কোনও জাল সরবরাহ করা হয়নি, বা সেখানে কোথাও একটি জাল থাকা উচিত?
Sp3000

2
" ছবিতে, একটি এন নীচের মুখটিকে একটি 2 করবে " নীচের মুখটি ইতিমধ্যে 2 নয়?
paulvs

@ Sp3000, সম্পাদিত, নেট সরবরাহ করা উচিত তবে আপনার কোডটি কোনও চলমান আদেশ না হ্যান্ডেল করতে সক্ষম হবে।
আর

1
আপনি নিজের পাশের আকার বাইটে পরিমাপ করেন?
সাইয়েস

@ কিউস না, প্রতিটি মুখের কেবল পাঠ্য। সুতরাং এটির সাথে মুখটি 4 বাইট হবে। এই চ্যালেঞ্জের জন্য, আমি আমার পাশা আপনি লিখতে কোড ফিট করতে সক্ষম হতে চাই। এটি করার জন্য, আমার ছোট কোড দরকার।
R15

উত্তর:


8

সিজেম, 43 40 37 34 বাইট

আমাকে 6 বাইট বাঁচাতে সাহায্য করার জন্য ডেনিসকে ধন্যবাদ।

lW%3/$1f=q{i8%"ÉĔɠƂ!"=i\m!=}/c

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

lW%    e# Read the first line and reverse it.
S/     e# Split it around spaces.
$      e# Sort it. This puts the faces in order [B E N S T W].
1f=    e# Select the second character from each face, which is the number.
q      e# Read the remainder of the input (the instructions).
{      e# For each instruction...
  i8%  e#   Convert the character (NWSE) to an integer and take modulo 8.
  "ÉĔɠƂ!"=i
       e#   Use that to (cyclically) index this string and convert *that* character
       e#   to an integer.
  \    e#   Swap with the list of faces.
  m!   e#   Generate all permutations of the faces.
  =    e#   Select the permutation corresponding to the above integer.
}/     e# At the end of the loop, the bottom face will be the first character.
c      e# Convert the string to a character, which discards everything but the bottom face.

নির্দেশের অক্ষরগুলিকে ক্রমানুসারে কীভাবে ম্যাপিং কাজ করে তা এখানে একটি কার্যকর টেবিল:

   i   8%  5%  ""=   i   [0 1 2 3 4 5]m!=

N  78   6   1   Ĕ   276  [2 1 4 0 3 5]
W  87   7   2   ɠ   608  [5 0 2 3 1 4]
S  83   3   3   Ƃ   386  [3 1 0 4 2 5]
E  69   5   0   É   201  [1 4 2 3 5 0]

আমি 5%কলামটি অন্তর্ভুক্ত করেছি কারণ স্ট্রিংয়ের মধ্যে সাইক্লিক ইনডেক্সিং সুস্পষ্টভাবে করে। চারটি ক্রমের জন্য আমরা দেখতে পাচ্ছি যে প্রত্যেকে দুটি (বিপরীত) দিক অপরিবর্তিত রেখেছিল এবং চক্রাকারে অন্য চারটি অনুমতি দেয়।


আপনি কীভাবে সেই ইউনিকোড চরিত্র হিসাবে অনুমতিগুলি উপস্থাপন করবেন? কীভাবে N N এর অনুক্রমের প্রতিনিধিত্ব করে [2 1 4 0 3 5]? আমি ঘন্টার পর ঘন্টা এটি ঘুরে দেখছি।
paulvs

1
@paulvs চরিত্র কোড Ĕহয় 2766e!আপনাকে সমস্ত 720 ক্রমানুসারে একটি তালিকা দেয় [0 1 2 3 4 5]। এবং 276তালিকার সূচক হতে পারে [2 1 4 0 3 5]
মার্টিন এন্ডার

আমি আশা করি আরও লোক উত্তর দিত, তবে আপনিই সবচেয়ে কম ছিলেন। অভিনন্দন.
21

5

পার্ল, 166 158 154 144 139 135 134 132 116 বাইট

+1 এর জন্য অন্তর্ভুক্ত -p

s/(\d)(.)/$h{$2}=$1/eg;$N='NTSB',$S='STNB',$E='ETWB',$W='WTEB';map{@h{@l}=@h{(@l=$$_=~/./g)[1..3,0]}}/\w/g;$_=$h{B}

মন্তব্য সহ:

                                    # example input: "NS, 1S 2B 3E 4W 5T 6N"
s/(\d)(.)/$h{$2}=$1/eg;             # construct %h ( S=>1, B=>2, E=>3, W=>4, B=>2, N=>6 )

                                    # = Transformations =
$N='NTSB',                          # N becomes T, T becomes S, S becomes B, B becomes N
$S='STNB',
$E='ETWB',
$W='WTEB';

map {                               # iterate the moves "NS"
    @h{ @l } =                      # LHS: bulk-assign new values; @l defined in RHS
      @h{                           # RHS: init @l, transform
          (@l=$$_=~/./g)            # get transform, put ('N','T','S','B') in @l for LHS
          [1..3,0]                  # construct a rotated slice for RHS
    }    
} /\w/g;                            # match the movements in list context

$_=$h{B}                            # assign the bottom face to output.


ইনপুট ফাইল:

, 1S 2B 3E 4W 5T 6N
N, 1S 2B 3E 4W 5T 6N
NS, 1S 2B 3E 4W 5T 6N
NWS, 1S 2B 3E 4W 5T 6N
NWSNWS, 1S 2B 3E 4W 5T 6N
NWSS, 1S 2B 3E 4W 5T 6N
NNNNNN, 1S 2B 3E 4W 5T 6N
SNWEEWS, 1N 2T 3E 4W 5B 6S
SNEEWS, 1N 2T 3W 4S 5B 6E

সাথে চালাও

perl -p dice.pl < input.txt

আউটপুট: 262223564


  • আপডেট 158 8 বাইট সংরক্ষণের $N, $S, $E, $Wপরিবর্তে বৈশ্বিক ভেরিয়েবল ব্যবহার করে %t = {N=>, S=>, E=>, $W=>}

  • আপডেটের 154 প্রয়োজন যেহেতু যে প্রোগ্রাম আউটপুট একটি সংখ্যা, NEWLINE মুদ্রণ নয় print "$h{B}\n"4 বাইট সংরক্ষণ: print $h{B}

  • 144 আপডেট করে 10 বাইট সংরক্ষণ করে

    ($s)=/^(\w+),/;            s/(\d)(.)/$h{$2}=$1/eg;
    

    পরিবর্তে

    ($s,@i)=split /,? |\n/;    %h=reverse map{split//}@i;
    
  • আপডেট 139 একটি ভেরিয়েবল, 6 বাইট সংরক্ষণ করে মুছে ফেলার জন্য কমান্ডের জন্য রেজেক্সকে শেষের দিকে সরান।

  • @l[0..3,0]পরিবর্তে 135 টি 4 বাইট সংরক্ষণ করুন @l[1..3],$l[0]

  • আপডেট হিসাবে 134@l=split//,$$_ মান হিসাবে অ্যাসাইনমেন্ট ব্যবহার করে 1 বাইট সংরক্ষণ করুন ।

  • /^\w+/ && $&পরিবর্তে 132 আপডেট করে 2 বাইট সংরক্ষণ করুন /^(\w+)/ && $1

  • 129 আপডেট করুন -pপরিবর্তে ব্যবহার করে -nএবং মুদ্রণের জন্য assign _ নির্ধারণ করে 3 বাইট সংরক্ষণ করুন ।

  • 116 আপডেট পুনরায় লেখার split//, /^\w+/ && $&মাধ্যমে 13 বাইট সংরক্ষণ করুন /^\w+/g



4

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

আমার নিজের প্রশ্নের উত্তর দেওয়ার সময় এসেছিল।

def x(p,m):
    d={p[3*i-2]:i for i in range(1,7)}
    for j in m:n=2if j in'NE'else-2;x='BSTN'if j in'NS'else'BETW';d[x[0]],d[x[1]],d[x[2]],d[x[3]]=d[x[1+n]],d[x[(2+n)%4]],d[x[(3+n)%4]],d[x[0+n]]
    print d['B']

খুব সংক্ষিপ্ত নয়, তবে কাজ করে।

হিসাবে চালান:

x('1B 2T 3N 4S 5W 6E','SNEEWS')
#Output: 4

সম্পাদনা : ভুল গণিত এখন আর। :(


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