Sua tarefa é criar um programa (usando apenas caracteres ASCII imprimíveis e / ou guias e novas linhas) que imprima exatamente os caracteres no espaço ASCII imprimível ( 0x20
para 0x7e
) que não apareçam no código-fonte do programa (em qualquer ordem, no entanto) quantas vezes você quiser).
O código mais curto para fazer isso em qualquer idioma vence.
code-golf
self-referential
Joe Z.
fonte
fonte
0x20
para0x7e
, que são definidos como os "caracteres ASCII imprimíveis". Tecnicamente, guias e novas linhas são realmente caracteres de controle.Respostas:
GolfScript,
1512 caracteresBaseado na resposta de Jan Dvorak com algumas reviravoltas e também no estilo da de Peter Taylor .
fonte
Poliglota, 95
tclsh
,bash
,sh
,ksh
, etc)main()
for necessário. Graças ao urogênioFaz nada.
fonte
#undef X;whatever junk you want
funciona.#
para comentários como Ruby e Perl)PHP 5.2, 4
Salve como um arquivo chamado
NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
em algum lugar/home
.short_open_tag
precisa estarOn
no seuphp.ini
.A saída é:
fonte
:
na saída.JavaScript - 88
imprime "bcdfghijkmnpquvxyz"
fonte
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
porque95*72
=6840
e mover os caracteres desperdiçados para uma sequência permite usar as aspas em vez de desperdiçá-las. Além disso, ocultar os caracteres em um comentário é extravagante.Espaço em branco,
6157 caracteresNão é o mais curto, mas provavelmente possui a lógica mais simples (na verdade, é apenas um loop).
Aqui está completamente comentado, onde S é espaço, T é tabulação, L é avanço de linha:
Obrigado a @res pela correção do procedimento acima (duplicata extra necessária para a instrução de ramificação) e por números menores para empurrar a pilha.
fonte
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.LSSSL
se tornaLSSL
eLTTSL
se tornaLTTL
) e remover a saída no final (os trêsLLL
). Experimente online cru 52 bytes ou aqui com destaque e explicação .C,
837469 caracteresEu realmente tentei reduzi-lo para menos de 80 caracteres, mas não consegui fazê-lo. Finalmente, decidi postar o que tenho, supondo que eu (ou outra pessoa) descubra a solução de 79 caracteres dez minutos depois de postar isso.Ok, não foram dez minutos, mas funcionou em princípio.Eu realmente queria postar uma versão que não precisasse ter um espaço gratuito no código-fonte, mas que aterrisse em uma órbita de atrator estranho, saltando entre várias soluções. Depois de muitos minutos tentando empurrar um deles para uma solução estável, desisti e adicionei o espaço.
fonte
Golfscript,
2624 caracteresPega um script de geração de intervalo, duplica-o, executa-o, subtrai-o de seu resultado e depois subtrai o código de subtração de resultado e o outro caractere de citação.
fonte
''+
, escapar programa antes da subtração, colocar em um noop.;
(não encontrar uma maneira melhor para cobrir a ponto), o uso bloco de código em vez de string ->{126,33>`-.;}.~
que é de 16 caracteresPeixe - 80
Quando os erros de peixe são impressos "algo cheira a peixe ...". Como z é uma má instrução, ele erros imediatamente
fonte
Eu sei que não está ganhando nenhum concurso. Eu só queria experimentá-lo em um idioma que normalmente não é usado, apenas por diversão.
Java -
209195152140 caracteresCom quebras de linha e guias
Cuidado se você executar: o programa não termina. Haha
Explicação
for(char c=0;;c++)
: Como umchar
pode ser tratado como umint
, uso isso como vantagem aqui para incrementar todos os valores possíveis dec
. Omiti a condição de término no loop (a que iria entre os dois pontos e vírgulas) para economizar caracteres, pois não foi especificado que o programa deveria terminar. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
: Infelizmente, não é uma abordagem muito elegante, mas faz o trabalho. Liste manualmente todos os caracteres presentes no código-fonte como umString
literal e verifique se a correntechar c
ocorre neleindexOf()
. Se aindexOf()
chamada retornar-1
, ela não existe e, portanto, devemos imprimi-la. O restante apenas usa o operador ternário para economizar caracteres e espaço.fonte
Perl, 49 caracteres
Esse é um desafio interessante - é uma espécie de anti-quine, e eu consegui encurtar o programa algumas vezes aumentando o intervalo de caracteres que aparecem nele.
fonte
Ruby,
817868666257Simplesmente se verifica. Caracteres duplicados removidos manualmente.
Agradecemos a Josh por salvar 4 caracteres e a minitech por salvar 5 caracteres!
fonte
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
55 bytes usando uma abordagem diferente.Befunge (48)
Saídas: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240
fonte
Não é muito sério, mas eu tive que tentar:
JSFuck (138152)
(fonte compilada aqui)
Fonte original:
Imprime todos os caracteres, exceto () + []!
fonte
(x)
<=>[x][+[]]
, aumenta o tamanho do código, mas reduz o alfabeto necessário.Puxa, você dificultou a APL (isso é delibarate?)
Então eu decido ignorar todas as regras !!!
APL (Dyalog),
310Imprime o vetor atômico (que inclui todos os caracteres ASCII imprimíveis)
Acontece que eu esqueci completamente a parte "sem" ...
Mas isso é uma solução fácil
~'AV'''
significa excluir (~
) os caracteres A, V e aspas simples (escapou como aspas simples duplicadas)Em relação à impressão não-ASCII, bem, estou ignorando todas as regras.
fonte
0x20
para0x7e
) que não aparecem no código-fonte do seu programa" Acredito que a saída pode não conter caracteres fora do espaço ASCII imprimível ("exatamente" sendo a palavra-chave) , e seu programa contém 'A' e 'V' para que não sejam impressos.~
ao conjunto de caracteres excluídos. ;-) Btw, uma solução J semelhante seria #a.-.'a.-'''
GolfScript (
1816 caracteres)Demonstração online com uma linha extra que verifica a correção e gera o número de caracteres com erro.
(Eu tenho várias alternativas equivalentes.
@`^
Pode ser substituído por\\`
;#
pode ser substituído por`
ou]
. A combinação certa pode ser usada com o truque de Howard para igualar sua pontuação de 15 porque as barras invertidas não precisam escapar em blocos da maneira que fazem nos literais de string:{),\`^32>].~}.~
Mas Howard merece o crédito por esse truque).fonte
}~
- ainda melhor para blocos de código, ver a minha nova resposta ;-)Brainfuck, 173
Por muito tempo, posso tentar novamente mais tarde.
fonte
J (
5240)Edit: Duh, esqueci
e.
Versão antiga:
Outra variante (mesmo comprimento, mas menos saída):
fonte
Python 3 -
6861... obrigado a @WolframH pelas melhorias.
exec(x)
em uma nova linha e salvar o;
nox
. Além disso, no Python 3, você pode usarx=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
para 61 caracteres (imprime vários espaços, o que é permitido).PowerShell: 96
Deve ser salvo e executado como um script.
diff
é um alias interno paraCompare-Object
.gc
é um alias interno paraGet-Content
.$MyInvocation.InvocationName
obtém o caminho completo para o script que está sendo executado.32..126
é o equivalente decimal para0x20..0x7e
e, portanto, cria uma matriz dos códigos ASCII decimais que estamos procurando.[char[]]
pega o conteúdo do próximo objeto e os coloca em uma matriz, dividindo-os e convertendo-os em caracteres ASCII. Portanto, agora temos duas matrizes de caracteres ASCII - uma extraída desse script, a outra definida pelo critério de desafio.-Pa
defineCompare-Object
para o formato "Passthru", para que apenas os itens que são encontrados diferentes entre as entradas sejam exibidos no console - indicadores de quais itens estavam em que entrada ainda são armazenados nos dados do objeto, mas não são exibidos.|?{$_.SideIndicator-eq'=>'}
Compare-Object
saída de pipes paraWhere-Object
, que o filtra apenas para os itens exclusivos da segunda entrada.fonte
PHP - 92
Resultado:
nada
O OP pede para imprimir todos os caracteres não utilizados, bem, eu apenas os uso todos
fonte
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?!;>Xn
Javascript, 92
fonte
fonte
Java - 126 caracteres
minimizado:
não minimizado:
Esse é um problema interessante, porque os tokens individuais podem se beneficiar de sua forma mais longa porque reutilizam caracteres. Por exemplo, normalmente
String[]
seria mais curto, masString...
elimina a necessidade de colchetes na sequência condicional.Descobri que o truque era tentar usar caracteres no início e no final do intervalo para que você possa excluí-los da saída simplesmente alterando o início e o fim do loop.
Para Java, um personagem-chave para excluir é
"
, porque ter que na seqüência requer escapar dela, que adiciona\
ao seu programa, que precisa ir na corda, que acrescenta\\
. Ao remover"
da sua cadeia condicional, você remove 4 caracteres. Isto pode ser conseguido por ter certeza que você usae
!
e iniciar o seu ciclo de#
.Todas as letras minúsculas aparecer perto do final do intervalo, com apenas
{
,|
,}
e~
atrás deles. Devido à verbosidade do Java, a maioria das letras minúsculas é usada apenas para o clichê. Da mesma forma,{
e}
são triviais para um programa Java, porque o clichê requer isso.|
pode ser usado se você tiver uma condição ou, mas não consegui encontrar uma maneira de tirar vantagem de uma que leva a um programa mais curto do que apenas usar|
como um operador bit a bit. O|0
que me faz sentir um pouco sujo, porque é a única parte que é um nop apenas para obter o personagem lá dentro.~0
rendimentos-1
, o que é útil, porque é com isso que precisamos verificarindexOf
. Combinar isso com o uso!=
do loop condicional elimina<
completamente o caractere, o que significa que ele não precisa entrar na sequência condicional.fonte
sh (47)
Usa a abordagem auto-referencial. Assume
/dev/urandom
, eventualmente, produza todos os octetos pelo menos uma vez. Não termina.Se assumirmos que
man
está instalado, poderíamos fazer uso da página deascii(7)
manual (e, portanto, ter um programa de encerramento) ( 44 caracteres, obrigado @fennec).fonte
man
ezsh
são instalados,man zshall
parece se encaixar nos critérios. Eu poderia acrescentar isso como uma variação.man ascii
poderia poupar outra carta, eu acho.tr
você está usando? O GNUtr
trata o-
in "cat $0
" como um operador de intervalo, que interrompe a saída.ascii
programa estiver instalado, você poderá usá-lo no lugar deman ascii
.BitShift , 1038 bytes
BitShift é uma linguagem que suporta apenas
0
e1
como sintaxe. Imaginei que seria fácil imprimir todos os outros caracteres, mas, como ele realmente não suporta loop, ele ainda acabou com 1038 bytes.No entanto, acredito que não é realmente possível ser menor do que isso ..
Impressões
Experimente aqui
fonte
Definitivamente a solução mais longa aqui, mas a codificação no Lino é sempre divertida:
L.in.oleum -
655523 caracteresSem comentários, apenas lê a fonte compilada em binário. Salvar como
a.txt
ou não será compilado!fonte
Brainfuck,
133123114110 bytesUm pouco mais de mexer com uma solução anterior (antes que eu percebesse que o abaixo era menor - embora isso tenha acontecido antes de fazer uma otimização pesada). Isso funciona armazenando 4 conjuntos de números ASCII, imprimindo-os com alguns ciclos complicados e fornecendo os caracteres ausentes posteriormente (ou seja, aqueles que estão entre números ASCII inválidos).
Submissão original
Faz o seguinte:
fonte
Haskell (70)
A solução chata de duplicar caracteres no programa em uma string e subtrair do conjunto universal. Longe de ser um vencedor do codegolf, embora seja surpreendentemente legível por sua extensão.
(Agora com subtração da lista em vez de
filter
/notWith
.)fonte
import Data.List
paraimport List
runhaskell
: "Não foi possível encontrar o módulo 'Lista'". Percebi que, porém, eu descontava o número de caracteres, então eu o corrigi.J - 21
escreva isso em um arquivo chamado
5
no diretório atual. Em seguida, carregue execute o script com0!:1<'5'
Ou 25 sem o truque de arquivo:
fonte
'
, que não é removido da saída.Clojure (
142, 106103)formatado:
Pense que isso acontece, pode precisar de alguns ajustes. resultado:
executa a sequência, que é um código clojável avaliável, por si só. A string possui alguns comentários no final para obter os caracteres usados fora da string (método principal, etc.)
fonte
Python 2, 69
Uso a sequência mais longa (que consigo encontrar) de caracteres contínuos que posso imprimir e adicionar os outros como um comentário após o código.
fonte