Para a prática de golfe, tenho feito as tarefas na aula de Introdução à Python da minha namorada. Descobri que, para essa tarefa, havia várias estratégias muito próximas na contagem de caracteres, e tenho certeza que as pessoas aqui podem encontrar maneiras ainda melhores. Embora eu esteja mais interessado em maneiras de fazer isso em Python, eu gostaria de saber o máximo de golfe que esse programa pode obter, portanto, esse é o código de golfe e as respostas mais curtas.
As regras:
A tarefa está descrita abaixo. O usuário deve ser solicitado a inserir duas vezes, embora os prompts não precisem dizer nada e possam estar em uma ordem diferente.
Aplicam-se brechas padrão.
Tarefa 3: Setas
Escreva um programa que solicite ao usuário um número de colunas e ele imprima o padrão como visto abaixo. Você pode assumir que o usuário fornecerá números positivos. Seu programa deve lidar com as setas esquerda e direita. Aqui estão alguns exemplos de execução:
How many columns? 3
Direction? (l)eft or (r)ight: r
*
*
*
*
*
How many columns? 5
Direction? (l)eft or (r)ight: l
*
*
*
*
*
*
*
*
*
Respostas:
Pitão, 23 bytes
Pode ou não ser válido, com base na resposta a este comentário . Independentemente disso, achei isso legal e, se for inválido, as outras respostas de Pyth também são inválidas. ;)Bem, é válido , porque eu aparentemente perdi o óbvio. : /EDIT: Eu ganhei !!!! YESSS !!!! Primeira vez! : D
Demonstração ao vivo.
fonte
m+*\ d\*Q
em vez de enumerar as coisas. Salva 2 bytes.Pyth, 27
Experimente online
A idéia básica aqui é criar uma string que, por exemplo, 5, fique assim:
E depois vire de cabeça para baixo se recebermos
l
como entrada. Depois, pegamos todas as últimasinput-1
linhas dessa sequência e as imprimimos.fonte
Python 2,
8179 bytesAinda pode ser jogável, mas veremos :)
fonte
l
er
. Eu não tinha percebido que a entrada estáeval
no mesmo ambiente que o código.Pitão,
302827 bytesExperimente online.
Aparentemente, atualmente estou empatado com FryAmTheEggman com uma abordagem completamente diferente. (Eu acho que esse é engenhoso.)
Exemplo
Explicação
fonte
PowerShell,
9185102 Bytes$c
. Subtraímos um porque cada coluna também possui um*
e estamos interessados apenas em quantos espaços são necessários.1
, imprima*
e saia - o restante do script não faz diferença. +-eq
necessáriol
, depois cria uma matriz com base na indexação em uma matriz de matrizes geradas dinamicamente com base no valor de$c
. Magia. Basicamente, é quantos espaços por linha precisamos.5 r
esta coleção seria válida(0,1,2,3,4,3,2,1,0)
.%
loop Foreach-Object , onde produzimos uma sequência de X números de espaços e, em seguida, o*
Exemplo de uso:
Editar - variável removida
$e
canalizando a coleção diretamenteEdit2 - responde corretamente por 1 coluna, agora
+ Se ainda for obrigatório usar a entrada como direção para as setas de 1 coluna (eu afirmo que não), podemos trocar o posicionamento do
Read-Host
e perder mais alguns bytes reintroduzindo a$d
variável, por 106 :fonte
TI-BASIC,
756557545047 BytesAgradecemos a @ThomasKwa pelo cálculo correto de bytes e por 10 bytes de golfe .
Testado na minha TI-84 + Silver Edition.
Primeira submissão do TI-BASIC, sugestões de golfe são bem-vindas (ainda não sei muitos truques). Se o nome representa um fator na memória mostrada, esse era de 3 caracteres em vez de 1 (observei a contagem de bytes na própria calculadora). Este programa é limitado pelas
output
restrições da função (penso nas setas de comprimento 4), mas provavelmente poderia mudar paratext
, que é exibido graficamente se o comprimento for muito baixo.Observe que isso também não limpa a tela nem a pausa.
Eu realmente sinto que a equação que estou usando pode ser mais jogada no golfe. Também parece errado excluir as aspas finais.
fonte
Ans
é gratuito, porque você não o usa para entrada eOutput(
não modificaAns
. Use-o e livre-se da variávelA
. Você pode atribuir usando-2(Str1="R
; não há necessidade de um condicional.-2
. Basta fazerStr1="R
para a segunda linha. Isso cria a quarta linhaOutput(I,(1-2Ans)abs(I-L)+AL+1,"*
, que lhe dá mais 4 bytes. Mas espere, há um idioma para(1-2Ans)
ititcos(πAns)
, que economiza um byte e mais um porque temos o parêntese aberto de graça!Python 2, 89 bytes
Funciona quase de forma idêntica à minha resposta Pyth, apenas calculando o número correto de espaços em tempo real.
fonte
PowerShell,
104 10297 bytesNB se você deseja executá-lo novamente, abra um novo PowerShell ou
rv o
redefina o estado da variável.Comparado com o quão concisos os outros são, isso dói. [Dói menos aos 97 do que aos 122]. Duas partes, nenhuma delas muito surpreendente; lê um número de colunas, usa um substituto de operador ternário de índice de matriz para obter um deslocamento e executa uma função de onda iniciada no deslocamento (e um ajuste para que não caia demais
mod 0
).(E ai, eu passei anos nessa função de onda, incapaz de detectar meu mal-entendido e digitando todas as parênteses honestas de que não é LISP)?
fonte
Python 2,
9889 bytesUm pouco mais demorado.
Uso
fonte
NameError: name 'l' is not defined
,NameError: name 'd' is not defined
.i
ed
, apenas usandorange(P())
eif P()=='l'
...)f=[...][::2*('r'>input())-1]
na verdadePerl, 85 bytes
Uso:
fonte
simplearrows2.pl
não parece tão bom! : PPHP, 156 bytes
Cria duas matrizes, assim:
usa a união de matriz
$s+$t
ou$t+$s
para combiná-los earray_splice
remover o elemento no meio. Finalmente, use<?=join()
fonte
Python 2,
111109104 bytesSolução bastante simples. Tenho certeza de que pode jogar mais. Para quem não sabe,
~x+n
é o mesmo quen-1-x
.Experimente online
Edit : Isso foi jogado na última linha:
fonte
Matlab,
10910596 bytesObrigado a @beaker por me salvar 9 bytes .
fonte
x=x*10+32;
Ruby, 118 bytes
2.times{
- duas vezes, é claro ...l,d=gets.split;
- obtenha a entradal=l.to_i;
- altera o comprimento para um número inteiroa=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;
- crie uma matriz do intervalo de 0 ao comprimento(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}
- itere, vire as cordas para fazer as flechasNão é exatamente o melhor golfe de todos os tempos, mas, ei.
fonte
PowerShell,
9894 bytesSe eu conseguisse encontrar uma maneira de direcionar o Read-Host para dentro do loop foreach-object, mas solicitá-lo apenas uma vez, poderei salvar alguns bytes.
Editar: 94 bytes. Em vez de testar para a esquerda, teste para a direita (simplifica o loop).
Original 98 bytes:
fonte
$_
variável - Hobbit complicado. Muito esperto, e eu aprendi algo hoje.> <> , 60 bytes
2 bytes desperdiçados na linha de fundo, que irritante!
Devido a como a entrada funciona em> <>, não é possível 'esperar' pela entrada - o
i
comando verifica se um caractere de entrada está disponível no STDIN. Se houver, empurra o valor ASCII desse caractere e empurra -1, se não.Isso significa que, para usar este programa, o número e a direção já devem estar prontos no STDIN, por exemplo,
3r
para uma seta de tamanho 3 apontando para a direita. Não tenho certeza se isso desqualifica esta entrada, deixe-me saber sua opinião: o)Também vou escrever uma descrição, se alguém quiser.
fonte
:
para 10?)PHP, 154 bytes
Parece realmente repetitivo, mas faz o desejado:
Executa a partir da linha de comando como:
fonte
Python, 88 bytes
Editado
fonte