লুকাস বনাম গ্যারেজ ডোর রিমোট


15

দাবি পরিত্যাগী

যদিও আমি জানি যে এখানে এই সম্পর্কিত সম্পর্কিত প্রশ্ন রয়েছে , আমার প্রশ্ন দুটি গ্যারেজ দরজা ব্যবহার করেছে, একটি এলোমেলো উপাদান, এবং আমি এটিকে বাস্তব জীবনের ঘটনাগুলির উপর ভিত্তি করে দেখছি, আমার পুত্রটি দুর্ঘটনাক্রমে বলা গ্যারেজের একটি দরজাটি নীচে নামিয়ে দেখলাম যখন আমি বাইরে চলে যাচ্ছিলাম seeing গত সপ্তাহে গ্যারেজ ... সৃজনশীল রস বয়ে যাওয়ার জন্য মাথায় আঘাতের মতো কিছুই নেই! ;)

পটভূমি

লুকাস (আমার 15 মাস বয়সী ছেলে) গ্যারেজ রিমোটের সাথে খেলতে পছন্দ করে। এই রিমোটে দুটি বোতাম রয়েছে, একটি বাম গ্যারেজের দরজার জন্য এবং একটি ডান গ্যারেজের দরজার জন্য। উভয় বোতাম একই পদ্ধতিতে কাজ করে; দরজাটি খোলার জন্য পেতে একবার টিপুন, থামাতে আবার চাপুন, বন্ধ করতে আবার টিপুন, আবার থামতে আবার চাপুন, ইত্যাদি।

লুকাস এই দূরবর্তীটিকে পছন্দ করে, তিনি এলোমেলোভাবে একটি বাটন বা উভয়ই বা একটিও টিপুন। যদি উভয়ই টিপে থাকে তবে কোনও সংকেত প্রেরণ করা হয় না, তবে একটি বোতামের একটি প্রেস একটি সংকেত প্রেরণ করবে।

সুতরাং, কোড-গল্ফ চ্যালেঞ্জ দুটি ভাগে বিভক্ত:

প্রথম অংশ

এক মিনিটেরও বেশি সময় ধরে লুকাসের এলোমেলো বোতাম টিপতে প্রতিনিধিত্ব করে একটি 60 টি অক্ষরের দীর্ঘ স্ট্রিং তৈরি করুন। এই ক্ষেত্রে "এলোমেলো" এর অর্থ "প্রতিটি টিকে প্রতিটি ইনপুটের সমান সুযোগের সাথে"। চরিত্রগুলি নিম্নরূপ:

  • 0: লুকাশ হয় হয় কোনও বোতাম টিপেনি, বা উভয় বোতাম টিপেছে। যেভাবেই হোক, কোনও সংকেত প্রেরণ করা হয়নি।
  • 1: বাম গ্যারেজের দরজার জন্য বোতামটি লুকাস দ্বারা চাপানো হয়েছে
  • 2: ডান গ্যারেজের দরজার জন্য বোতামটি লুকাস দ্বারা চাপানো হয়েছে

অংশ দুই

পার্ট ওনে উত্পন্ন স্ট্রিংটি ব্যবহার করে, এই দরজাগুলি খোলার, থামাতে এবং বন্ধ করার জন্য ট্রিগার হিসাবে নম্বরগুলি ব্যবহার করে দ্বি-গাড়ী গ্যারেজটি খোলার এবং বন্ধ করার অনুকরণ করুন।

আমার গ্যারেজের দরজাগুলি বেশ দ্রুত (কেন এটি সম্পর্কে উপরোক্ত অস্বীকৃতি দেখুন)। আপনি একবার বোতামটি টিপলে পুরো খোলা বা বন্ধ হতে চার সেকেন্ড সময় লাগে।

সুতরাং, যদি বন্ধ থাকে:

  • 0 সেকেন্ড: 0% খোলা (বন্ধ); বোতাম টিপলে, দরজা খোলার শুরু হয়
  • 1 সেকেন্ড: 25% খোলা
  • 2 সেকেন্ড: 50% খোলা
  • 3 সেকেন্ড: 75% খোলা
  • 4 সেকেন্ড: 100% খোলা, দরজা বন্ধ

এবং তাই, যদি খোলা থাকে:

  • 0 সেকেন্ড: 100% খোলা; বোতাম টিপে গেলে দরজা বন্ধ হয়ে যায়
  • 1 সেকেন্ড: 75% খোলা
  • 2 সেকেন্ড: 50% খোলা
  • 3 সেকেন্ড: 25% খোলা
  • 4 সেকেন্ড: 0% খোলা (বন্ধ), দরজা বন্ধ

যদি কোনও নির্দিষ্ট দরজা চলমান থাকে তবে সেই একই দরজার একটি সংকেত এটি বন্ধ করে দেবে। পরবর্তী সিগন্যালের পরে সেই একই দরজায় প্রেরণ করা হবে এটি বিপরীত দিকে চলন্ত প্রেরণ করবে। যদি কোনও দরজা যখন আগে চলমান থাকে এবং যদি "স্টপ" সংকেতটি পাওয়া যায় তখন পুরোপুরি খোলা বা পুরোপুরি বন্ধ থাকে তবে দরজাটি পুরোপুরি উন্মুক্ত বা সম্পূর্ণ-বন্ধ অবস্থায় "বন্ধ" হিসাবে নিবন্ধিত হবে, প্রস্তুত যখন এটি একটি নতুন সিগন্যাল পায় তখন বিপরীত দিকে যান।

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

2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)

আউটপুট

আউটপুটটির প্রথম অংশটির জন্য পার্ট ওয়ান থেকে উত্পাদিত র্যান্ডম "0", "1" এবং "2" অক্ষরের 60 টি অক্ষরের দীর্ঘ স্ট্রিংয়ের প্রদর্শন প্রয়োজন। যেমন। 212022112021202211202120221120212022112021202211202120221120

এই স্ট্রিংয়ের নীচে, গ্যারেজ দরজা প্রতিটি স্বতন্ত্র চরিত্রের সাথে কীভাবে আচরণ করবে (দ্বিতীয় স্তরের দ্বারা দ্বিতীয় স্থানে) তার উপরে উল্লিখিত বিধি অনুসারে এই "সংকেতগুলি" প্রক্রিয়াকরণ করা হচ্ছে। প্রাথমিক ডিসপ্লে স্ট্রিংয়ের নীচে ফলস্বরূপ আপনার 60 লাইনের সমাপ্তি হওয়া উচিত।

এই প্রক্রিয়াজাত প্রতিটি রেখার আকারে হবে: N: (L:X% XXXXXXX, R:Y% YYYYYYY)যেখানে:

  • এন হল সংশ্লিষ্ট র্যান্ডম স্ট্রিংয়ের নবম চরিত্র, যা 0, 1, বা 2 আকারে হবে।
  • এক্স% হ'ল বাম দরজার উন্মুক্ততার শতাংশ (কোনও শূন্য প্যাডিং নেই)
  • XXXXXXX বাম দরজার স্থিতি। যদি দরজাটি চলমান না থাকে (অর্থাত্ খোলার বা বন্ধ না করা) অবস্থাটি "থামানো" প্রয়োগ করা হয়, যার অর্থ এটি গতিতে থামানো হয়েছে (কেবলমাত্র 25%, 50% বা 75% এ সম্ভব) বা সম্পূর্ণ খোলা থাকলে বন্ধ করা হয়েছে (100% ) বা সম্পূর্ণ বন্ধ (0%)। অন্যথায়, দরজা হয় হয় "খোলার" বা "সমাপ্তি"।
  • Y% হ'ল ডান দরজার উন্মুক্ততার শতাংশ (কোনও শূন্য প্যাডিং নেই)
  • YYYYYYY ডান দরজার স্থিতি। যদি দরজাটি চলমান না থাকে (অর্থাত্ খোলার বা বন্ধ না করা) অবস্থাটি "থামানো" প্রয়োগ করা হয়, যার অর্থ এটি গতিতে থামানো হয়েছে (কেবলমাত্র 25%, 50% বা 75% এ সম্ভব) বা সম্পূর্ণ খোলা থাকলে বন্ধ করা হয়েছে (100% ) বা সম্পূর্ণ বন্ধ (0%)। অন্যথায়, দরজা হয় হয় "খোলার" বা "সমাপ্তি"।

10 "সিগন্যাল" এবং 10 টি প্রক্রিয়াজাত লাইন ব্যবহার করে নীচে দেখানো উদাহরণ

2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোডটি পরিষ্কার বিজয়ী হবে। আমি "ওপেনিং", "থামানো" এবং "ক্লোজারিং" এর মত বাক্যাংশ ব্যবহার করে এটিকে কিছুটা সহজ করে দিয়েছি, যা এই সাতটি অক্ষর ... তাই আপনি নিজের কৌশলে কাজ করতে চাইতে পারেন।

ভাগ্য সুপ্রসন্ন হোক!


আপনার দ্বিতীয় খণ্ডের জন্য একটি পরিষ্কার আউটপুট ফর্ম্যাটটি সংজ্ঞায়িত করা উচিত
লিজিয়নম্যামাল 978

@ LegionMammal978 আপনি কী অনুভব করছেন আউটপুট থেকে অনুপস্থিত?
ওয়েলওয়েস্ট

1
আমি এই মুহূর্তে নেই, তবে আমি মনে করি এটি একটি ঝরঝরে প্রশ্ন - আমি এটি মোকাবেলা করতে পারি।
DLosc

1
1আপনার উদাহরণের বাম দরজাটি 75% এ থামছে না কেন সর্বশেষ কমান্ড?
আর্নৌল্ড

1
0,1, এবং 2 সমস্তই প্রথম অংশে সমানভাবে উপস্থিত হওয়া উচিত, বা কোনও প্রেস, ডাবল-প্রেস, বাম-চাপ, এবং ডান-প্রেস সমস্তই সমানভাবে উপস্থিত হওয়া উচিত? (অর্থাত, 0 সম্ভবত এটি দুটি কারণের প্রতিনিধিত্ব করে যা একই এবং ফলাফলের কারণ হতে পারে ...)
সকরাটিক ফিনিক্স

উত্তর:


2

Pyth, 156 149 145 বাইট

jkJmO3U60K=G*]Z3=b*3]_1VJFHS2I&=T@KHq*2hT@XHGTH XbHT XKH0)) XKN*_@XbN|@KN@bNN!@KN%+N": (L:%s, R:%s)"m++*@Gd25"% "%3>"csoltpooespnipinengdg"h@KdS2

আমার পাইথন উত্তরের একটি সরাসরি অনুবাদ ।

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

ব্যাখ্যা:

jk                              " print ''.join(map(str,                   "
JmO3U60                         "  J = [randint(0,2) for _ in range(60)])) "
K=G*]Z3                         " K = copy(G = [0] * 3)                    "
=b*3]_1                         " b = [-1] * 3                             "
VJ                              " for N in J:                              "
FHS2                            "  for H in range(1, 3):                   "
I&=T@KH                         "   if ((T = K[H]) and                     "
q*2hT@XHGTH                     "       (2 * (T + 1) == (G[H] += T)[H]):   "
 XbHT                           "    b[H] = T                              "
 XKH0))                         "    K[H] = 0                              "
 XKN*_@XbN|@KN@bNN              "  K[N] = (-(b[N] = K[N] or B[N])[N] *     "
!@KN                            "   (not K[N]))                            "
%+N": (L:%s, R:%s)"             "  print(str(N) + ': (L:%s, R:%s)' %       "
m++                             "   map(lambda d:                          "
*@Gd25                          "    G[d] * 25 +                           "
"% "                            "    '% ' +                                "
%3>"csoltpooespnipinengdg"h@Kd  "    'csoltpooespnipinengdg'[K[d]+1::3]]   "
S2                              "   ), range(1, 3))                        "

কি দারুন! এই উত্তরের জন্য ধন্যবাদ, সেই সাথে কোডের ব্যাখ্যা হিসাবে ... আমি এর শেষের দিকে পৌঁছানোর সময় পর্যন্ত আমি আসলে এটি উপলব্ধি করেছিলাম ...
ওয়ালিওয়েস্ট

5

জাভাস্ক্রিপ্ট (ES6), 277 275 263 253 250 247 234 বাইট

_=>(d=[0,0],l=s='',[...Array(60)].map(_=>(s+=`
${c=Math.random()*3|0}:(`,l+=c,d=d.map((v,i)=>(v=v&8?v&16?v-27?v+1:20:v-9?v-1:0:v,v^=c+~i?0:v&8||24,s+='LR'[i]+`:${(v&7)*25}% `+(v&8?v&16?'opening':'closing':'stopped')+',)'[i],v)))),l+s)

অবহেলিত এবং মন্তব্য

_ => (
  // Initialize array:
  //   - d = door states as integers
  //     - bits 0 to 2: door opening state (from 0b000 = 0% to 0b100 = 100%)
  //     - bit #3: door in motion (0: no, 1: yes)
  //     - bit #4: door direction (0: closing, 1: opening)
  d = [0, 0],

  // Initialize strings:
  //   - l = list of commands
  //   - s = door states in plain text
  l = s = '',

  // Iterate on an array of 60 entries.
  [...Array(60)].map(_ => (
    // c = new random command (0, 1 or 2)
    // Append new line and new command to s.
    s += `\n${c = Math.random() * 3 | 0}:(`,

    // Append new command to l.
    l += c,

    // For each door ...
    d = d.map((v, i) => (
      // If the door is in motion, update its opening state.
      // Clear the 'in motion' bit if a bound is reached (either closed or fully open).
      v = v & 8 ? v & 16 ? v - 27 ? v + 1 : 20 : v - 9 ? v - 1 : 0 : v,

      // If the current command is intended for this door, update its direction and
      // 'in motion' bit. Direction is changed on the 'stopped => moving' transition.
      v ^= c + ~i ? 0 : v & 8 || 24,

      // Translate the door state in plain text and append it to s
      s +=
        'LR'[i] +
        `:${(v & 7) * 25}% ` +
        (v & 8 ? v & 16 ? 'opening' : 'closing' : 'stopped') +
        ',)'[i],

      // Value to be taken into account by map()
      v
    ))
  )),

  // Final result to be returned
  l + s
)

ডেমো

let f = 
_=>(d=[0,0],l=s='',[...Array(60)].map(_=>(s+=`
${c=Math.random()*3|0}:(`,l+=c,d=d.map((v,i)=>(v=v&8?v&16?v-27?v+1:20:v-9?v-1:0:v,v^=c+~i?0:v&8||24,s+='LR'[i]+`:${(v&7)*25}% `+(v&8?v&16?'opening':'closing':'stopped')+',)'[i],v)))),l+s)

console.log(f())


বাহ, আমি ওয়ান লাইনারে মুগ্ধ হয়ে এটিকে কনসোল.লগে ফেলে দিচ্ছি! সাবাশ!
ওয়েলওয়েস্ট

1
কৌতূহলীভাবে ফায়ারফক্সে কাজ করছে না, আউটপুটে মাত্র 4 টি লাইন, 112200001100122021010101012100000010011200201022122021012211 [ "L:25% stopped", "R:25% stopped" ](কমা এবং বন্ধনীগুলির পরে নতুন লাইনের )
edc65

@ edc65 - আমার খারাপ, আসলে। আমি আউটপুট ফর্ম্যাট সম্পর্কে নির্দেশাবলী ভুল লিখেছি। এটা ঠিক আছে।
আর্নল্ড

@ আর্নল্ড আপনি v^=(c-i-1?0:v&8||24)দুটি বাইট সংরক্ষণ করার জন্য আপনি প্রথম বন্ধনীও সরিয়ে ফেলতে পারেন ।
ওয়েলওয়েস্ট

পিএস @ আর্নল্ড, অংশ নেওয়ার জন্য ধন্যবাদ!
ওয়েলওয়েস্ট

4

পাইথন 2, 377 370 361 357 345 335 326 316 312 306 304 বাইট

দ্বিতীয় ইনডেন্ট স্তরটি একটি কাঁচা ট্যাব ( \t), যা মার্কডাউন দিয়ে সত্যিই খারাপভাবে খেলে , তাই এটি দুটি স্পেস দ্বারা প্রতিস্থাপিত হয়েছে।

from random import*
p=[randint(0,2)for d in[[0]*3]*60]
print`p`[1::3]
v=[-1]*3
c=[0]*3
f=lambda y:str(c[y]*25)+'% '+'csoltpooespnipinengdg'[d[y]+1::3]
for x in p:
 for i in 1,2:
  q=d[i];c[i]+=q
  if(2*-~q==c[i])*q:v[i]=q;d[i]=0
 z=d[x]
 if z:v[x]=z
 d[x]=-v[x]*(z==0);print'%d: (L:%s, R:%s)'%(x,f(1),f(2))

আমি প্রায় নিশ্চিত এটি আরও গল্ফ করা যেতে পারে।

মতামত সহ উজ্জ্বল:

import random

# Generate the random string - represented as a list of ints
presses = [random.randint(0, 2) for _ in range(60)]
print ''.join(map(str, presses))

# Constants for door states used for easier reading
CLOSING = -1
STOPPED = 0
OPENING = 1

# Variables representing the state of the garage doors
# There's a third element in these so that x[0] resolves to a dummy slot
# (this way, we can avoid a conditional down the road)
prev_states = [CLOSING, CLOSING, 0]
door_states = [STOPPED, STOPPED, 0]
door_pcts = [0, 0, 0]  # delta 1 = 25%

for press in presses:
  # Close/open the door 1 more
  for i in 1, 2:
    if door_states[i] != STOPPED:
      delta_pct, stop_pct = (-1, 0) if door_states[i] == CLOSING else (1, 4)
      door_pcts[i] += delta_pct
      if door_pcts[i] == stop_pct:
        prev_states[i] = door_states[i]
        door_states[i] = STOPPED

  # Handle pressing a button
  # If the press is 0 (no press), the 0th element resolves to a dummy
  # door, thus saving us an expensive conditional

  if door_states[press] == STOPPED:
    door_states[press] = -prev_states[press]
  else:
    prev_states[press] = door_states[press]
    door_states[press] = STOPPED

  # Print the status update
  print '%d: (L:%d%% %s, R:%d%% %s)' % (
    press,
    door_pcts[0]*25,
    ['closing', 'stopped', 'opening'][door_states[0]+1],
    door_pcts[1]*25,
    ['closing', 'stopped', 'opening'][door_states[1]+1],
  )

সংরক্ষিত 4 14 15 @TheBikingViking ধন্যবাদ বাইট!

সংরক্ষিত 6 বাইট @ ভ্যালুআইঙ্ককে ধন্যবাদ!


1
আপনি পরিবর্তন range(60)করতে পারেন [0]*60
দ্য বাইকিংভিকিং

1
@ দ্য বাইকিংভিাইকিং ধন্যবাদ! আমি এখনই এটি সম্পাদনা করছি।
তামা

2
এর 'p'[1::3]পরিবর্তে আপনি (ব্যাকটিক্স সহ অ্যাডাস্ট্রোফেস প্রতিস্থাপন) করতে পারেন ''.join(map(str,p))
দ্য বাইকিংভাইকিং

2
(4,0)[q<0]==c[i]and q->((4,0)[q<0]==c[i])*q
দি বাইকিংভিকিং

2
@ ভ্যালিউইঙ্ক সেই লাইনটি পাইথন 2-এর তালিকার বোঝার জন্য একটি বাগ আপত্তি করেছে nstring nবের করে আনতে চূড়ান্ত লাইনে ব্যবহার করা হয় closing, stopped, openingস্ট্রিং থেকে।
তামা

2

রুবি, 263 261 260 254 বাইট

জাভাস্ক্রিপ্ট এর উত্তর এত সংক্ষিপ্ত কিভাবে পেল ??? আমি দূরে থাকাকালীন এটি আমার পরাস্ত হয়েছিল এবং এখনও জিতেছে ...

s=(1..60).map{rand 3}
puts s*''
D=1,2
d=[25]*3;a=[0]*3;m=[p]*3
s.map{|i|D.map{|j|m[j]&&a[j]+=d[j];(0..100)===a[j]+d[j]||i!=j&&(d[j]*=-1;m[j]=p)}
(m[i]^=1)||d[i]*=-1
puts"#{i}: (L%s, R%s)"%D.map{|j|":#{a[j]}% #{%w"stopped opening closing"[m[j]?d[j]:0]}"}}

2

সি, 420 433 424 374 বাইট

#define F(X,x) X=x==1?X+1:x==2?X-1:X;X=X<0?0:X>4?4:X;x=X==0?0:X==4?3:x
#define G(x) x=x==1?3:x==2?0:x==3?2:x+1
#define H(X,x) X*25,x==0||x==3?"stopped":x==1?"opening":"closing"
c,i,l,r,L,R,x[60];main(){while(i<60)printf("%d",x[i++]=random()%3);while(c<60){if(x[c]==1)G(l);else if(x[c]==2)G(r);printf("\n%d: (L:%d%% %s, R:%d%% %s)",x[c++],H(L,l),H(R,r));F(L,l);F(R,r);}}

এলোমেলো জেনারেটর বীজ দেয় না তবে আরও ভাল বিতরণের জন্য এলোমেলো ব্যবহার করে। যদিও এই যুক্তিটি গল্ফ করার আরও ভাল উপায় থাকতে হবে ...

110121100121212100112200222111200020111100022122202112202211002
1: (L:0% opening, R:0% stopped)
1: (L:25% stopped, R:0% stopped)
0: (L:25% stopped, R:0% stopped)
1: (L:25% closing, R:0% stopped)
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
1: (L:25% stopped, R:50% opening)
0: (L:25% stopped, R:75% opening)
0: (L:25% stopped, R:100% stopped)
1: (L:25% closing, R:100% stopped)
2: (L:0% stopped, R:100% closing)
1: (L:0% opening, R:75% closing)
2: (L:25% opening, R:50% stopped)
1: (L:50% stopped, R:50% stopped)
2: (L:50% stopped, R:50% opening)
1: (L:50% closing, R:75% opening)
0: (L:25% closing, R:100% stopped)
0: (L:0% stopped, R:100% stopped)
1: (L:0% opening, R:100% stopped)
1: (L:25% stopped, R:100% stopped)
2: (L:25% stopped, R:100% closing)
2: (L:25% stopped, R:75% stopped)
0: (L:25% stopped, R:75% stopped)
0: (L:25% stopped, R:75% stopped)
2: (L:25% stopped, R:75% opening)
2: (L:25% stopped, R:100% closing)
2: (L:25% stopped, R:75% stopped)
1: (L:25% closing, R:75% stopped)
1: (L:0% opening, R:75% stopped)
1: (L:25% stopped, R:75% stopped)
2: (L:25% stopped, R:75% opening)
0: (L:25% stopped, R:100% stopped)
0: (L:25% stopped, R:100% stopped)
0: (L:25% stopped, R:100% stopped)
2: (L:25% stopped, R:100% closing)
0: (L:25% stopped, R:75% closing)
1: (L:25% closing, R:50% closing)
1: (L:0% opening, R:25% closing)
1: (L:25% stopped, R:0% stopped)
1: (L:25% closing, R:0% stopped)
0: (L:0% stopped, R:0% stopped)
0: (L:0% stopped, R:0% stopped)
0: (L:0% stopped, R:0% stopped)
2: (L:0% stopped, R:0% opening)
2: (L:0% stopped, R:25% stopped)
1: (L:0% opening, R:25% stopped)
2: (L:25% opening, R:25% closing)
2: (L:50% opening, R:0% opening)
2: (L:75% opening, R:25% stopped)
0: (L:100% stopped, R:25% stopped)
2: (L:100% stopped, R:25% closing)
1: (L:100% closing, R:0% stopped)
1: (L:75% stopped, R:0% stopped)
2: (L:75% stopped, R:0% opening)
2: (L:75% stopped, R:25% stopped)
0: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% closing)
2: (L:75% stopped, R:0% opening)
1: (L:75% opening, R:25% opening)
1: (L:100% closing, R:50% opening)

পুরানো সংস্করণ 1:

c,i,l,r,L,R,x[60];main(){while(i<60)printf("%d",x[i++]=random()%3);while(c<60){if(x[c]==1)l=l==1?3:l==2?0:l==3?2:l+1;else if(x[c]==2)r=r==1?3:r==2?0:r==3?2:r+1;printf("\n%d: (L:%d%% %s, R:%d%% %s)",x[c++],L*25,l==0||l==3?"stopped":l==1?"opening":"closing",R*25,r==0||r==3?"stopped":r==1?"opening":"closing");L=l==1?L+1:l==2?L-1:L;R=r==1?R+1:r==2?R-1:R;L=L<0?0:L>4?4:L;R=R<0?0:R>4?4:R;l=L==0?0:L==4?3:l;r=R==0?0:R==4?3:r;}}

পুরানো সংস্করণ 2:

c,i,l,r,L,R,x[60];g(){while(i<60)printf("%d",x[i++]=random()%3);}main(){g();while(c<60){if(x[c]==1)l=l==1?3:l==2?0:l==3?2:l+1;else if(x[c]==2)r=r==1?3:r==2?0:r==3?2:r+1;printf("%d: (L:%d%% %s, R:%d%% %s)\n",x[c++],L*25,l==0||l==3?"stopped":l==1?"opening":"closing",R*25,r==0||r==3?"stopped":r==1?"opening":"closing");L=l==1?L+1:l==2?L-1:L;R=r==1?R+1:r==2?R-1:R;L=L<0?0:L>4?4:L;R=R<0?0:R>4?4:R;l=L==0?0:L==4?3:l;r=R==0?0:R==4?3:r;}}

2
আপনি কি কোড এ রূপান্তর করতে পারেন?
হাইকমাম

2

পিএইচপি, 254 247 246 245 235 230 226 বাইট

আবার ইএস মারছে!

for($t=60;$t--;)$s.=rand()%3;echo$s;for(;++$t<60;print"
$c: ($o[1], $o[2])")for($i=3;--$i;$o[$i]='.LR'[$i].':'.$d[$i]*25 .'% '.[opening,stopped,closing][abs($z-1)])if(((1&$z=&$r[$i])&&!(3&$d[$i]+=2-$z))|$i&$c=$s[$t])$z=++$z%4;

এই 311 (প্রথম সম্পূর্ণ সংস্করণ, ইতিমধ্যে কিছু গল্ফিং ছিল) থেকে গল্ফড:

<?for($i=60;$i--;)$s.=rand(0,2);echo$s;$d=$r=[0,0];$n=[L,R];$p=[stopped,opening,stopped,closing];for($t=-1;++$t<60;print"
$c: (".join(', ',$x).")")for($m=$c=$s[$t],$i=-1;$i++<1;){if($r[$i]&1)if(!($d[$i]+=2-$r[$i])||4==$d[$i])$m|=$i+1;if($m&$i+1)$r[$i]=(1+$r[$i])%4;$x[$i]="$n[$i]:".($d[$i]*25)."% ".$p[$r[$i]];}

ভাঙ্গন

for($t=60;$t--;)$s.=rand()%3;   // part 1               also initializes $t to -1
echo$s;
for(
    ;
    ++$t<60;
    print"\n$c: ($o[1], $o[2])" // print output
)
    for($i=3;--$i;  // loop $i from 2 to 1 (door number)
        // generate output
        $o[$i]='.LR'[$i].':'.$d[$i]*25 .'% '
        .[opening,stopped,closing][abs($z-1)]           // map 0123 to 1012
    )
        if(((1&$z=&$r[$i])  // if door in motion        ... and reference the array item
            &&!(3&              // 2. if end position   "&&" needed for short circuit
            $d[$i]+=2-$z        // 1. move door         2-$z maps 1,3 to 1,-1 = delta
            )
        )|$i&$c=$s[$t])     // 3. or if button $i pressed   "|" needed for no short circuit
            $z=++$z%4;          // rotate direction     ++$z%4 maps 0,1,2,3 to 1,2,3,0
        // generate output (loop post condition)
    // print output (loop post condition)

@ আরনাউল্ড: পেয়েছেন! :)
টাইটাস

1

জাভা 8 লাম্বদা, 500 টি অক্ষর

আমি যথাসাধ্য চেষ্টা করেছি, আমি এখানে যা এলাম:

()->{String r="";int i=0,l=0,m=0,n=1,o=1,p=0,q=0;for(;i++<60;)r+=(int)(Math.random()*3);for(char s:r.toCharArray()){l+=p;m+=q;if(l>99&p>0){l=100;p=25*(((n=++n%4)-1)%2);}if(l<1&p<0){l=0;p=25*(((n=++n%4)-1)%2);}if(m>99&q>0){m=100;q=25*(((o=++o%4)-1)%2);}if(m<1&q<0){m=0;q=25*(((o=++o%4)-1)%2);}if(s<49);else if(s>49)q=25*(((o=++o%4)-1)%2);else p=25*(((n=++n%4)-1)%2);r+="\n"+s+": (L:"+l+"% "+(p<0?"closing":p>0?"opening":"stopped")+", R:"+m+"% "+(q<0?"closing":q>0?"opening":"stopped")+")";}return r;}

সম্পূর্ণ শ্রেণিতে অবহেলিত:

public class Q91479 {

    public static String movedDoorsCombined() {
        String result = "";
        int i = 0, leftDoor = 0, rightDoor = 0, stepLeft = 1, stepRight = 1, changeLeft = 0, changeRight = 0;

        for (; i++ < 60;) {
            result += (int) (Math.random() * 3);
        }

        for (char step : result.toCharArray()) {
            // update stats
            leftDoor += changeLeft;
            rightDoor += changeRight;

            if (leftDoor > 99 & changeLeft > 0) {
                leftDoor = 100;
                changeLeft = 25 * (((stepLeft = ++stepLeft % 4) - 1) % 2);
            }
            if (leftDoor < 1 & changeLeft < 0) {
                leftDoor = 0;
                changeLeft = 25 * (((stepLeft = ++stepLeft % 4) - 1) % 2);
            }
            if (rightDoor > 99 & changeRight > 0) {
                rightDoor = 100;
                changeRight = 25 * (((stepRight = ++stepRight % 4) - 1) % 2);
            }
            if (rightDoor < 1 & changeRight < 0) {
                rightDoor = 0;
                changeRight = 25 * (((stepRight = ++stepRight % 4) - 1) % 2);
            }

            if (step < 49) {
                // 0
            }
            else if (step > 49) {
                // right
                changeRight = 25 * (((stepRight = ++stepRight % 4) - 1) % 2);
            }
            else {
                // left
                changeLeft = 25 * (((stepLeft = ++stepLeft % 4) - 1) % 2);
            }
            result += "\n" + step + ": (L:" + leftDoor + "% "
                        + (changeLeft < 0 ? "closing" : changeLeft > 0 ? "opening" : "stopped")
                        + ", R:" + rightDoor + "% "
                        + (changeRight < 0 ? "closing" : changeRight > 0 ? "opening" : "stopped")
                        + ")";
        }
        return result;
    }
}

অনেকটাই অকপট. স্টেপ লেফট / স্টেপরাইট ভেরিয়েবলগুলি 0-3 থেকে বৃত্ত। কিছু সাধারণ গণিতের পরিবর্তন করুন বাম / পরিবর্তন রাইট প্রতি পদক্ষেপ অনুসারে সম্পর্কিত আপেক্ষিক পরিবর্তনগুলি ধরে রাখুন যা বামদর / ডানদুয়ারে যুক্ত হবে। দরজাটি নিজেরাই বন্ধ করতে হবে তখন ধরার জন্য বিবৃতি।

এটিকে ছোট করার জন্য নির্দ্বিধায় আমার মনে হয়, অনেক কিছুই করার আছে বলে আমি মনে করি।


1

হাস্কেল (ল্যাম্বডাবোট) - 409 বাইট

p=(cycle[0,1,0,-1],0)
t(d:q,s)=(if d/=0&&(s+d<1||3<s+d)then q else d:q,s+d)
k i(a,b)=[o i,": (L:",j a,", ","R:",j b,")"]>>=id
j(d:_,s)=o(round$(fromIntegral s/4)*100)++"% "++words"closing stopped opening"!!(d+1)
s=scanl$ \(a,b)i->i(t a,t b)
main=do b<-(fmap(round.(*(2::Float))).take 60<$>randoms)<$>getStdGen;putStrLn.unlines$(o=<<b):(zipWith k b.w.s(p,p)$([id,f$f w,second$f w]!!)<$>b)
o=show;f=first;w=tail

আপনার কোড (এবং বাইট গণনা) এর importsজন্য প্রয়োজনীয় সমস্ত যুক্ত করুন randomste যদি এমন কোনও দোভাষী থাকে যা ডিফল্টরূপে আমদানি করে থাকে তবে ভাষাটির নামে এটি উল্লেখ করুন।
নিমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.