Diese Herausforderung wurde von der Werbung dieser Wendy aus dem Jahr 1984 inspiriert .
Illustration von TS Rogers
Ihre Aufgabe ist es, ein hexadezimales 0xBEEF auf einem binären Brötchen zu finden.
Das Rindfleisch besteht aus folgendem Muster:
1 0 1 1 (0xB)
1 1 1 0 (0xE)
1 1 1 0 (0xE)
1 1 1 1 (0xF)
Und das 'Brötchen' besteht aus einer 12x12-Binärmatrix, wie zum Beispiel:
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
Eingang
Ihr Programm oder Ihre Funktion nimmt die binäre Matrix als Eingabe. Das Matrixformat ist sehr flexibel, muss aber in Ihrer Antwort klar beschrieben werden.
Zum Beispiel:
eine einzelne Binärzeichenfolge mit oder ohne Trennzeichen zwischen den Zeilen:
"111001111110 110100100000..."
oder:
"111001111110110100100000..."
ein Array von binären Strings:
["111001111110", "110100100000", ...]
ein Array von Zahlen (jede Zahl beschreibt eine Zeile, die einmal in binäre Zahlen umgewandelt und mit Nullen aufgefüllt wurde):
[3710, 3360, ...]
Ausgabe
Die Koordinaten (X, Y)
des 'Rindfleisches', (0, 0)
wobei es sich um die obere linke Ecke des Brötchens handelt.
Alternativ können Sie 1-basierte Koordinaten verwenden (jedoch keine Mischung aus beiden Formaten, z. B. 0-basierte für X und 1-basierte für Y).
Für das obige Beispiel lautet die erwartete Antwort (3, 4)
(0-basiert) oder (4, 5)
(1-basiert):
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
Auch hier würde jedes vernünftige Format funktionieren, solange es in Ihrer Antwort angegeben ist. Bitte erwähnen Sie auch, ob Sie 0-basierte oder 1-basierte Koordinaten verwenden.
Regeln
- Sie können davon ausgehen, dass sich immer genau ein Rindfleisch auf dem Brötchen befindet. Ihr Code ist nicht erforderlich, um Fälle mit mehr als einem Rindfleisch oder gar keinem Rindfleisch zu unterstützen.
- Das Rindfleischmuster wird immer wie beschrieben angezeigt. Es wird niemals gedreht oder gespiegelt.
- Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind verboten.
Testfälle
In den folgenden Testfällen wird jede Zeile der Matrix als ihre Dezimaldarstellung ausgedrückt.
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
(dh umgekehrte Reihenfolge)?Antworten:
Jelly ,
201716 BytesDie Eingabe erfolgt in Form einer Booleschen Matrix, die Ausgabe erfolgt als 1-basiertes Indexpaar (Y, X) .
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
ṡ4Z€Ḅw€“Ье‘ĖUṀ
ṡ€4ḄZjw“¿ÇÇБ’d24
0-basierte Indizierung, die jedoch leider ein Byte länger ist.vim,
126807776Erwartet Eingaben in das Formular
Und Ausgänge (mit 1-basierten Indizes) als
Vielen Dank an Jörg Hülsermann für die indirekte Einsparung von 46 Bytes, indem er mir klar machte, dass mein Regex super doof war, und an DJMcMayhem für 3 weitere Bytes.
quelle
Yp
ist besser alsyyp
(obwohl ich weiß, dass Sie dagegen sindY
: P) 2) das Leerzeichen inexec 'norm Go'
ist unnötig. Und 3)kd{
ist kürzer alskdgg
. (Hab das aber nicht getestet)Y
weil ich es in meinem vimrc zurückprallen lasse. : P Tatsächlich war daskdgg
gleichbedeutend mit justd{
, was die aktuelle Zeile überraschenderweise nicht löscht.{
eine Charakterbewegung herausstellen; also muss ich sowas{d''
stattdessen machen um ganze zeilen zu löschen.JavaScript (ES6),
636056 BytesNimmt die Eingabe als durch Leerzeichen getrennte 155-stellige Zeichenfolge von 12 12-stelligen Binärzeichenfolgen an und gibt mit Nullen indizierte Werte zurück. Edit: 3 Bytes gespeichert dank @ JörgHülsermann. 4 Bytes gespart dank @ETHproductions.
quelle
s.search(r)
anstelle von verwendenr.exec(s).index
?s=>[
zu(s,i)=>[
, weil Sie mich brauchen irgendwo zu definieren: /C
146177173163 BytesDanke an Numberknot für das Fixieren des Codes (Verschieben der unteren drei Zeilen).
Speichern von 4 Bytes durch Ersetzen
>>=1
durch/=2
an 4 Stellen. Speicher 10 mehr Bytes , indem siex
undy
global sein und Standardint
dank MD XFUngolfed:
Gibt x, y (0-basiert) im High- und Low-Halbbyte eines Bytes zurück.
Verwendungszweck:
quelle
#define T(i,n)if((A[y+i]&15)==n)
und den if-Abschnitt in ändernT(0,11)T(1,14)T(2,14)T(3,15)return
, um 6 Bytes zu sparen. Ändern Sie auch die Funktionssignaturint b(int*A)
in weitere 4 Bytes, die gespeichert werden.MATL ,
2221 BytesDie Eingabe ist eine binäre Matrix mit einem
;
Zeilentrennzeichen. Die Ausgabe wird mit Basis 1 in umgekehrter Reihenfolge:Y X
.Probieren Sie es online! Oder überprüfen Sie alle Testfälle mit dezimalem Eingabeformat.
Erläuterung
Das Muster wird unter Verwendung einer 2D-Faltung erfasst. Dafür,
1, -1
statt1, 0
. Da das Muster die Größe 4 × 4 hat, wird sein Auftreten durch einen Eintrag gleich16
der Faltungsausgabe erfasst .Da die Faltung einen Versatz in die erfassten Indizes einführt, muss dies in der Ausgabe korrigiert werden.
quelle
Mathematica, 62 Bytes
Gibt alle Positionen der BEEF-Matrix 1-indiziert zurück. Die Eingabe muss eine Matrix aus Binärziffern sein. Die x und y in der Ausgabe werden jedoch umgeschaltet.
quelle
x
undy
geschaltet zu werden.Unterhose , 28 Bytes
27 Byte Code, +1 für
p
Option.Erfordert die Eingabe als mehrzeiliges Rechteck aus Einsen und Nullen ohne Leerzeichen. Probieren Sie es hier aus (mit drittem Testfall als Eingabe).
Erläuterung
Slip ist eine Sprache aus dem 2-D Pattern Matching . Sp3000 könnte viel mehr darüber sagen als ich, aber im Grunde ist es eine erweiterte Form von Regex mit einigen Richtungsbefehlen, mit denen Sie in zwei Dimensionen übereinstimmen können. Der obige Code verwendet den gleichnamigen "Slip" -Befehl
\
, der die Richtung des Übereinstimmungszeigers nicht ändert, sondern ihn seitwärts um ein Zeichen verschiebt. Es wird auch "stationäre Gruppe" verwendet(?|...)
, die mit etwas übereinstimmt und dann den Zeiger auf seine vorherige Position zurücksetzt.Der Code setzt sich wie folgt zusammen:
Das passt zum
0xBEEF
Quadrat. Diep
Option gibt die Koordinaten der Übereinstimmung 0-indiziert aus.quelle
1011>001>1(11>){3}1>1
1(11>){3}
.PHP, 87 Bytes
Binärzeichenfolge als Eingabe ohne Trennzeichen, gibt mit Null indizierte Werte zurück.
Array von Zahlen als Eingabe 128 Bytes
14 Bytes von @Titus gespeichert Vielen Dank
quelle
,
statt.
imecho
und können Sie die Klammern entfernen. (-4)PREG_OFFSET_CAPTURE
:,256
an diepreg_match
Parameter anhängen ,^(.*)
aus der Regex entfernen ,$c[0][1]
stattstrlen($c[1])
(-6)Java 7,
182177 BytesIch portiert Karl Napf C Antwort auf JAVA Und Dank Karl Napf für 5 Byte Speichern von mir erinnert Bit Magie. (Btw ich auch mit dieser Idee kam aber @KarlNapf Teil Idee Rückkehr war Ihr nicht meine) .Sorry wenn ich Ihnen mißfallen.
(0-basiert)
Ungolfed
quelle
a[y++]>>=1)
undif((a[y]&15)==
. Übrigens zähle ich 182 Bytes statt 183? : S...a[y++]/=2)
und trotzdem entfernenif((a[y]&15)==...
.Netzhaut, 47 Bytes
Ich möchte dies mit einer Entschuldigung voranstellen. Ich denke, das ist wahrscheinlich schrecklich und ein schlechtes Beispiel für die Verwendung der Sprache, aber da ich für meine Perl-Antwort einen Regex verwendet habe, dachte ich, ich würde es mit Retina versuchen. Ich bin nicht sehr gut. :( Die Schnipsel auf Github haben mir sehr geholfen!
Vielen Dank an @ wullzx für seinen Kommentar zu meiner Perl-Antwort für -3 Bytes und an @ Taemyr für den Hinweis auf ein Problem mit meiner Methode!
Erwartet die Eingabe als durch Leerzeichen getrennte Binärzeichenfolge und gibt durch Leerzeichen getrennte Koordinaten aus.
Probieren Sie es online!
Überprüfen Sie alle Tests auf einmal.
quelle
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.
? Sie kann jedoch bei Bedarf mit ungrauten Modifikatoren aufgelöst werden(.{12})*?(.)*?
.Scala, 90 Bytes
Erläuterung:
(a -> b) andThen (b -> c)
Das Ergebnis ist eine(a -> c)
Funktion, die der Umkehrung des Komponierens ähnelt, jedoch weniger Typanmerkungen in Scala erfordert. In diesem Fall wird eine Zeichenfolge der Binärziffern als Eingabe verwendet und ein Tupel von auf Null basierenden Indizes zurückgegeben.quelle
J
3129 BytesDie Eingabe ist als 2d-Array von Binärwerten formatiert, und die Ausgabe sind die auf Null basierenden Koordinaten als Array
[y, x]
.Aus diesem Kommentar habe ich gelernt, wie der Index abgeflacht und umgerechnet wird von Dennis .
Verwendungszweck
Erläuterung
quelle
Python 2,
989592 BytesEingabe ist eine Liste von Zeichenfolgen, Ausgabe ist die Zeichenfolge XY (1-basierte Indizes).
Teste es auf Ideone .
quelle
Perl, 54 Bytes
53 Byte Code + 1 für
-n
. Verwendet-E
ohne zusätzliche Kosten.Verwendet 0-basierte Indizes. Erwartet die Eingabe als Zeichenfolge von
1
s und0
s und gibt durch Leerzeichen getrennte Koordinaten aus.Vielen Dank an @ wullxz und @ GabrielBenamy, die mir beim Sparen von 9 Bytes geholfen haben, und an @ Taemyrs Kommentar zu meiner Retina-Antwort für den Hinweis auf ein Problem!
Verwendungszweck
quelle
(.{8}1110){2}
.{8}1110.{8}1110
length$`
auf$-[0]
\1
, hatte aber kein Glück, habe nicht daran gedacht, es zu versuchen{2}
! Vielen Dank!$-[0]
ist der Versatz des Starts der letzten erfolgreichen Übereinstimmung. Ist der Versatz des Starts der$-[n]
Teilzeichenfolge, auf die das n-te Teilmuster zutrifft, oderundef
wenn das Teilmuster nicht zutrifft." von: perldoc.perl.org/perlvar.html (suchen Sie nach@-
)Scala, 318 Bytes
Diese Lösung könnte weiter verbessert werden ... aber ich habe sie lesbar gehalten und zugelassen, dass die Eingabe die Matrix mit mehreren Zeilenabständen ist.
Tatsächliche Lösung, wenn Array der Binärzeichenfolge
Beispielarbeit
quelle
Python, 137 Bytes (laut Linux (danke ElPedro))
Nicht gerade ein konkurrenzfähiger Bytecount, aber der Algorithmus ist ein bisschen interessant. Übernimmt die Eingabe als eine Folge von Binärwerten.
quelle
Ruby , 62 Bytes
Es erwartet eine Zeichenfolge von
0
und1
und gibt ein Array von Y und X auf der Basis von Null zurück.Versuche es bei ideone .
quelle
F # - 260 Bytes
Vollständiges Programm, einschließlich des erforderlichen EntryPoint-Bezeichners (ich nehme an, zählen Sie weniger, wenn Sie dies wünschen).
Eingabe: jede Zeile als separate Zeichenfolge: 111001111110 110100100000 010001111101 100100100100 100101100111 111111000010 110111000001 100111100001 10011101111111 1100
Code:
Wahrscheinlich nicht die eleganteste Lösung, aber ich wollte bei Streichern bleiben, also habe ich es so gemacht. Ich hätte es beinahe zu einer einzelnen Linie und zu einer kleineren mit Pipes gemacht, aber es gibt etwas mit dem double if Block, das mich dazu brachte, dass ich es nicht auflösen konnte. Also gut!
Ich habe auch darüber nachgedacht, Karls Antwort in F # zu portieren, da es eine gute Antwort ist, und das vielleicht noch zum Spaß als eine andere Herangehensweise, aber ich wollte bei dieser bleiben, um anders zu sein.
quelle
Dyalog APL,
2927 BytesNimmt ein 12x12-Binärarray als Benutzereingabe und gibt die Koordinaten in umgekehrter Reihenfolge zurück, die Indizes beginnen bei 1.
Vielen Dank an @ Adám für das Speichern vieler Bytes. -2 Bytes, weil ich dumm bin und alles grundlos in einer Funktion belassen habe.
quelle
~2 8 12∊⍨4 4⍴⍳16
mit15 7 15 9⊤⍨4/2
. Beachten Sie, dass0~⍨∊{⍵×⍳⍴⍵}
dies durch⍸
Version 16.0 ersetzt werden kann (Ihr Code funktioniert nur in Dyalog APL).⍸
seit Version 16 konnte ich keine Liste von GNUAPL-Grundelementen finden.Element , 130 Bytes
Probieren Sie es online!
Nimmt die Eingabe als eine lange Zeichenfolge mit 1 und 0 ohne Begrenzer. Ausgaben wie
3 4
(0-basierte Indizierung).Dies funktioniert, indem die Eingabedaten in ein "Array" (im Grunde genommen ein Wörterbuch mit ganzzahligen Schlüsseln) gestellt werden und dann für jeden möglichen Startwert die Bits an bestimmten Offsets getestet werden (alle 16 in einem sehr mühsamen Prozess).
quelle