Desafio
Imprima os seguintes caracteres:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
O problema é que você não pode usar nenhum deles em seu código.
Você pode imprimi-los em ordem arbitrária, com ou sem uma nova linha inicial ou posterior, mas não pode imprimir outros caracteres.
Regras
- Você não pode usar nenhum caractere do conjunto mencionado acima
- Você pode usar outros caracteres
- Sem trapaça
- Falhas padrão proibidas
- Este é o código-golfe , a resposta mais curta vence.
Esclarecimentos
- Se o seu idioma usar um conjunto de caracteres diferente, você não poderá usar pontos de código nesse conjunto de caracteres que correspondam a caracteres alfanuméricos.
- Retornar uma string de uma função é considerado uma forma válida de saída.
- Você pode retornar uma matriz de caracteres.
code-golf
string
kolmogorov-complexity
restricted-source
dkudriavtsev
fonte
fonte
Respostas:
V ,
87 bytes1 byte salvo graças a @DJMcMayhem, colocando tudo em uma instrução regex
Experimente online!
Saídas:
Nota: não
×
é ou éx
X
0xd7
Hexdump:
Explicação
Agora a saída se parece com:
Temos que remover todos os caracteres não alfanuméricos e o
_
(já que não está incluído\W
), então vamos fazer isso usando regexfonte
Ó×ü_
(o que equivale a:s/\W\|_//g
)Oitava ,
52 4640 bytesIsso avalia como
Explicação
Aqui, estamos usando o fato de que os caracteres são implicitamente convertidos em números inteiros quando operações aritméticas como
+-
ou a função range:
são aplicadas. Quando concatenados com uma sequência vazia ([...,'']
), os números novamente são convertidos em caracteres.Experimente online!
fonte
+1
por ser a primeira língua não esotérica em um desafio muito adequado aos esolangs.+1
, não para usar o Octave (é bastante direto), mas para jogar isso muito bem e usar_
como variável! Não fazia ideia de que era possível ... Legal!brainfuck ,
77767572 bytesExperimente online!
Como funciona
O intérprete começa com uma fita de 0 células.
Isso define a primeira célula como 8 , deixando a fita no seguinte estado.
Isso incrementa a segunda célula uma vez, a terceira célula 6 vezes, a quarta célula 4 vezes, diminui a quinta célula uma vez, depois volta para o início da fita e diminui a primeira célula. Após 8 iterações, a fita se parece com a seguinte.
Avançamos para a segunda célula e a incrementamos duas vezes, preparando-se para imprimir os dígitos.
Isso imprime a terceira célula, a incrementa e depois volta para a segunda célula e a diminui. Após 10 iterações, imprimimos
0123456789
e a fita se parece com a seguinte.Hora de preparar a fita para as cartas! Começamos avançando duas células.
Isso incrementa a quinta célula uma vez, a sexta célula duas vezes, a sétima célula três vezes, depois volta para a quarta célula e a diminui. Após 32 iterações, a fita se parece com a seguinte.
Como último passo antes de imprimir as letras, avançamos para a quinta célula e a incrementamos duas vezes.
Finalmente, avançamos para a sexta célula para incrementá-la e imprimi-la, fazemos o mesmo para a sétima célula, depois voltamos para a quinta célula e a diminuímos. Após 26 iterações, imprimimos
Aa...Zz
.fonte
Ruby, 42 bytes
Uma função que retorna uma matriz de caracteres. Um programa que gera apenas os caracteres tem 49 bytes:
Isso simplesmente usa os caracteres ascii em ambos os lados dos intervalos relevantes para definir um intervalo. Por exemplo,
?/...?:
significa os caracteres entre uma barra e dois pontos, excluindo o final. Para se livrar do começo, subtraímos uma matriz contendo os três caracteres iniciais.fonte
6502 linguagem de máquina,
747068 bytesHex dump (programas 6502 geralmente não são realocáveis; o código aqui é armazenado a partir do local $ 0603):
Você pode ver que isso usa nenhum dos bytes proibidos: US $ 41 a US $ 5a, US $ 61 a US $ 7a ou US $ 30 a US $ 39.
Esta é uma função sem argumentos que, quando chamada, retorna um ponteiro para a matriz de caracteres "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" na parte superior da pilha, de acordo com as convenções de chamada padrão 6502.
A título de explicação, aqui está uma desmontagem:
O código do idioma da máquina é auto-modificável. Para manipulação de pilha, eu precisava usar PHA e PLA para empurrar e acionar o acumulador, mas essas instruções têm códigos de operação $ 48 e $ 68, que são proibidos (são os códigos ASCII para as letras 'H' e 'h'). Portanto, para o PHA, pego o número $ 24, faço um deslocamento aritmético para a esquerda (ASL) e armazeno os $ 48 resultantes nos quatro pontos do código em que ele precisa ser executado. Em seguida, para o PLA, eu uso um OR bit a bit nos US $ 48 no acumulador para calcular US $ 68 e armazená-lo nos dois pontos no código onde é necessário.
Havia várias instruções além de PHA e PLA que eu também não poderia usar porque seus códigos de operação são os mesmos que letras ou dígitos ASCII, mas achei soluções alternativas diretas para esses outros.
A matriz de caracteres desejada é calculada e armazenada começando no local 0 (realmente não importa onde está armazenada, pois precisamos ter certeza de que um ponteiro para ela retorne ao topo da pilha).
Você pode tentar fazer isso no emulador e montador 6502 do Nick Morgan . Aqui está uma captura de tela; a caixa do monitor na parte inferior mostra a sequência de saída (nos locais $ 00 a $ 3D) após a execução do programa.
fonte
Haskell ,
75 72 63 5856 bytesExperimente online! Ligue com
__
. Resultado:Obrigado ao xnor que sugeriu
__
e_'
como nomes de variáveis de dois bytes em vez de(!)
ou semelhantes, economizando 9 bytes. Eu gosto especialmente de como_'
quebra o destaque da sintaxe. E obrigado novamente ao xnor por generalizar os intervalos, economizando outros 4 bytes.Edit: eu descobri que caracteres Unicode são permitidos como identificadores em Haskell, por isso, por exemplo
ä
,ö
... pode também ser usado como dois identificadores bytes. Como restava um identificador de três bytes no programa, substituí-oä
, economizando outros 2 bytes.Explicação:
__
e_'
são nomes de variáveis válidos. Na especificação de idioma :Portanto, o código é equivalente a
Na lista, a compreensão
a
fica vinculada a'/'
eb
a':'
("/:"
é equivalente a['/',':']
, portanto a correspondência de padrões é bem-sucedida). Em seguida, o intervalo[a..]
cria a sequência de todos os caracteres maior que igual'/'
:Para cada caractere
x
nessa sequência, é verificado se'/'<x
ex<':'
, resultando nos caracteres0123456789
. Entãoa
eb
são obrigados a@
e[
, produzindo os caracteresABCDEFGHIJKLMNOPQRSTUVWXYZ
e assim por diante.fonte
__
e_'
como variáveis.Underscore is treated as a lower-case letter
regra._'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__']
(em variáveis normaisz=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]
).__
vez de_'_
, embora__
seja usado como identificador dentro da compreensão da lista.Perl (5.10 ou 5.12),
3029 bytesEste programa consiste principalmente de caracteres não imprimíveis, então aqui está um hexdump:
Este programa é muito simples: estamos regexing (
=~
) um sublinhado (_
; obrigado @Dennis por apontar que isso funciona) contra um regex. O regex é especificado como uma expressão, em vez de literalmente; especificamente, estamos usando o complemento bit a bit (~
) de uma string. Revertendo o complemento bit a bit para obter a cadeia subjacente, obtemos o seguinte regex que está sendo executado:Nas versões 5.10 e 5.12 do Perl, a
(?{…})
sintaxe era uma sintaxe experimental para permitir que as expressões regulares executassem código arbitrário no tempo de execução. Nesse caso, usamos-o para executar um programa Perl simples para imprimir a saída desejada. (Versões anteriores à 5.10 não podem ser usadas porque não possuemsay
.)As versões modernas do Perl foram desativadas
(?{…})
por padrão por razões de segurança, mas se você tiver uma versão do Perl, poderá desativar a verificação (e, portanto, executar este programa) via-Mre=eval
como um argumento de linha de comando (junto com o padrão-M5.010
que especifica a versão da linguagem a ser implementada e que não conta contra o bytecount).fonte
Na verdade
854 bytesComo funciona:
A impressão está implícita no final do programa.
Editar 1: Substituído, colocando o alfabeto em maiúsculas / minúsculas e, em seguida, o intervalo numérico (10), obtendo apenas os caracteres imprimíveis da base 62.
Editar 2: alterado ">" para '> graças ao Mego :) economizou 1 byte.
Experimente online!
fonte
'>
é um byte menor que">"
.PHP, 69 bytes
O código é estilizado usando o Windows-1252 aqui. Abaixo está um hexdump reversível xxd .
Experimente online!
fonte
Java (OpenJDK 9) , 277 bytes
Sim, Java, você leu bem!
Experimente online!
Isso imprime os intervalos, mas invertidos, pois o pedido não tem importância.
Eu joguei na ausência da regra "sem entrada" para definir implicitamente uma
char
que é necessária para fazer a coisa toda funcionar. Se isso é trapaça, diga-o.Ungolfed & testing
fonte
char
, caso contrário, seria um pedaço de bolo. E para ser justo, minha resposta é mais curta que a sua resposta inicial. Dê uma olhada na minha explicação para todas as despesas gerais pelas quais tenho que passar.Brainfuck,
8985 bytesComo o brainfuck ignora caracteres alfanuméricos de qualquer maneira, este é apenas um desafio de saída constante ... (Edit: See Dennis 'Solution para uma versão 10 bytes mais curta)
Experimente online!
Este código é um bom exemplo de loops contados básicos no brainfuck:
Observe que isso usa atalhos de quebra automática para gerar números, o que significa que o intérprete precisa ter células de quebra automática de 8 bits (como a que eu vinculei).
fonte
JavaScript (ES6), 983 bytes
Acontece que no ES6 existem muitos caracteres que você pode usar nos nomes de variáveis JavaScript ! Funciona muito bem após você esgotar os seis nomes de variáveis de 1-2 bytes com
$
e_
.JavaScript, 1223 bytes
Esta foi a minha resposta antes de aprender o que foi dito acima.
Corri
console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
pelo jjencode e joguei o resultado manualmente. Definitivamente, existem mais otimizações que podem ser feitas.fonte
Befunge,
737259575553 bytesExperimente online!
Este é um loop único com contagem decrescente de
{
(ou seja, um caractere depoisz
). Na primeira iteração, a"{"<
sequência envia duas cópias{
para a pilha - uma sendo o contador de loop inicial e a outra sendo usada para decrementar esse contador usando a sequência!!-
(dois NOTs produzem1
, que são subtraídos). Nas iterações subseqüentes, o contador de loop já está na pilha, portanto, apenas um{
é necessário para configurar a sequência de decréscimo.O restante do código é apenas uma expressão booleana longa que calcula se o caractere está dentro do intervalo. Se for, o ramo na segunda linha se divide para a esquerda para escrever o valor. Caso contrário, o ramo direito será usado para testar se chegamos a zero e devemos terminar. Os dois ramos se fundem no meio para subir e repetir o loop. Observe que todos os comandos de direção vertical sobem, pois não podemos usar a
v
, mas isso é bom porque o ponteiro de instruções é automaticamente agrupado na parte superior do campo de jogo.Agradecemos a Mistah Figgins por ter apresentado inicialmente uma técnica melhor para o incremento do loop.
Mas um agradecimento especial a Jo King por uma abordagem ainda melhor na contagem regressiva, em vez de acima, além de um layout de filial mais compacto.
fonte
v
pois isso é de fonte restrita, mas ainda funciona tão bem com a^
. Obrigado.Geléia ,
1716 bytesExperimente online!
Como funciona
fonte
Brainfuck auto-modificável , 32 bytes
Experimente online!
xxd -r
hexdump reversível (contém não imprimíveis):fonte
@/
faz?`\x1a@\x1a/\n
estão lá porque seus pontos de código são realmente úteis no golfe. Você não pode removê-los.+.
vez de.+
.C, 128 bytes
Sim, C. E é ainda mais curto que alguns dos esotéricos.
Chame
_
umchar *
buffer suficientemente grande e vazio .Pode ser um pequenino dependente do compilador. Testado usando o GCC; O arquivo foi salvo na página de código 1252.
fonte
JavaScript (ES6),
812745657650536520416 bytesEditar: usando a codificação ISO8859-1, esta solução tem 416 bytes em vez de 520 bytes. O programa completo tem 432 bytes, levando em consideração os 16 bytes extras para
Este é um envio de função, em oposição a um programa completo. Passei muito tempo jogando golfe no JJEncode (gorjeta para darrylyeo por isso), mas em vez de jogar golfe
Eu jogava golfe
onde
Ø
é inicializado""
na sobrecarga.Reescritos com operadores de vírgula convertidos em novas linhas:
Explicação
Esse script começa inicializando alguns tipos internos e coagindo-os em strings. As strings que podemos obter sem usar caracteres alfanuméricos são:
A partir dessas strings e dos dígitos necessários para fazer referência a caracteres individuais, podemos obter as strings
return
econstructor
, que podem ser usadas como:O construtor do objeto é
Object()
, e seu construtor éFunction()
, que podemos usar essencialmente comoeval()
.Nesse caso, o script codificado a ser executado são os
for
loops aninhados que concatenam todos os caracteres alfanuméricos em uma string usando seus pontos de código e retornando-os.Para caracteres alfabéticos no script codificado que não podem ser acessados usando os built-ins, o JJEncode usa escapes octais para representá-los e decodifica a cadeia inteira, retornando-a de uma função interna. A função externa pode ser chamada para executar a fonte.
Demo
fonte
Flacidez Cerebral , 171 bytes
Inclui +3 para
-A
Experimente online!
Provavelmente existe uma maneira de fazer isso sem precisar repetir a função "add 1".
fonte
Julia 0.4 , 46 bytes
Essa é uma função genérica que retorna uma matriz de caracteres.
Experimente online!
Versão alternativa, 47 bytes, somente ASCII
Experimente online!
fonte
J, 171 bytes
Ow ... meu cérebro dói ... Experimente online!
Aqui está para que você possa ver tudo em uma linha (no entanto, não será executado com quebras de linha).
Garantido apenas para trabalhar com a versão J
j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
, nessa ordem. (Apenas os 12 primeiros caracteres são importantes.)Explicação
A maior parte do programa é dedicada à geração constante. Com essas constantes substituídas por seus valores, o programa fica assim:
Com alguns parênteses removidos e alguns números mais agradáveis:
Este é composto por um monte de
,
e,~
s, o que acrescentar e argumentos preceder. Aqui estão os valores separados:":26
('.',~10{9!:14'')
'+/'
(":65 97 48)
','
(':',~12{9!:14'')
1
é26
como uma string.9!:14''
gera a seguinte string no TIO:com
2
, obtemos o10
caractere th (i
delinux
) e adicionamos.
a ao final dele, produzindoi.
.3
e5
são auto-explicativos.4
é a lista de números65 97 48
como uma sequência.6
é semelhante a2
, exceto que é o12
caractere th (u
delinux
) e adiciona:
a ao final, produzindou:
.Tudo isso, em conjunto, produz
u:,65 97 48+/i.26
.".
avalia isso, dando-nos:(Nota:
+/
é uma adição tabulada.)Então, com
62{.
, pegamos os primeiros62
caracteres disso, dando-nosABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
.fonte
<:<.^^*_
que salva um byte. Além disso, tentei gerar todo o intervalo e remover os símbolos para obter':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'
104 bytes. Tenho certeza de que ele pode ficar muito mais curto05AB1E ,
181511 bytes-4 graças a Adnan, porque se o tamanho da entrada for 1, 05AB1E usará 0 para b no primeiro comando.
Experimente online!
Eu tentei tantas abordagens diferentes, mas os principais pontos aqui que dificultaram:
fonte
You may print them in arbitrary order
diz o desafio.•£•Ýç©á®þ«˜
também funcionam?Brainfuck, 55 bytes
Resultado:
Experimente online!
Inicializa a fita para 3,2 · n e funciona a partir daí.
fonte
Perl 6 , 43 bytes - não-concorrentes
Um lambda que retorna uma lista de caracteres.
Explicação:
Depende de uma correção de bug do interpretador Rakudo Perl 6, que só foi comprometida com o repositório git hoje e ainda não faz parte de um lançamento oficial do Rakudo. De fato, encontrei o bug ao responder a esse desafio e consegui ser corrigido com a ajuda de um dos desenvolvedores principais do Perl 6. As regras deste site, como eu as entendo, não permitem respostas para competir em tal situação, então eu o marquei como não competidor.
fonte
PHP 7.0 ou superior, 110 bytes
Deus abençoe cordas bit a bit!
Substitua
\n
por uma nova linha real no estilo * NIX.Está presente no código para evitar problemas com novas linhas, mas não é contado na pontuação.
Isso gera vários avisos, mas esses podem ser suprimidos anexando-se um
@
na frente de todos os perdidos_
.Sem aviso , 113 bytes
fonte
Idioma da máquina 65c02 + Apple] [ROM, 25 bytes
Imprime
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.Deve começar às
$8000
.Desmontagem
fonte
10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253
, que mapeiam para os caracteres em↵.. ,`.¢©¯ÀÊÐàíùý
que.
s são caracteres não imprimíveis. É válidobash (no linux),
507493490485 bytesisso armazena uma matriz de caracteres na variável global
__
ele precisa ser executado em uma máquina Linux recém-inicializada com
/proc
, ou algo como um namespace pidexplicação:
para experimentá-lo, podemos adicionar
declare -p __
no final para exibir o resultadofonte
/proc
. De fato,/proc
não é estritamente necessário no Linux, embora você provavelmente tenha dificuldade em encontrar uma distribuição moderna sem ela.Javascript, 1273
13511610bytesEsta solução funciona essencialmente da mesma forma que as outras duas respostas sobre esta discussão aqui e aqui , onde ele usa cartas dos
true
,false
,undefined
, e[object Object]
cordas para construir as funções que necessita para gerar as outras letras.Como um bom número de letras já foi colocado no objeto, tentei adicionar todas as letras minúsculas restantes e os números ao objeto e, em seguida, apliquei
toUpperCase
a todos os valores no objeto para gerar as letras maiúsculas ausentes.Atualizar:
Consegui melhorar a maneira como os valores octais estavam sendo definidos, mas eles ainda ocupam 13 x 30 bytes (ou serão 30 bytes depois que eu mudei os números para chaves diferentes), agora cada um segue essa regra geral. padrão:
$.ž=\'\\'+$.一+$.七+$.二+'\';
.49 bytes adicionais podem ser facilmente removidos alternando as teclas dos números para caracteres de 2 bytes.
Envio atual:
fonte
C (clang) , 164 bytes
Experimente online!
Essa é uma função recursiva que obtém os caracteres começando com um valor de 1 (subtraindo de si e incrementando) e cria todos os outros números a partir disso.
Ungolfed / Explicação:
fonte
CJam , 15 bytes
Experimente online!
Explicação
fonte
8, 8 caracteres / 19 bytes
Experimente aqui!
ᶐ
é o alfabeto maiúsculo,ᶛ
é o alfabeto minúsculo e⩥Ⅹă⬯
está no intervalo (⩥
) de0
até10
(Ⅹ
, o número romano unicode) menos1
, unido por (ă
) nada (⬯
).fonte