ডায়নামাইট সহ একটি মাউস


23

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

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

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

পরিশ্রমের উদাহরণ

মনে করুন আমাদের গোলকধাঁধাটি দেখতে নীচের মত দেখাচ্ছে:

######
#M# E#
######

আমি cকাউন্টার জন্য ব্যবহার করব । আমরা Entrance এ শুরু করি, ডিনামাইট বহন করার সময় একটি বর্গ বামে সরান c=2,। আমরা প্রাচীরটি বিস্ফোরণে ডিনামাইটটি বিস্ফোরণ করি c=52। আমরা খালি হাতে দুটি বর্গক্ষেত্র সরিয়ে নিয়ে c=54যাচ্ছি এবং আমরা এখন মাউসের স্কোয়ারে দাঁড়িয়ে আছি। আমরা আমাদের বন্ধুকে বাছাই করি, এবং 3 স্কোয়ারটি পিছনে ফিরে যাই E, কিন্তু শেষ বর্গটি গণনা করে না কারণ এর কোনও সেন্সর নেই, সুতরাং এটি আমাদের পিছনে কিছু দিয়ে কেবল 2 স্কোয়ার। এর অর্থ হ'ল আমরা যখন চূড়ান্ত মাউস সহ প্রস্থানটি পৌঁছান c=58, যা এর চেয়ে কম 1000, এবং তাই মিশন সফল হয়।

চ্যালেঞ্জ

একটি ইনপুট ধাঁধা দেওয়া, আউটপুট আপনি, মাউস হিরো, উপরে বর্ণিত সীমাবদ্ধতার মধ্যে আটকে থাকা সমস্ত ইঁদুরকে সফলভাবে উদ্ধার করতে পারেন, বা মিশনটি ব্যর্থ কিনা whether

ইনপুট

  • যে কোনও গ্রহণযোগ্য বিন্যাসে একটি 2 ডি গোলকধাঁধা (মাল্টলাইন স্ট্রিং, স্ট্রিংগুলির অ্যারে ইত্যাদি)।
  • এই চ্যালেঞ্জের জন্য, আমি #অভ্যন্তরীণ এবং বহির্মুখী উভয় প্রাচীর, Mমাউস বন্ধুদের এবং Eপ্রবেশদ্বার ব্যবহার করব।
  • প্রবেশদ্বারটি তত্ক্ষণাত কোনও অভ্যন্তর প্রাচীরের সাথে সংলগ্ন হবে না (সর্বদা অবাধে চলাচল করার জন্য কমপক্ষে একটি জায়গা থাকবে)।
  • এটি সুসংগত হিসাবে আপনি যে কোনও মুদ্রণযোগ্য ASCII অক্ষর চান তা প্রতিস্থাপন করতে পারেন । এই নেই , আপনি অভ্যন্তর দেয়াল বনাম বহি দেয়াল জন্য দুটি ভিন্ন চিহ্ন ব্যবহার করার অনুমতি দেয়, যাতে যতদিন আপনি দৃঢ়তা (যেমন, আপনি ব্যবহারের জন্য চয়ন করেন বজায় রাখা @পরিবর্তে অভ্যন্তর দেয়াল জন্য, এবং ছুটি #বহি জন্য, যে অভ্যন্তর প্রাচীর হতে হবে @এবং প্রত্যেক বহি প্রাচীর #)।
  • গোলকধাঁধা সর্বদা প্রাচীর দ্বারা আবদ্ধ হবে, তবে অগত্যা আয়তক্ষেত্রাকার নয়। যদি ইচ্ছা হয়, আপনি ধরে নিতে পারেন যে গোলকধাঁটিটি আয়তক্ষেত্রাকার ইনপুট (alচ্ছিক) তৈরি করার জন্য ফাঁকা স্থান রয়েছে।
  • গোলকধাঁধার এমন অংশ থাকতে পারে যা ডায়নামাইট ব্যতীত অ্যাক্সেসযোগ্য।
  • আপনি ধাঁধাটির বাহ্যিক দেয়ালকে ডাইনিমাইট করতে পারবেন না।

আউটপুট

একজন truthy / falsey মান। "হ্যাঁ, মাউস প্রতিটি অন্যান্য মাউস উদ্ধার করতে পারে" এর জন্য সত্য বা "না, অ্যালার্ম সিস্টেমটি ছিন্ন হয়ে যাবে for"

নিয়ম

  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

উদাহরণ

খালি লাইন দ্বারা পৃথক সত্যবাদী উদাহরণ ,.

#####
#M E#
#####

######
#M# E#
######

########
#E  # M#
#   #  #
#   #  #
#      #
########

#############################
#    ##      #       #      #
#  M ## M    #       #      #
#    ##      #   M   #    E #
#M   ##      #       #      #
#############################

###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############

ফাঁকা লাইন দ্বারা পৃথক পৃথক উদাহরণ

#############################
#M   ##      ##      ##     #
#  M ## M    ##      ##     #
#    ##      ##  M   ##   E #
#M   ##      ##      ##     #
#############################
#############################
                     ########
                     ########
                     #   #  #
                     # M # M#
                     ########

              #####
              # M #
              #####
              #####
              #####
              #####
###################
# # # ##   ## # # #
#M#M#M## E ##M#M#M#
# # # ##   ## # # #
###################
#######
######
#####
####
# M#
####

###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############


3
@AlexA। দুঃখিত যে আপনাকে এটি ইন্টারনেটে অপরিচিত কাছ থেকে শিখতে হয়েছিল। ;-)
অ্যাডমবর্কবার্ক

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

2
বাহ্যিক দেয়ালগুলির (যেমন তারা বিধ্বংসী নয়) আলাদা আলাদা চর থাকা কি গ্রহণযোগ্য?
তেনসিবাই

2
@Moshe কাট্স , নিশ্চিত সময় হবে না। আপনি কেবল মিউজিকে বাঁচাতে চান না।
msh210

উত্তর:


19

পার্ল, 216 215 বাইট

জন্য +2 অন্তর্ভুক্ত -0p

STDIN এ ইনপুট দিন। ব্যবহার করুন %বাইরের দেয়ালে জন্য, #অভ্যন্তরীণ দেয়াল জন্য, 0খালি স্পেস জন্য, 8মাউস এবং rশুরু পদের জন্য। পুরো বোর্ডগুলি প্যাড করা আবশ্যক যাতে এটি একটি আয়তক্ষেত্র গঠন করে। আপনি উদাহরণগুলি রূপান্তর করতে এবং চালাতে পারেন:

cat dynamite.txt | perl -p0e 's/.+/$a^=$&/egr;s//sprintf"%-*s",length$a,$&/eg;1while/\n/,s/^ *\K#|#(?= *$)|^ *.{@{-}}\K#|\A[^\n]*\K#|#(?=[^\n]*\n\z)|#(?=.{@{-}} *$)/%/sm;y/ EM/0x2/' | dynamite.pl

dynamite.pl:

#!/usr/bin/perl -0p
sub f{@a{@_}||=push@{$%+($&?$1?50:$&=~8?0:$&&"5"?2:1:0)},@_}f$_;for(@{$%}){f y/xr|/ytx/r;{f s/\pL\d/$&^(E&$&)x2/er}{f s/(q|s|y)#/$&^"\x01\x13"/er}my$o;{$\|=/x/>/2/;$o.="
"while s/.$/$o.=$&,""/meg}f$o}$%++>999|$\||redo}{

\xhhদাবি করা স্কোরের জন্য পলায়নকারীদের প্রতিস্থাপন করুন ।

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

ব্যাখ্যা

আমি কোনও ক্ষেত্রের অবস্থা প্রতিনিধিত্ব করতে একটি চরিত্রের বিট প্যাটার্ন ব্যবহার করি:

contains victim: 0000 0010
has hero:        0100 0000
carry dynamite   0000 0001
carry mouse      0000 0100
home             0000 1000
walkable         0001 0000 (not really needed but results in shorter regexes)
make printable   0010 0000
wall             0010 xxxx (bit patterns not very important,
permawall        0010 xxxx  just avoid letters and digits)

উদাহরণস্বরূপ, নায়ক ( 01000000) বহনকারী ডায়নামাইট ( 00000001) অবশ্যই এমন জায়গায় থাকতে হবে যেখানে সে হাঁটতে পারে ( 00010000) এবং আমরা চাই যে সমস্ত মান মুদ্রণযোগ্য ASCII ( 00100000) হয়। orএই সমস্ত বিটমাস্কের বিটওয়াইস গ্রহণ করা 01110001যা দেয় ASCII কোড q। মোট এটি হয়ে যায় ::

p: hero                     r hero on victim
q: hero carrying dynamite   s hero carrying dynamite on victim
t: hero carrying mouse      v hero carrying mouse on victim

x : hero at home
y : hero at home carrying dynamite
| : hero at home carrying mouse

0: empty  without hero
8: home   without hero
2: victim without hero

%: permanent wall
#: normal wall

প্রোগ্রামটি কেবল নায়ককে ডানে চলে যাওয়ার বিষয়ে বিবেচনা করবে (পরে আবর্তিত রোটেশনটি অন্যান্য দিকগুলির যত্ন নেবে)। বিটমাস্কগুলি সাবধানে এমনটি বেছে নেওয়া হয়েছিল যে নায়ককে সর্বদা একটি চিঠি এবং এমন একটি জায়গা দিয়ে প্রতিনিধিত্ব করা হয় যেখানে তিনি একটি অঙ্ক দ্বারা স্থানান্তর করতে পারেন (শিকারী বহনকারী বাড়িতে থাকা নায়ক ব্যতীত, তবে আবার এটি উদ্দেশ্যমূলক হয় যাতে নায়কের একমাত্র পদক্ষেপই ড্রপ হয়ে যায় শিকার). সুতরাং যে নায়ক এগিয়ে যেতে পারেন তার সাথে মিলে যায় /\pL\d/। মিলে যাওয়া সাবস্ট্রিংটি সংশোধন করতে হবে যাতে নায়ক এবং তিনি যা বহন করছেন তা প্রথম চরিত্র থেকে সরানো হয় এবং দ্বিতীয়টিতে যুক্ত করা হয়, যা xorউভয় চরিত্রের জন্য একই মান দিয়ে কিছুটা বিপরীতভাবে করা যায়। জোরের মানটি হিরো বিট ( 01000000), ডায়নামাইট বিট ( 00000001) এবং ক্যারি মাউস বিট ( 00000100) নিয়ে থাকে। তারা একসাথে orকরতে01000101যা ASCII E। সুতরাং নায়ক চলন্ত হয়ে ওঠে:

s/\pL\d/$&^(E&$&)x2/e

নায়ক যদি সরাসরি তার সামনে দাঁড়িয়ে থাকে এবং ডিনামাইট ( q, sবা y) বহন করে তবে কোনও দেয়াল উড়িয়ে দিতে পারে । নায়ক তার ডিনামাইটটি হারাবে ( xorসাথে 00000001) এবং প্রাচীরটি #একটি উত্তরণে 0(এক্সওর উইথ 00010011) পরিবর্তিত হবে so

s/(q|s|y)#/$&^"\x01\x13"/e

অন্যান্য দিকগুলি পরিচালনা করতে পুরো বোর্ডটি ঘোরানো হয় (ঘোরানো বোর্ড শেষ হয় $o):

my$o;$o.="\n"while s/.$/$o.=$&,""/meg

নায়ককে সরানো ছাড়াও তার অন্যান্য অনেক পছন্দ রয়েছে:

When at home, pick up dynamite:                   x -> y
When on victim not carrying anything pick him up: r -> t
When at home carrying a victim, drop him off:     | -> x

এটি দ্বারা করা হয়

y/xr|/ytx/

বোর্ড শেষ হয়েছে যদি নায়ক বাড়িতে কিছু না নিয়ে ( x) থাকে এবং উদ্ধার করার জন্য আর কোনও ভুক্তভোগী না থাকে (না 2)। এটি সুবিধামত ব্যবহার করে পরীক্ষা করা যেতে পারে

/x/>/2/

বোর্ডটি সমাধান হয়ে গেলে আমি এই অবস্থাটি মনে রাখতে চাই এবং শেষে এটি মুদ্রণ করতে চাই। যে আমি "মীমাংসিত হয়" পতাকা বহন $\এবং প্রিন্টিং ছাড়া প্রোগ্রাম শেষে প্রিন্ট করা হবে $_, তাই

$\|=/x/>/2/  ...   }{

0 চাপে প্রক্রিয়াকরণ হওয়া রাজ্যগুলিকে @01 টি চাপ দেওয়া হয় 1 @1ইত্যাদি বর্তমান চাপটি রাখা হয় $%। ব্যবহার $nবা এর মতো কিছু সংক্ষিপ্ত হবে তবে ভেরিয়েবলটি কিছুতে আরম্ভ করা না হলে কোড কাজ করে না কারণ স্বাবলম্বন অন্যথায় $nএকটি এআরএআই রেফারেন্সে পরিবর্তিত হবে a একটি নির্দিষ্ট চাপে রাজ্যগুলির উপর লুপিং একটি ব্যবহার করে করা হয় forএবং mapকারণ নয় because একটি দিয়ে forআপনি অ্যারে প্রসারিত করতে পারেন যখন এটি এখনও লুপ করা হচ্ছে এবং নতুন উপাদানগুলি বেছে নেবে। এটি প্রয়োজন কারণ নায়কের ঘূর্ণন এবং একক ক্ষেত্র পছন্দগুলি 0 সময়ে ঘটে এবং একই চাপ অ্যারেতে শেষ হয়। সুতরাং একটি প্রদত্ত চাপের জন্য লুপটি সম্পন্ন করে

for(@{$%}){...}

চাপটি 1000 পর্যন্ত পৌঁছানো বা সমাধান না পাওয়া পর্যন্ত এটি পুনরাবৃত্তি হবে:

$%++>999|$\||redo

যা অবশিষ্ট রয়েছে তা নতুন আবিষ্কারকৃত রাজ্যগুলিকে তাদের নিজ নিজ চাপ অ্যারেগুলিতে যুক্ত করছে। সাব্রোটাইন দ্বারা এটি করা হবে f। আমরা কেবলমাত্র একটি রাজ্য যোগ করতে চাই যদি এটি এখনও না দেখা যায়। আগে যেসব রাজ্য দেখা গিয়েছিল তাদের সেগুলিতে রাখা হয় %a:

sub f{@a{@_}||=push@$n, @_}

$nএকটি রাষ্ট্রের জন্য নতুন চাপ উপস্থাপন করে। আমি এই অবস্থাটি থেকে এই বিষয়টি উপস্থাপন করব যে বীরের ক্রিয়াকলাপের ফলে এই আহ্বানের দিকে পরিচালিত হওয়ার ফলে রেজেক্স ভেরিয়েবলগুলি এখনও রয়েছে:

if $1 is set it was from s/(q|s|y)#/$&^"\x01\x13"/e which blows a wall -> 50
else if $& is set it was from s/\pL\d/$&^(E&$&)x2/e, so the hero moves.
    if $& contains 8 the hero went home -> 0
    else if the hero has carry bits (5) -> 2
    else                                   1
else ($& was not set) it was from y/xr|/ytx/r -> 0

এটি নিম্নলিখিত সূত্রগুলির দিকে পরিচালিত করে $n:

$%+($&?$1?50:$&=~8?0:$&&"5"?2:1:0)

সমস্ত বিকল্পগুলি একটি rসংশোধক পায় তাই তারা পরিবর্তিত রাষ্ট্রটি ফিরিয়ে দেয় এবং বর্তমান অবস্থাটিকে $_একা রেখে দেয় । fতারপরে এই পরিবর্তিত রাজ্যে ডাকা হয়, সুতরাং আপনি কোডটি পান

f y/xr|/ytx/r;

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

{f s/\pL\d/$&^(E&$&)x2/er}

বিশেষত fরোটেশনটি এতটা মোড়ানো থাকে যাতে এটি রেগেক্স ভেরিয়েবলগুলি ছাড়াই কল করে এবং 0 এর চাপ অবদান পায়।

কেবলমাত্র @0আরম্ভ করার পরে প্রাথমিক অবস্থার সাথে প্রাইম করা

f$_

এটি মূল লুপে রয়েছে তাই এটি $_পরবর্তী চাপের অ্যারেগুলিতে যুক্ত করার চেষ্টা করে, তবে যেহেতু প্রাথমিক অবস্থা ইতিমধ্যে %aকিছুতেই হবে না।

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


3
ওও, কৌতূহলী। আমি কোনও উত্তর প্রত্যাশার চেয়ে এটি যথেষ্ট সংক্ষিপ্ত। আপনি কিছুটা ব্যাখ্যা যোগ করতে পারেন? আমি সত্যিই পার্লকে ছাঁটাই করি না।
অ্যাডমবর্কবার্ক

3
@ টিমিডি ওকে, পর্যাপ্ত বিবরণের সাথে ব্যাখ্যাটি যুক্ত করা হয়েছে যাতে কোনও নন পার্ল প্রোগ্রামারও এটি কীভাবে কাজ করে তার কমপক্ষে একটি ধারণা পাওয়া উচিত
টন হসপেল

1
খুব চিত্তাকর্ষক!
এমিগানা 13

দারুণ গল্ফিং, এটি সত্যিই চিত্তাকর্ষক ... যখন আমি মনে করি পার্লের সাথে গল্ফ করাতে আমি এতটা খারাপ নই, আমি আপনার গল্ফগুলি একবার দেখে নিই, এবং সেই অনুভূতিটি খুব দ্রুত চলে যায়!
দাদা

13

জাভাস্ক্রিপ্ট, 863 834 785 781 বাইট

ইডিএইচ প্রডাকশনগুলিতে 29 বাইট ধন্যবাদ সংরক্ষণিত জর্ডানকে
53 বাইট সংরক্ষণ করা হয়েছে

L=[]
f=(S,r="",R="",p=0,s=S.replace(RegExp(r),R),l=`((.|\n){${s.split`
`[0].length}})`,q=p+1,o=p+2,n=p+50)=>s in L|p>999?1e3:!/M/.test(s,L[s]=0)&/E/.test(s)?p:Math.min(...[[/ E/,"me",q],[/ E/,"de",o],[/ME/,"ce",q],[/E /,"em",q],[/E /,"ed",o],[/EM/,"ec",q],[`E${l} `,"e$1m",q],[`E${l} `,"e$1d",o],[`E${l}M`,"e$1c",q],[` ${l}E`,"m$1e",q],[` ${l}E`,"d$1e",o],[`M${l}E`,"c$1e",q],[/ m/,"m ",q],[/m /," m",q],[`m${l} `," $1m",q],[` ${l}m`,"m$1 ",q],[/ (d|c)/,"$1 ",o],[/(d|c) /," $1",o],[`(d|c)${l} `," $2$1",o],[` ${l}(d|c)`,"$3$1 ",o],[/d#/,"m ",n],[/#d/," m",n],[`#${l}d`," $1m",n],[`d${l}#`,"m$1 ",n],[/mM/," c",q],[/Mm/,"c ",q],[`M${l}m`,"c$1 ",q],[`m${l}M`," $1c",q],[/[mc]e/," E",p],[/e[mc]/,"E ",p],[`e${l}[mc]`,"E$1 ",p],[`[mc]${l}e`," $1E",p]].map(a=>f(s,...a)))
F=s=>f(s)<1e3

মাল্টলাইন স্ট্রিং হিসাবে ইনপুট নেয়।

এটি একটি বেনাম ফাংশন সংজ্ঞায়িত করে যা fসমস্ত ইঁদুর উদ্ধার করার আগে আপনি অ্যালার্ম থেকে বেরিয়ে এসেছিলেন কিনা তা নির্ধারণ করতে পুনরাবৃত্তি ফাংশন ব্যবহার করে। fআয় 1000যদি চাপ 1000 ঊর্ধ্বে (অবিরাম পুনরাবৃত্তির এড়াতে), চাপ রেসকিউ আর মাউস এবং থেকে বেরিয়ে যাওয়ার জন্য মাউস, এবং আয় অন্যথায় বর্তমান রাষ্ট্র থেকে সব সম্ভব প্যাচসমূহ ন্যূনতম চাপ আছে যদি ফেরৎ। এটি Lইতিমধ্যে পরিদর্শন করা অবস্থানগুলিতে নজর রাখার জন্য একটি অ্যারে ব্যবহার করে যেখানে L[pos]==0এটি পরিদর্শন করা হয় এবং তা যদি না হয় তবে অপরিজ্ঞিত হয়। এটি প্রয়োজনীয় নাও হতে পারে, তবে এটি মাউসকে অকেজো চাল এবং সামান্যতম সময়ে পুনরাবৃত্তি ত্রুটি ছুঁড়তে বাধা দেয়। (এর অর্থ এই নয় যে আপনি Lযদি একাধিকবার পরীক্ষা করে থাকেন তবে আপনাকে নতুন করে সংজ্ঞা দেওয়া উচিত )

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

আরও পঠনযোগ্য সংস্করণ:

stateList = []
f=(s,regex="",replacement="",pressure=0,state=s.replace(regexp(regex),replacement),line=`((.|\n){${state.split("\n")[0].length}})`)=>{
    if (state in stateList || pressure > 999) return 1e3
    if (!/M/.test(state) && /E/.test(state)) return pressure

    stateList[state] = 0

    return [
        [/ E/,"me",pressure+1],
        [/ E/,"de",pressure+2],
        [/ME/,"ce",pressure+1],
        [/E /,"em",pressure+1],
        [/E /,"ed",pressure+2],
        [/EM/,"ec",pressure+1],
        [`E${line} `,"e$1m",pressure+1],
        [`E${line} `,"e$1d",pressure+2],
        [`E${line}M`,"e$1c",pressure+1],
        [` ${line}E`,"m$1e",pressure+1],
        [` ${line}E`,"d$1e",pressure+2],
        [`M${line}E`,"c$1e",pressure+1],
        [/ m/,"m ",pressure+1],
        [/m /," m",pressure+1],
        [`m${line} `," $1m",pressure+1],
        [` ${line}m`,"m$1 ",pressure+1],
        [/ ([dc])/,"$1 ",pressure+2],
        [/([dc]) /," $1",pressure+2],
        [`([dc])${line} `," $2$1",pressure+2],
        [` ${line}([dc])`,"$3$1 ",pressure+2],
        [/d#/,"m ",pressure+50],
        [/#d/," m",pressure+50],
        [`#${line}d`," $1m",pressure+50],
        [`d${line}#`,"m$1 ",pressure+50],
        [/mM/," c",pressure+1],
        [/Mm/,"c ",pressure+1],
        [`M${line}m`,"c$1 ",pressure+1],
        [`m${line}M`," $1c",pressure+1],
        [/[mc]e/," E",pressure],
        [/e[mc]/,"E ",pressure],
        [`e${line}[mc]`,"E$1 ",pressure],
        [`[mc]${line}e`," $1E",pressure]
    ].map(a=>f(state,...a)).reduce((a,b)=>a-b<0?a:b) //reduce used for support in more browsers.
}
s=>f(s)>1e3

অকেজো সাদা স্থান s in L|p > 999
Yytsi

@ টুক্কাএক্স আমাকে সে সম্পর্কে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ, বাইকাউন্টটি ইতিমধ্যে স্থানগুলি ছাড়াই সংস্করণটির জন্য ছিল।
ড্যানইম্যান

আপনি কোড মোড়কে বাইট সংরক্ষণ করতে পারেন দেখুন evalএবং প্রতিস্থাপন @সঙ্গে $1(নিশ্চিত না হলে এই কাজ করবে, কিন্তু আপনি লিখতে $1অনেক)
Cyoce

আমি মনে করি আপনি fওয়ান-লাইনার তৈরি করে f=(...)=>s in L|p>999?1e3:!/M/.test(s,L[s]=0)&/E/.test(s)?p:Math.min(...
গুচ্ছটি

@ কিয়েস আমি $118 বার ব্যবহার করি এবং .replace("@","$1")এটি 18 বাইট। আমি এটিকে টেনে তোলার কোনও উপায় দেখছি না।
ড্যানথম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.