Sua tarefa é criar um programa ou função que gere um zíper com um comprimento de 10 linhas. Cada linha do zíper é representada por dois traços --
:
--
--
--
--
--
--
--
--
--
--
O programa / função terá uma porcentagem (divisível por 10) como entrada e a saída será o zíper "descompactado" (traços separados) do topo pela porcentagem, revelando o nível mais baixo indexado em 1 repetido 2 vezes, com todos os níveis anteriores repetidos 4, 6, 8, ... etc. vezes, mantendo a parte inferior do zíper centralizada.
Exemplos
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
A entrada (porcentagem) pode ser formatada como você desejar (50%, 0,5, 50, 5 [zero implícito], etc), e sempre estará no intervalo de 0 a 100 e divisível por 10. O espaçamento no exemplos devem ser preservados em sua saída.
0%
? Podemos pegar a entrada dividida por 10? por exemplo, em vez de50%
, entendeu5
?5
?Respostas:
Python 2 -
184151146 bytesO último número meio que mexeu comigo um pouco. Talvez eu consiga remover a segunda declaração if, se eu olhar para ela mais tarde.
EDIT: Thx para mbomb007 para remover 3 bytes. Agradecemos ao charredgrass pelas dicas de formatação para ajudar a remover muitos e muitos bytes! :-D Obrigado a TheBikingViking por ajudar com mais dois bytes!
fonte
i>9
vez dei==10
e remova o espaçorange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
na última linha por~-i
. Isso tira proveito da precedência do operador e o fato de que um pequeno giro seguido por uma negação é o mesmo que subtrair1
.range(1,11)
e então(i-1)
?Python 2, 74 bytes
Economizou dois bytes ao
exec
modificar um loop, graças a Dennis.Edição: Adotei uma abordagem um pouco diferente e salvei mais dois bytes.
fonte
'-'+`x+1`*(n-x<<1-x/9)+'-'
noexec
loop por'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 bytesEdit 1 - Golfed 10 bytes, eliminando
$x
variável e refazendo ligeiramente como a seqüência de caracteres é formulada.Edit 2 - Golfed more 4 bytes refazendo como a entrada acontece e refazendo como
$i
é calculado cada loop.Editar 3 - salvou 6 bytes pelo OP, permitindo a entrada como
0..10
, portanto, não é necessário dividir por 10.Surpreendentemente difícil!
Leva a entrada como
1
,5
etc., armazenada em$n
. Define a$i
variável auxiliar (um dos momentos muito raros em que uma variável precisa ser inicializada0
no PowerShell) e inicia um loop de10
para1
.A cada iteração, definimos start nossa string com um número de espaços igual a
$i
, seguido por um pseudo-ternário(... , ...)[]
. Dentro do pseudo-ternário, selecionamos uma sequência de caracteres-
com um número de dígitos (o maior de$n-10+$_
ou0
, multiplicado por 2) ou a sequência de caracteres-10
- a seleção baseia-se se estamos na 10ª iteração e se nossa entrada foi100
. Concatenamos isso com uma final-
. Essa sequência resultante é colocada no pipeline.Finalmente, incrementamos
$i
, e isso foi realmente complicado. Acabamos usando um truque de conversão binária para int para incrementar apenas$i
até atingir$n
e, depois, mantendo-o no mesmo valor. Isso garante que alcançamos o "final" da indentação do zíper no nível apropriado.Depois que o loop termina, as seqüências resultantes são todas acumuladas no pipeline e a saída é implícita.
Exemplos
fonte
Pitão,
3734 bytesSuíte de teste.
fonte
Python,
9584 bytesEu não sabia que as lambdas eram legais, graças a @Dr Green Eggs e Iron Man
fonte
join
pode usar um gerador diretamente.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 bytes)MATL ,
484135 bytesExperimente online!
fonte
Ruby, 74 bytes
Usa o formato de zero implícito especificado na pergunta, assim
40%
comof[4]
se a função anônima estiver atribuídaf
. Se for necessária uma porcentagem completa, +6 bytes paran/=10;
Experimente online!
fonte
Python 3,
98, 90, 87, 85 bytes.Pega o número já dividido por 10. Eu provavelmente posso remover algumas das parênteses, mas isso é bastante fechado para jogar golfe.
fonte
Haskell, 83 bytes
fonte
++"-"
?Javascript es7, 105 bytes
ligue com
fonte
The program/function ...
- não snippet\n
por uma nova linha real, poderá salvar um byte.Python 2.7,
11310877 bytesn = entrada ()para x no intervalo (0,10):
v = str (x + 1) * (nx) 2
se x n> 89: v = '10 '
impressão' '* min (x, n) + '-' + v + '-'
Primeira vez jogando golfe. Continuando, tente obter <100.
Assume que a entrada é 1-10.
Edit: Usamos alguns truques da resposta de @LeakyNun (obrigado), depois analisamos um pouco mais e obtivemos ... basicamente a mesma resposta: / Não sabia sobre a conversão de string `int` e 2 - booleano, deixe-me me livre da instrução if, que me permite me livrar de toda a variável v. Muito legal.
Minha versão:
fonte
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 bytes
Ideone it!
fonte
Python 2.7,
110999591 bytes:Um programa completo que recebe a entrada de um número inteiro no intervalo inclusivo
[1,10]
, onde10
significa100%
e1
significa10%
. Provavelmente pode ser jogado um pouco mais.Experimente Online! (Ideona)
fonte
PHP 5.3,
9291 bytesregister_globals=1
eshort_open_tags=1
(eerror_reporting=0
)chame em CLI com
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: prepend<pre>
?:
por?1:
(+1)$n
por($n=$_GET[n])
(+11)ungolfed como uma função (qualquer PHP> = 4.0.1)
suíte de teste
Agora isso é novo para mim: o PHP supera o JavaScript.
Essa abordagem é minuciosa, eu acho.
fonte
STR_PAD_BOTH
O que é isso, K&R C?#define
Também fazemos coisas em PHP? :-)Julia, 73 bytes
Primeira resposta de Julia! Dicas são apreciadas.
Experimente online!
fonte
Perl, 122 bytes
fonte
Lisp comum (Lispworks), 314 bytes
sem ouro:
Uso:
fonte
APL, 46 bytes
O argumento deve ser dado como a porcentagem dividida por 10 (ou seja, um número inteiro simples, no intervalo [0,10]).
fonte