Saída sua pontuação!

54

Desafio:

O conceito é bastante simples: escreva um programa completo para gerar seu próprio código de pontuação de golfe!

A saída deve ser apenas a contagem de bytes do seu programa e um final bytes.

MAS ESPERE ..... há uma restrição:

  • Seu código-fonte não pode incluir nenhum dígito da sua contagem de bytes
  • Então, se sua pontuação é 186 bytes, o programa não pode conter os caracteres 1, 6ou8

Saída de exemplo:

315 bytes
27 Bytes
49 BYTES

Regras adicionais:

  • Caracteres, espaços e novas linhas desnecessários são proibidos no código-fonte, no entanto, espaços e novas linhas são perfeitamente aceitáveis ​​na saída
  • Deve haver um espaço único entre o número e bytesa saída
  • As letras não diferenciam maiúsculas de minúsculas
  • Nenhuma auto-inspeção ou leitura do código fonte
  • brechas padrão não são permitidas

  • isso é , então

O menor código em bytes vence!

X1M4L
fonte
6
Isso precisa da tag quine , ou o código pode auto-inspecionar?
Adám 29/03/18
3
@Dat, dada a formatação da palavra bytesEu suspeito que a intenção é que a contagem deve incluir os bytes que leva para imprimir o texto:bytes
Jeff Schaller
2
Os espaços à esquerda na saída são aceitáveis?
rafa11111
3
Se meu código tiver 1 byte de comprimento, devo enviar 1 bytesou 1 byte? (lembre-se de que já existem 41 respostas, embora eu ache que nenhuma seja afetada)
Erik the Outgolfer
11
@JoKing Bem, eu não lidei com as letras maiúsculas nas regras, mas se, de alguma forma, usar letras maiúsculas diminuir sua pontuação, então eu adoraria ver o que você inventou. Eu digo, vá em frente!
X1M4L

Respostas:

41

JavaScript, 19 bytes

O Octal foi inventado para servir a dois propósitos:

  • configurando permissões de arquivo no Linux
  • respondendo a este desafio

alert(023+' bytes')

Experimente online!

Arnauld
fonte
Isso conta como um programa completo?
ericw31415
11
@ ericw31415 Este é um programa de navegador , conforme definido nesta meta resposta .
Arnauld 29/03
5
+1 porque finalmente me esclareceu por que octal não é completamente inútil!
Sergiol 15/0418
34

Perl 5 , 16 bytes

Existem muitas outras maneiras de conseguir, 16mas essa é minha

say afpbytes^PPP

Experimente online!

Ton Hospel
fonte
11
Como é que isso funciona?
caird coinheringaahing 30/0318
9
@cairdcoinheringaahing No perl, você pode deixar de fora as aspas das strings se elas parecerem literais e não entrarem em conflito com uma palavra-chave (e estiver muito obsoleto, mas não nos importamos no golfe), operadores binários & | ^e ~também podem ser aplicados a strings e trabalhe nelas como em uma lista de valores ASCII (se e somente se ambos os lados forem strings). Para |e ^funciona como se a corda do shorte fosse estendida com \0. Depois disso, é um exercício simples para encontrar combinações de letras que xoram para a saída desejada.
Ton Hospel 30/03/18
26

7 , 23 caracteres, 9 bytes

54340045141332401057403

Experimente online!

Este é um desafio bastante difícil em um idioma que consiste inteiramente de dígitos, mas eu consegui…

São apenas 9 bytes na codificação 7. (Estritamente falando, são 8⅜ bytes (23 × ⅜ - ¼ porque os dois bits finais finais podem ser omitidos), mas pela primeira vez, o requisito do PPCG de arredondar para um número inteiro de bytes é realmente uma vantagem, pois significa que os 1 bits extras à direita são necessários e, portanto, não são banidos pela pergunta.) Um despejo hexadecimal reversível:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

O principal desafio de escrever este programa no 7 era jogar com menos de 10 bytes (como escrever 7 sem usar 0ou 1é bastante difícil.) Isso usa a mesma estrutura do programa "Hello world" padrão:

5434004514133240105 7 403
5434004514133240105 comandos 0-5 anexam literais ao espaço de dados
                   7      iniciar uma nova seção do espaço para dados
                    403 outro literal anexado ao espaço de dados
                         {implícito: avaliar a última seção como comandos}
                    4     troque a 1ª e a 2ª seções com uma seção vazia entre
                      6    reconstrua os comandos que criariam a   saída da 1ª seção
                       3 (+ alguns outros efeitos dos quais não nos importamos)

Em outras palavras, começamos criando duas seções do espaço de dados; temos dois literais, cada um dos quais pressiona uma sequência de comandos lá. A segunda seção (eles são empurrados no estilo pilha, então primeiro empurrão = último pop) é uma sequência bastante arbitrária de comandos, mas é empurrada usando a sequência de comandos 5434004514133240105(produzindo assim a sequência de dados 5434664574733246765; ao discutir 7 no texto, normalmente uso fonte normal para um comando que envia um literal e negrito para o literal resultante correspondente). A primeira seção é pressionada usando a sequência de comandos 403, produzindo 463. Em seguida, a primeira seção é copiada de volta para o programa (um comportamento implícito de 7).

O 463agora é composto por comandos (em negrito) que fazem algo imediatamente, em vez de comandos (não em negrito) que apenas enviam literais. 4reorganiza as seções para colocar nossa "string literal" na primeira seção. Em seguida, 0faz a operação pela qual 7 é mais conhecida: ocupar uma seção do espaço de dados e reconstruir a sequência de comandos que provavelmente a criou. No caso em que a sequência de comandos original era tudo 0- 5, isso é 100% exato (sem surpresa, pois esses comandos puramente empurram os dados e, portanto, deixam evidências óbvias do que eles fizeram), e assim recuperamos nossa sequência original 5434004514133240105. Finalmente, 3imprime.

Portanto, o que resta aqui é a codificação da string. Isso tem seu próprio idioma específico do domínio:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(Não há "conjunto de caracteres selecionado: letras minúsculas" no conjunto de caracteres "dígitos e símbolos comuns" - você deve primeiro usar um conjunto de caracteres diferente -, então eu precisava usar maiúsculas para jogar golfe tão curto o suficiente para caber abaixo dos 10 dígitos efetivos. limite de bytes.)

ais523
fonte
15

Tela , 8 bytes

8 bytes+

Experimente aqui!

Uma solução mais interessante de 20 bytes:

bytecount.innerText#

Experimente aqui!

dzaima
fonte
3
OK, isso é muito inteligente.
Adám 29/03/18
Observe que uma das restrições é "Seu código-fonte não pode incluir nenhum dígito da sua contagem de bytes", portanto, a primeira solução não é válida neste caso =)
Cyclonecode
11
@Cyclonecode Esse "8" não existe um ASCII 8 regular - ele é um caractere 8 de largura total nesta versão unicode do código, embora seja realmente o byte 0xD5, que não tem relação com nenhum 8s
dzaima
12

brainfuck , 53 BYTES

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

Experimente online!

Outra submissão com letras maiúsculas bytes. Encontrado com a ajuda do excelente auxiliar BF-crunch da primo.

Brincadeira
fonte
11

PHP, 14 bytes

<?=7*2?> bytes
Cyclonecode
fonte
8
Que tal colocar a bytespeça fora da ?>? Experimente online!
Jo rei
@JoKing great 3 less bytes :)
Cyclonecode 30/03
11
Apenas para sua informação, provavelmente é melhor que você divida sua resposta em várias respostas se cobrir mais de um idioma.
Conor O'Brien
@ ConorO'Brien - Oki do
Cyclonecode 30/03
8

PHP anterior a 7.2 , 13 bytes

Assume as configurações padrão (avisos E_NOTICE desativados) e a versão do PHP anterior à 7.2.

Precisa ser decodificado com xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

Ou se você preferir Base64

PD89fs7M352Gi5qMOw==

Experimente online!

Konrad Borowski
fonte
6

Stax , 5 bytes

╗↑╞ô╝

Execute e depure

Descompactado, fica assim. O modo de fonte compactada torna esse tipo de trivial e desinteressante.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Se você não quiser usar o modo de fonte compactada, 6^p`5l@funciona por 7 bytes.

recursivo
fonte
11
Eu diminuí a votação desta resposta, porque acho que usar o modo compactado, embora seja uma maneira inteligente de salvar bytes, parece enganar (o que não é) na pior das hipóteses e, na melhor das hipóteses, não criativo. Em vez de fazer um voto negativo de todas as respostas de fonte restrita da Stax , deixarei esse voto negativo para cobrir todas essas respostas semelhantes.
você precisa saber é o seguinte
11
Eu certamente concordo que não é criativo. Mas acho que a falha está no conceito de restricted-source, não na linguagem. Esta é realmente a maneira mais direta de produzir "5 bytes"usando o Stax.
recursivo
Concordo que há um problema com o desafio (daí o motivo pelo qual o votei com menos votos ), mas ainda não gosto dessa resposta. Por favor, não exclua-o (apenas cuidado preventivo), não há nada de errado com ele.
caird coinheringaahing
6

R , 16 bytes

cat(4*4,"bytes")

Experimente online!

Giuseppe
fonte
Não é 17 por causa de seu espaço em falta?
PmanAce
@PmanAce "A saída deve ser apenas a contagem de bytes do seu programa e um final bytes". O programa tem 16 bytes.
31718 Giuseppe
catpor padrão, adiciona um espaço entre suas entradas.
31718 Giuseppe
object.sizesaídas no formato correto (com bytesincluído por padrão). Irritantemente, o mais curto que eu poderia encontrar é de 17: object.size(0)-39. TIO
Robin Ryder
11
Aparentemente, na versão de Hadley, um vector 1-length é de comprimento 48, então não deve existir uma versão do R em que este código de 16 bytes funciona: object.size(0)/3.
Robin Ryder
5

Python 3 , 25 24 18 bytes

print(6*3,'bytes')

Experimente online!

NieDzejkob
fonte
11
Mas "4" está em "24". Talvez "33-9"?
recursivo
@recursive 3*8deve estar bem, embora
Kevin Cruijssen
@ gritos recursivos, corrigi-lo: P
NieDzejkob
5

05AB1E , 6 bytes

₂¤“ÿ¡Ï

Experimente online!


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

Alternativas para ₂¤incluem: 5>, ₁¤,

Urna de polvo mágico
fonte
5
Pena que isso não funciona.
Urna Mágica do Polvo
5

Bash, 21 bytes

"Leia seu próprio código-fonte" claramente não é o vencedor aqui, mas ninguém mais enviou um, então que diabos.

echo `wc -c<$0` bytes

Experimente online!

thegreatemu
fonte
5

Retina , 15 bytes


 bytes
*>w`..+

Este programa conta o número de substrings com pelo menos dois caracteres na string "bytes" e imprime essa contagem e a própria string.

Experimente online!

Leo
fonte
5

PHP + HTML, 16 bytes

&#49;&#54; bytes

Sim, isso está chegando perto do abuso de brechas, mas achei que isso precisava ser publicado. E o uso do PHP significa que essa resposta tecnicamente é escrita em uma linguagem de programação completa de Turing. Obviamente, qualquer outra linguagem de modelagem HTML semelhante também funcionaria.

Demonstração ao vivo (sem PHP):

&#49;&#54; bytes

Ilmari Karonen
fonte
Bata em mim! E a ; geralmente pode ser omitido!
wedstrom
Ahh, mas então seria 14/15 bytes
wedstrom
4

dc , 14 11 bytes

[ bytes]Bnn

Experimente online!

-3 bytes por @Cows quack

NieDzejkob
fonte
[ bytes]Bnnraspa alguns bytes
Kritixi Lithos 29/03
@Cowsquack thanks!
NieDzejkob 29/03
Patinhos @ cowsquack vão MOO, eu assumiria: P?
Magic Octopus Urn
@MagicOctopusUrn Patos, o que são patos? : P
Kritixi Lithos 31/03
4

MATL , 13 bytes

'57$f}xiw'4-c

Experimente online!

Isso empurra a string '57 $ f} xiw 'e subtrai 4, para obter 13 bytes. Isso é convertido em caracteres usando c.

Stewie Griffin
fonte
6EV' bytes'hé de 12 (Eu estava prestes a colocar-lo)
Giuseppe
11
embora seja a mesma abordagem chata: P
Giuseppe
4

Oitava , 23 bytes

printf('%i bytes',9+14)

Experimente online!

E isto:

disp(['','67$f}xiw'-4])

Experimente online!

Stewie Griffin
fonte
As primeiras respostas parecem boas, mas ... como funciona a segunda? oO
rafa11111 29/03
2
@ rafa11111 Subtrair 4de (os códigos ASCII de) '67$f}xiw'fornece os códigos ASCII de '23 bytes'. Então, concatenando com a cadeia vazia '' converte códigos ASCII para caracteres
Luis Mendo
2
@Luis Mendo Muito esperto! Obrigado por esclarecer!
Rafa11111 29/03
4

Petit Computer BASIC, 11 bytes

?9+2,"bytes

Usar uma vírgula em uma declaração de impressão moverá o cursor para o próximo múltiplo do tamanho da guia atual. No SmileBASIC, isso é 4 por padrão, então isso produziria 11 bytes(2 espaços), mas o PTC BASIC usaria 3 em vez disso, para que a saída tenha o espaçamento correto.

12Me21
fonte
4

APL (Dyalog Unicode) , 12 bytes

Programa completo que imprime implicitamente em STDOUT.

'bytes',⍨3×4

Experimente online!

,⍨ é anexa a sequência ao resultado da multiplicação. A exibição padrão de dados de tipo misto da APL coloca um espaço entre um número e o texto subsequente.

Adão
fonte
Posso estar errado, mas você não tem 2 na contagem e no programa de bytes? 3 * 4 deve estar bem embora
fyrepenguin 29/03
@fyrepenguin Heh, você está certo, é claro. Que bobo da minha parte.
Adám 29/03/18
4

Flacidez Cerebral , 100 BYTES

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

Experimente online!

Produz a bytespeça em todas as maiúsculas. Alguém familiarizado com o Brain-Flak pode estar realmente confuso com tudo isso ((<>))no começo, mas fique tranquilo, eles estão lá apenas para abusar da altura da pilha nilad ( []) e nenhum dos 0s que produzem é impresso.

Brincadeira
fonte
4

Haskell , 26 bytes

main=putStr$"\50\54 bytes"

Experimente online!


29 bytes

main=putStr$pred<$>"3:!czuft"

Experimente online!

Laikoni
fonte
Agora, espaços em branco desnecessários são proibidos, mas você pode usar um $.
Ørjan Johansen
@ ØrjanJohansen Obrigado por apontar.
Laikoni 30/03/19
4

Espaço em branco , 112 bytes

Só porque ninguém fez isso ainda:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Experimente online!

Imprime "BYTES" em maiúsculas, pois as letras maiúsculas têm códigos ASCII binários mais curtos. Os comandos no programa, na minha própria notação visível composta, são:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End
aschepler
fonte
Ah, não percebi que já havia uma resposta em branco. Aqui está uma resposta mais curta ( 104 bytes ). . Excluirá o meu novamente. Aqui está o mesmo com destaque e explicação adicionais.
Kevin Cruijssen 30/03/19
Ah, hmm. Eu acho que o texto é curto o suficiente para que a implementação do loop dói mais do que apenas repetir o PrintChar. (E eu sei, eu sempre posso largar o NNN final, mas eu realmente gosto de não ter erros.) #
Aschepler #
4

Java 5 ou 6, 44 bytes (programa completo)

enum A{A;{System.out.print(0x2C+" bytes");}}

Não há link TIO, porque o Java 5/6 é antigo. No Java 5/6, era possível ter uma enumeração com código, em vez do mainmétodo obrigatório , tornando-o mais curto para desafios completos do programa.

Também podem ser adicionados erros com java.lang.NoSuchMethodError: main\nException in thread "main"STDERR após a impressão em STDOUT, o que é bom de acordo com a meta (mas se o desafio permitir que erros adicionais não sejam permitidos para STDERR, System.exit(0);podem ser adicionados (e os números octais precisam ser atualizados) para evitar o erro.

Sugerido por @ OlivierGrégoire (e sua dica relevante sobre Java ).

Java 8 ou mais, 74 bytes (programa completo)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

Experimente online.

Java 8+, 16 15 bytes (função lambda)

v->0xF+" bytes"

-1 byte graças a @ OliverGégoire .

Experimente online.

Kevin Cruijssen
fonte
2
Tecnicamente não é um programa completo :)
OOBalance
@OOBalance Opa .. de alguma forma, lembre-se disso, obrigado pela correção. Lá vai minha pontuação .. XD
Kevin Cruijssen 29/03
11
37*2contém a 7, portanto não é válido. Sua solução alternativa está bem.
OOBalance
11
v->0xE+"bytes"ou v->0xF+" bytes". Não é possível testar, mas deve funcionar de qualquer maneira. Nada diz que a pontuação e os "bytes" devem ser separados.
Olivier Grégoire
11
@ OlivierGrégoire Eu sei, eu sei. ;) Quando publiquei o programa completo, duvidava de respondê-lo como enum, pensando na sua resposta . Você conhece algum compilador online que ainda o suporta? Eu prefiro ter uma ligação com código de teste para as minhas respostas ..
Kevin Cruijssen
4

Applescript, 15 bytes

Sim, eu estou indo para lá.

9+6&”bytes”
DonielF
fonte
11
Mas ...Your source code can not include any of the digits from your byte count
nicael 29/03
@nicael Dang, você está certo. Um segundo depois ...
DonielF 29/03
Corrija-me se eu estiver errado, mas não é um caractere multibyte (3 bytes em Unicode, se bem me lembro), então isso tem mais de 11 bytes?
caird coinheringaahing
@cairdcoinheringaahing ... Shoot. Você está certo - “é de 2 bytes, aumentando para 15.
DonielF 3/18/18
isso ainda não imprime 11?
destrutível limão
3

Lote, 32 bytes

@@echo %COMSPEC:~-10,-010% bytes

COMSPECgeralmente é %WINDIR%\system32\cmd.exeassim que eu extraio a substring de 10 a 8 caracteres do final. Versão antiga de auto-referência de 16 bytes:

@echo %~z0 bytes

Felizmente, a contagem de bytes não era um múltiplo de 10.

Neil
fonte
@ manatwork OK, eu não tinha visto isso, aqui está uma nova versão.
Neil
3

JavaScript, 16 15 bytes

x=>0xf+' bytes'
Yair Rand
fonte
_=>5*3+' bytes'
295 Neil
@Neil Tanto o código e o byte de contagem contém um 5nesse caso ..
Kevin Cruijssen
@KevinCruijssen Bah, não acredito que ignorei isso.
Neil
É necessário que os envios sejam programas completos " escreva um programa completo para gerar sua própria pontuação de código de golfe!"
precisa saber é o seguinte