Voici mon emoji pour animaux de compagnie, Billy:
-_-
Les émojis n'aiment pas être sous la pluie, alors Billy est triste ... Tirons-lui un parapluie pour qu'il se sente mieux!
/\
/ \
/ \
-_-
C'est bien, il est entièrement couvert par son parapluie! Voici un exemple où seule une partie de lui est couverte:
/\
/ \
/ \
-_-
Dans ce cas, les sections 2 et 3 de son corps sont exposées à la pluie.
Les parapluies se présentent sous de nombreuses formes et tailles, mais ils sont toujours constitués d'une série de barres obliques ascendantes /
suivies d'une série de barres obliques inverses descendantes \
. Par exemple, ce sont tous des parapluies valides:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
Et ce ne sont pas:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Vous devez déterminer quelles parties de mes emoji sont exposées à la pluie.
Clarifications
Votre programme (ou fonction) prendra en entrée une chaîne 2D. Cela peut être dans le format le plus pratique ou le plus naturel pour votre langue. Un tableau de chaînes, un tableau de tableaux de caractères, une chaîne avec des retours à la ligne, etc.
Vous devez afficher les sections des emoji exposées à la pluie. Cela peut être indexé zéro ou un indexé, à condition que cela soit clair. La sortie peut être dans n'importe quel format raisonnable. Si l'ensemble des emoji est protégé de la pluie, ne rien produire (ou un tableau vide).
Vous pouvez supposer que toutes les entrées auront un parapluie valide, et même emoji:
-_-
. L'emoji sera toujours sur la dernière ligne de l'entrée, mais il peut y avoir plusieurs lignes vides entre le parapluie et l'emoji.Tout ce qui ne fait pas partie du parapluie ou de l'emoji sera un
caractère d' espace ou une nouvelle ligne.
L'entrée sera complétée par des espaces afin que la longueur de chaque ligne soit la même.
Les failles standard s'appliquent et la réponse la plus courte en octets l'emporte!
Test IO:
Tous les exemples de cas utiliseront une seule indexation.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Réponses:
05AB1E ,
181715 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne! (assurez-vous de remplir toutes les lignes avec des espaces à la même longueur ..
la source
JavaScript (ES6), 95 octets
L'entrée doit être un tableau de chaînes, chaque ligne étant remplie d'espaces pour former un carré. La sortie est un tableau de nombres indexés sur 1.
Explication
la source
JavaScript (ES6), 92 octets
Accepte un tableau de lignes irrégulières et renvoie un résultat indexé sur 1. Explication:
la source
Java 8 lambda,
241218201191185184 (ou 161) caractèresParce que tu sais, Java a également besoin d'émoticônes sèches.
Il retourne
un ArrayListun HashSet une Stack contenant les parties des emoji qui sont exposées à la pluie (l'indexation commence à 0). Le tout déballé:Mises à jour
J'ai fait du golf de base. Cela comprend la mise en place des déclarations, la comparaison avec les valeurs ascii pour enregistrer certains caractères et raccourcir les boucles.
Merci à @ user902383 d'avoir signalé mon erreur de vidage en utilisant ArrayLists au lieu de simplement Lists. J'ai remplacé les ArrayLists / Lists par HashSets / Sets, ce qui enregistre encore plus de caractères. Merci aussi pour son conseil d'utiliser une boucle foreach dans la boucle intérieure! Grâce à ce changement, je suis en mesure de créer une variable pour l'index de la dernière ligne de la grille, ce qui la raccourcit un peu plus. Au total, 17 caractères ont été enregistrés!
@KevinCruijssen a suggéré de supprimer les génériques lors de l'initialisation, je suis allé plus loin: supprimez tous les génériques. Cela permet d'économiser 10 autres caractères.
Je suis revenu de la boucle foreach à la boucle for. Cela permet de sauter la comparaison de la dernière ligne ce qui à mon tour me permet de raccourcir la comparaison des valeurs ascii. Dans ce contexte, seuls '/', '\' et '_' ont une valeur ascii supérieure à 46. Si nous ne vérifions pas la dernière ligne, nous pouvons utiliser un
> 46 check
place pour vérifier la valeur réelle.Merci encore à @ user902383 de m'avoir montré que j'utilise un lambda et que je peux utiliser List + Stack au lieu de Set + HashSet pour raser un autre personnage.
Version renvoyant une chaîne
@ user902383 a souligné que je peux à la place simplement créer une chaîne avec les chiffres. Cela semble très tricheur, mais d'autres semblent le résoudre de cette façon, voici donc une version plus courte utilisant un retour de chaîne:
Non golfé:
la source
always program to an interface
, si vous utilisez à laList
place,ArrayList
vous pouvez économiser 5 octets=new HashSet<>();
peut très probablement être joué au golf=new HashSet();
.<>
vous fait économiser 2 octets. :)Set(3)
HashSet(7)
contreList
(4) etStack
(5).V ,
2019 octets (non concurrent)Version alternative concurrente (21 octets):
Essayez-le en ligne!(Remarque, tryitonline.net utilise une version légèrement plus ancienne de V. Pour compenser cela, il utilise cette version légèrement plus longue)
Explication:
Cela seul produit le résultat correct en 17 octets. Cependant, cela crée également des espaces supplémentaires. Cela ne me dérange pas, mais je ne veux pas me donner un avantage injuste, alors j'ajoute deux octets:
la source
JavaScript (ES6),
117112 octetsAccepte un tableau irrégulier de tableaux de
chaînesde caractères et renvoie des résultats indexés sur 0.Démo
la source
Rétine , 56 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Il s'agit d'une étape de substitution unique, où l'expression régulière correspond à l'un des caractères emoji, à condition qu'il y ait un caractère non spatial (c'est-à-dire un
/
ou\
) quelque part au-dessus dans la même position horizontale, puis nous capturons le nombre de caractères emoji jusqu'à ce point. Cette correspondance est remplacée par la longueur de cette dernière capture, ce qui nous donne l'index de ce caractère emoji non abrité. Le regex contient également un|\D
pour correspondre à tout le reste qui est remplacé par rien du tout, nous supprimons donc tous les autres caractères.la source
/
ou\
, je ressort à nouveau de ce groupe tout en faisant correspondre les éléments qui le précèdent , puis assurez-vous d'avoir complètement épuisé le groupe. Cela garantit fondamentalement que la position horizontale de l'emoji et le caractère du toit correspondent.Pyth,
2723 octets0 indexé.
Essayez-le en ligne!
Explication
Histoire
27 octets:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Essayez-le en ligne! )la source
Matlab, 43 octets
Ce code recherche les positions de colonne des caractères non-espace dans la dernière ligne de l'entrée, additionne le nombre de caractères non-espace dans ces colonnes et trouve où il n'y a qu'un seul de ces caractères (le caractère de l'emoji, non protégé par un parapluie!) . Ce code ne renvoie que des résultats corrects pour les parapluies bien formés (il suppose que tout caractère au-dessus de nos emoji fait partie d'un parapluie bien formé).
Voici un peu de code utilitaire pour écrire des cas de test et vérifier mon travail:
Courir
x = thrht(7)
donneOu
x = twht(0)
donnela source
APL, 31 octets
Cela prend une matrice de caractères en entrée.
Tests:
Explication:
'-_-'⍷⍵
: dans une matrice de zéros la taille de l'entrée, marquez la position du début de'-_-'
l'entrée avec un 1.+\+\
: Somme cumulée sur les lignes. Le premier fait0 0 0 1 0 0 ...
dans0 0 0 1 1 1 ...
, le second fait alors dans0 0 0 1 2 3 ...
.⍵∊'/\'
: marque toutes les occurrences de '/' et '\' dans l'entrée avec 1s.∨⌿
:or
sur des colonnes. Cela marque avec un 1 toutes les positions sur la dernière rangée qui sont couvertes par le parapluie.~
:not
, parce que nous avons besoin du contraire(
...)/
...: sélectionnez toutes les colonnes non couvertes dans la matrice de somme en cours d'exécution précédente,
: Obtenir une liste de toutes les valeurs dans la matrice résultante.(⍳3)∩
: Intersection entre cela et1 2 3
(cela supprime tous les 0 sélectionnés ou les valeurs supérieures, qui seraient des espaces).la source
Python 2,
114111 octetsUtilise une indexation basée sur 0.
Essayez-le ici .
la source