Dies ist mein Haustier Emoji, Billy:
-_-
Emojis mögen es nicht, im Regen zu sein, also ist Billy traurig ... Lassen Sie uns ihm einen Regenschirm ziehen, damit er sich besser fühlt!
/\
/ \
/ \
-_-
Das ist gut, er ist vollständig von seinem Regenschirm bedeckt! Hier ist ein Beispiel, in dem nur ein Teil von ihm behandelt wird:
/\
/ \
/ \
-_-
In diesem Fall sind die Abschnitte 2 und 3 seines Körpers dem Regen ausgesetzt.
Regenschirme gibt es in vielen Formen und Größen, aber sie bestehen immer aus einer Reihe von aufsteigenden Schrägstrichen, /
gefolgt von einer Reihe von absteigenden Schrägstrichen \
. Dies sind zum Beispiel alle gültigen Regenschirme:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
Und das sind nicht:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Sie müssen feststellen, welche Teile meines Emoji dem Regen ausgesetzt sind.
Klarstellungen
Ihr Programm (oder Ihre Funktion) nimmt einen 2D-String als Eingabe. Dies kann in jedem Format geschehen, das für Ihre Sprache am bequemsten oder am natürlichsten ist. Ein Array von Zeichenfolgen, ein Array von Zeichenfolgen, eine Zeichenfolge mit Zeilenumbrüchen usw.
Sie müssen ausgeben, welche Bereiche des Emoji dem Regen ausgesetzt sind. Dies kann nullindexiert oder einindexiert sein, solange Sie dies klarstellen. Die Ausgabe kann in jedem vernünftigen Format erfolgen. Wenn das gesamte Emoji vor Regen geschützt ist, geben Sie nichts (oder ein leeres Array) aus.
Sie können davon ausgehen , dass alle Eingänge einen gültigen Schirm haben, und die gleiche emoji:
-_-
. Das Emoji befindet sich immer in der letzten Zeile der Eingabe, es kann sich jedoch auch um mehrere leere Zeilen zwischen dem Umbrella und dem Emoji handeln.Alles, was nicht Teil des Regenschirms oder des Emojis ist, wird ein Leerzeichen
oder eine Newline sein.
Die Eingabe wird mit Leerzeichen aufgefüllt, sodass die Länge jeder Zeile gleich ist.
Es gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!
Test IO:
In allen Beispielfällen wird eine Indizierung verwendet.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Antworten:
05AB1E ,
181715 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! ( Stellen Sie sicher, dass alle Zeilen mit Leerzeichen auf die gleiche Länge aufgefüllt sind.)
quelle
JavaScript (ES6), 95 Byte
Die Eingabe sollte aus einer Reihe von Zeichenfolgen bestehen, wobei jede Zeile mit Leerzeichen aufgefüllt wird, um ein Quadrat zu bilden. Die Ausgabe ist ein Array von 1-indizierten Zahlen.
Erläuterung
quelle
JavaScript (ES6), 92 Byte
Akzeptiert ein uneinheitliches Zeilenarray und gibt ein 1-indiziertes Ergebnis zurück. Erläuterung:
quelle
Java 8 Lambda,
241218201191185184 (oder 161) ZeichenWeil du weißt, braucht auch Java trockene Emojis.
Es gibt
eine ArrayList undeinen HashSet a Stack zurück, der die Teile des Emoji enthält, die dem Regen ausgesetzt sind (die Indizierung beginnt bei 0). Das Ganze ausgepackt:Aktualisierung
Ich habe ein bisschen Golf gespielt. Dies beinhaltet das Zusammenstellen der Deklarationen, den Vergleich mit den ASCII-Werten, um einige Zeichen zu speichern und die Schleifen zu verkürzen.
Vielen Dank an @ user902383 für den Hinweis auf meinen Speicherauszugsfehler bei der Verwendung von ArrayLists anstelle von nur Listen. Ich habe die ArrayLists / Lists durch HashSets / Sets ersetzt, wodurch mehr Zeichen eingespart werden. Vielen Dank auch für seinen Tipp, eine foreach-Schleife in der inneren Schleife zu verwenden! Durch diese Änderung kann ich eine Variable für den Index der letzten Rasterzeile erstellen, die ihn etwas kürzer macht. Insgesamt wurden 17 Zeichen gespeichert!
@ KevinCruijssen schlug vor, die Generika in der Initialisierung zu entfernen, ich ging einen Schritt weiter: Entfernen Sie alle Generika. Dadurch werden weitere 10 Zeichen gespeichert.
Ich bin von der foreach-Schleife zur for-Schleife zurückgeschaltet. Dadurch kann der Vergleich der letzten Zeile übersprungen werden, wodurch der Vergleich der ASCII-Werte verkürzt werden kann. In diesem Zusammenhang haben nur '/', '\' und '_' einen ASCII-Wert über 46. Wenn wir die letzte Zeile nicht überprüfen, können wir
> 46 check
stattdessen mit a nach dem tatsächlichen Wert suchen.Nochmals vielen Dank an @ user902383, der mir gezeigt hat, dass ich ein Lambda verwende und List + Stack anstelle von Set + HashSet verwenden kann, um ein anderes Zeichen zu rasieren.
String-Rückgabeversion
@ user902383 wies darauf hin, dass ich stattdessen einfach einen String mit den Ziffern erstellen kann. Das klingt sehr betrügerisch, aber andere scheinen es auf diese Weise zu lösen. Hier ist eine kürzere Version mit einem String-Return:
Ungolfed:
quelle
always program to an interface
List
ArrayList
=new HashSet<>();
kann aber höchstwahrscheinlich golfen werden=new HashSet();
.<>
2 Bytes gespart. :)Set(3)
HashSet(7)
gegenList
(4) undStack
(5).V ,
20 bis19 Bytes (nicht konkurrierend)Alternative, konkurrierende Version (21 Bytes):
Probieren Sie es online! (Bitte beachten Sie, dass tryitonline.net eine etwas ältere Version von V verwendet. Um dies auszugleichen, wird diese etwas längere Version verwendet.)
Erläuterung:
Dies alleine ergibt das korrekte Ergebnis in 17 Bytes. Es werden jedoch auch zusätzliche Leerzeichen erzeugt. Es macht mir nichts aus, aber ich möchte mir keinen unfairen Vorteil verschaffen, also füge ich zwei Bytes hinzu:
quelle
JavaScript (ES6),
117112 ByteNimmt eine ragged Array von
ZeichenkettenArrays von Zeichen und kehrt 0-indizierte Ergebnisse.Demo
quelle
Netzhaut , 56 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Dies ist eine einzelne Substitutionsstufe, in der die Regex mit einem der Emoji-Zeichen übereinstimmt, vorausgesetzt, es gibt ein nicht-Leerzeichen (dh ein
/
oder\
) irgendwo darüber in derselben horizontalen Position, und dann erfassen wir die Anzahl der Emoji-Zeichen bis zu dieser Punkt. Dieses Match wird durch die Länge des letzten Captures ersetzt, wodurch wir den Index dieses ungeschützten Emoji-Charakters erhalten. Der reguläre Ausdruck enthält auch ein|\D
, um mit allem anderen übereinzustimmen, das durch gar nichts ersetzt wird. Daher entfernen wir alle anderen Zeichen.quelle
/
oder\
bin ich aus dieser Gruppe knallen wieder , während das Zeug passende vorhergehenden dass , und dann stellen Sie sicher , habe ich völlig die Gruppe erschöpft. Dies stellt im Wesentlichen sicher, dass die horizontale Position des Emoji und der Dachcharakter übereinstimmen.Pyth,
2723 Bytes0-indiziert.
Probieren Sie es online!
Erläuterung
Geschichte
27 Bytes:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Online ausprobieren! )quelle
Matlab, 43 Bytes
Dieser Code findet die Spaltenpositionen von Nicht-Leerzeichen in der letzten Zeile der Eingabe, summiert die Anzahl der Nicht-Leerzeichen in diesen Spalten und findet, wo es nur ein solches Zeichen gibt (das Emoji- Zeichen, das nicht durch einen Regenschirm geschützt ist!). . Dieser Code liefert nur korrekte Ergebnisse für wohlgeformte Regenschirme (er setzt voraus, dass jedes Zeichen über unserem Emoji Teil eines wohlgeformten Regenschirms ist).
Hier ist ein wenig Dienstprogrammcode zum Schreiben von Testfällen und Überprüfen meiner Arbeit:
Laufen
x = thrht(7)
gibtOder
x = twht(0)
gibtquelle
APL, 31 Bytes
Dies nimmt eine Zeichenmatrix als Eingabe.
Tests:
Erläuterung:
'-_-'⍷⍵
: Markieren Sie in einer Nullmatrix die Position des Anfangs von'-_-'
in der Eingabe mit einer 1.+\+\
: Laufende Summe über Zeilen. Der erste macht0 0 0 1 0 0 ...
in0 0 0 1 1 1 ...
, der zweite macht es dann in0 0 0 1 2 3 ...
.⍵∊'/\'
: Markiere alle Vorkommen von '/' und '\' in der Eingabe mit 1s.∨⌿
:or
über Spalten. Dies markiert mit einer 1 alle Positionen in der letzten Reihe, die vom Regenschirm abgedeckt werden.~
:not
, weil wir das Gegenteil brauchen(
...)/
...: Wählen Sie alle nicht abgedeckten Spalten aus der laufenden Summenmatrix aus,
: Eine Liste aller Werte in der resultierenden Matrix erhalten.(⍳3)∩
: Schnittmenge zwischen diesem und1 2 3
(dabei werden alle ausgewählten Nullen oder höheren Werte entfernt, die Leerzeichen wären).quelle
Python 2,
114111 BytesVerwendet eine 0-basierte Indizierung.
Probieren Sie es hier aus .
quelle