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!


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!


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!


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.)


15

Tela , 8 bytes

8 bytes+

Experimente aqui!

Uma solução mais interessante de 20 bytes:

bytecount.innerText#

Experimente aqui!


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



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!


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.


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!


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

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!


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!


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


Bata em mim! E a ; geralmente pode ser omitido!
wedstrom

Ahh, mas então seria 14/15 bytes
wedstrom




4

Oitava , 23 bytes

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

Experimente online!

E isto:

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

Experimente online!


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.


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.


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.



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

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.


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”

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.


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

3

JavaScript, 16 15 bytes

x=>0xf+' bytes'

_=>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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.