Crie um programa que produza uma sequência de hello world ("Olá, mundo", "Olá, mundo" etc.) e o código-fonte. A saída é gravada em stdout ou equivalente. A cadeia Hello world está incorporada no código fonte.
Por exemplo, a saída para pode ser
(some source code here)hello world(some source code here)
Quando a saída é compilada ou interpretada novamente, ela deve criar uma saída semelhante, mas a cadeia hello world deve ter uma pontuação ou capitalização diferentes. Por exemplo, o exemplo anterior pode criar a seguinte saída
(some source code here)hello, wORld(some source code here)
Cada "(algum código-fonte aqui)" nesses exemplos pode mudar após cada execução ou pode ser a mesma.
Sua saída deve conter uma sequência válida de hello world exatamente uma vez. Pode conter qualquer quantidade de seqüências inválidas de hello world. O código-fonte pode conter qualquer quantidade de comentários e a string hello world pode ser incorporada nos comentários. O primeiro programa pode ter zero ou uma sequência de hello world válida, mas não mais.
A pontuação a seguir é válida:
hello, world
hello world
helloworld
Qualquer capitalização é aceitável. Por exemplo, estas são cadeias de caracteres hello world válidas:
Hello, world
hellO WORld
HELLoworlD
Essas strings não são válidas:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Seu programa falha assim que uma das seguintes condições é atendida:
- Ele gera uma string hello world que foi produzida durante alguma execução anterior,
- a saída não é mais um código fonte válido no mesmo idioma ou
- a saída não contém exatamente uma sequência válida de hello world.
Seu programa não é válido para este concurso, a menos que pelo menos duas primeiras execuções tenham êxito. Isso significa que a terceira saída pode ser inválida. A saída do seu programa pode não ser aleatória. A primeira execução deve sempre criar a mesma segunda saída, a segunda execução deve sempre criar a mesma terceira saída, etc.
A pontuação é calculada como a quantidade de bytes no código-fonte do programa inicial. Menor pontuação ganha.
Os seguintes bônus se aplicam (até -60%):
- -5% * (N - 2), em que N é o índice da execução após o qual o seu programa produz uma saída inválida. Esse bônus é limitado em -50%. Se o seu programa for bem-sucedido 12 vezes ou mais, você recebe o bônus máximo.
- -10%, se suas saídas (incluindo o primeiro código-fonte) incluírem todas as três alternativas de pontuação válidas.
Seu envio deve incluir o primeiro código-fonte e também deve conter os resultados das execuções bem-sucedidas. Se o seu programa tiver êxito mais de 12 vezes, adicione a saída para 12 execuções.
Exemplo
A próxima linha é o primeiro código fonte. Quando o executamos, é a primeira execução.
hello world(some source code here)
A próxima linha é a saída do primeiro código-fonte. É a primeira saída.
hello, world(some source code here)
A próxima linha é a saída da segunda execução. É a segunda saída.
helloworld(some source code here)
Quando executamos a primeira saída, esse programa se tornou elegível ao bônus de -10%. Isso significa que temos duas saídas e um código original, todos com pontuação diferente. Além disso, como a segunda saída foi válida, este programa é elegível para este concurso.
A próxima linha é a saída da terceira execução. É a terceira saída.
Helloworld(some source code here)
A próxima linha é a saída da quarta execução. É a quarta saída.
hellworld(some source code here)
Esta saída foi inválida. O índice da última execução válida foi 4. Este programa é elegível para bônus de -5% * (4-2) e bônus de -10% da pontuação. Isso totaliza -20%. O comprimento do primeiro código fonte ("olá mundo (algum código fonte aqui)" foi de 34 bytes; portanto, a pontuação final é 27,2.
hello world
?Respostas:
Pitão, 17 bytes
Uma solução Pyth diferente:
Resultado:
Segunda saída:
fonte
Mathematica, 214 - 50% = 107 bytes
Decidi otimizar a contagem de cadeias aqui. Isso funciona para 1024 programas sem parar, passando por todas as combinações de letras maiúsculas e minúsculas. A execução pode ser vista aqui .
fonte
s
, e avaliá-lo comToExpression
).Vitsy, 33 - 33 * .05 * (11-2) = 18,15 bytes
Heh! Bata isso! Você provavelmente vai. : c
Primeira saída:
Segunda saída:
Terceira saída:
Quarta saída:
Quinta saída:
Sexta saída:
Sétima saída:
Oitava saída:
Nona saída:
Décima saída:
Décima primeira saída:
Esta é a última saída, pois causará um erro.
fonte
CJam, N =
34, 28 bytes - 10% - 10% = 22,4isso inicia a seguinte cadeia:
onde o último não contém mais um "Olá, mundo" válido.
Teste aqui.
Explicação
Observe que o programa inicial não contém um "Olá, Mundo" válido, mas isso nos permite avançar uma iteração.
fonte
CJam
6960 - 50% = 30Eu ainda sou iniciante, por favor me diga como jogar golfe no CJam.
É entediante imprimir cada iteração, pois será válido por 99 iterações.
Ele funciona enumerando a capitalização da palavra hello. O tédio é dividir as cordas em partes, já que o "olá mundo" e o contador precisam ser atualizados.
Explicação
NOTA: Não li a resposta do Mathematica, desculpe, acho que era original
Com a reordenação e com letras maiúsculas diferentes, perco 9 bytes.
CJam 73 - 60% = 29,2
Desta vez, também enumere a pontuação.
fonte
GolfScript, 35 bytes - 50% = 17,5
Decidi exagerar no número de execuções antes de repetir. Este programa, com sua saída retornada ao intérprete GolfScript, produzirá 890 seqüências distintas do Hello World antes da primeira repetição. Como uma breve amostra, aqui estão as 15 primeiras iterações:
A maneira como funciona é iterando a string, invertendo a capitalização de cada letra (XORing seu código ASCII com 32) se a letra anterior (depois de possivelmente ter seu caso invertido) estiver em minúscula. A primeira letra terá sua caixa invertida se o número no programa inicial for 32 em vez de 0 - e o número de saída para a próxima iteração será 32 sempre que a última letra da string for minúscula, causando alterações no final de a sequência a propagar de volta ao início na próxima iteração.
(Esse processo de feedback em particular foi obtido de uma maneira totalmente ad hoc . Inicialmente, eu queria apenas executar um contador binário simples usando maiúsculas e minúsculas como bits, mas isso levou muitos bytes para implementar, então comecei a ajustá-lo para encontrar algo mais curto isso ainda produziria um comprimento de ciclo bastante alto. Como o máximo teórico, usando apenas inversão de maiúsculas e minúsculas, é 2 10 = 1024, é muito bom obter um ciclo de 890 iterações.)
Infelizmente, o bônus para iterações adicionais é limitado em -50%; sem o limite, este programa teria um enorme bônus de -4440%. ;-)
fonte
Pitão, 18 bytes
Que retorna:
Por sua vez, imprime:
Eu tive uma solução que fez todas as três grafias, mas é mais longa, mesmo com o bônus.
fonte
Simplex , 21 bytes.
Foi para isso que nasceu a Simplex . Definitivamente, posso ir mais longe com isso.
(Continuo pressionando Ctrl + Enter, desculpe! Eu culpo o teclado do tablet)
Tentativa 3, v.0.8 +, 31 -5% = 29.45 bytes (métodos UTF-8)
Aquele emote no meio me expressa. Tipo de. Por que eu fiz isso de novo? ._.
2ª saída:
3ª saída:
Saída final:
Tentativa 2, v.0.8 +, 21 bytes (UTF-8, eu acho)
Resultado:
Saída final:
Tentativa 1, v.0.7 +
2826 bytesNão tenho certeza se isso se qualifica para o primeiro bônus ...
Primeira saída:
O programa externo é avaliado no final da execução (ele faz isso por y; é assim que o programa externo se parece:
Saída final:
fonte
Rubi, 81 - 50% = 40,5
Código original:
Saídas sucessivas:
Eu acho que isso conta como os 50% completos? Pode estar fora de um. Além disso, provavelmente existe uma solução sem bônus com melhor pontuação no Ruby.
O código original não contém "helloworld", mas cria um quine que substitui a primeira letra maiúscula em seu código-fonte pela versão em minúscula. Assim, cada execução sucessiva do quine produz uma letra menos maiúscula.
O truque aqui é usar uma string de formato para interpolar a própria string, para quining, e a string Hello World, para que apareça apenas uma vez.
fonte
PHP, 297 - 40% = 178,2 bytes
Não é realmente competitivo, mas foi divertido escrever
É uma variação deste quine:
mas também adiciona "helloworld" à saída e substitui
0
por0+1
(na próxima iteração1
por1+1
e assim por diante). O uso desubstr
qualquer saída "helloworld" existente é removido antes que o novo "helloworld" seja adicionado.Para obter resultados diferentes, uma letra de "helloworld" é maiúscula (determinada pelo número crescente). Este é o código relevante:
Um desafio era não usar nenhum número, exceto aqui e para a substituição do número
Lá você já vê que
+1
é realizado como+(int)true
.Para os argumentos de substring, eu precisava
0, 146
:A cadeia não vazia "i" é coagida
true
e negada.false
é um argumento inteiro válido e é tratado como0
.ord(I)
é o valor ASCII de "I": 73Saída (1ª iteração):
Saída (2ª iteração):
Saída (10ª iteração):
Esta é a última saída válida, mas não é mais um programa válido
fonte
(int)true
para `` !! i` e salvar 12 bytes. Vai tentar golf um pouco mais tardePip, 48 - 50% = 24
que evolui da seguinte maneira:
com a última saída inválida porque
HELLOWORLD
não foi alterada. (Corrija-me se eu não tiver feito o bônus corretamente.)Graças a esta pergunta, acabei de descobrir uma nova técnica de quine! A base quine é
V Y"`V Y`.RPy"
:Nosso código extra modifica a string
y
antes de reproduzi-la da seguinte maneira:0
caracteres mais à esquerda estejam em maiúsculas;0
poro+0
(ondeo
é uma variável interna que é igual a 1).A próxima vez em que o número no código for em
1
vez de0
, e assim por diante.fonte
Javascript, 52 bytes
Teste
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
fonte
///, 23 bytes - 10% = 20,7?
Experimente online!
Primeira saída:
Segunda saída:
fonte
BBC BASIC, 56 bytes
Eu tive um problema nisso antes de perceber o quão atrasado para o jogo eu estou. Pelo que vale, aqui está minha versão e minha primeira tentativa no código de golfe StackExchange.
Aqui, V. ecoa os caracteres fornecidos pelos códigos ASCII na seguinte lista separada por vírgulas e P. é uma abreviação de impressão. Utilizo o caractere backspace para substituir a string 'helloworld' existente.
Código de entrada:
Primeira saída:
Segunda saída:
Pode ser testado online em https://bbc.godbolt.org/
fonte