Escreva todo o orifício usando o orifício

55

Os caracteres ASCII do código decimal 33 a 126 são:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Observe que na maioria das fontes, 25 desses caracteres têm "buracos": (um gênero maior que 0, você pode dizer)

#$%&04689@ABDOPQRabdegopq

Os outros 68 caracteres "não furados" são:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Sua tarefa é escrever o programa mais curto possível usando apenas os caracteres não furados que produzem cada um dos caracteres furados exatamente uma vez em qualquer ordem.

Como Espaço, Tab e novas linhas (avanço de linha e / ou retorno de carro) são espaços vazios, eles podem aparecer no seu programa ou em sua saída. Eles ainda contam para o número de caracteres. Outros caracteres ASCII não podem ser usados ​​(e certamente não caracteres não-ASCII).

Notas

  • Você não precisa usar todos os caracteres não gravados nem apenas um de cada.
  • A saída pode não conter caracteres não furados.
  • O idioma de espaço em branco pode ser usado.
  • A saída deve ir para stdout ou pode ir para um arquivo. Não deve haver entrada.

Bônus: Apenas por diversão, tente imprimir todos os caracteres não gravados usando os caracteres ocultos. Estou cético de que isso possa ser feito em um idioma existente.

Passatempos de Calvin
fonte
9
+1 para o título. Nós fazemos coisas amor como esse .
29414 Jacob
11
Onde está a solução Perl ?!
Pierre Arlaud
4
Bem, nenhuma solução em Haskell ou C; se é um programa que você deseja, precisa soletrar main.
Rhymoid
2
O bônus pode ser feito usando espaço em branco.
217 Joshua Joshua
11
Como ninguém percebeu que eu esqueci ~?
de

Respostas:

18

Pitão , 43 35 caracteres

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Experimente aqui .

Imprime os caracteres em ordem, exceto que 9 está no início, nova linha separada.

A string contém todos os caracteres 7 maiores que os necessários, exceto que 9 se tornaria @, portanto, é especial. Algoritmo graças a @Howard.

Explicação:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.
isaacg
fonte
24

GolfScript, 37 36 caracteres

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Experimente o código aqui .

A string contém os caracteres proibidos com 25. Felizmente, todos os caracteres são mapeados para caracteres válidos.

Howard
fonte
22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.
Teun Pronk
fonte
uh, o --no início ... Você está de bicicleta de volta a 254 no registo inicial lá?
21414 WallyWest
11
Yup :) Faz o loop para 36 mais curto (a fim de obter a 35)
Teun Pronk
Bem, certamente bate o meu 275 ... bem feito ...
Wally West
@ Hobbies de Calvin Tenho quase certeza de que nenhuma entrada é permitida, desculpe. O OP pode querer esclarecer, no entanto.
Isaacg
@isaacg Eu sei, é por isso que o meu principal entrada doesnt código take eo último exemplo não é sério :)
Teun Pronk
20

Bônus - dc, 179 caracteres

Oh, bom, outro desafio restrito do conjunto de caracteres Pé permitido.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Uma vez que dcé aparentemente obscuro o suficiente para exigir explicações (estranho para mim, considerando as coisas estranhas por aqui!), Aqui está uma visão geral:

É principalmente uma calculadora RPN com aritmética de precisão arbitrária. Mas para esse desafio, estou usando o Pcomando, que interpreta um número como uma série de caracteres na base 256 e os imprime. Exemplos: 65 Pimpressões A(código ASCII 65). 16706 Pimpressões AB(16706 = 65 * 256 + 66).

Além disso, a única outra característica interessante é que ele reconhece todos os dígitos hexadecimais, 0-9A-Fmesmo quando não estão contidos em um número hexadecimal. A entrada decimal é o padrão; portanto, o token de entrada 999significa 9 hundreds + 9 tens + 9e ABCsignifica 10 hundreds + 11 tens + 12torná-lo equivalente a 1122.

A capacidade de usar os dígitos ABDem decimal compensa parcialmente a incapacidade de uso 12357, e a escolha de ordenar e agrupar faz o resto. (Se eu precisar de alguns números x, y, ze eles não são representável com dígitos permitidos, então eu tento representar x*256*256+y*256+zem vez disso.)

O programa provavelmente pode ser um pouco mais curto usando grupos maiores. Não passei de 3 bytes por número.


fonte
11
@DigitalTrauma, ao contrário, foi o bônus no final da declaração do problema.
Ha! Eu senti falta disso! Excelente! +1
Digital Trauma
Você pode explicar isso? E existe algum lugar onde possamos administrar isso?
Hobbies de Calvin
4
Um lugar onde você pode administrá-lo? dc não é uma linguagem boba projetada para criar programas difíceis de ler, é uma calculadora séria. Execute-o em qualquer máquina unix (ou cygwin). en.wikipedia.org/wiki/Dc_(computer_program)
@ Calvin'sHobbies Se você tem acesso a praticamente qualquer máquina Linux ou Unix (incluindo OSX), simplesmente salve como um arquivo de texto, por exemplo, bonus.dc, e execute dc bonus.dc. dc é um dos idiomas mais antigos do mercado e é um elemento permanente no * nix há literalmente décadas. Porém, não é bem conhecido, provavelmente devido à sua sintaxe misteriosa e pouco legível da RPN. Ótimo para alguns código-golfe desafios embora ;-)
Trauma Digital
12

Bash + coreutils, 56 bytes

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Por sorte, adicionar 7 ao valor ASCII dos caracteres ocultos gera todos os caracteres não perfurados (com exceção de "9"). Então, nós apenas fazemos essa transformação ao contrário, então uma transformação semelhante (subtrai 12 de "E") para obter o "9".

Resultado:

#$%&0468@ABDOPQRabdegopq
9
Trauma Digital
fonte
7
Eu gosto de como a primeira linha subtrai 7 de um monte de caracteres e contém uma -7exibição visível entre caracteres de pontuação, e esses dois fatos não têm nada a ver um com o outro.
@ WumpusQ.Wumbley Eu nem tinha notado isso :) #
Digital Trauma
6

Perl - 49 bytes

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

Esta é praticamente uma versão Perl da solução de Howard. XORing a sequência com 25. A saída é um arquivo com o nome #$%&04689@ABDOPQRabdegopq. Eu tive a ideia de usar symlinke o nome do arquivo como formato de saída, porque todo o resto é banido.

Aqui está outra solução Perl que eu criei. Provavelmente pode ser melhorado bastante e é bastante longo, por isso estou saindo em um formato legível por enquanto.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Este gera muitos arquivos, o nome de cada um é um dos caracteres. Eu não conseguia descobrir como anexar strings sem usar um caractere proibido.

for, while, map, say, print, eval, s///e, E qualquer nome da variável não pode ser usado (variáveis começar com @ou $em Perl) que fez este difícil.

Espero que os nomes dos arquivos estejam bem como formato de saída, porque tenho certeza de que todas as outras formas de gerar informações usam um dos caracteres banidos.

hmatt1
fonte
Vou te dar um +1 por criatividade! Uso muito inteligente de código!
21415 WallyWest
Sei que isso é bastante antigo, mas é possível imprimir a saída na tela e salvar alguns bytes usando a -pbandeira e *_=\(... ): Experimente online!
Dom Hastings
@DomHastings cool! Eu acho que a -pbandeira seria banida, já que ptem um buraco.
precisa saber é
5

MATLAB, 36 bytes

TÃO PERTO .... Apenas 1 byte a mais que o vencedor atual (isaacg)! Que, após uma inspeção mais aprofundada, já fez o que me propus a fazer também. Bem, não há mal em reinventar a roda ...

Sei que esse é um desafio antigo, mas só percebi isso depois que me interessei.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Se ao menos eu conseguisse fazer o MATLAB entender que eu quero uma string sem uma ''... sugestão separada , alguém?

Sanchises
fonte
4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck, a melhor linguagem esotérica não-escavada (além do espaço em branco);)

WallyWest
fonte
11
Exclua os fragmentos antigos, não descarte.
Isaacg
2
Vejo que você usou as coisinhas da citação (não sabe o nome verdadeiro) para seus trechos de código. Pode ser mais fácil para selecionar o código e pressionar Ctrl+ K:)
Teun Pronk
@isaacg Concluído. TeunPronk, pronto!
WallyWest 29/07
6
Ou pressione a barra de espaço 4 vezes, se for apenas uma linha ou duas. @TeunPronk This? `Isso é um truque. (Também chamado de sotaque grave, embora " aspire thingies " seja novo para mim: P)
Maçaneta da porta
11
@Doorknob Então nós dois aprendemos algo hoje, embora o que você aprendeu esteja errado de qualquer maneira: P
Teun Pronk
4

JS - 196 - experimente

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')
bebe
fonte
11
Puxa, isso é loucura. Parece Js é um dos mais idioma abusable =)
flawr
Sim abusable, mas isso é um mero pontinho em comparação com a minha entrada ... @bebe Desculpe, mas eu tenho out-JS'd desta vez ...
Wally West
11
@WallyWest eu declaro guerra.
bebe
11
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- inline l, encurtado m, declarado ino primeiro uso, criou alguns vars extras para padrões repetidos (você poderia melhorar isso ajustando a ordem dos caracteres gerados, mas isso está além da minha paciência: P).
Alconja
2

GolfScript, 89 caracteres

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Simplesmente cria uma matriz de todos os caracteres ASCII e subtrai os caracteres não "ocultados" deles.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string
Maçaneta da porta
fonte
2

Befunge 98 - 69 bytes

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Faz isso em 3 partes. Um em que os valores dos caracteres não furados diferem do caractere furado por 5. Em seguida, os que diferem em 1 e, finalmente, uma lista de caracteres não furados que diferem em 3 dos furados. A instrução de finalização do programa no Befunge é "@" (valor de caractere 64), portanto, no final, carrego "?" (valor do caracter 63) adicione 1 e coloque-o no código com as instruções 's'.

Talvez eu pudesse jogar mais, consolidando os três

>:5j2 ,(differ value)_

seção, mas provavelmente não por muito.

AndoDaan
fonte
2

JavaScript 240 228

Submissão inicial:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

Agora, este é um ótimo começo, veja como ele se decompõe ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

E então eu pensei ... "Deve haver uma maneira mais simples ..." e existe ...

Submissão revisada: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Vendo que eu posso usar eval (por montando-lo juntos, inspiração de @bebe, o que é muito mais rápido do que usar o constructorde um constructorde um number...) Eu perfurados para baixo a 228 ... Eu sei que não pode vencer esta Golf Challenge especial , mas esta é apenas a minha maneira de mostrar o quanto você pode abusar do JavaScript e ainda obter o resultado desejado ...

WallyWest
fonte
2

Principal - Insônia , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Emite:

abdegopq04689@ABDOPQR#$%&

Bônus - Insônia, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Emite:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Eu acho que deve ser possível reduzir a duração do programa se a saída for reorganizada, mas preciso modificar meu programa de pesquisa para fazer isso.

Apenas para mostrar um outro idioma capaz de operar com um número restrito de caracteres. A propósito, ele pode escrever praticamente qualquer saída com apenas 3 caracteres únicos na fonte.

Atualmente, esse é o único idioma que pode fazer o desafio principal e o bônus entre todas as respostas existentes.

Intérprete de insônia .

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
fonte
1

Befunge 98 - 46 bytes

Versão simplificada da entrada Pyth de isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <
AndoDaan
fonte