Ordnen Sie die Koordinaten ihren Werten zu


10

Bei 3 Eingabeelementen, einer Liste von Koordinatenpaaren, einer 2D-Zeichenfolge und einer Einzelzeichenfolge wird ausgegeben, ob das Zeichen an jeder Koordinate der 2D-Zeichenfolge dem Einzelzeichen entspricht. Sie können die Eingabe in beliebiger Reihenfolge vornehmen und die Koordinaten können 1-indiziert sein.

Sie können die 2D-Zeichenfolge als 2D-Liste, Linienliste oder 2D-Zeichenfolge verwenden.

Beispiel: (0,0), "#_\n__", "#" -> True

Die Zeichenfolge ist

#_
__

Das Zeichen an der Koordinate (0,0)(von oben links) ist #. Dies entspricht dem dritten Eingabeelement #, sodass Sie True(oder einen beliebigen wahrheitsgemäßen Wert) ausgeben.

Beispiel: [(0,0), (1,1)], "#_\n_#", "#" -> True

Die Zeichenfolge ist

#_
_#

Die Zeichen an den Koordinaten von (0,0)und (1,1)sind beide #, daher ist die Ausgabe wahr.

Die Ausgabe ist nur wahr, wenn jede Koordinate mit einem Hash übereinstimmt. Nicht jeder Hash muss jedoch eine passende Koordinate haben. Wenn das einzelne Zeichen ( #in einigen Testfällen) in der 2D-Zeichenfolge nicht vorkommt, ist die Ausgabe immer noch nur falsch.

Sie können davon ausgehen, dass die Koordinaten immer innerhalb der Grenzen der 2D-Zeichenfolge liegen.

Weitere Testfälle: (Ich habe das einzelne Zeichen zur besseren Lesbarkeit an zweiter Stelle gesetzt.)

[(0,0), (2,1), (3,0)], #

#_##
#_##

True


[(0,0), (1,1), (3,0)], #

#_##
#_##

False (1,1 is not a hash)



[(1,1)], a

#a##
#a##

True


[(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)], ' '


 ####
 #   
   # 

True

Beachten Sie, dass im letzten Testfall Leerzeichen als einzelne Zeichenfolge verwendet werden und die Leerzeichen mit Hashes versehen werden.

Verbunden. (Umkehrung dieser Herausforderung)


Können wir annehmen, dass die Eingabe ein 2D-Array ist, anstatt "\ n" zu verwenden?
Rahnema1

@ rahnema1 kein 2D-Array, sondern ein Array / eine Liste von Zeilen ja.
Rɪᴋᴇʀ

@ EastlyIrk Ich glaube, dies fällt in die Kategorie umständliche E / A-Formate
JungHwan Min

In Ihrem ersten Beispiel liegen die Koordinaten im Format vor (row, column) , im letzten Beispiel jedoch im Format (column, row).
Rahnema1

1
Können die Koordinaten 1-indiziert werden?
user41805

Antworten:


1

Dyalog APL , 8 Bytes

Fordert zur Liste der Koordinatenpaare (Zeile, Spalte), dann zum 2D-Array und dann zum Zeichen auf.

∧/⎕=⎕[⎕]

[⎕] Geben Sie die Koordinaten ein und verwenden Sie sie, um die Auswahl zu streuen

Eingabeaufforderung (2D-Array)

= Vergleichen Sie die ausgewählten Elemente mit

Eingabe (das Zeichen)

∧/ Überprüfen Sie, ob alle zutreffen (UND-Reduzierung).

Testfälle ( ⎕IO←0um Beispiele zu finden, dies ist jedoch nicht erforderlich):

Erstes Beispiel

Zweites Beispiel

Drittes Beispiel

Viertes Beispiel

Fünftes Beispiel


6

Python, 39 Bytes

Nimmt die Eingaben:

  1. aListe der (x, y)ganzzahligen Koordinaten
  2. b Liste der Zeichenfolgen
  3. c einzelne Zeichenfolge

lambda a,b,c:{b[y][x]for x,y in a}=={c}

2
Auf dieser Site müssen Sie Ihre Funktionen nicht benennen. Sie können die entfernen f=. Willkommen bei PPCG!
Rɪᴋᴇʀ

Willkommen bei PPCG, schöne erste Antwort!
FlipTack

4

JavaScript (ES6), 37 Byte

Nimmt die Eingaben:

  1. aArray von [x, y]Ganzzahlkoordinaten
  2. s Array von Zeichenfolgen
  3. c einzelne Zeichenfolge

(a,s,c)=>a.every(([x,y])=>s[y][x]==c)

4

Oktave, 45 38 29 Bytes

@(A,B,C)A(1+B*[rows(A);1])==C

Eine Funktion, die ein 2D-Array von Zeichen als Aund Koordinaten (0-basiert) Bals zweispaltige Matrix von [col row]und das übereinstimmende Zeichen als verwendet C. Die beiden Elementkoordinaten (unter Verwendung der Matrixmultiplikation) werden in einen linearen Index konvertiert.

Hinweis: Die vorherige Antwort, bei der eine spärliche Matrix verwendet wurde, war falsch.

Andere Mitwirkende:

Stewie Griffin für das Speichern von 5 Bytes unter Hinweis darauf, dass [0 1 0] als falscher Wert angesehen werden kann !!

Luis Mendo für das Speichern von 2 Bytes ~0 == trueund die Benachrichtigung über eine spärliche Matrix.

Probieren Sie es online aus


2
Schön :) Sie können alldrei Bytes überspringen und speichern. 1 1 1ist wahr und 1 0 1ist in Octave falsch, also sollte es in Ordnung sein. :)
Stewie Griffin

1
Toller Ansatz! Mir gefällt, wie dies die Tatsache ausnutzt, dass logische Indizes nicht die gleiche Größe wie das indizierte Array haben müssen
Luis Mendo

1
Neben Stewie Vorschlag, können Sie ersetzen truedurch ~0zu speichern 2 Bytes
Luis Mendo

@ StewieGriffin Danke, es ist wirklich in Ordnung :)
Rahnema1

@ LuisMendo Guter Punkt
rahnema1

3

Mathematica, 28 Bytes

#3~Extract~#~MatchQ~{#2...}&

1-indiziert. Aufgrund der Struktur von Arrays in Mathematica müssen die Eingabekoordinaten umgekehrt werden (dh (row, column))

Verwendungszweck

#3~Extract~#~MatchQ~{#2...}&[{{1, 1}, {2, 3}, {1, 4}}, "#", {{"#", "_", "#", "#"}, {"#", "_", "#", "#"}}]

True


2

Haskell, 27 Bytes

s!c=all(\(x,y)->s!!y!!x==c)

Anwendungsbeispiel: ( ["#_##","#_##"] ! '#' ) [(0,0), (2,1), (3,0)]-> True.


2

Gelee , 10 Bytes

ịṪ⁸ịḢð€Q⁼⁵

Dies funktioniert nur als vollständiges Programm. Die Eingabereihenfolge ist Indizes, String-Array, Singleton-String.

Probieren Sie es online aus!

Wie es funktioniert

ịṪ⁸ịḢð€Q⁼⁵  Main link.
            Left argument:  P (array of coordinate pairs)
            Right argument: S (array of strings)
            Third argument: C (singleton string)

     ð€     Combine the links to the left into a dyadic chain and call it with each
            p = (x, y) in P as left argument and S as the right one.
ị             Unindex; retrieve the strings of S at indices x and y.
 Ṫ            Tail; yield s, the string of S at index y.
  ⁸ị          Unindex; retrieve the characters of s at indices x and y.
    Ḣ         Head; yield the character of s at index x.
       Q    Unique; deduplicate the resulting string/array of characters.
        ⁼⁵  Compare the result with the third argument.

2

Perl 6 , 41 40 Bytes

->\c,\h,\n{all map {n eq h[.[0];.[1]]},c}

->$_,\h,\n{all .map:{n eq h[.[0];.[1]]}}

Erwartet die 2D-Zeichenfolge als 2D-Liste.

Danke an b2gills für -1 Byte.


Wenn Sie $_stattdessen \cverwenden .map:{…}, können Sie ein Byte speichern
Brad Gilbert b2gills

@ BradGilbertb2gills: Oh, ich wusste nicht, dass der Platz in optional ist .map: {…}. Das ist nützlich zu wissen. Es ist auch eine Schande, dass das Präfix ||noch nicht implementiert ist, es könnte das innere Lambda einfach machen n eq h[||$_]...
smls

2

C #, 80 77 Bytes

Dank pinkfloydx33 wurden 3 Bytes gespeichert

a=>b=>c=>{foreach(var i in a){if(b[i[0]][i[1]]!=c){return 1<0;}}return 1>0;};

a sind die Koordinatenpaare, b ist die Liste der Linien und c ist die Einzelzeichenfolge.


Sie können ersetzen falsemit 1<0und truemit 1>0und sparen 3 Bytes.
Pinkfloydx33

1

Haskell, 72 63 Bytes

c [] _ _ =1<2;c ((f,s):t) m n |n/=lines m!!s!!f=1>2|1>0=c t m n

Eingabe von c [(0,0), (1,0), (3,0)] "#_##\n#_##" '#' Ausgaben False

Eingang c [(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)] " \n ####\n # \n # " ' '

Ausgabe True

UnGolfed

checkfunc :: [(Int,Int)] -> String -> Char -> Bool
checkfunc [] _ _ = True
checkfunc (x:xs) string char | char /= ((lines string)!!(snd x))!!(fst x)= False  -- Checks first coordinates and returns False if no match
                             | otherwise = checkfunc xs string char --Otherwise iterate over remaining coordinate pairs

Es ist noch unnötiges Leerzeichen übrig:c[]_ _=1<2;c((f,s):t)m n|n/=lines m!!s!!f=1>2|1>0=c t m n
Laikoni

Auch wenn Sie eine boolesche Logik ausführen, kann die implizite Bedingung if n/=lines m!!s!!f then False else c t m ndurch ersetzt werden n/=lines m!!s!!f&&c t m n.
Laikoni

Schließlich können Sie, wie im OP angegeben, die Liste You may take the 2D string as a 2D list, a list of lines, or a 2D string.löschen linesund direkt eine Liste mit Zeilen als Eingabe verwenden.
Laikoni

1

Scala, 68 Bytes

def f(l:(Int,Int)*)(s:String*)(c:Char)=l forall{x=>s(x._2)(x._1)==c}

1

Clojure, 39 Bytes

#(apply = %3(map(fn[[x y]]((%2 y)x))%))

Beispiel (Zeichenfolgeneingabe ist ein vec von vec von Zeichen):

(def f #(apply = %3(map(fn[[x y]]((%2 y)x))%)))
(f [[0 0] [1 1] [3 0]] (mapv vec ["#_##" "#_##"]) \#)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.