(zainspirowany pytaniem dotyczącym recenzji kodu)
Załóżmy, że dwie osoby grają w Wisielca , ale podsłuchałeś tylko grę i chcesz narysować obecny status.
Biorąc pod uwagę dwa słowa jako dane wejściowe, przy czym słowa pasują do siebie ( [A-Z]+
lub [a-z]+
twój wybór), wyświetlają bieżący stan gry kata jako grafikę ASCII, zgodnie z poniższymi zasadami.
- Pierwsze słowo to słowo do odgadnięcia, a drugie słowo to już odgadnięte litery. Można je traktować jako dane wejściowe w dowolnej kolejności.
- Słowo, które należy odgadnąć, jest gwarantowane jako niepuste, ale już odgadnięte litery mogą być puste (tj. Jakby to był początek gry).
- Gra zawsze będzie prawidłową grą kata (tzn. Odgadnięte litery nie będą duplikowane, litery nie będą odgadnięte po zakończeniu gry, otrzymasz tylko litery jako dane wejściowe itp.).
- Pod rysunkiem wisielca musi znajdować się słowo do odgadnięcia,
_
w miejscu nieznanych jeszcze liter, oddzielone spacjami. Na przykład, jeśli zgadywanym słowem byłoBOAT
, to poniżej rysunku kata musi być_ _ _ _
. Jeśli słowo byłoBOAT
zA
odgadnięciem, to poniżej rysunku musi być_ _ A _
. - Pod słowem do odgadnięcia muszą znajdować się już odgadnięte litery, których nie ma w słowie. Mogą być w dowolnej kolejności i, jeśli to pożądane, mogą być oddzielone dowolnym separatorem niealfabetycznym.
Oto stany gry kata, od początkowego początku do końca gry. Każda błędnie odgadnięta litera przesuwa stan o jeden. Tak więc pierwsza błędnie odgadnięta litera powoduje O
pojawienie się głowy , następna sprawia, że |
pojawia się ciało itp.
+---+
| |
|
|
|
|
=========
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
| |
|
|
=========
+---+
| |
O |
/| |
|
|
=========
+---+
| |
O |
/|\ |
|
|
=========
+---+
| |
O |
/|\ |
/ |
|
=========
+---+
| |
O |
/|\ |
/ \ |
|
=========
Wkład
- Dwa ciągi w dowolnym wygodnym formacie , z pierwszym gwarantowanym niepustym.
- Możesz wziąć dane wejściowe w dowolnej kolejności (np. Słowo do odgadnięcia, a następnie odgadnięte litery lub odwrotnie). Podaj w swoim zgłoszeniu kolejność wprowadzania.
Wydajność
Wynikowa reprezentacja ASCII sztuki gry kata w toku, jak opisano powyżej, ponownie w dowolnym dogodnym formacie.
Zasady
- Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są poprawnie ustawione w linii.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
# 1
BOAT
i ATG
+---+
| |
O |
|
|
|
=========
_ _ A T
G
# 2
ZEPPELIN
i
+---+
| |
|
|
|
|
=========
_ _ _ _ _ _ _ _
# 3
ZEPPELIN
i EATOLINSHR
+---+
| |
O |
/|\ |
/ \ |
|
=========
_ E _ _ E L I N
A T O S H R
# 4
RHYTHM
i ABCDE
+---+
| |
O |
/|\ |
/ |
|
=========
_ _ _ _ _ _
EDCBA
# 5
BOAT
i ATOB
+---+
| |
|
|
|
|
=========
B O A T
# 6
AIRPLANE
i AJKEI
+---+
| |
O |
| |
|
|
=========
A I _ _ _ A _ E
KJ
Odpowiedzi:
Python 2 ,
215192184183 bajtów-8 bajtów dzięki Raphaël Côté
-1 bajtów dzięki Jonathanowi Frechowi
Wypróbuj online!
źródło
|
) zamiast lewego ramienia (/
), gdy są 2 błędne litery: Wypróbuj online"\\/"
jest równy"\/"
.Węgiel drzewny ,
836968 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 14 bajtów, przechodząc do
switch
. Zaoszczędzono 1 bajt, drukując singiel|
jako literał. Uwaga: W czasie kwestia została ustalona,switch
nie działał w ogóle w trybie gadatliwym i potrzebowała końcowego znaku«
w trybie zwięzły (aktualna wersja na TIO ma ani błąd, więc to pokazuje tłumaczenie Zwięzły jako 67 bajtów), natomiastMap
„s błędy uniemożliwiły mi użyciePrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));
. Na szczęście udało mi się wymyślić kludge dla tej samej długości (i rzeczywiście próbowałem również zamienić drugą pętlę na mapę, ale ona też wyszła z tej samej długości). Wyjaśnienie:źródło
Python 2 , 220 bajtów
Wypróbuj online!
-35 bajtów dzięki Raphaël Côté
-20 bajtów przy użyciu zestawów
-1 bajtów dzięki micsthepick
źródło
translate
ale okazało się, że jest to dłuższy lol.for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')
. Daje to pojedynczą pętlę i po prostu wyłączasz zamiennik, jeśli jesteś ponad c. W ten sposób możesz zmniejszyć do 251 bajtów :)Galaretka ,
7273 bajty+1 ustalające błąd ace gry, które wykazały pełną powieszono osobę (zmieniła
LN
sięLạ6
pod koniec)Dyadyczny link, który bierze słowo po lewej stronie i litery (unikalne i wewnątrz gry) po prawej stronie i zwraca listę znaków, lub pełny program przyjmujący dane wejściowe jako argumenty wiersza poleceń i wypisujący wynik.
Wypróbuj online!
W jaki sposób?
Po pierwsze:
Jest to wartość liczbowa pełnej powieszono osoby w bazie 9, gdzie każdy z 9 cyfr stanowią jedną z postaci:
<space>
,<newline>
,-
,|
,O
,/
,\
,=
, lub+
.reszta programu:
źródło
BOAT
aATOB
przypadku testowego. Wypróbuj online!Japt v2 ,
94918381 bajtów-3 bajty z niektórych pomysłów z podejścia @ETHproductions do tego .
-8 bajtów przy użyciu wielowierszowego obrotu ciągów.
-2 bajty przy użyciu v2.
Traktuje oba wprowadzone słowa jako tablice znaków, z odgadnięciem słowa jako pierwszym, a odgadnięciem liter jako drugim. Niepoprawne litery są oddzielone
,
s. Gdy nie ma niepoprawnych liter, ostatni wiersz jest pusty (co oznacza, że wynik zawiera dodatkowy znak nowej linii).Wypróbuj online!
Wyjaśnienie
Domniemane:
U
iV
są tablicami znaków wejściowych.Uruchom tablicę i pchnij wiszący łańcuch formatu man, obrócony w lewo o 90 °.
Zamień (
r
) każdą cyfrę (\d
) na następującą funkcję:Jeśli cyfra to
>=
(¨
), liczba błędnych zgadnięć (VkU l
), spacja (S
), w przeciwnym razie uzyskaj odpowiednią część ciała dla tej cyfry ("..."gZ
).Obróć wiszącego mężczyznę w prawo o 90 ° i wciśnij
=
powtórzone 3 * 3 (³³
) razy do tablicy.Wciśnij słowo do zgadnięcia, używając liter odwzorowanych (
¡
) na siebie (X
), jeśli są zawarte wV
(VøX
), lub_
jeśli nie, i połączone spacjami (¸
) do tablicy.Wciśnij odgadnięte litery, usuwając litery w zgadywaniu słów (
k
), do tablicy wyjściowej. Zamknij tablicę i połącz z newlines (·
).Wizualizacja rotacji:
źródło
W
może działać, ponieważ części ciała nie pojawiają się od lewej do prawej / od góry do dołu. Udało mi się jednak zapisać kilka bajtów z twojej wersji.05AB1E , 83 bajty
Wypróbuj online!
Mapa bitowa:
05AB1E , 18 bajtów
Wypróbuj online!
Spycha to następujący plan bitmapy:
Gdzie następujące dodatkowe bajty:
05AB1E , 13 bajtów
Wypróbuj online!
Zamień fragmenty mapy bitowej na odpowiednie znaki, pozostawiając cyfry 5 w celu późniejszego zastąpienia fragmentów kata:
Wisielec:
Następnie obliczamy, ile razy użytkownik pomylił się, chwytając litery, które znajdują się w drugim wejściu, ale nie w pierwszym:
05AB1E , 6 bajtów
Wypróbuj online!
Na koniec używamy dodatkowej mapy bitowej, aby zastąpić zawieszonego mężczyznę, oddzielając ją znakami nowej linii i przygotowując ją do ostatecznego wydruku:
05AB1E , 26 bajtów
Wypróbuj online!
Powoduje to powstanie pierwszych elementów, a jedynymi pozostałymi fragmentami są dwa słowa na dole w formacie diff ...
Słowa poniżej:
Wydrukuj pierwsze słowo bez brakujących domysłów:
05AB1E , 15 bajtów
Wypróbuj online!
05AB1E , 5 bajtów
Wypróbuj online!
Wydrukuj obliczone pominięte przypuszczenia z wcześniejszych zapisów w rejestrze.
źródło
/
) przed ciałem (|
). Dwie błędne litery powinny spowodować wyświetlenie części głowy i ciała. Wypróbuj onlineGalaretka , 86 bajtów
Wypróbuj online!
Uff ... było fajnie. Nigdy nie używałem tylu
¤
postaci.Jak to działa
źródło
C #,
305296 bajtówSvaed 9 bajtów dzięki @raznagul.
Wypróbuj online!
Pełna / sformatowana wersja:
Działa to również dla 314 bajtów (prawdopodobnie może być jeszcze krótszy):
źródło
g.Select(c=>!w.Contains(c)?c+"":"")
zg.Where(c=>!w.Contains(c))
.JavaScript (ES6),
203196187186185184180 180177176 bajtówPobiera dane wejściowe jako 2 tablice pojedynczych znaków w składni curry.
Spróbujzagraćźródło
1
,324
,5 6
(patrz ostatni przypadek testowy).Scala ,
392389 bajtówTo wciąż może być trudne do gry w golfa.
Jest to funkcja przyjmująca
s
it
jako parametry, zs
odgadywanym słowem it
ciągiem zawierającym wypróbowane litery.EDYCJA:
-1 bajt:
t.contains(x) -> t contains x
-1 bajt:
s.contains(x) -> s contains x
-1 bajt:
.mkString(" ") -> mkString " "
Wypróbuj online!
źródło
PHP 7, 246 bajtów
pobiera dane wejściowe z argumentów wiersza poleceń. Uruchom
-nr
lub wypróbuj online .źródło