A tarefa é exibir n caracteres da tabela ASCII .
Você pode escrever uma função (ou um programa que use o argumento como parâmetro, STDIN também é permitido) que use o parâmetro n , que será o índice do último caractere a ser impresso.
A tarefa é bastante simples, portanto, como exemplo, aqui está uma possível implementação no Python 2.7:
(lambda n:map(chr, range(n)))(256)
Como eu disse, é uma tarefa simples. Portanto, este é o código-golfe e os códigos mais curtos vencem!
EDITAR
Como alguns de vocês apontaram, este código não imprime o resultado. É apenas um exemplo, pois eu posso ter dificuldade em explicar o problema em inglês ;-).
EDIT2
Sinta-se à vontade para postar a resposta em qualquer linguagem de programação, mesmo que não seja o código mais curto. Talvez haja algumas implementações interessantes por aí!
EDIT3
Corrigido o exemplo para que ele imprima o resultado.
for x in range(input()):print chr(x)
Na verdade, imprimiria os caracteres, se você quiser editar seu exemplo.[i for i in range(n)]
é bastante semelhante arange(n)
Respostas:
CJam, 4 bytes
Programa completo que lê STDIN (campo de entrada no intérprete online) ).
Isso simplesmente é executado
range(chr(int(input())))
, aproveitando o fato de,
retornar um array de caracteres se o argumento for um caractere.Eu chamo dibs em
c,
(2 bytes), apenas no caso de supor que a entrada já esteja na pilha que seja permitida.fonte
n
, porque as primeiras dezenas de caracteres ASCII são caracteres não imprimíveis. Curiosidade: este programa também gera a tabela Unicode, por exemplo n = 9999 #brainfuck -
169146142 bytesLimitações:
Não é a resposta mais curta aqui, mas ei, foda-se! Esse seria um desafio realmente bom, exceto pelo fato de exigir informações legíveis por humanos sem garantir o número de dígitos. Eu poderia ter exigido entrada para ter zeros à esquerda para fazer 3 caracteres, mas que graça é essa? : D Um grande problema com a entrada de dados dessa maneira é que a única estrutura ramificada ou em loop do cérebro verifica se a célula atual é zero ou não. Quando a entrada pode conter zeros, isso pode fazer com que seu código pegue ramificações que não deveria estar recebendo. Para resolver esse problema, armazeno cada dígito da entrada mais 1 e subtraio o excesso no último segundo possível. Dessa forma, eu sempre sei onde estão meus zeros.
Eu disse que esse teria sido um grande desafio, sem ter que analisar dados. Por que é que? Bem, vamos fingir que não recebemos uma entrada numérica. Diremos que o desafio é "Com um byte de entrada, produza todos os caracteres ASCII abaixo desse byte". Aqui está a minha resposta:
brainfuck - 8 bytes
É muita diferença! O programa real usa 135 instruções para coletar a entrada (mais de 95% do programa!), Apenas porque é um humano digitando-o. Armazene o número como um byte e me dê isso , e leva apenas um.
(Fato interessante: se você entendeu o programa hipotético, parabéns! Você entende o cérebro completamente. O idioma inteiro possui apenas oito comandos, e esse programa usa cada um exatamente uma vez.)
Explicação
fonte
>[-]<[->.+<]
defina a célula ao lado da célula atual como 0 e, em seguida, conte a célula atual enquanto aumenta a célula ao lado e imprime o valor simultaneamente.>[-]<
peça porque já estava ao lado de uma célula vazia. :)Pitão , 4 bytes
Basicamente, uma tradução do programa Python 3:
fonte
Befunge 93 -
2321Befunge 93 -
1513 (por Ingo Bürk)Este imprime a lista ao contrário, mas o OP disse apenas que precisamos imprimir os primeiros
n
caracteres, não que ele esteja em ordem.Pode não ser mais possível jogar golfe sem passar para o Befunge98 (para o operador ";", consulte a resposta de @ Kasran )
Experimente aqui:
Mostrar snippet de código
fonte
&> #- #1:# :#,_@
(ele só imprime em sentido inverso)Java,
151128776256 bytesPrimeira tentativa no código de golfe.
Uso:
Agradecemos a @Shujal, @flawr, @Ingo Bürk e @Loovjo pela grave redução de bytes.
fonte
int i,n=new Scanner(...
e alterando o loop parafor(;++i<n;)
. Além disso, você não precisa invocarCharacter.toString
. Você pode apenas alimentar System.out com um valor de char e ele terá a saída feliz.a
como entrada. E eu acho que você pode encurtar ofor
ciclo por abusar o lugar incremento como corpo do loop:for(;++i<n;System.out.print((char)i));
(mas você pode ter que alterar o valor de inicialização ou no final de + - 1)++i<n+1
deve ser equivalente a++i<=n
. Observe o=
lá, no entanto! Apenas salva um byte. Funciona para mim.void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}
62 bytes. Pelo menos não vejo mais golfe agora. :)APL, 5
Exemplo de uso:
fonte
JavaScript, ES6 -
525856534442 bytesCole isso no console do Firefox. Executar como
f(NUM)
.Teve que prolongar, porque o primeiro não aceitou adequadamente a entrada.Abaixo 3, graças edc65! Até 44, graças à Swivel!
fonte
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 bytesNão tenho certeza se é possível fazer melhor sem as importações.
Editar
Minha primeira solução não imprimiu o resultado, portanto, permita mais 6 caracteres para isso:
Além disso, não é mais curto (25 caracteres com impressão, 19 sem), mas uma abordagem alternativa interessante (requer 'Data.List'):
fonte
(`take`['\0'..])
salva um byte.Utilitários comuns do Bash + BSD, 9 bytes
GNU dc, 20 bytes
fonte
C,
313028.27Como o putch não é padrão, aqui está a versão totalmente compatível:
Deve ser chamado de main:
EDIT: Melhorado aproveitando o valor de retorno putchar
EDIT 2: Reduzido por outro caractere através da recursão
fonte
Perl, 17 bytes
fonte
print chr for 0..$ARGV[0]
shift
vez de$ARGV[0]
salvar 2 bytes.say
. Além disso, a contagem de caracteres é menor se você fizer isso como uma linha única-n
.echo "90" | perl -nE'say chr for 0..$_'
contaria como18
caracteres.17
parasay chr for 0..$_
mais1
para on
.say
não funcionará com todas as versões do perl.CJam, 3
Presumi que o argumento fosse o elemento da pilha superior.
Exemplo de uso:
fonte
Ruby, 30 caracteres
fonte
awk - 27
Para dar o parâmetro em stdin, execute-o como:
Apenas por diversão: a "versão positiva do pensamento" começa com um definitivo
yes
:NR-1
é necessária para imprimir(char)0
paraNR==1
. :-(E por que não temos um
no
comando? Isso é meio cruel!fonte
alias no='yes no'
J - 5 bytes
{.
é Head,a.
é Alphabet (uma lista de todos os caracteres) e os&
une, gerando um verbo monádico chamado:Nota : Parece que isso não funciona de maneira interativa: Jconsole e jQt parecem configurar uma tradução, gerando caracteres de caixa em vez de alguns caracteres de controle. Em um script ou na linha de comando, ele funciona:
fonte
{.&a. 127
, não é?char
ou equivalentes.gs2, 2 bytes
Isso deveria estar competindo, eu acho! Teria funcionado mesmo nos primeiros dias do gs2. Experimente aqui.
fonte
Brainfuck, 44 bytes
Espera uma sequência decimal sem uma nova linha à direita.
Experimente online.
Ler números inteiros na faixa
[0, max_cell_size]
de brainfuck não é difícil. Convido você a inventar um método limpo por conta própria. Considero isso um exercício de nível iniciante. (A operação reversa de impressão do valor numérico de uma célula está mais envolvida e pode ser considerada uma tarefa de nível intermediário.)Aqui está uma versão de 58 bytes que pode lidar
256
com implementações de 8 bits:fonte
Golfscript - 5
Graças a @Dennis
fonte
~,""+
é mais curto e processa corretamente a entrada do STDIN.;"65"
, uma vez que a entrada do STDIN sempre será uma string.Lua -
4341 bytesfonte
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Befunge 98, 22
Meio triste que isso seja tão longo.
fonte
Python 3.4 - 36 bytes / 43 bytes
255 entrada ()
Como isso funciona é:
O segundo apenas remove o espaço que separa cada caractere em troca de 7 bytes.
fonte
map
retorna uma lista, então você poderia apenas fazerf=lambda i:map(chr,range(i))
Pascal 87
Pascal 73
Cria e roda bem em http://www.onlinecompiler.net/pascal
fonte
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 ASM (Linux) (muitos bytes, a menos que você o compile)
Written as a function, assumes parameter is passed in AX (I forget the number for the read syscall) Also doesn't preserve [SP] or BX.
fonte
Perl - 29
fonte
Ruby, 23
Explanation
*
) invokes#to_ary
on the Range to print every character on its own line.fonte
Julia: 20 caracteres (REPL)
Isso é próximo ao exemplo da pergunta: apenas gera os caracteres e deixa o REPL fazer o que quiser com eles.
Julia: 33 caracteres
Imprime cada caractere em uma linha separada.
fonte
M (MUMPS) - 21
R n F i=1:1:n W $C(i)
Em forma expandida:
READ n FOR i=1:1:n WRITE $CHAR(i)
fonte
T-SQL:
6863Como um loop de impressão
T-SQL:
9586Como uma consulta
Edit: Feito alterações e correções apontadas por Muqo. Obrigado. Correções e golfe sugeridos por @ t-clausen.dk
fonte
GOTO
with label. For the query, maybe specifymsdb.sys.objects
to guarantee enough objects. Also, it doesn't output CHAR(0). However, as consolation you canORDER BY @
.BrainFuck -
140112 BytesExperimente aqui!
Salva 28 bytes mudando
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
para[<<<->->->-]
.O que faz
fonte
Barril , 4 bytes (SBCS)
TIO
Push push, tabela de saída ASCII.
fonte