Avec une botte de foin rectangulaire d'au moins 2x2 composée de tous les mêmes caractères ASCII imprimables, génère l'emplacement (en partant du coin supérieur gauche) de l'aiguille, qui est un caractère différent.
Par exemple, si la pile de foin suivante est entrée:
#####
###N#
#####
#####
La sortie devrait être 3,1
à l'index zéro (ce que je vais utiliser dans ce défi) ou 4,2
à un index.
La botte de foin peut être composée de n'importe quel caractère ASCII imprimable:
^^^
^^^
^N^
^^^
^^^
^^^
sortie: 1,2
et l'aiguille sera tout autre caractère ASCII imprimable:
jjjjjj
j@jjjj
jjjjjj
sortie 1,1
Il est également possible d'avoir une aiguille dans le coin:
Z8
88
sortie 0,0
88
8Z
sortie 1,1
ou d'avoir l'aiguille au bord:
>>>>>>>>>>
>>>>>>>>>:
>>>>>>>>>>
sortie 9,1
Règles et clarifications
- L'entrée et la sortie peuvent être données par n'importe quelle méthode commode . Cela signifie que vous pouvez utiliser les entrées sous forme de liste de caractères, de chaîne unique, etc.
- Vous pouvez imprimer le résultat dans STDOUT ou le renvoyer en tant que résultat de fonction. Veuillez indiquer dans votre soumission l'ordre dans lequel se trouve la sortie (c'est-à-dire horizontale puis verticale, telle qu'utilisée dans le défi ou vice versa).
- Un programme complet ou une fonction sont acceptables.
- Vous ne pouvez pas choisir les personnages à utiliser. C'est le défi.
- La botte de foin a une taille minimum de 2x2, il est donc clair que l’aiguille et le foin.
- Il n’ya jamais qu’une aiguille dans l’entrée et sa taille n’est jamais plus grande.
- Les échappatoires standard sont interdites.
- Il s’agit du code-golf, donc toutes les règles de golf habituelles s’appliquent et le code le plus court (en octets) gagne.
88\n8Z
(avec deux caractères quelconques bien sûr).("########N###########", 5)
Réponses:
R ,
494744 octetsEssayez-le en ligne!
Prend les entrées sous forme de matrice, retourne les coordonnées indexées 1
la source
which
cession est scandaleusement lisse.Perl 6 ,
41 3837 octets3 octets sauvés grâce à @nwellnhof.
1 octet sauvé grâce à Jo King.
Essayez-le en ligne!
Explication
Il prend l'entrée comme une liste de listes de caractères et renvoie la liste de longueur 2 contenant les coordonnées X et Y de l'aiguille basées sur zéro.
Cela fonctionne en appliquant le bloc
{[+] ^∞ Z* !<<.&[Z~~]}
sur l'entrée et sur sa transposition..&[Z~~]
parcourt toutes les colonnes de l'argument et retourneTrue
si tous les éléments sont identiques,False
sinon. Nous nions ensuite toutes les valeurs (nous avons donc une liste avec un booléen par colonne, où le booléen répond à la question "L'aiguille est-elle dans cette colonne?"), Multipliez-les élément par séquence avec une séquence 0,1,2 ,. .. (True = 1
etFalse = 0
) et additionner la liste, le résultat du bloc entier est donc le nombre de 0 de la colonne où l'aiguille a été trouvée.Meilleure approche de Nwellnhof, Perl 6 , 34 octets
Essayez-le en ligne!
Explication
Généralement la même approche, juste plus efficace. Il utilise toujours un bloc sur le tableau et sa transposition, mais maintenant, le bloc convertit toutes les lignes en
Sets
et vérifie le nombre d'éléments. Lafirst
fonction donne ensuite l'index (en raison de:k
) de la première ligne contenant plus d'un élément. A cause de cela, l'ordre$_
et.&[Z]
doit être échangé.la source
first(:k)
,Set
et.&[Z]
..&[Z]
.).&[op]
cela ne semble pas être équivalent à[op] $_
mais cela fonctionneZ
pour une raison quelconque.Python 2 , 57 octets
Essayez-le en ligne!
Un port de celui-ci sur Python 3 peut contenir 62 octets :
La compréhension de la liste,,
[len(set(v))for v in a]
est plus courte que la double carte de deux octets maintenant, car elle devrait être convertie en liste commelist(map(len,map(set,a)))
Essayez-le en ligne!
la source
Brachylog , 20 octets
Essayez-le en ligne!
Sorties
[I,J]
, oùI
sont l'index de ligne etJ
l'index de colonne, tous deux indexés par 0.Extrêmement long, mais obtenir des index dans Brachylog est généralement très prolixe.
Explication
la source
PHP ,
9985 octetsUtilisation de chaîne sans nouvelles lignes et la largeur (ou hauteur)
('########N###########', 5
) en entrée.Essayez-le en ligne!
Ungolfed:
Sortie:
la source
chr
: Si le deuxième paramètre de strpos est un entier, il sera interprété comme un code ASCII. -> -5 octets. 2) Deux paramètres de fonction$s,$w
peuvent économiser 9 octets supplémentaires.05AB1E ,
9 à6 octetsSauvegardé 3 octets de commutation de format d'entrée.
L'entrée est considérée comme une chaîne et une longueur de ligne.
La sortie est une liste de formulaire de base zéro
[y, x]
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
.m
...m
auparavant, mais j'étais à peu près certaine de l'avoir déjà vue :)Python 3 + NumPy ,
75 à66 octets-9 octets grâce à @ ASCII uniquement
Essayez-le en ligne!
Cela suppose que l'entrée est un tableau NumPy. La sortie est indexée à zéro, d'abord verticale, puis horizontale.
Il convertit l'entrée de
char
en,int
puis calcule la médiane du tableau, qui sera le caractère de la botte de foin. Nous soustrayons cela du tableau, ce qui fait de l’aiguille le seul élément non nul. Finalement, retournez l'index de cet élément avecnumpy.where()
.la source
uint8
pour moins d’un octet?uint8
codes ASCII corrects . Je suppose que cela est dû au fait que Python3 utilise Unicode comme format d'entrée standard pour les chaînes.Gelée , 5 octets
Sorties [hauteur, largeur] (indexé 1).
Essayez-le en ligne!
Gelée , 5 octets
Essayez-le en ligne!
la source
Gelée , 4 octets
Peut-être que cela aurait pu être un commentaire pour M. Xcoder, c'est assez similaire ...
Un lien monadique acceptant la matrice de caractères qui produit une liste d'un élément, la coordonnée 1-indexée (ligne, colonne) en haut à gauche.
(... En tant que programme complet, avec un argument formaté de telle sorte que l'analyse donne une liste de listes de caractères - c'est-à-dire une liste de chaînes au format Python - la coordonnée unique est imprimée.)
Essayez-le en ligne!
Comment?
la source
EƇ
c'est intelligent.JavaScript (ES6), 55 octets
Essayez-le en ligne!
JavaScript (ES6),
6564 octetsEnregistré 1 octet grâce à @Neil
Essayez-le en ligne!
Comment?
la source
~y&1
enregistre un octet sury&1^1
.Java 8,
132111 octets-8 octets (et -13 plus implicitement) grâce à @dana .
Entrée en tant que matrice de caractères.
Essayez-le en ligne.
Explication:
la source
return
déclaration finale ne devrait jamais être touchée. Il y aurait peut-être un meilleur moyen de garder la boucle externe en marche?return"";
est inaccessible et peut également être supprimé. : D So -21 octets grâce à vous.unreachable code
erreur. Je ne savais pas que supprimer la finalereturn
était la solution.i--
et>
. :) Voir cette réponse SO pour plus d'informations. Donc, lei > 0
est exécuté en premier, en vérifiant sii
est supérieur à 0. Et puisi
est diminué de 1 aveci--
, avant qu'il ne pénètre dans le corps de la boucle.MATL ,
128 octetsEssayez-le en ligne!
Utiliser la
mode
fonction comme détecteur de majorité. Renvoie les index basés sur 1.-4 caractères grâce à @LuisMendo
la source
find
, même dans MATLAB. (Salut, au fait!)Wolfram Language
3758 octetsMon entrée précédente ne traitait pas correctement le cas où le "caractère impair" était dans le coin supérieur gauche de la matrice. Cela fait.
Counts@Flatten@#
combien de listes de chaque personnage sont dans le tableau,#
.TakeSmallest[...,1]
renvoie le nombre le moins fréquent, sous la forme d'une règle d'association telle que<| "Z"->1|>
Keys...[[1]]
renvoie la "clé" sur le seul élément de l'association, celui du personnage le moins utilisé. ("Z" en l'espèce)#~Position~...
Renvoie la position puis de la clé dans la matrice d' origine,#
.la source
Perl 5
-p00
,5245 octets45 octets
52 octets
Comment
-p00
: comme-n
mais aussi imprimer, mode paragraphe/^(.)(\1* )*(\1*)|^/
: correspond soit$1
: premier caractère$2
,: répétition (non utilisé)$3
,: caractères avant l'aiguille dans la ligne,$&
correspondance complète$_=
: pour assigner la variable d'entrée / argument par défaut$&=~y/ //
le nombre de nouvelles lignes de$&
.$".
: concaténer avec$"
(espace par défaut) et concaténerlength$3
: la longueur de$3
la source
R 42 octets
Essayez-le en ligne!
Entrée: une matrice de botte de foin
m
Sortie:
(row,col)
vecteur - index à partir de1
la source
f=
peut être omis du nombre d’octets, mais pas lefunction(m)=
.C # (compilateur interactif Visual C #) ,
109108107 octetsFirst () => Last () pour -1 octet
currying pour -1 octet grâce à Incarnation of Ignorance
Essayez-le en ligne!
la source
J , 22 octets
Essayez-le en ligne!
NB renvoie la réponse au format (rangée, colonne).
la source
Python 2 ,
5347 octetsEssayez-le en ligne!
Appeler en tant que
f("########N###########", 5)
(autorisé dans un commentaire ). Sorties(y, x)
.Erik a sauvegardé 6 octets, suggérant de réorganiser la sortie + using
divmod
. Merci!la source
divmod
intégrée .PowerShell ,
107988277 octetsEssayez-le en ligne!
Prend une chaîne éclaboussée avec LF. Renvoie l'emplacement indexé zéro x, y. Déroulé:
la source
Python 3 , 93 octets
Essayez-le en ligne!
L'entrée est considérée comme une chaîne multiligne. La sortie est indexée sur 0
la source
Octave , 40 octets
Réponse MATL du port de @ sundar . La sortie est un vecteur à deux éléments avec des index de colonne et de ligne basés sur 1.
Essayez-le en ligne!
la source
Retina 0.8.2 , 41 octets
Essayez-le en ligne! 0 indexé. Explication:
Permet de
.
faire correspondre les nouvelles lignes. Cela coûte 3 octets (le 3ème octet est le?
précédent¶
) mais enregistre 6 octets.Recherchez deux personnages identiques.
\1
devient alors le foin.Comptez le nombre de nouvelles lignes avant l'aiguille.
Capturez le foin à gauche de l'aiguille.
Assurez-vous que l'aiguille n'est pas du foin ou une nouvelle ligne.
Faites correspondre le reste du foin afin que le résultat le remplace.
Affiche la largeur du foin gauche et le nombre de nouvelles lignes.
la source
C # (compilateur interactif Visual C #) , 82 octets
Merci à Dana d'avoir réduit de 6 octets!
Essayez-le en ligne!
Ancienne solution, 106 octets
Les deux prennent une entrée sous forme de chaîne et un entier spécifiant le nombre de colonnes.
Essayez-le en ligne!
la source
Enumerable.Last()
accepté un délégué, merciJava 8, 104 octets
L'entrée est un tableau de caractères et un entier indiquant la largeur de la ligne.
La sortie est basée sur zéro, verticale puis horizontale (c'est-à-dire numéro de ligne puis numéro de colonne)
Explication:
la source
Python 3 ,
93898558 octetsRéécriture complète en prenant les entrées comme
concatenated string, width
:Essayez-le en ligne!
Réponse originale:
EDIT: sauvegardé 4 octets en échangeant des sauts de ligne / retrait pour des points-virgules. Sauvegardé 4 autres octets en utilisant
divmod
(merci @JonathanFrech).Essayez-le en ligne!
Je sais que cela pourrait être beaucoup plus court, mais je voulais juste essayer une approche autour de cette
dict
compréhension.la source
divmod
économiserait cinq octets.MATL , 11 octets
La sortie est rangée, puis colonne; Basé sur 1.
Essayez-le en ligne!
Explication
la source
Pyth,
151412 octetsPrend l'entrée en tant que longueur de la ligne et l'entrée sans lignes et les sorties en tant que [rangée, colonne].
Essayez-le ici
Explication
Ancienne approche
Essayez-le ici
Explication
la source
Charbon de bois , 40 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Je dois faire quelque chose de mal parce que c'est presque aussi long que la réponse de la rétine. Explication:
Vérifiez si le deuxième caractère de la première chaîne est également le premier caractère et prenez le premier caractère de la première chaîne si tel est le cas, le premier caractère de la deuxième chaîne sinon. C'est alors le foin.
Continuez à lire les chaînes jusqu'à ce qu'une chaîne dont le foin soit inférieur à sa longueur soit trouvée.
Affiche la position de l'élément incompatible, puis le nombre de chaînes lues précédemment.
la source
MATLAB,
6822 octets[r,c]=find(v~=v(1));if size(r,1)>1 disp([1,1]);else disp([r,c]);end;
Si je pouvais exclure un cas, comme[1,1]
dans cette solution, j'aurais pu économiser plusieurs octets.Solution mise à jour :
Merci à @sundar de m'avoir aidé avec le problème de cas particulier et d'économiser 42 octets! Merci également à @Luis_Mendo pour les suggestions et m'avoir sauvé 2 octets de plus!
la source
[1,1]
cas en utilisantmode(v(:))
au lieu dev(1)
.v
. En outre, vous pouvez probablement remplacer~=
par-
, et enlever la finale;
Röda , 81 octets
Essayez-le en ligne!
Prend l'entrée en tant que chaîne contenant des lignes terminées par une nouvelle ligne. Renvoie un flux contenant des index horizontaux et verticaux indexés sur 0.
la source