Ce défi a été inspiré par la publicité de cette Wendy's de 1984.
Illustration de TS Rogers
Votre tâche consiste à trouver un 0xBEEF hexadécimal sur un bun binaire.
Le «boeuf» se compose du modèle suivant:
1 0 1 1 (0xB)
1 1 1 0 (0xE)
1 1 1 0 (0xE)
1 1 1 1 (0xF)
Et le «chignon» consiste en une matrice binaire 12x12, telle que:
1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1
Contribution
Votre programme ou fonction prendra la matrice binaire en entrée. Le format de la matrice est très flexible, mais il doit être clairement décrit dans votre réponse.
Par exemple:
une seule chaîne binaire, avec ou sans séparateurs entre les lignes:
"111001111110 110100100000..."
ou:
"111001111110110100100000..."
un tableau de chaînes binaires:
["111001111110", "110100100000", ...]
un tableau de nombres (chaque nombre décrivant une ligne une fois reconvertie en binaire et complétée à gauche avec des zéros):
[3710, 3360, ...]
Sortie
Les coordonnées (X, Y)
du "boeuf", (0, 0)
étant le coin supérieur gauche du chignon.
Sinon, vous pouvez utiliser des coordonnées basées sur 1 (mais pas une combinaison des deux formats, comme 0 pour X et 1 pour Y).
Pour l'exemple ci-dessus, la réponse attendue est (3, 4)
(basée sur 0) ou (4, 5)
(basée sur 1):
00 01 02 03 04 05 06 07 08 09 10 11
00 1 1 1 0 0 1 1 1 1 1 1 0
01 1 1 0 1 0 0 1 0 0 0 0 0
02 0 1 0 0 0 1 1 1 1 1 0 1
03 1 0 0 1 0 0 1 0 0 1 0 0
04 1 0 0 [1 0 1 1] 0 0 1 1 1
05 1 1 1 [1 1 1 0] 0 0 0 1 0
06 1 1 0 [1 1 1 0] 0 0 0 0 1
07 1 0 0 [1 1 1 1] 0 0 0 0 1
08 1 0 0 1 1 1 0 1 1 1 1 1
09 1 1 1 1 1 0 0 1 1 1 1 1
10 1 0 0 0 0 1 0 1 0 1 1 1
11 1 1 0 0 1 1 0 0 0 0 1 1
Encore une fois, tout format raisonnable fonctionnerait aussi longtemps que cela est spécifié dans votre réponse. Veuillez également indiquer si vous utilisez des coordonnées basées sur 0 ou sur 1.
Règles
- Vous pouvez supposer en toute sécurité qu'il y a toujours exactement un "boeuf" sur le pain. Votre code n'est pas requis pour prendre en charge les cas comportant plus d'un boeuf ou aucun boeuf.
- Le motif bœuf apparaîtra toujours comme décrit. Il ne sera jamais tourné ou reflété de quelque manière que ce soit.
- C'est du code-golf, donc la réponse la plus courte en octets est gagnante. Les échappatoires standard sont interdites.
Cas de test
Dans les cas de test suivants, chaque ligne de la matrice est exprimée sous forme de représentation décimale.
Input : [ 3710, 3360, 1149, 2340, 2407, 4034, 3521, 2529, 2527, 3999, 2135, 3267 ]
Output: [ 3, 4 ]
Input : [ 1222, 3107, 1508, 3997, 1906, 379, 2874, 2926, 1480, 1487, 3565, 633 ]
Output: [ 3, 7 ]
Input : [ 2796, 206, 148, 763, 429, 1274, 2170, 2495, 42, 1646, 363, 1145 ]
Output: [ 6, 4 ]
Input : [ 3486, 3502, 1882, 1886, 2003, 1442, 2383, 2808, 1416, 1923, 2613, 519 ]
Output: [ 1, 1 ]
Input : [ 3661, 2382, 2208, 1583, 1865, 3969, 2864, 3074, 475, 2382, 1838, 127 ]
Output: [ 8, 8 ]
Input : [ 361, 1275, 3304, 2878, 3733, 3833, 3971, 3405, 2886, 448, 3101, 22 ]
Output: [ 0, 3 ]
Input : [ 3674, 2852, 1571, 3582, 1402, 3331, 1741, 2678, 2076, 2685, 734, 261 ]
Output: [ 7, 7 ]
(1,1)
)?y
,x
(c.-à-d. Ordre inverse)?Réponses:
Jelly ,
201716 octetsL'entrée est sous la forme d'une matrice booléenne, la sortie est la paire d'index de base 1 (Y, X) .
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça fonctionne
la source
ṡ4Z€Ḅw€“Ье‘ĖUṀ
ṡ€4ḄZjw“¿ÇÇБ’d24
indexation basée sur 0, mais malheureusement, il s'agit d'un octet de plus.vim,
126807776Attend l'entrée dans le formulaire
Et les sorties (avec des indices basés sur 1) comme
Merci à Jörg Hülsermann pour avoir sauvé indirectement 46 octets en me faisant réaliser que ma regex était super bête, et à DJMcMayhem pour 3 octets supplémentaires.
la source
Yp
est meilleur queyyp
(même si je sais que vous vous opposez àY
: P) 2) les espaces blancsexec 'norm Go'
sont inutiles. Et 3)kd{
est plus court quekdgg
. (Je n'ai pas encore testé cela)Y
parce que je le fais rebondir dans mon vimrc. : P En fait, lekdgg
était équivalent à justd{
, ce qui, de manière surprenante, ne supprime pas la ligne actuelle.{
se révèlent être un mouvement de personnage; donc j'ai fait quelque chose comme{d''
au lieu de supprimer des lignes entières.JavaScript (ES6),
636056 octetsPrend l'entrée en tant que chaîne de 12 chaînes binaires de 12 chiffres délimitée par des espaces de 155 caractères, renvoie des valeurs indexées à zéro. Edit: 3 octets sauvegardés grâce à @ JörgHülsermann. Sauvegardé 4 octets grâce à @ETHproductions.
la source
s.search(r)
au lieu der.exec(s).index
?s=>[
de mode(s,i)=>[
, car vous devez définir i quelque part: /C,
146177173163 octetsMerci à Numberknot d’ avoir corrigé le code (décalage des trois lignes inférieures).
Enregistrement de 4 octets en les remplaçant
>>=1
par/=2
4 endroits. Enregistrer 10 octets supplémentaires en laissantx
ety
être global et par défautint
grâce à MD XFUngolfed:
Renvoie x, y (base 0) dans le quartet haut et bas d'un octet.
Usage:
la source
#define T(i,n)if((A[y+i]&15)==n)
et la section if afinT(0,11)T(1,14)T(2,14)T(3,15)return
de sauvegarder 6 octets. Modifiez également la signature de la fonctionint b(int*A)
sur 4 octets supplémentaires enregistrés.MATL ,
2221 octetsL'entrée est une matrice binaire, avec
;
comme séparateur de lignes. La sortie est 1-basé dans l' ordre inverse:Y X
.Essayez-le en ligne! Ou vérifiez tous les tests avec le format d’entrée décimal.
Explication
Le motif est détecté par convolution 2D. Pour ça,
1, -1
au lieu de1, 0
. Comme le motif a une taille de 4 × 4, son occurrence est détectée par une entrée égale à16
dans la sortie de convolution.De plus, comme la convolution introduit un décalage dans les index détectés, il doit être corrigé dans la sortie.
la source
Mathematica, 62 octets
Renvoie toutes les positions de la matrice BEEF, indexé 1. L'entrée doit être une matrice de chiffres binaires. Les x et y dans la sortie sont commutés, cependant.
la source
x
et d'y
être échangé.Slip , 28 octets
27 octets de code, +1 pour l'
p
option.Requiert une entrée sous forme de rectangle multiligne composé de 1 et de 0 sans espaces. Essayez-le ici (avec un troisième test en entrée).
Explication
Le glissement est une langue du défi de correspondance de modèles 2D . Sp3000 pourrait en dire beaucoup plus que moi, mais il s’agit en fait d’une forme étendue de regex avec des commandes directionnelles qui vous permettent d’être identiques dans deux dimensions. Le code ci-dessus utilise la commande éponyme "slip"
\
, qui ne modifie pas la direction du pointeur de correspondance mais le déplace latéralement d'un caractère. Il utilise également "groupe stationnaire"(?|...)
, qui correspond à quelque chose, puis réinitialise le pointeur à son emplacement précédent.Le code se décompose comme suit:
Cela correspond à la
0xBEEF
place. L'p
option affiche les coordonnées du match, indexées par 0.la source
1011>001>1(11>){3}1>1
1(11>){3}
.PHP, 87 octets
chaîne binaire en entrée sans séparateurs, renvoie des valeurs indexées à zéro.
tableau de nombres en entrée 128 octets
14 octets enregistrés par @Titus Merci
la source
,
plutôt que.
dansecho
et vous pouvez supprimer les parenthèses. (-4)PREG_OFFSET_CAPTURE
: ajouter,256
auxpreg_match
paramètres, retirer^(.*)
de l'expression rationnelle$c[0][1]
au lieu destrlen($c[1])
(-6)Java 7,
182177 octetsJ'ai porté la réponse de Karl Napf C à JAVA Et merci à Karl Napf d' avoir sauvé 5 octets en me rappelant Bit Magic. (Au fait, j'ai aussi eu cette idée, mais @KarlNapf, l'idée de la pièce n'était pas la mienne). Désolé si je vous ai déplu.
(Basé sur 0)
Ungolfed
la source
a[y++]>>=1)
etif((a[y]&15)==
. Btw, je compte 182 octets au lieu de 183? : S...a[y++]/=2)
etif((a[y]&15)==...
.Retina, 47 octets
Je voudrais commencer par des excuses. Je pense que c'est probablement terrible et un mauvais exemple d'utilisation de la langue, mais comme j'ai utilisé un regex pour ma réponse en Perl, j'ai pensé essayer Retina. Je ne suis pas très bon. :( Les extraits sur github m'a beaucoup aidé!
Merci à @ wullzx pour son commentaire sur ma réponse Perl pour -3 octets et à @ Taemyr pour avoir signalé un problème avec ma méthode!
Attend l'entrée sous forme de chaîne binaire séparée par des espaces et génère des coordonnées séparées par des espaces.
Essayez-le en ligne!
Vérifiez tous les tests à la fois.
la source
You can safely assume that there is always exactly one 'beef' on the bun. Your code is not required to support cases with more than one beef or no beef at all.
? Il peut être résolu avec des modificateurs ungreedy si nécessaire(.{12})*?(.)*?
.Scala, 90 octets
Explication:
(a -> b) andThen (b -> c)
résulte en une(a -> c)
fonction, c'est comme l'inverse de compose, mais nécessite moins d'annotations de type dans scala. Dans ce cas, il prend une chaîne de chiffres binaires en entrée et renvoie un tuple d'index de base zéro.la source
J,
3129 octetsL'entrée est formatée sous la forme d'un tableau 2D de valeurs binaires et la sortie correspond aux coordonnées de base zéro sous la forme d'un tableau
[y, x]
.L’aplatissement et la conversion de base pour trouver l’index sont quelque chose que j’ai appris de ce commentaire de Dennis.
Usage
Explication
la source
Python 2,
989592 octetsL'entrée est une liste de chaînes, la sortie est la chaîne XY (index basés sur 1).
Testez-le sur Ideone .
la source
Perl, 54 octets
Code 53 octets + 1 pour
-n
. Utilisations-E
sans frais supplémentaires.Utilise des indices basés sur 0. Attend l'entrée sous la forme d'une chaîne de
1
s et0
s et génère des coordonnées séparées par des espaces.Merci à @ wullxz et @ GabrielBenamy de m'avoir aidé à économiser 9 octets et au commentaire de Taemyr sur ma réponse de Retina pour avoir signalé un problème!
Usage
la source
(.{8}1110){2}
au lieu de.{8}1110.{8}1110
length$`
en$-[0]
\1
mais je n'ai pas eu de chance, je n'ai pas pensé à essayer{2}
! Merci!$-[0]
est l'offset du début de la dernière correspondance.$-[n]
Est l'offset du début de la sous-chaîne correspondant au nième sous-motif ouundef
si le sous-motif ne correspond pas." à: perldoc.perl.org/perlvar.html (cherchez@-
)Scala, 318 octets
Cette solution pourrait être encore améliorée ... mais je la gardais lisible et permettais à l'entrée d'être la matrice à lignes multiples.
Solution actuelle si tableau de chaînes binaires
Échantillon de travail
la source
Python, 137 octets (selon Linux (merci ElPedro))
Pas exactement un décompte concurrentiel, mais l'algorithme est un peu intéressant. Prend l'entrée comme une chaîne de valeurs binaires.
la source
Ruby , 62 octets
Il attend une chaîne de
0
et1
et retourne un tableau de Y et X, basé sur zéro.Essayez chez ideone .
la source
F # - 260 octets
Programme complet, y compris l'indicatif EntryPoint requis (comptez donc moins si vous le souhaitez, je suppose).
Entrée: chaque ligne en tant que chaîne distincte: "111001111110" "110100100000" "010001111101" "100100100100" "100101100111" "111111000010" "110111000001" "100111100001" "100111111111" "11111111111111"
Code:
Ce n’est probablement pas la solution la plus élégante, mais je voulais rester avec des chaînes, c’est donc comme cela que je l’ai fait. Je pensais presque que c'était une simple ligne et plus petite avec des tuyaux, mais il y a quelque chose avec le double si bloc qui m'arrivait que je ne pouvais pas résoudre. Alors oh bien!
J'ai aussi pensé à porter la réponse de Karl dans fa #, car c'est une bonne réponse, et je peux toujours le faire pour le plaisir, mais je voulais rester avec celle-ci pour être différente.
la source
Dyalog APL,
29 à27 octetsPrend un tableau binaire 12x12 comme entrée utilisateur et renvoie les coordonnées dans l'ordre inverse, les index commencent à 1.
Merci à @ Adám pour la sauvegarde de nombreux octets. -2 octets parce que je suis idiot et tout laissé dans une fonction sans raison.
la source
~2 8 12∊⍨4 4⍴⍳16
par15 7 15 9⊤⍨4/2
. Notez que cette version0~⍨∊{⍵×⍳⍴⍵}
peut être remplacée à⍸
partir de la version 16.0 (votre code ne fonctionne que dans Dyalog APL).⍸
étant ajouté à partir de la version 16, je n’ai pas trouvé de liste de primitives GNUAPL.Elément , 130 octets
Essayez-le en ligne!
Prend les entrées comme une longue chaîne de 1 et de 0 sans aucun délimiteur. Des sorties telles que
3 4
(indexation basée sur 0).Cela fonctionne en plaçant les données d'entrée dans un "tableau" (essentiellement un dictionnaire avec des clés entières) puis, pour chaque valeur de départ possible, teste les bits à des décalages particuliers (les 16 d'entre eux dans un processus très laborieux).
la source