Ciągle słyszę, że nieszablonowe myślenie jest celem, który warto osiągnąć, ale skąd mam wiedzieć, czy mi się to udaje?
Aby rozwiązać ten dylemat, napisałem już tłumacz Brainwave-to-ASCII -translator, który teoretycznie powinien dawać wyniki takie jak
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
lub
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
co sprawia, że dość łatwo jest stwierdzić, czy ktoś myśli nieszablonowo, czy nie. (Nie #
są częścią wyniku i reprezentują nowe wiersze.)
Jednak z powodu błędu czasami zwracana jest tylko mniejsza część wyniku:
| | #
+---------+ #
thinking #
#
+#
|#
inking |#
#
#
Zadanie
Proszę, pomóż mi automatycznie sklasyfikować wyjście Brainwave-to-ASCII -translator, pisząc program lub funkcję, która czyta ascii-representation i zwraca, czy thinking
jest w pudełku, poza nim, czy nie może tego stwierdzić na podstawie danych wejściowych.
Wejście
Zestaw ciągów o tej samej długości albo jako listę, albo ograniczony znakami nowej linii zawierającymi
- ciąg
thinking
lub jego poprawne przedrostki lub sufiksy - znaki
+-|
tworzące prostokątne pudełko lub jego prawidłowe części - spacje
- NIE
#
, są one uwzględnione tylko w wyzwaniu oznaczenia końców linii wejściowych.
Wynik
- truthy wartość, jeśli
thinking
jest poza pole - falsy wartość, jeśli
thinking
jest w polu - wyraźna trzecia wartość może być, jeśli nie można ustalić z danych wejściowych, czy
thinking
jest w polu, czy nie
Przykłady
Prawda:
#
+------+ #
| | 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")
---#
Jako ciąg wejściowy:
" \n +------+ \n | | thinking \n | | \n | | \n +------+ \n "
" | | \n +---------+ \n thinking "
" \n +\n |\n |\ninking |"
"thinking \n-------+ "
" ++ \n ++ "
"+ \n t"
"+----+"
"---\n---"
"g++"
"k\n+"
Falsy:
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
+---------------#
| #
| #
| thinking #
| #
king | #
------+ #
+---#
|thi#
+---#
-#
n#
-#
Jako ciąg wejściowy:
" \n +------------+ \n | thinking | \n | | \n +------------+ \n "
" +---------------\n | \n | \n | thinking "
" | \nking | \n------+ "
"+---\n|thi\n+---"
"-\nn\n-"
Może:
thinking#
g|#
think#
-----#
| |# (box large enough to possibly contain the string)
| |#
+--#
| #
# (empty input)
Jako ciąg wejściowy:
"thinking"
"g|"
"|t"
"-\ni"
"h\n-"
"think\n-----"
"| |\n| |"
" +--\n | "
""
Zasady
- To jest golf golfowy , więc spróbuj użyć jak najmniej bajtów.
- Może wartość może być wybrana dowolnie, o ile różnią się od truthy / wartość falsy i jest taka sama dla wszystkich być może na dane wejściowe. Może to być także błąd.
- Możesz założyć, że dane wejściowe są zawsze poprawne (np. Nie zawiera innych znaków, niż
+-ghiknt|
nie więcej niż jedno pole, ...).
źródło
+\n+
pudełko za małe na słowoOdpowiedzi:
JavaScript (ES6),
274263 bajtówFunkcja
f
zwracatrue
,false
lub-1
jako wartość „być może”. Powinien zostać wywołany z jednym argumentem: wejściem. Pozostałe dwa parametry istnieją tylko w celu skrócenia kodu.Oto mniej golfowa wersja z komentarzami:
Świetnie się bawiłem z tym. Dzięki!
Edycja: Zapisano 6 bajtów dzięki @L. Serné, zmieniając
b
użycie domyślnego argumentu, oszczędzając 3 bajty i przechodząc[a-z]
do\w
, oszczędzając 3 kolejne bajty. Również zapisywane 5 więcej bajtów poprzez zastąpienie słowa non-global, oszczędzając 1 bajt, a zmienia"a"
się5
i","
na4
zapisanie 4 bajty.źródło
console.log(f("input"))
. Wydaje się działać. Świetna robota w golfa.b=(b,c)
nab=(b,c="")
, a następnie możesz usunąć ostatni argument dwóch wywołańb
z pustym ciągiem jako drugim argumentem, oszczędzając (2 * 3-3 =) 3 bajty łącznie. Możesz także skrócić słowo regex od[a-z]+
do\w+
(zrób to, zanim inne zastąpią, ponieważ to również dopasuje cyfry), oszczędzając 3 kolejne bajty.Python 2.7,
532494453 bajtówTen z pewnością miał wiele specjalnych przypadków. Moje prawdziwe i fałszywe wartości to odpowiednio ciąg „Prawda” i „Fałsz”. Moja wartość może być błędem indeksu, ponieważ jest łatwy do wyzwolenia, a jeden z moich przypadków testowych wyzwala go, jeśli dane wejściowe są pustym ciągiem, co i tak może być przypadkiem. Dość często korzystałem z wyrażeń regularnych.
Często nie gram w golfa w pythonie, więc jestem pewien, że można by grać w golfa bardziej, ale oto mój kod:
W mojej wersji golfowej wyświetlam odpowiedź Prawda / Fałsz, dzwoniąc
exit(bool as string)
. Oto skomentowana wersja, w której instrukcje wyjścia są zastępowane instrukcjami powrotu, a wszystko zostało przeniesione do funkcji:Moje rozwiązanie zakłada, że dane wejściowe są prawidłowe, tzn. „Myślenie” (lub jego podciągi) są poprawnie zapisane, jest tylko jedno pole itp.
Edit: Zapisane 10 bajtów dzięki sugestii @ ais523 do zmiany
c
doi.count('+')
, 3 bajty dzięki @ sugestią Pavel za zastąpieniaTrue
z1<2
iFalse
z2>1
23 bajtów przez usunięcie niepotrzebnych innego bloku i 2 bajty usuwając niektóre przestrzenie.Edycja 2: Zapisano 36 bajtów dzięki @Wheat Wizard, który uprzejmie zauważył, że moje „tabulatory” to tak naprawdę 5 spacji (D'oh!) I zasugerował kilka innych ulepszeń.
źródło
i
nigdy się nie zmienia, prawda? Więc prawdopodobnie można zaoszczędzić kilka bajtów przez przechowywaniei.count('+')
wc
zamiasti.count
, jak nigdy go nie nazywać, ale z żadnym argumentem+
.Befunge, 535 bajtów
To nie jest ładne i nie jest blisko konkurowania z istniejącymi odpowiedziami, ale to najlepsze, co mogłem osiągnąć w Befunge.
Zwraca
1
jeśli nieszablonowego myślenia,0
jeśli myśli się wewnątrz pudełka, a-1
na może .Wypróbuj online!
źródło