Geben Sie bei einer 2D-Zeichenfolge als Eingabe, entweder als Zeichenfolge mit Zeilenumbrüchen oder als Liste mit Zeilen, die Koordinaten (x, y)
aller Hashes ( #
) in der Liste aus. Die Eingabe enthält nur Hashes und Leerzeichen. (und Zeilenumbrüche, wenn Sie Eingaben als 2D-Zeichenfolge übernehmen möchten)
Wenn keine Hashes vorhanden sind, können Sie alles ausgeben.
Die Ausgabe sollte eindeutig sein, welche Nummern mit welchen gepaart werden.
Beispiel:
##
Sollte ausgeben:
(0,0), (1,0)
Dies setzt eine 0-basierte Indizierung voraus, beginnend von links oben. Sie können an jeder Ecke beginnen, die 0- oder 1-basierte Indizierung verwenden und / oder y
zuerst ausgeben . (zB im Formular y,x
).
Weitere Testfälle (wiederum alle mit 0-basierter (x, y)
Indizierung oben links ):
#
#####
#
(4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2)
# ###
### #
(0, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (4, 1)
Beachten Sie, dass diese Testfälle alle zeilenweise aufgelistet sind und nicht dem Pfad folgen.
Sie können davon ausgehen, dass die Hashes einen kontinuierlichen Pfad bilden, dh # #
niemals die Eingabe sein werden. (Wahrscheinlich spielt es keine Rolle, aber für den Fall, dass jemand dies regulieren möchte)
Sie können die Koordinaten auch in beliebiger Reihenfolge ausgeben, z. B. vertikale Spalten, horizontale Zeilen oder nur eine unsortierte Liste.
Antworten:
Beleg , 2 + 1 = 3 Bytes
+1 Byte für das
p
Flag. Code:Erläuterung:
Das
p
-Flag gibt die Position jedes Vorkommens von Folgendem zurück:Probieren Sie es hier aus!
quelle
Schmutz , 5 Bytes
Probieren Sie es online! Das Ausgabeformat ist ein bisschen funky, aber OP hat angegeben, dass es gültig ist.
Erläuterung
Schmutz ist meine 2D-Pattern-Matching-Sprache. Der folgende Teil
`
ist das Muster , in diesem Fall ein 1 × 1-Quadrat, das ein#
-Zeichen enthält. Grime durchsucht das Eingaberaster nach einer Übereinstimmung und druckt das erste, das es standardmäßig findet. Der`
vorherige Teil enthält Optionen. In diesem Fall bedeutet dies, dass alle Übereinstimmungen (a
) mit ihren Positionen und Größen (p
) gedruckt werden sollen .quelle
MATL ,
7 65 BytesHierbei wird die 1-basierte Indizierung mit
(1,1)
in der oberen linken Ecke verwendet.Erläuterung:
Vielen Dank an @DJMcMayhem und @LuisMendo für jedes -1 Byte!
Probieren Sie es online!
quelle
ooH#fh
, um ein Byte zu speichern. (konvertiere in ganze Zahlen, mod2) Da der Raum gerade ist (mod 2 == 0, falsy) und#
ungerade ist (mod 1 == 1, truthy)Python , 67 Bytes
Dies ist eigentlich nur ein Golf meiner Stack Overflow-Antwort zu einem ähnlichen Thema.
Probieren Sie es online!
Die Schleife durchläuft die 2D-Liste, zeichnet die Hash-Zeichen auf und gibt das Ergebnis zurück. Wir sparen ein Byte, indem wir
char > '!'
anstatt verwendenchar == '#'
, da die Eingabe nur aus Hashes und Leerzeichen besteht und daher Hashes (0x23
) die einzigen Zeichen sind, die größer als Ausrufezeichen (0x21
) sind.quelle
JavaScript (ES6),
70 bis67 ByteGibt eine durch Zeilenumbrüche und Leerzeichen getrennte Liste von Koordinaten aus, z
Sie können mit einem seltsamen Ausgabeformat viel kürzer werden:
Dies gibt aus
für den zweiten Testfall. Es ist immer noch klar, welche Nummern mit welchen gepaart sind ...
quelle
J , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Gegeben ein 2D-Array von Zeichen (= eine Liste von Zeichenfolgen):
quelle
Dyalog APL 16.0, 5 Zeichen = 9 Byte oder 6 Zeichen = 8 Byte
Gibt eine Liste von (y, x) Paaren von oben links.
⍸
woher⎕
Eingang=
gleich'#'
dieser Charakter** Es ist möglich, ein Zeichen zum Preis von einem Byte zu speichern, indem Sie es
'#'
durch⍕#
(Formatieren des Stammnamensraums) ersetzen.TryAPL online! Beachten Sie, dass
⍸
mit emuliert wurde,i
da TryAPL Version 14.0 ausführt.quelle
⍸
nicht in der Einzelbyte- Version enthalten. Siehe den Link "Bytes".JavaScript (Firefox 30-57), 61 Byte
Gibt 1-basierte Koordinaten zurück. Leicht umschaltbar zwischen
[y, x]
und[x, y]
Bestellung. Ungolfed:quelle
Vim, 37 Bytes
Da V überwiegend abwärtskompatibel ist, können Sie es online ausprobieren!
Eine einfache Regex-Lösung, bei der jedes '#' durch die Position ersetzt wird, an der es gefunden wurde (einseitige Indizierung). Ich war ein bisschen besorgt, als ich dies schrieb, dass sich die Position nach dem Ersetzen der ersten Zeile in einer Zeile ändern würde, aber das scheint kein Problem zu sein. TBH Ich bin angenehm schockiert, wie einfach diese Lösung letztendlich war.
Leider ist Vimscript sehr ausführlich, daher stammen die meisten Bytes aus der Trennung der Ergebnisse, sodass sie noch lesbar sind. Ansonsten könnten wir tun
Dies erzeugt jedoch eine Ausgabe, die ziemlich schwer zu interpretieren ist. Außerdem funktioniert es nur, wenn das Raster immer 9x9 oder kleiner ist.
Dies ist eine wirklich unterhaltsame Lösung, da jedes Koordinatenpaar an der Position des Hashs angezeigt wird, den es darstellt. Zum Beispiel die Eingabe
Ausgänge
Wenn wir V verwenden würden, könnten wir natürlich die abschließende Newline entfernen und den regulären Ausdruck komprimieren. Dann könnte es einfach sein
(32 Bytes)
Aber da dies genau derselbe Ansatz ist und immer noch schmerzhaft wortreich, scheint es sich nicht zu lohnen, eine Golfsprache zu verwenden.
quelle
Haskell, 53 Bytes
Die Eingabe wird als Liste von Zeichenfolgen verwendet. Die Ausgabe ist eine Liste von
(x,y)
Paaren (0 indiziert), zquelle
Lua, 141 Bytes
Es ist halb drei, ich bin im Bett und telefoniere. Warum mache ich das?
quelle
Mathematica, 12 Bytes
Betreiberformular von
Position
. Nimmt ein 2D-Array von Zeichen an. 1-indiziert ab dem linken oberen Eintrag. Gibt eine Liste der Koordinaten im Formular aus{row,column}
.quelle
char[]
wie man Strings in C-basierten Sprachen speichert. In dieser Aufgabenbeschreibung wird auch ausdrücklich "entweder als Zeichenfolge mit Zeilenumbrüchen oder als Liste von Zeilen" erwähnt, und es werden keine Liste-von-Listen-von-Zeichen oder 2D-Matrix von Zeichen erwähnt.PHP, 69 Bytes
Verwendet 1-basierte Indizierung, beginnend von links oben.
Verwenden Sie wie:
Wird ausgeben:
quelle
C 113 Bytes
Ausgaben von Testfällen:
Probieren Sie es online!
quelle
RBX.Lua, 131 Bytes
Es muss davon ausgegangen werden, dass die Eingabe gültig ist (Z ist die flache Achse, Leerzeichen sind
White
Kacheln, Hashes können jede andere Farbe haben, der linke obere Teil befindet sich bei0, 0, 0
) und alle Teile sind Teil desselben ModellsM
, und das Modell ist ansonsten leer.Beispiel Input / Output:
quelle
Perl 6 , 25 Bytes (22 Zeichen)
Nimmt die Eingabe als eine Liste von Zeilen.
Gibt eine Liste pro Zeile aus, die jeweils (y, x) Tupel für die Koordinaten enthält.
Probieren Sie es online!
Wie es funktioniert
quelle
Groovy,
8068 BytesBeispiel Eingabe:
Beispielausgabe:
quelle
Rubin , 24 + 1 = 25 Bytes
+1 Byte für
-n
Flag. Koordinaten sind 1-basiert, eine Zahl pro Zeile.Probieren Sie es online!
quelle
C 80 Bytes
Erfordert die Eingabe als durch Zeilenumbrüche getrenntes Zeichen-Array und druckt die Ausgabe auf dem Bildschirm.
Ungolfed & Nutzung:
quelle
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}