Trova l'interno di un Loop


14

Compito

Dato uno schema ASCII di un loop

per esempio

....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................

E una posizione sul circuito

per esempio

(7,1)

Devi trovare l'interno e l'esterno del ciclo

per esempio

00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000

specificazioni

  • Puoi prendere l'input per il diagramma come una stringa separata da newline o equivalente evidente

  • Riceverai una coordinata sul loop (0 o 1 indicizzato) come parte del tuo input. Puoi collocare la tua origine in qualsiasi luogo desideri. Puoi inserire questa coordinata (<row>, <column>),(<column>, <row>) o come la posizione lineare sulla corda. È possibile ricevere questi dati in qualsiasi metodo ragionevole. Tutti i personaggi nel loop saranno gli stessi del personaggio in quell'indice.

  • L'output preferito è una matrice bidimensionale di valori di verità e falsa, tuttavia stringhe di 1e0 sono accettate separate da newline o qualsiasi equivalente evidente delle ultime due. L'interno e l'esterno devono avere valori di verità diversi, ma non importa quale sia quale.

  • Un ciclo è definito come un gruppo di caratteri in modo tale che siano tutti dello stesso carattere ( ad es.@ ) E in modo che ogni carattere nel ciclo abbia un percorso verso il carattere originale (Il carattere alla coordinata di input) che attraversa solo quello stesso carattere (geometria del taxi senza diagonali ).

  • L'interno è tutto il ciclo stesso e i luoghi che non possono raggiungere il bordo del diagramma senza attraversare il ciclo.

  • L'esterno è ovunque

  • Questo è

Casi test

Pastebin


Possiamo anche prendere le coordinate come coordinate lineari nella stringa?
flawr

@flawr Puoi.
Post Rock Garf Hunter,

Ci è permesso prendere il diagramma come una matrice di caratteri, sth. come [['.', '.'],['.', '@']]invece di una stringa con newline?
hbaderts,

@hbaderts Questo è un ovvio equivalente
Post Rock Garf Hunter

1
@WheatWizard Grazie per l'ulteriore test case! Consiglierei comunque di inserirli in uno snippet o in un gist / pastebin, al fine di rendere la sfida un po 'più declinata =)
flawr

Risposte:


6

MATLAB, 163 159 146 78 byte

function m=f(m,y,x);[~,i]=bwfill(m~=m(y,x),x,y,8);m=m*0;m(i)=1;m=bwfill(m,'h')

Grazie @ rahnema1 per -66 byte !!!

Ora funziona su Provalo online! MA erano necessarie alcune modifiche, in quanto MATLAB e Octave non sono completamente compatibili.

Spiegazione

Per prima cosa facciamo un'immagine binaria che maschera solo tutti i caratteri che sono uguali al carattere iniziale. Quindi determiniamo il componente connesso in cui si trova il carattere iniziale.

% determine the connected component that is contains initial character

[~,i]=bwfill(m~=m(y,x),x,y,8);     % i contains the indices of the connected component
m=m*0;m(i)=1;                      % create an image of the connected component

Successivamente creiamo un'immagine di quel componente collegato e applichiamo riempire tutti i "buchi" nell'immagine.

m=bwfill(m,'h')

Penso che per il golf Octave sia meglio, quindi è possibile ridurlo ad almeno 72 byte
rahnema1

@ rahnema1 Ho già iniziato a MATLAB, quindi non cambierò questa presentazione ora, ma grazie per il suggerimento =)
flawr

5

MATLAB: 67 byte

function A=f(A,r,c),A=bwlabel(A==A(r,c),4);A=imfill(A==A(r,c),'h');

Un paio di avvertimenti:

  • A si presume che sia un array di caratteri.
  • Gli indici in MATLAB sono basati su 1, con le righe indicizzate per prime. Si presume che queste modifiche vengano apportate all'input della funzione (ovvero l'esempio di domanda verrà chiamato come output = f(A,2,8)).
  • bwlabele imfillfanno parte della casella degli strumenti di elaborazione delle immagini.

1
benvenuti a codegolf!
rahnema1,

@ rahnema1: Stupito di non aver visitato prima, dato che ho giocato a golf su SO prima della nascita di questo sito.
gnovice,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.