(inspirado em uma pergunta sobre Code Review)
Suponha que duas pessoas estejam jogando carrasco , mas você só ouviu o jogo e deseja desenhar o status atual.
Dadas duas palavras como entrada, onde as palavras correspondem [A-Z]+
ou [a-z]+
(sua escolha), produz o estado atual do jogo da forca como arte ASCII, seguindo as regras abaixo.
- A primeira palavra é a palavra a ser adivinhada, e a segunda palavra são as letras já adivinhadas. Eles podem ser tomados como entrada em qualquer ordem.
- A palavra a ser adivinhada é garantida como não vazia, mas as letras já adivinhadas podem estar vazias (ou seja, como se fosse o início do jogo).
- O jogo sempre será um jogo da forca válido (ou seja, as letras adivinhadas não serão duplicadas, as letras não serão adivinhadas após o final do jogo, você receberá apenas letras como entrada, etc.).
- Abaixo do desenho da forca, deve haver a palavra a ser adivinhada, com
_
letras no lugar ainda desconhecidas, separadas por espaços. Por exemplo, se a palavra a ser adivinhada eraBOAT
, abaixo do desenho da forca deve estar_ _ _ _
. Se a palavra foiBOAT
comA
adivinhou, em seguida, seguir o desenho deve ser_ _ A _
. - Abaixo da palavra a ser adivinhada, deve haver letras já adivinhadas que não estão na palavra. Eles podem estar em qualquer ordem e podem ser separados por qualquer separador não alfabético, se desejado.
Aqui estão os estados do jogo da forca, do início ao fim do jogo. Cada letra adivinhada incorretamente avança o estado em um. Assim, a primeira letra incorretamente adivinhada faz a cabeça O
aparecer, a próxima faz o corpo |
aparecer, etc.
+---+
| |
|
|
|
|
=========
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
| |
|
|
=========
+---+
| |
O |
/| |
|
|
=========
+---+
| |
O |
/|\ |
|
|
=========
+---+
| |
O |
/|\ |
/ |
|
=========
+---+
| |
O |
/|\ |
/ \ |
|
=========
Entrada
- Duas strings em qualquer formato conveniente , com a primeira garantida não vazia.
- Você pode receber a entrada em qualquer ordem (por exemplo, palavra para adivinhar e depois adivinhar letras ou vice-versa). Indique no seu envio a ordem de entrada.
Saída
A representação artística ASCII resultante do jogo da forca em andamento, como descrito acima, novamente em qualquer formato conveniente.
Regras
- Novas linhas à esquerda ou à direita ou espaços em branco são opcionais, desde que os próprios caracteres estejam alinhados corretamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- Lacunas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
# 1
BOAT
e ATG
+---+
| |
O |
|
|
|
=========
_ _ A T
G
# 2
ZEPPELIN
e
+---+
| |
|
|
|
|
=========
_ _ _ _ _ _ _ _
# 3
ZEPPELIN
e EATOLINSHR
+---+
| |
O |
/|\ |
/ \ |
|
=========
_ E _ _ E L I N
A T O S H R
# 4
RHYTHM
e ABCDE
+---+
| |
O |
/|\ |
/ |
|
=========
_ _ _ _ _ _
EDCBA
# 5
BOAT
e ATOB
+---+
| |
|
|
|
|
=========
B O A T
# 6
AIRPLANE
e AJKEI
+---+
| |
O |
| |
|
|
=========
A I _ _ _ A _ E
KJ
Respostas:
Python 2 ,
215192184183 bytes-8 bytes graças a Raphaël Côté
-1 byte graças a Jonathan Frech
Experimente online!
fonte
|
) em vez do braço esquerdo (/
) quando há 2 letras erradas: Experimente on-line"\\/"
é igual a"\/"
.Carvão ,
836968 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 14 bytes mudando para
switch
. Economizou 1 byte imprimindo o single|
como um literal. Nota: Na época, a questão foi definida,switch
não funcionou em tudo no modo detalhado e precisava de uma fuga«
no modo sucinto (a versão atual no TIO tem nem erro, para que ele mostre a tradução sucinta como 67 bytes), enquantoMap
's erros me impediram de usarPrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));
. Felizmente, consegui criar um kludge do mesmo tamanho (e, de fato, também tentei mudar o outro loop para um mapa, mas ele também saiu do mesmo comprimento). Explicação:fonte
Python 2 , 220 bytes
Experimente online!
-35 bytes graças ao Raphaël Côté
-20 bytes usando conjuntos
-1 byte graças ao micsthepick
fonte
translate
mas acabou por ser mais lol lol.for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')
. Dá a você um loop único e você apenas substitui a substituição se tiver mais de c. Você pode diminuir a 251 bytes desta forma :)Geléia ,
7273 bytes+1 corrigindo um bug do jogo ás que mostrava a pessoa enforcada completa (alterada
LN
paraLạ6
quase no final)Um link diádico que pega a palavra à esquerda e as letras (exclusivas e dentro do jogo) à direita e retorna uma lista de caracteres, ou um programa completo que aceita a entrada como argumentos da linha de comando e imprime o resultado.
Experimente online!
Quão?
Primeiramente:
É o valor numérico da pessoa enforcado completo na base 9, onde cada um dos 9 dígitos representam um dos personagens:
<space>
,<newline>
,-
,|
,O
,/
,\
,=
, ou+
.o restante do programa:
fonte
BOAT
eATOB
. Experimente online!Japt v2 ,
94918381 bytes-3 bytes de algumas idéias da abordagem do @ETHproductions .
-8 bytes usando a rotação de cadeia de linhas múltiplas.
-2 bytes usando v2.
Pega as duas entradas de palavras como matrizes de caracteres, com a palavra de adivinhação primeiro e as letras adivinhadas em segundo. Letras incorretas são mostradas separadas por
,
s. Quando não há letras incorretas, a última linha fica em branco (o que significa que a saída contém uma nova linha à direita).Experimente online!
Explicação
Implícito:
U
eV
são matrizes de caracteres de entrada.Inicie uma matriz e empurre a corda de formato suspenso, girada para a esquerda 90 °.
Substitua (
r
) todos os dígitos (\d
) pela seguinte função:Se o dígito for
>=
(¨
) a quantidade de suposições incorretas (VkU l
), um espaço (S
), caso contrário, obtenha a parte do corpo apropriada para esse dígito ("..."gZ
).Gire o homem pendurado 90 ° para a direita e empurre
=
3 * 3 (³³
) vezes repetidas para a matriz.Empurre a palavra para adivinhar, com letras mapeadas (
¡
) para si mesmas (X
) se contidas emV
(VøX
) ou,_
se não estiverem, e unidas a espaços (¸
), na matriz.Empurre as letras adivinhadas, com as letras da palavra a adivinhar removidas (
k
), para a matriz de saída. Feche a matriz e junte-se às novas linhas (·
).Rotação visualizada:
fonte
W
possa funcionar, pois as partes do corpo não aparecem da esquerda para a direita / de cima para baixo. Consegui salvar alguns bytes da sua versão.05AB1E , 83 bytes
Experimente online!
O bitmap:
05AB1E , 18 bytes
Experimente online!
Isso envia o seguinte plano de bitmap:
Onde os seguintes bytes adicionais:
05AB1E , 13 bytes
Experimente online!
Substitua as partes do bitmap pelos caracteres apropriados, deixando os 5 para substituir as partes do carrasco mais tarde:
O homem enforcado:
Em seguida, calculamos quantas vezes o usuário adivinhou errado pegando as letras que estão na segunda entrada, mas não na primeira entrada:
05AB1E , 6 bytes
Experimente online!
Finalmente, usamos um bitmap secundário para substituir o homem enforcado, separando por novas linhas e preparando-o para a impressão final:
05AB1E , 26 bytes
Experimente online!
Isso resulta nas primeiras peças, as únicas peças restantes sendo as duas palavras na parte inferior em um formato diff ...
As Palavras Abaixo:
Imprima a primeira palavra sem as suposições ausentes:
05AB1E , 15 bytes
Experimente online!
05AB1E , 5 bytes
Experimente online!
Imprima as suposições perdidas calculadas anteriormente armazenadas em um registro.
fonte
/
) antes do corpo (|
). Duas letras erradas devem resultar na exibição de peças na cabeça e no corpo. Experimente onlineGeléia , 86 bytes
Experimente online!
Uau ... isso foi divertido. Eu nunca usei tantos
¤
personagens.Como funciona
fonte
C #,
305296 bytesObteve 9 bytes graças a @raznagul.
Experimente online!
Versão completa / formatada:
Isso também funciona para 314 bytes (provavelmente ainda pode ser mais curto):
fonte
g.Select(c=>!w.Contains(c)?c+"":"")
porg.Where(c=>!w.Contains(c))
.JavaScript (ES6),
203196187186185184180177176 bytesRecebe entrada como 2 matrizes de caracteres individuais na sintaxe de currying.
ExperimenteReproduzirfonte
1
,324
,5 6
(ver caso de teste passado).Scala ,
392389 bytesIsso ainda pode ser bastante jogável.
Isso está dentro de uma função que assume
s
et
como parâmetros, coms
a palavra a adivinhar et
a sequência contendo as letras já tentadas.EDIT:
-1 byte:
t.contains(x) -> t contains x
-1 byte:
s.contains(x) -> s contains x
-1 byte:
.mkString(" ") -> mkString " "
Experimente online!
fonte
PHP 7, 246 bytes
recebe entrada dos argumentos da linha de comando. Corra com
-nr
ou experimente online .fonte