জাম্পিং এবং রানিং


18

ম্যাথিউ ধাঁধা সমাধান করতে পছন্দ করে। যখনই সে একটি সমাধান করতে পরিচালিত হয় তখন সে সুখে ঘোরাফেরা করে। একটি আলতা ঝরনা মাটিতে খরা এবং ছিদ্রগুলি খুলেছে বলে সম্প্রতি তাকে সত্যিই এটি করা দরকার Recently

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

ইনপুট

ইনপুটটি স্ট্যান্ডার্ড ইনপুটটিতে একক লাইন হিসাবে দেওয়া হয়, একটি লাইন বিরতি দিয়ে শেষ হয়। রেখাটি হয় ড্যাশ ( -) বা আন্ডারস্কোর ( _) দ্বারা গঠিত , যথাক্রমে একটি গ্রাউন্ড বা গর্ত মিটার উপস্থাপন করে। একটি নমুনা ইনপুট হতে পারে:

----__--___---

প্রদত্ত ল্যান্ডস্কেপ কমপক্ষে এক এবং সর্বাধিক 30 মিটার দীর্ঘ এবং সর্বদা স্থল দিয়ে শুরু হয়।

আউটপুট

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

RRJRJRR

যা প্রায় নীচের হিসাবে দেখায়:

আন্দোলনের চিত্র আরআরজেআরজেআরআর

যদি ল্যান্ডস্কেপ দিয়ে কোনও নিরাপদ পথ না থাকে তবে একটি বিস্ময়কর চিহ্ন ( !) মুদ্রণ করা উচিত।

নমুনা ইনপুট

--------
----__--___---
-_______
-_-_-_-_-_-
-

নমুনা আউটপুট

JRRR
RRJRJRR
!
!

(শেষ আউটপুট ফাঁকা হওয়ায় কোনও গতিবিধি প্রয়োজনীয় নয়, তবে আমার ধারণা, মার্কডাউন এটি পার্স করতে পারে না)

বিঃদ্রঃ

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

স্ট্যান্ডার্ড ত্রুটির উপর অতিরিক্ত আউটপুট উপেক্ষা করা হয়।

জয়ের শর্ত

গল্ফের রীতি অনুসারে সংক্ষিপ্ততম কোড জিতেছে। টাই করার ক্ষেত্রে আগের সমাধানটি জিততে পারে।

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

দুটি পরীক্ষার স্ক্রিপ্ট রয়েছে যাতে অভিন্ন পরীক্ষার কেস থাকে:

অনুরোধ উভয় ক্ষেত্রে: <test script> <my program> [arguments]যেমন ./test ruby jumprun.rbবা ./test.ps1 ./jumprun.exe

আরেকটি নোট

এই কাজটি ২০১১-W24-এর সময় আমার বিশ্ববিদ্যালয়ে অনুষ্ঠিত একটি গল্ফ প্রতিযোগিতার অংশ ছিল। আমাদের প্রতিযোগীদের স্কোর এবং ভাষাগুলি নীচে ছিল:

  • 104 - হাস্কেল
  • 131 - হাস্কেল
  • 154 - সি
  • 170 - সি
  • 275 - ভিবি.এনইটি
  • 286 - সাধারণ লিপ

আমাদের নিজস্ব সমাধান ছিল

  •   92 - রুবি
  • 124 - পাওয়ারশেল

@Joey আমি test.sh চালানোর চেষ্টা কোনো ত্রুটির সম্মুখীন হয়েছেন ./test.sh perl jump.pl- ./test.sh: line 42: syntax error near unexpected token 'done'ব্যাশ 3.2.48 অধীনে,
swilliams

@ জো আমি আমার ক্যাশে সাফ করে দিয়েছি, পুনরায় ডাউনলোড করেছি এবং এটি এখন দুর্দান্ত কাজ করে। ধন্যবাদ।
নভেম্বর

সমাধানগুলির দিকে তাকালে এটি দৃশ্যত খুব তুচ্ছ ছিল। দুঃক্ষিত।
জোয়

1
আমি অনুমান করি যে পিছন দিকে দৌড়াতে / লাফানোর অনুমতি নেই? যদি এটি হয় তবে এটি ল্যান্ডস্কেপগুলি তৈরি করতে পারে - - - সমাধানযোগ্য।
কিথ র্যান্ডাল

কিথ: কাজটি পরিবর্তন করতে এখন অনেক দেরি হয়েছে, আমার ধারণা।
জোয়

উত্তর:


7

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

s/-...(?=(-|-...)*-$)/J/g;y/-/R/;/_/?$_="!":s/.$//

এটি দিয়ে চালান perl -p jumpnrun.pl। আমি -pবিকল্পটির জন্য 3 টি অক্ষর গণনা করেছি , যা perl jumpnrun.plএবং এর মধ্যে দৈর্ঘ্যের পার্থক্য perl -p jumpnrun.pl

পার্লের আমি তেমন সাবলীল নই, সুতরাং আমি আরও নিশ্চিত যে এটি আরও ছোট করা যেতে পারে। এটি হাওয়ার্ডের দ্রবণের অনুরূপ একটি রেজিপ্সপ ব্যবহার করে ।


3

রুবি, 93 90 79 70 টি অক্ষর

আমি ভেবেছিলাম একটি রেইগেক্স সমাধানটি বেশ সূক্ষ্ম এবং কমপ্যাক্ট হবে (ম্যাথারটিকে কাজটি করতে দিন)। দুর্ভাগ্যক্রমে সমস্ত প্রান্ত-কেস এবং বিশেষ চিকিত্সা এটি এত দীর্ঘ করে দিয়েছে - কমপক্ষে আমি 100 %--) স্পর্শ করতে পারি নি।

puts gets.gsub(/-...(?=(-|-...)*-$)/,?J).tr(?-,?R)=~/^([JR]*)R$/?$1:?!

এটি প্রদত্ত স্ক্রিপ্টের সমস্ত টেস্টকেস পাস করে।

পূর্ববর্তী স্ক্রিপ্টের তুলনায় বেশ কয়েকটি অক্ষর সংরক্ষণ করা হয়েছে (এখন একক কলই gsubযথেষ্ট)।

সম্পাদনা 1: পরীক্ষার স্ক্রিপ্টটি পরীক্ষার কেস 1 এর জন্য কোনও আউটপুট অনুমতি না puts z!=?-??!:''দেওয়ার z!=?-&&$><<?!পরে পরিবর্তিত হয়েছে ।

সম্পাদনা 2: পূর্ববর্তী সংস্করণ ছিল

z=gets.chop
z.chars{z.sub!(/^(-|-...)((-|-...)*-)$/){$><<($1==?-??R:?J);$2}}
z!=?-&&$><<?!

আমার আসল ধারণাটি হ'ল চরিত্রগুলি প্রতিস্থাপন এবং সামনের দিকে কৌশলগুলি এইভাবে ব্যবহার করা হয়েছিল: প্যাটার্নটি ছিল ^(?<=[RJ]*)(-|-...)(?=(-|-...)*-$)এবং আমি তখন '-' এর সাথে 'আর' এবং অন্যথায় 'জে' দিয়ে প্রতিস্থাপন করব। দুর্ভাগ্যক্রমে রুবি ভেরিয়েবল-দৈর্ঘ্যের চেহারাটিকে পিছনে রাখার অনুমতি দেয় না এবং প্রথম অংশের জন্য অন্য ক্যাপচারিং গ্রুপটি কোডটি আরও দীর্ঘ করে তোলে।

সুতরাং আমি পুনরাবৃত্তি পদ্ধতির কাজটি করেছি: আমি যদি একটি পদক্ষেপ দিয়ে শুরু করতে পারি বা ^(-|-...)শেষ প্ল্যাটফর্মের (-|-...)*-$পরে ধারাবাহিকভাবে অন্যান্য পদক্ষেপগুলি বা ঝাঁপ দিতে পারি তবে আমি সংশ্লিষ্ট চিঠিটি মুদ্রণ করব, প্রথম এক / চারটি অক্ষর সরিয়ে আবার শুরু করব over এমনকি অভিব্যক্তির ভিতরে পছন্দগুলি স্যুইচ করে আরজে বনাম জেআর অগ্রাধিকার টিউন করতে পারে (বর্তমানে এটি আরজে পছন্দ করে)।

সম্পাদনা 3: একক উপশক্তি বিভক্ত করা

puts (z=gets.chop.gsub(/(-...|-)(?=(-|-...)*-$)/){$1==?-??R:?J})=~/_/??!:z.chop

দুটি মধ্যে

puts (z=gets.chop.gsub(/-...(?=(-|-...)*-$)/,?J).tr(?-,?R))=~/_/??!:z.chop

আরও কয়েকটা চর দিয়েছে। অবশেষে আমি এই শেষের-ই-লাইন সমস্যা থেকে মুক্তি পেতে পেরেছি তবে একটি ব্যয় করে: ব্যর্থতা-সনাক্তকরণে আরও কিছু অক্ষর ব্যয় হয়।


আপনি শেষ লাইনটি পরিবর্তন করে 3 টি অক্ষর সংরক্ষণ করতে পারেন z!=?-&&$><<?!। এটি বাদে দুর্দান্ত সমাধান, +1!
ভেন্টোরো

@ ভেন্তোরো আমি প্রথম পরীক্ষায় ফেল করেছিলাম কারণ "-" ;-)- এর আউটপুট মোটেও ব্যর্থ হয় নি
হাওয়ার্ড

হুম, আমার পাওয়ারশেল স্ক্রিপ্টটিতে একটি ছোট্ট বাগ রয়েছে। এটি স্পষ্টত টেস্ট 2 এর জন্য কোনও ইনপুট গ্রহণ করে না এবং এটি টেস্ট 1 এর জন্য গ্রহণ করবে না That's এটি অদ্ভুত, আমি ঠিক করার চেষ্টা করব।
জোয়

ঠিক আছে, পরীক্ষার স্ক্রিপ্টটি স্থির করা উচিত এবং পরীক্ষার 1 এর জন্য খালি ফলাফল আর প্রত্যাখ্যান করা উচিত । ঠিক আছে, এখন এটি ঠিক করা উচিত।
জোয়

@ জোয়ে ড্যাঙ্কে নুন সিন্ড এস 90 ;-)
হাওয়ার্ড

1

পার্ল - 71 60

$_=<>;y/-/R/;s/R...(?=(R(...)?)*R$)/J/g;print/_/?"!":s/.$//r

এখন সমস্ত টেস্টকেস পাস করে। :) দেখা যাচ্ছে আমি খুব শীঘ্রই শেষ চরিত্রটি সরিয়ে দিছিলাম ... এবং আমার মূল রেজেক্সের অর্ধেকটি সম্পূর্ণ অপ্রয়োজনীয়।

$ _ = $ এআরজিভি [০]; ওয়াই / - / আর /; এস / (আর ... (? = আর)) (আর * (? = আর)) / জে $ 2 / জি; চপ; প্রিন্ট / /? "!": $ , $ /

তবুও আরেকটি রেজেক্স সমাধান, পোস্টে 5 টি টেস্টকেস পাস করে।

এর পরিবর্তে -Eও এর sayপরিবর্তে ওয়ান-লাইনার হিসাবে চালিয়ে সংক্ষিপ্ত করা যেতে পারে printতবে পার্ল ইনপুটটিকে একটি স্যুইচ হিসাবে ব্যাখ্যা করার চেষ্টা করে ... ( Unrecognized switch: -_-_-_-_-_-)


প্রশ্নটি বলে যে স্ট্যান্ডিনে ইনপুট দেওয়া হয়। আপনার সমাধানটি ব্যবহারের পরিবর্তে স্টিডিন থেকে পড়ার জন্য পরিবর্তন করার সময় $ARGVএটি পরীক্ষার স্ক্রিপ্টগুলি থেকে 108 টি টেস্টকেস ব্যর্থ করে।
ভেন্টোরো

ওহ @Ventero ওহো ... আমি মনে করি আমি জানি তুমি কেন এটা যে, আমি শীঘ্রই একটি ফিক্স করা করব ... যে আমি মাধ্যমে যাচ্ছে না জন্য কি পেতে সব testcases এর ...>: _>
swilliams

ঠিক আছে, স্ক্রিপ্টগুলির উদ্দেশ্যটি হ'ল লোকেরা সহজেই বৈধতা এবং নির্দিষ্টকরণের আনুগত্যের জন্য পরীক্ষা করতে দেয় :-)
জো

@Joey সমস্যা হল আমি একরকম দ্বিধায় পরে 'পরীক্ষা লিপি' 'রেফারেন্স বাস্তবায়ন' পর্যন্ত Ventero তার মন্তব্য :) পোস্ট ... স্ক্রিপ্ট এখন প্রায় সংশোধন করা হয়েছে এখন যদিও, বর্তমানে কেবল ব্যর্থ 20, সমস্ত মিথ্যা নেগেটিভ সঙ্গে পরিচালিত ছিল
swilliams

1

পাইথন - 89 93 97 93 টি অক্ষর

শুধু কারণ।

import re;i=re.sub('...(?<!---)-','J',input()[1:]);print('!'if'_'in i else re.sub('-','R',i))

কেবলমাত্র দশটি পরীক্ষার ক্ষেত্রে ব্যর্থ হয়েছে (একাধিক বৈধ সমাধান রয়েছে এমন ক্ষেত্রে বিবেচনা করে)। আমি এটি পুরোপুরি পরে ঠিক করব।


কার্যকারী রেজেক্সগুলির একটি ধার নেওয়া, এটি শেষ হয়

import re;i=re.sub('-...(?=(-|-...)*-$)','J',input());print('!'if'_'in i else re.sub('-','R',i))

96 টি অক্ষর সহ


1
পরীক্ষার ক্ষেত্রে কেবল 728 পাস করে। আমি আসলে এখানে পরীক্ষার স্ক্রিপ্টগুলি রেখেছি put
জোয়

@ জোয়ি: দেখে মনে হচ্ছে আমি ইনপুট থেকে শীর্ষস্থানীয় চরিত্রটি ছাঁটাই করতে ভুলে গেছি। বোকা আমাকে। এটি এখন সংশোধন করা হয়েছে।
জাব

এখনও কেবল 766/849 টেস্টকেস পাস করে।
ভেন্টোরো

1

হাস্কেল, 90 টি চরিত্র:

আমার প্রথম সমাধান - দীর্ঘ, তবে গতিশীল প্রোগ্রামিং ব্যবহার করে লিনিয়ার সময় কাজ করে। :) 150 টি অক্ষর :

x!y="!"
q '-'=max
q c=(!)
s i=r where r=zipWith3 q i(0&'R')$3&'J';n&c="":replicate n"!"++map(c#)r
c#"!"="!"
c#s=c:s
main=interact$reverse.last.s.init

দ্বিতীয় সমাধান - অনেক ধীর (ক্ষণস্থায়ী সময়) তবে অনেক খাটো: 90 টি অক্ষর

s"-\n"=""
s('-':t)=max('R'#s t)$'J'#s(drop 3 t)
s _="!"
c#"!"="!"
c#s=c:s
main=interact s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.