Meus sogros têm um viveiro de peixes no quintal, cheio de carpas. Isso realmente não passou pela minha cabeça até que notei o seguinte extrato do meu código.
',') & '_'
... Eu tinha caras de peixe olhando para mim da minha tela ...
O que me deu uma ótima idéia ...
Minha busca por você, meus queridos golfistas, é criar um aquário ASCII de uma linha, com as seguintes regras:
- O tamanho do aquário do lado do tanque para o outro lado do tanque não deve ser menor que 60 caracteres e não maior que 80 caracteres. As laterais do tanque precisam ser indicadas usando o caractere pipe / bar (
|
). - Os peixes devem ser capazes de "nadar" da esquerda para a direita entre as laterais do tanque. Como eles estão girando, é necessária uma vista frontal para a transição de uma direção para a outra.
O peixe deve ter a seguinte aparência:
}}< }} ',')
Peixe nadando direito(',' {{ >{{
Peixe nadando à esquerda}}('_'){{
Peixe virado para a frente
Quando um peixe vira para mudar de direção (chance de 30%), ele deve começar de uma direção, ficar de frente para a frente e depois de outra direção ... Verifique se há um amplo espaço para o peixe virar, ou seja, exige seis espaços antes da partida. borda do tanque mínimo ...
- A menos que um peixe esteja soprando uma bolha ou mudando de direção, ele continuará na direção em que está voltado; se ficar dentro de seis espaços ao lado do tanque, ele mudará de direção.
- O peixe (voltado para a esquerda ou direita) pode ocasionalmente (10% de chance) parar de soprar bolhas sucessivamente (
.oO*
), portanto, é necessário que o peixe tenha um espaço disponível próximo a ele para que a bolha exista, para que um peixe possa nade o mais próximo possível dos lados, economize um espaço. A bolha deve desaparecer antes que o peixe possa seguir em frente ...
Uma série de linhas de exemplo do comportamento do peixe, com -
caracteres indicando os espaços, pois o recurso de exibição de código aqui é um pouco rigoroso ... Espero que esses traços sejam substituídos por espaços quando você codificar isso ...
Cada linha aqui pode ser considerada um quadro em lapso de tempo.
|-}}< }} ',')----------|
|--}}< }} ',')---------|
|---}}< }} ',')--------|
|----}}< }} ',')-------|
|-----}}< }} ',')------|
|-----}}< }} ',').-----|
|-----}}< }} ',')o-----|
|-----}}< }} ',')O-----|
|-----}}< }} ',')*-----|
|---------}}('_'){{----|
|-----------(',' {{ >{{|
|----------(',' {{ >{{-|
|---------(',' {{ >{{--|
|--------.(',' {{ >{{--|
|--------o(',' {{ >{{--|
|--------O(',' {{ >{{--|
|--------*(',' {{ >{{--|
|--------(',' {{ >{{---|
|-------(',' {{ >{{----|
|------(',' {{ >{{-----|
etc. O exemplo acima é, como eu disse, pequeno, mas você entende a ideia geral ...
O menor código vence ...
Estou esperando a saída na mesma linha (se possível), se não, exibir quadro após quadro em sucessão é bom ... Se você escolhe uma linha ou várias linhas, é com você. Se você estiver executando várias linhas, elas deverão ser separadas por uma nova linha.
Também é imposto um timer entre quadros, 2000ms. Isso é obrigatório .
Vamos ver o que você tem!
fonte
Respostas:
Python 3 (278)
Anteriormente: 334, 332, 325, 302, 300, 299, 291, 286, 284, 281
Jogar golfe em Python sempre é difícil devido aos requisitos de indentação das declarações, mas, apesar disso, isso foi incrivelmente bem!
Muito obrigado à Volatility e à DSM por me ajudarem a jogar isso muito mais longe.
Versão limpa
fonte
Rubi,
291289O peixe tem onze caracteres, tornando o aquário com 6 * 9 + 11 + 2 = 67 caracteres, o que se encaixa perfeitamente na tolerância exigida.
A
f
função lambda faz todo o trabalho pesado: aceita uma substituição como um par de argumentos e tenta aplicar a substituição no aquário. Se for bem-sucedido, ele pintará um quadro da animação. Em seguida, ele informa o valor de sucesso como2
(o atraso recebido) ounil
(atraso não executado).O peixe não soprará bolhas duas vezes seguidas. (Correção:
...while rand>0.1
- 4 caracteres)O peixe pode soprar bolhas antes mesmo de uma curva forçada. (Correção: reorganize a estrutura de ramificação)
Há um quadro em que a bolha desapareceu completamente (incluindo o
*
), mas o peixe não se moveu para o vazio resultante. Isso segue a letra, mas não o exemplo. (Corrigir: substituirf[?*,w]
porq[?*]=w
- grátis)Não limpa o console. Correção: adicione
`clear`
(Unix) ousystem 'cls'
(console do Windows) antesputs q
para corrigir ( Ref. ) Ou use emprint
vez deputs
e adicione\r
-o ao aquário ( sugerido por @manatwork ).Versão legível:
fonte
\r
para o início do q:q="\r|#{r+s*9}|"
. Em seguida, use em$><<q
vez deputs q
. Tem 1 caractere mais, mas fica melhor sem usar comandos externos.\r
limpa a tela? Não acontece no meu caso. Ou, por que você não gostaputs
?\r
é retorno de carro. Ao usar$><<q
para saída, o cursor permanecerá na mesma linha (puts
força a\n
após a saída); assim, iniciar a próxima saída com\r
retornará ao início da linha atual e começará a sair a partir daí. Assim, substitui a "imagem" anterior da linha de aquário.\r
.R, 451 caracteres
Uma primeira tentativa:
Recuado:
Ele imprime o aquário como stdout em uma única linha (em seguida, 2s são interrompidos e o retorno de carro antes que o aquário em t + 1 seja impresso).
fonte
Perl, 281
ou mais claramente
Peixe girando corretamente. Bolhas soprando.
285 - se você gosta da sensação real do aquário e não da versão de rolagem:
fonte
$d=0
no caso "rotação necessária".sleep2
(sem espaço) não está funcionando para mim; Além disso, quando você está girando, não mantém a cara do peixe alinhada. E as bolhas parecem nunca aparecer.C,
400394373 caracteresCom espaço em branco:
fonte
i==l?(c=r):(c=l)
ser reduzido parac=i==l?r:l
?#define p printf(