Quelqu'un a-t-il été défenestré?


26

La défenestration est l'acte de jeter quelqu'un ou quelque chose par la fenêtre.
- Wikipédia

Contribution

L'entrée comprendra deux parties:

  • Un plan d'étage et une personne à l'intérieur de la maison / du bâtiment.

    • v><^représente une personne, pointant dans la direction indiquée par la flèche. L'entrée contiendra exactement une personne.

    • -et |représentent des murs, et #représente une fenêtre. est un espace vide.

    Cette partie de l'entrée peut être considérée comme une chaîne unique ou comme un tableau / liste / etc. de lignes. Il n'y aura jamais d'espaces de fin ou de début, et l'entrée sera toujours un rectangle.

    Exemple:

    -----###---
    |         |
    |     ^   |
    -----------
    
  • Un entier ≥ 1 indiquant la distance (en caractères) parcourue par la personne.

Sortie

La sortie doit être

  • 1si la personne se retrouve "à l'intérieur" d'une fenêtre (c'est-à-dire après avoir avancé de la distance spécifiée dans l'entrée, la personne est au-dessus de a #).

  • 2si la personne a été défenestrée (entrer en contact avec a #puis continuer plus loin).

  • 3si la personne a heurté un mur (entrer en contact avec un -ou |. Une fois qu'elle a heurté le mur, la personne s'arrête et ne continue pas à travers).

  • 0 si rien de ce qui précède n'est vrai (et tout ce que la personne a fait est de voyager dans un espace vide).

Hypothèses

Tous les éléments suivants peuvent être supposés vrais:

  • La personne ne voyagera jamais "hors des limites" de la zone de saisie.

  • Après avoir été défenestrée, la personne n'entrera jamais en contact avec un autre #ou un -/ |(vous n'avez donc pas à vous soucier de savoir si 2 et 1 ou si 3les deux sont vrais).

Cas de test

Pour le "plan d'étage" suivant:

-----
|   |
|###|
|   |
| ^ |
In   Out
1    0
2    1
3    2

Pour ce plan d'étage:

> | # |
In   Out
1    0
2-99 3    * that is, any input 2-99 outputs 3

Pour ce plan d'étage:

||####|#|#|##|<
In   Out
any  3

Cas de test final:

|v|
|#|
| |
| |
| |
| |
In   Out
1    1
2-5  2  

7
Je propose que le titre de ce défi soit changé en test de défenestration.
cat

1
Question de suivi: ceci, sauf pour les puits.
Conor O'Brien

2
@ CᴏɴᴏʀO'BʀɪᴇɴHas someone been for-sparta'd?
cat

Pourquoi ma modification a-t-elle été rejetée):
cat

@cat Parce que c'est une modification de la question de quelqu'un d'autre, sur laquelle ils doivent avoir une entrée.
Conor O'Brien

Réponses:


10

JavaScript (ES6), 147 146 octets

(p,n)=>eval('l=p.search`\n`+1;m=p.match`[<>v^]`;for(r=d=i=0;i++<n&r<3;r-1?0:d=2)r=(c=p[m.index+i*({v:l,"<":-1,">":1}[m]||-l)])>"#"?3:c>" ";+r||d')

1 octet enregistré grâce à @NinjaBearMonkey !

Explication

Prend un plan d'étage sous forme de chaîne et le nombre de mouvements. Renvoie un nombre.

(p,n)=>                               // p = floor plan as string, n = number of moves
  eval(`                              // use eval to enable for loop without {} or return
    l=p.search\`\n\`+1;               // l = line length
    m=p.match\`[<>v^]\`;              // m = the position and orientation of the person
    for(
      r=                              // r = result at the current step
        d=                            // d = 2 if the person has been defenestrated
          i=0;                        // i = current step
      i++<n&r<3;                      // for each step while the person has not hit a wall
      r-1?0:d=2                       // set d to 2 once the person enters the window
    )
      r=(                             // r = 0 if on " ", 1 if on "#" or 3 if on "|" or "-"
        c=p[m.index+i*                // c = character after current step
          ({v:l,"<":-1,">":1}[m]||-l) // get the index offset of each step
        ]
      )>"#"?3:c>" ";
    +r||d                             // return the result of the current step or d
  `)

Tester


3
J'aime votre extrait de test!
GamrCorps

ಠ_ಠ J'étais sur le point de publier à peu près la même chose.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Haha, je sais que ça va trop bien ...
user81655

Belle réponse, btw! Très intelligent.
Conor O'Brien
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.