Julia, 90 Zeichen
s->all(cumsum(map(i->i∈"!|.\":"?-1:i∈"()_@\$&",mapfoldl(collect,hcat,split(s,"
")))').>-1)
Im Gegensatz zur ursprünglichen Lösung (unten) wird hierfür die Lösung mithilfe der Mathematik bestimmt. mapfoldl(collect,hcat,split(s,"\n"))(oben geschrieben \ndurch durch eine neue Zeile ersetzt, um Zeichen zu speichern) konvertiert die Zeichenfolge in ein 2D-Array von Zeichen. map(i->i∈"!|.\":"?-1:i∈"()_@\$&",...)Erstellt ein Array von Zahlen, mit 1, wenn das Zeichen eine Wolke ist, -1, wenn das Zeichen Regen ist, und 0, wenn dies nicht der Fall ist.
cumsum(...')berechnet die kumulierten Summen der Zeilen (wird normalerweise geschrieben cumsum(...,2), aber da uns die Orientierung von diesem Punkt an egal ist, kostet das Transponieren nur ein Zeichen) und all(... .>-1)prüft dann auf eine negative Zahl - Negative treten nur auf, wenn ein Regenzeichen vorliegt wird angezeigt, ohne dass ein Wolkenzeichen vorangestellt ist.
Julia, 139 136 Zeichen
s->(t=join(mapfoldl(i->split(i,""),.*,split(s,"
")),"
");while t!=(t=replace(t,r"[()_@$&](.*?)[!|.\":]",s"\g<1>"))end;∩("!|.\":",t)==[])
Diese Funktion transponiert zuerst den Text, sodass Zeilen zu Spalten werden und umgekehrt. Beachten Sie, dass Zeilenumbrüche im Code in Form von tatsächlichen Zeilenumbrüchen vorhanden sind, um ein Zeichen pro Instanz zu speichern.
Die Funktion ersetzt dann iterativ Wolken / Tröpfchen-Paare durch Leerzeichen. Sobald alle diese Paare entfernt wurden, gibt sie true zurück, wenn noch Tröpfchen übrig sind, andernfalls false.
r"[()_@$&](.*?)[!|.\":]"- Dies ist eine Regex, die Wolken / Tröpfchen-Paare auf träge Weise zusammenbringt, wobei Gruppe 1 alles zwischen Wolke und Tröpfchen enthält. Dann s"\g<1>"wird es angewiesen, die übereinstimmende Wolke und die Tröpfchen zu entfernen, aber das Material dazwischen zu belassen (notwendig, da es möglicherweise Wolken enthält) - das \g<1>ist alles, was in Gruppe 1 der Regex abgeglichen wurde. ∩("!|.\":",t)==[]generiert den Schnittpunkt der Tröpfchenzeichen mit der letzten Zeichenfolge. Wenn diese leer ist, ist keines der Tröpfchenzeichen vorhanden und es regnet.