Geben Sie bei einem gegebenen Bild die [Breite in Pixel eines vollständigen vertikalen Abschnitts] 1 aus (falls vorhanden). Wenn kein vertikaler Schnitt vorhanden ist, wird ausgegeben 0
.
Die Eingabe kann als lokale Datei oder als verschachteltes Array erfolgen. Wenn Sie sich für die Eingabe als verschachteltes Array entscheiden, sollten weiße Pixel durch einen Wahrheitswert dargestellt werden, während nichtweiße Pixel durch einen Falsey-Wert dargestellt werden sollten.
1. Die Anzahl der zusammenhängenden weißen Spalten
Das können Sie annehmen
Kein Bild wird größer als 1000 quadratische Pixel sein
Es wird nicht mehr als einen vollständigen vertikalen Abschnitt pro Bild geben
Beispiele
Eingänge:
Ausgänge:
50
57
0
0
Hier sind die ersten beiden Beispiele, die (in Gelb) hervorgehoben sind, um ihre Abschnitte zu zeigen:
quelle
Antworten:
Gelee, 2 Bytes
Probieren Sie es hier aus!
Wenn ich ein Bild wie folgt kodiere:
In ein verschachteltes Array wie dieses:
Nimmt
P
dann das elementweise Produkt aller Zeilenvektoren undS
summiert alle im Ergebnis enthaltenen, wobei sich die Länge des vertikalen Schnitts ergibt. (Dies funktioniert nur, weil garantiert nur ein zusammenhängendes Segment vorhanden ist.) In unserem Fall lautet die Antwort3
.quelle
ps
funktioniert auch in MATL!1
s geben, was bedeutet, dass das Ergebnis von seinP
wird[0,0,0...0]
, von dem dasS
um0
wie erwartet ist.Xps
, wenn das Bild eine einzelne Zeile sein kann (oder fragen Sie das OP, ob es eine Mindestgröße gibt)APL, 4 Bytes
Try it here.
Dies ist meine erste APL-Antwort!
Vielen Dank an @ jimmy23013 und @NBZ für das Speichern von Bytes!
quelle
(+/×/⍉)
funktioniert nicht(+/×⌿)
und das ist 1 Byte kürzer.+/×⌿
f←+/×⌿
f picture
Bash + gemeinsame Dienstprogramme, 17
Wenn Sie nicht
grep
für die Bildverarbeitung verwenden , dann machen Sie es falsch ;-).Dies verwendet das
rs
Dienstprogramm, um die Transposition durchzuführen.rs
wird in OSX gebündelt , muss aber unter den meisten Linux-Betriebssystemen mit so etwas wie installiert werdensudo apt-get install rs
.Eingabespalten werden TABgetrennt und Zeilen werden durch Zeilenumbrüche getrennt:
Wenn Sie möchten, können Sie die Beispiel-Eingabebilder mit imagemagick und (GNU) sed in dieses Format vorverarbeiten. Z.B:
quelle
Perl,
2122 BytesFeste Version
Beinhaltet +2 für
-lp
(-l
kann weggelassen werden und wäre immer noch eine gültige Lösung, aber es ist hässlich ohne die letzte Zeile)Geben Sie Folgen von Einsen und Nullen in 0 oder mehr Zeilen in STDIN ein. Sie können Leerzeichen oder Kommas oder was auch immer zwischen den Ziffern hinzufügen, wenn Sie möchten, solange die Verwendung in allen Zeilen konsistent ist.
Dies funktioniert wie gezeigt, wird jedoch
\xce
durch den Literal-Byte-Wert ersetzt, um die beanspruchte Punktzahl zu erhaltenWenn mehrere vertikale Abschnitte vorhanden sind, wird die Summe aller Abschnittsbreiten zurückgegeben. Wenn Sie die Breite eines vertikalen Abschnitts verwenden möchten
Alte Version
Ursprünglich habe ich die Herausforderung missverstanden und ein Programm implementiert, das basierend darauf, ob überhaupt eine vertikale Linie existiert, wahr oder falsch ergibt. Code und Erklärung hier beziehen sich auf diese alte Version
Wenn ich für fast perfekte Symmetrie nur 1 = ~ links addieren könnte ... Ich nehme an, das nächste wäre
Erläuterung
quelle
Python 2, 30 Bytes
Es gibt eine überraschend elegante Lösung, bei der viele meiner bevorzugten integrierten Funktionen miteinander verkettet sind.
Verwenden des Testbilds von @Lynn:
quelle
Pyth, 5
Probieren Sie es hier aus
Dies verwendet Lynns Algorithmus, aber ich habe mich dazu entschlossen, ihn zu veröffentlichen, um zu zeigen, wie man Vektoroperationen in Pyth spielt. Der Trick dabei ist, die "Zucker" -Syntaxhelfer zu verketten
V
undF
die Falte als Vektoroperation anzuwenden. Der Operator, der gefoldet wird, ist natürlich Multiplikation, und dann wird das Ergebnis summiert, um die endgültige Antwort zu erhalten.quelle
JavaScript (ES6),
544543 ByteBasierend auf @ Lynns Jelly Antwort, obwohl golfed da durch die Verwendung
every
odersome
stattreduce
. Die erste Version codiert Schwarz = 0, während die zweite Schwarz = 1 codiert.Edit: 2 weitere Bytes dank @ edc65 gespeichert.
quelle
map
J ,
56 BytesNimmt die Boolesche Matrix als Argument.
Dies ist meine erste Antwort! (war 1½ Jahre falsch…)
*/
kolonnenweises Produkt+/
Summe[:
cap (dient als Platzhalter, da+/
kein linkes Argument verwendet werden sollte)Probieren Sie es online!
quelle
CJam, 7 Bytes
Probieren Sie es online!
quelle
Mathematica 24
Nimmt ein Array in der folgenden Form an:
Und in diesem Fall gibt Folgendes aus:
quelle
Length[Total@#~Cases~0]&
aber die gleiche Anzahl von Bytes𝔼𝕊𝕄𝕚𝕟, 7 Zeichen / 9 Bytes
Try it here (Firefox only).
Das ist @Lynns großartiger Algorithmus, aber ich habe ihn unabhängig gefunden. (Ich dachte, es gibt irgendwo eine eingebaute Funktion, die immer noch sucht: P)
Erläuterung
МƟï
transponiert das Eingangsarray,ⓜ⨴$
wandelt jeden inneren Vektor in sein Produkt um und⨭
summiert das resultierende Array.quelle
Japt ,
64 BytesNimmt Eingaben als Array von Zeilen auf,
1
wobei weiß und0
Schwarz angezeigt werden.Probier es aus
Erläuterung
quelle
y x_×
für 5 tun . Eigentliche
funktioniert so gut×
, soy xe
für 4 :-)