Follow incomplete directions
Perl, 150 149 146 145 141 140 138 136 135 133 130 126 125 124
Added +7 for -F -Xn0i
An initial attempt.
Run with the map on STDIN and the directions after the -i option, e.g.
perl -F -Xn0iRL incomplete.pl
.....A
.#.###
B....C
##.#.#
D....E
##F###
Close STDIN with ^D
or ^Z
or whatever works on your operating system.
incomplete.pl
:
%P=0;$^I=~s``{%;=!/
/;%P=map{$_|=$F[$^H=$_+=(1,@+,-1,"-@+")[$d&3]]=~/(\w)|#|^$/*~!\$;{$1}}(%P)x@F}$d-=B&$'^u`eg;print%
Replace the ^H by the literal control character to get the given score
Bonus question:
- There is no input that results in only
I
- The shortest input that results in only
U
isRLLRRLLRLRLRRLRRLRLRLRRLLR
- The longest input needed to result in a unique set is
RLLRRRLRLRLLLRRLRLLLLLRRRLLRRRLLLLLLLRRLRRRR
which givesB O R
Python 2, 180 177 168 163 161 158 bytes
def a(v,o,c=0,A=0,d='.',O={0}):
while'.'==d:w=v.find('\n');c+=[1,~w,-1,w+1][A%4];d=v[c];o>v<a(v+' '*w,o[1:],c,ord(o[0])-~A,d);d>v>o<O.add(d)
return`O`[9::5]
Parameter v
is the map as a string; o
is the LR
string.
Mitch Schwartz saved 2 3 10 lots of bytes. Thanks!
I saved two bytes by setting O={0}
and returning `O`[9::5]
, which might not be very portable: it assumes that hash(0) == 0
, I think, because that causes the order of elements in repr(O)
to be
set([0, 'A', 'B', 'C'])
and creatively slicing that string gets me the answer.
C++ 375
Thanks to @ceilingcat for finding a much better (and shorter) version
#import<bits/stdc++.h>
#define M m[y][x]
using namespace std;vector<string>m;char n[99],j;int r(int x,int y,char*d,int z){for(;z%2?y+=z-2:(x-=z-1),y>=0&y<m.size()&x>=0&x<m[y].size()&&!*d|M==46&&(!*d?n[M]+=M>64&M<91,M==46:!r(x,y,d+1,z+(*d-82?*d==76:3)&3)););}main(int c,char**v){for(string l;getline(cin,l);)m.push_back(l);for(r(0,0,v[c>1],**v=0);j<99;j++)n[j]&&cout<<j<<" ";}
Try it online!