Ich konnte meine Fähigkeiten heutzutage aufgrund harter Arbeit nicht verbessern. Aus irgendeinem Grund bin ich beschäftigter als vor der Telearbeit, obwohl sie zu meiner lang gehegten Telearbeit geworden ist. Und vor allem verschwindet die Idee eines Programms zum Löschen eines Dinosauriers. Ich habe vor kurzem gelernt
Dann fand ich "Hebi" in der Fähigkeitsüberprüfung.
Ich mochte den Titel, den ich ihm gab, beiläufig und fühlte mich dazu bestimmt Ich habe einen Prozess geschrieben, um es zu lösen.
Und je höher der Rang, desto länger die Problemstellung und desto mehr __ "Können Sie mit dem Grad des Verständnisses und seiner Sicht auf die Welt Schritt halten?" __. __ "Der Zweck ist es, das Problem zu lösen" Für diejenigen, die die Schönheit und Kürze des Codes wollen, sind die folgenden Sätze nicht erforderlich. __ __
Zum Schluss werde ich einen schmutzigen Code einfügen. Und __ "Akzeptiere keine Titel, bei denen du dich nostalgisch und kalt fühlst" __ Beginnen wir mit dem Nachdenken.
Versuchen Sie, das Problem mit einem Bild einzufügen.
Die in der ersten Zeile angezeigten Informationen sind die vertikalen und horizontalen Breiten, in denen sich die Schlange bewegen kann. Sei y die Vertikale und x die Horizontale 0 <= y <= H-1,0 <= x <= W-1 ist der bewegliche Bereich.
Die Wand wird durch # dargestellt, und wenn dies der Fall ist, kann sie verschoben werden. Was Sie hier sehen können, ist, dass wenn 2.1 nicht erfüllt ist, es NG ist, Wenn 2.2 nicht erfüllt ist, ist es NG, und wenn beide zufrieden sind, ist es OK.
Die Funktion check_limit wurde als Funktion zur Beurteilung des oben Gesagten erstellt.
Hier, wenn die Richtung (Richtung zugewandt) und die Richtung zu gehen gegeben wird, Wie weit sind die Übergangszielkoordinaten in Zeilen- und Spaltenrichtung im Vergleich zu den aktuellen Koordinaten? Bewegen oder überprüfen Sie die nächste Richtung.
In der Figur ist die Beziehung wie folgt.
Wenn Sie nach rechts gehen, bewegen Sie sich von Ihrer Position nach rechts, dh von 0 Zeilen und 1 Spalte. Die nächste Richtung ist Osten. Wenn Sie nach links gehen, bewegen Sie sich von Ihrem Standort nach links, dh verschieben Sie 0 Zeilen - 1 Spalten. Die nächste Richtung ist West. Wenn die Ausrichtung nicht angegeben ist (dies ist der Fall, wenn es nicht an der Zeit ist, die Richtung zu ändern, setzen Sie sie auf "Keine"), gehen Sie von Ihrer Position nach oben, dh verschieben Sie die Spalte -1 Zeile 0. Die nächste Richtung ist Norden.
Wenn Sie nach rechts gehen, verschieben Sie 1 Zeile (unten) 0 Spalten von Ihrer Position Die nächste Richtung ist Süden. Wenn Sie nach links gehen, verschieben Sie -1 Zeile (nach oben) 0 Spalten von Ihrer Position. Die nächste Richtung ist Norden. Wenn die Ausrichtung keine ist, verschieben Sie 0 Zeilen und 1 Spalte (rechts) von Ihrer Position. Die nächste Richtung ist Osten.
Basierend auf diesen Informationen wurde die Funktion check_direction erstellt. (Mir ist jetzt klar, dass get besser ist als check.)
Die Koordinaten, die ich einmal übergeben habe, können nicht vorgerückt werden, da es bereits einen Schlangenkörper gibt. Das Ding. Anscheinend soll es eine riesige Schlange wie Anakonda sein. Wenn das Übergangsziel bereits überschritten wurde, stoppt die Bewegung.
__ Gesamtfluss
__
(1) Eingabewert abrufen
(2) Zeitarray (Tarr-Array) zum Ändern der Richtung und des entsprechenden Richtungsarrays (lrarr) Und der Prozess der Organisation der Koordinatendatenerfassung (arr2-Array)
"(3) Erstellung eines Sackgassenurteils über Koordinaten und Erfassungsfunktion von Bewegungskoordinaten und Bewegungsrichtung"
"(4) Wiederholen Sie die folgenden Schritte vom Zeitpunkt 0 bis 99"
"(I) Finden Sie die Übergangszielkoordinaten (ny, nx) und die nächste Richtung (next_dir) für die Richtung, die den aktuellen Koordinaten (sy, sx) und der Fahrtrichtung zugewandt ist."
(Ii) Überprüfen Sie, ob die Übergangszielkoordinaten Sackgassen sind (wenn es eine Sackgasse gibt, verlassen Sie die Schleife)
(Ⅲ) Wenn es keine Sackgasse ist, überprüfen Sie, ob es die Koordinaten sind, die Sie bisher passiert haben
`(Ⅳ) Wenn die Koordinaten noch nicht überschritten wurden, setzen Sie diese Koordinaten auf (sy, sx) und speichern Sie sie in snake_arr. ``
"(V) Bei den bisher übergebenen Koordinaten (bei den in snake_arr registrierten Koordinaten) Verlasse die Schleife"
"(5) Weisen Sie den arr2-Daten der im snake_arr-Array registrierten Koordinaten * zu."
"(6) Ausgabe arr2"
#In deiner Lieblingssprache
# Let's Herausforderung! !!
in1 = gets.chomp!
#puts(in1)
arr1=in1.split(' ')
#print(arr1)
row1=arr1[0].to_i
col1=arr1[1].to_i
sy=arr1[2].to_i
sx=arr1[3].to_i
num1=arr1[4].to_i
arr2 = Array.new(row1) { Array.new(col1,"") }
#print(arr2)
for i in 1..row1 do
tmp1=gets.chomp.to_s
for j in 1..col1 do
arr2[i-1][j-1]=tmp1[j-1...j]
end
end
tarr=[]
lrarr=[]
for i in 1..num1 do
tmp1=gets.chomp.to_s
arr3=tmp1.split(" ")
tarr.push(arr3[0].to_i)
lrarr.push(arr3[1])
#in3.push(tmp1)
end
def check_limit(arr0,i,j,row1,col1)
if i<0 or i>row1-1
flg=1
elsif j<0 or j>col1-1
flg=1
elsif arr0[i][j]=="#"
flg=1
else
flg=0
end
return flg
end
def check_direction(p_dir,rlstr)
retstr=""
if p_dir=="N"
if rlstr=="R"
retstr="0,1,E"
elsif rlstr=="L"
retstr="0,-1,W"
else
retstr="-1,0,N"
end
elsif p_dir=="S"
if rlstr=="R"
retstr="0,-1,W"
elsif rlstr=="L"
retstr="0,1,E"
else
retstr="1,0,S"
end
elsif p_dir=="E"
if rlstr=="R"
retstr="1,0,S"
elsif rlstr=="L"
retstr="-1,0,N"
else
retstr="0,1,E"
end
else
if rlstr=="R"
retstr="-1,0,N"
elsif rlstr=="L"
retstr="1,0,S"
else
retstr="0,-1,W"
end
end
return retstr
end
def find_lr(sarr,retarr,i2,num1)
rnum=-1
for i in 0..num1-1 do
if sarr[i]==i2
rnum=i
break
end
end
return retarr[rnum]
end
snake_arr=[]
snk_str=arr1[2]+" "+arr1[3]
snake_arr.push(snk_str)
#print(snake_arr)
p_dir='N'
flg_e=0
for i in 0..99 do
if tarr.count(i)==0
retstr=check_direction(p_dir,"none")
tmparr=retstr.split(",")
ny=tmparr[0].to_i+sy
nx=tmparr[1].to_i+sx
next_dir=tmparr[2]
flg=check_limit(arr2,ny,nx,row1,col1)
else
lrstr=find_lr(tarr,lrarr,i,num1)
retstr=check_direction(p_dir,lrstr)
tmparr=retstr.split(",")
ny=tmparr[0].to_i+sy
nx=tmparr[1].to_i+sx
next_dir=tmparr[2]
flg=check_limit(arr2,ny,nx,row1,col1)
end
if flg==0
sy=ny
sx=nx
p_dir=next_dir
str1=sy.to_s+" "+sx.to_s
if snake_arr.count(str1)==0
snake_arr.push(str1)
else
flg_e=1
#puts(1)
end
else
flg_e=1
#puts(2)
end
if flg_e==1
break
end
end
#print(snake_arr)
#print(snake_arr.length)
for i in 0..snake_arr.length-1 do
tmp1=snake_arr[i].to_s.split(" ")
arr2[tmp1[0].to_i][tmp1[1].to_i]="*"
end
str1=""
for i in 0..row1-1 do
str1=""
for j in 0..col1-1 do
str1=str1+arr2[i][j]
end
puts(str1)
end
Recommended Posts