Ich höre immer wieder, dass es sich lohnt, über den Tellerrand hinaus zu denken, aber wie kann ich feststellen, ob ich es erfolgreich mache?
Um dieses Dilemma zu lösen, habe ich bereits einen Brainwave-to-ASCII- Übersetzer geschrieben, der theoretisch Ausgaben wie erzeugen sollte
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
oder
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
was es ziemlich einfach macht zu sagen, ob man über den Tellerrand hinaus denkt oder nicht. (Sie #
sind nicht Teil der Ausgabe und stellen neue Zeilen dar.)
Aufgrund eines Fehlers wird jedoch manchmal nur ein kleinerer Teil der Ausgabe zurückgegeben:
| | #
+---------+ #
thinking #
#
+#
|#
inking |#
#
#
Die Aufgabe
Bitte helfen Sie mir, die Brainwave-zu-ASCII- Übersetzer-Ausgabe automatisch zu klassifizieren, indem Sie ein Programm oder eine Funktion schreiben, die eine ASCII- Repräsentation liest und zurückgibt, ob sie thinking
sich in der Box befindet, sich außerhalb davon befindet oder nicht von der Eingabe unterscheiden konnte.
Eingang
Eine Reihe von Zeichenfolgen gleicher Länge, die entweder als Liste oder durch Zeilenumbrüche begrenzt sind
- die Zeichenfolge
thinking
oder gültige Vor- oder Nachsetzzeichen davon - die Zeichen,
+-|
die ein rechteckiges Kästchen oder gültige Teile davon bilden - Leerzeichen
- NEIN
#
, diese sind nur in der Abfrage enthalten, um die Enden der Eingabezeilen zu markieren.
Ausgabe
- Ein wahrer Wert, wenn er
thinking
außerhalb des Rahmens liegt - ein falscher Wert, wenn
thinking
in der Box ist - ein deutlicher dritte vielleicht Wert , wenn sie nicht von dem Eingang bestimmt werden können , ob
thinking
in der Box oder nicht
Beispiele
Wahrheit:
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
| | #
+---------+ #
thinking #
#
+#
|#
|#
inking |#
thinking #
-------+ #
++ # (thinking is not in the box, so it must be outside)
++ # (this is also the smallest possible box)
+ #
t#
+----+# (The box is not wide enough to contain "thinking")
---# (The box is not high enough to contain "thinking")
---#
Als Stringeingabe:
" \n +------+ \n | | thinking \n | | \n | | \n +------+ \n "
" | | \n +---------+ \n thinking "
" \n +\n |\n |\ninking |"
"thinking \n-------+ "
" ++ \n ++ "
"+ \n t"
"+----+"
"---\n---"
"g++"
"k\n+"
Falsch:
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
+---------------#
| #
| #
| thinking #
| #
king | #
------+ #
+---#
|thi#
+---#
-#
n#
-#
Als Stringeingabe:
" \n +------------+ \n | thinking | \n | | \n +------------+ \n "
" +---------------\n | \n | \n | thinking "
" | \nking | \n------+ "
"+---\n|thi\n+---"
"-\nn\n-"
Vielleicht:
thinking#
g|#
think#
-----#
| |# (box large enough to possibly contain the string)
| |#
+--#
| #
# (empty input)
Als Stringeingabe:
"thinking"
"g|"
"|t"
"-\ni"
"h\n-"
"think\n-----"
"| |\n| |"
" +--\n | "
""
Regeln
- Das ist Code-Golf , also versuchen Sie, so wenig Bytes wie möglich zu verwenden.
- Der Wert für " Vielleicht" kann frei gewählt werden, solange er sich vom Wert für "Wahr" / "Falsch" unterscheidet und für alle "Vielleicht" -Eingaben gleich ist. Es kann auch ein Fehler sein.
- Sie können davon ausgehen, dass die Eingabe immer gültig ist (z. B. enthält keine anderen Zeichen als
+-ghiknt|
, nicht mehr als ein Kästchen, ...).
quelle
+\n+
Box zu klein für ein WortAntworten:
Javascript (ES6),
274263 BytesDie Funktion
f
gibttrue
,false
oder-1
als "Vielleicht" -Wert zurück. Es sollte mit einem Argument aufgerufen werden: der Eingabe. Die anderen beiden Parameter dienen nur zur Kürzung des Codes.Hier ist eine weniger golfene Version mit Kommentaren:
Hatte viel Spaß mit diesem. Vielen Dank!
Bearbeiten: 6 Bytes gespeichert dank @L. Serné durch Ändern
b
, um ein Standardargument zu verwenden, Sparen von 3 Bytes und Ändern , um 3 weitere Bytes[a-z]
zu\w
sparen. Außerdem wurden 5 weitere Bytes gespart, indem die Wortersetzung als nicht global definiert, 1 Byte gespart und"a"
zu5
und","
zu4
geändert wurde, wodurch 4 Bytes gespart wurden.quelle
console.log(f("input"))
. Scheint zu funktionieren. Toller Job beim Golfen.b=(b,c)
aufb=(b,c="")
, und dann kannst du das letzte Argument der beiden Aufrufe aufb
mit einer leeren Zeichenfolge als zweites Argument entfernen und insgesamt 3 Bytes (2 * 3-3 =) sparen. Sie können auch das Wort "Regex" von "[a-z]+
bis" kürzen\w+
(dies tun, bevor das andere Wort ersetzt wird, da dies auch mit den Ziffern übereinstimmt) und so 3 weitere Bytes einsparen.Python 2.7,
532494453 BytesDieser hatte sicher viele Sonderfälle. Meine wahren und falschen Werte sind die Zeichenfolgen "True" und "False". Mein "Vielleicht" -Wert ist ein Indexfehler, da er leicht auszulösen ist und einer meiner Testfälle ihn auslöst, wenn die Eingabe eine leere Zeichenfolge ist, was ohnehin ein "Vielleicht" -Fall ist. Ich habe ziemlich viel mit regulären Ausdrücken gearbeitet.
Ich spiele nicht oft in Python, daher bin ich sicher, dass ich hier mehr Golf spielen kann, aber hier ist mein Code:
In meiner Golfversion zeige ich die Richtig / Falsch-Antwort an, indem ich anrufe
exit(bool as string)
. Hier ist eine kommentierte Version, in der die exit-Anweisungen durch return-Anweisungen ersetzt werden und alles in eine Funktion verschoben wurde:Meine Lösung geht davon aus, dass die Eingabe gültig ist, dh "Denken" (oder seine Teilzeichenfolgen) sind richtig geschrieben, es gibt nur ein einziges Kästchen usw.
Bearbeiten: 10 Bytes gespart dank des Vorschlags von @ ais523,
c
aufi.count('+')
, 3 Bytes dank des Vorschlags von @ Pavel,True
durch1<2
undFalse
mit zu ersetzen2>1
, 23 Bytes durch Entfernen eines nicht benötigten else-Blocks und 2 Bytes durch Entfernen einiger Leerzeichen.Edit 2: 36 Bytes gespart dank @Wheat Wizard, der freundlicherweise darauf hinwies, dass meine "Tabs" tatsächlich 5 Leerzeichen (D'oh!) Enthielten und einige andere Verbesserungen vorschlug.
quelle
i
ändert sich nie, oder? Sie könnten also wahrscheinlich ein paar Bytes einsparen, indem Siei.count('+')
inc
anstatt speicherni.count
, da Sie es nie mit einem anderen Argument aufrufen+
.Befunge, 535 Bytes
Das ist nicht schön und kann mit den vorhandenen Antworten nicht mithalten, aber es ist das Beste, was ich in Befunge erreichen konnte.
Gibt
1
wenn Denken außerhalb der Box,0
wenn in der Box zu denken, und-1
für vielleicht .Probieren Sie es online!
quelle