Programe sua frase favorita


28

Escolha uma citação ou frase com exatamente 5 palavras, como Programming puzzles and code golf!.

Escreva um programa que, quando anexado a si mesmo n vezes, produz as primeiras n + 1 palavras da sua frase em ordem.

Por exemplo, se o código do seu programa era MYPROGe sua frase era Programming puzzles and code golf!, executando ...

  • MYPROG deve produzir Programming
  • MYPROGMYPROG deve produzir Programming puzzles
  • MYPROGMYPROGMYPROG deve produzir Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG deve produzir Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG deve produzir Programming puzzles and code golf!

Anexar mais de 4 vezes é indefinido, seu programa pode fazer qualquer coisa.

Regras

  • Sua frase deve ter um inglês gramatical significativo. Idealmente, deve ser adequadamente capitalizado e pontuado.
  • Sua frase pode ter qualquer tamanho, mas sua entropia, calculada por http://www.shannonentropy.netmark.pl/ , não pode ser inferior a 3,5 .
    (Cole sua frase, pressione Calcular e procure o último H (X) .)
  • Sua frase pode conter apenas caracteres ASCII imprimíveis (hex 20 a 7E). Seu código pode conter apenas ASCII imprimível, guias e novas linhas.
  • Sua frase deve conter exatamente 5 palavras exclusivas e 4 espaços. Todos os não-espaços contam como partes das palavras. Espaços são os limites das palavras. Eles podem não estar à frente ou à direita; Afinal, deve haver uma, exceto a última palavra.
  • A saída também deve conter um espaço entre as palavras. A saída em cada etapa anexa pode conter espaços finais, mas não espaços iniciais.
  • Saída para stdout. Não há entrada.

Pontuação

Sua pontuação é o comprimento em bytes do seu programa não anexado inicial. (por exemplo, MYPROGpontuação 6)

Como se trata de código-golfe, a pontuação mais baixa vence.


21
aww, os requisitos de entropia e exclusividade acabam com minha ideia de "búfalo" como uma entrada.
Sparr

4
Eu ia me divertir muito com Piet até "Seu código pode conter apenas ASCII imprimível, guias e novas linhas". :(
Sp3000

3
@ Sp3000 Você pode colocar uma resposta honorária. Eu adoraria ver uma solução Piet :)
de Calvino Hobbies

Esta é a única situação em que a pureza de Haskell é exatamente o problema ...
Rhymoid

inglês significativo gramatical Não está claro o que é "inglês significativo gramatical" devido a diferentes interpretações gramaticais e significativas.
MilkyWay90 24/06

Respostas:


6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Experimente em http://cjam.aditsu.net/

Explicação:

Lmremove as letras contidas em L (inicialmente "") de "TheguywasnotI"
3<pega as 3 primeiras letras
]coleta o conteúdo da pilha em uma matriz
S*junta-se à matriz usando espaço como um separador
:Latribui a string resultante a L (também a deixa na pilha )

Versão antiga (28 bytes):

"He is but a dog."S/W):W=]S*

Explicação:

S/divide por
W):Wincrementos de espaço W (inicialmente W = -1)
=obtém a W'th word
]coleta o conteúdo da pilha em uma matriz
S*se junta à matriz usando o espaço como separador


Essa linguagem é realmente interessante. Como se costuma dizer: "Você aprende sobre um novo idioma todos os dias" ... ou algo assim. Bom trabalho!
Brobin

Aceitando isso em vez da resposta igualmente curta de Dennis, pois foi postada primeiro.
Calvin's Hobbies

28

Piet (resposta honorária)

insira a descrição da imagem aqui

Serpentes serpente seu caminho para baixo, correndo pela direita através do azul e entrando novamente pelo verde. Imprime "A fruta voa como uma banana".

Eu usei o PietCreator para fazer isso, mas você pode experimentá-lo aqui . Remanejar os programas Piet é uma dor, então comecei em 35x35 e continuei dessa maneira, o que significa que usei muito mais codels do que precisava.

Versões de tamanho real

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui


11

> <> (42)

Os peixes são realmente o melhor animal de estimação. Algumas pessoas mantêm bugs como animais de estimação devido a uma incompreensível falta de lógica. Este programa faz o possível para argumentar com essas pessoas.

!v'?od gub yna nac tahW;'00p!
<<|ov!
voo <

Observe que não há nova linha final no programa. A saída completa é revertida na primeira linha; a frase completa é "O que qualquer bug pode fazer?" (entropia 3,58418).

Explicação completa:

Este é um dos programas mais divertidos que já escrevi, pois esse é o primeiro a usar a reflexão. A primeira linha é onde está a carne do programa.

!vé um no-op, pois !faz com que a próxima instrução seja pulada.

'?od gub yna nac tahW;' armazena a frase completa na pilha (é retrocedida porque cada letra é empurrada para a pilha na ordem em que foi escrita; portanto, ela deve ser revertida para ser reproduzida corretamente).

00pé onde a mágica real começa a acontecer. Observe que não apenas armazenou a frase, mas também armazenou a ;. 00pinsere o caractere superior na pilha no programa na posição (0, 0), então agora o primeiro caractere do programa é a ;.

A finalização !ignora esse ponto-e-vírgula e move o cursor para v, o que direciona o fluxo do programa para baixo.

A partir daqui, tudo é apenas rotinas de impressão. Como não há nova linha final, anexos sucessivos do programa simplesmente adicionam as duas últimas linhas, com efeito, uma vez que a primeira linha estará à direita de voo <e, portanto, nunca será executada.

No final, o cursor é direcionado para o canto inferior esquerdo do programa e volta para o canto superior esquerdo, onde ;foi inserido anteriormente, encerrando o programa.


Um minuto atrás, isso era tecnicamente inválido, mas acabei de alterar as especificações para que novas linhas (e guias) sejam permitidas no código (que é o que eu queria originalmente).
Hobbies de Calvin

Oh, meu mal, perdi totalmente o que se aplicava à fonte, não apenas a frase. Fico feliz que tenha sido essa a intenção,> <> que os programas dependam bastante das novas linhas.
Mike

Se você quiser diminuir um pouco isso, poderá usar uma frase com 11 letras e sem caracteres repetidos, como "It is by a rope."Sua frase repete caracteres, para que ela tenha entropia mais baixa do que poderia.
Isaacg

O problema é que cada saída basicamente tem que ter o mesmo comprimento para imprimir bem, pois> <> não pode detectar espaços facilmente. Não consegui encontrar um menor.
Mike Precup

2
@isaacg Pessoalmente, prefiro a frase de Mike;)
Calvin's Hobbies

10

Python 66

i='i'in dir()and i+1;print("Tfpcfhaialetgny"[i::5],end=" ."[i>3]);

Entropia: 3.61635

Ouput:

The fat pig can fly.

Obrigado @JasonS e @grc pelas dicas sobre como reduzir a parte de detecção de variáveis.

Atualização: Veja a resposta de JasonS para um truque envolvente que levou isso a 55 bytes. :)


i=locals().get('i',-1)+1;é -5 bytes
Jason S

Bata em mim! Eu ia usar i='i'in dir()and i+1. Editar: regras alteradas.
grc

Bem, isso é outro -4
Jason S

60 bytes com o Python 2:i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
nyuszika7h

9

Python 3, 55 (bônus 67)

# 55 bytes, H(X)=3.72, Based on bitpwner's 66. "Mix dog and cat fur."
i=0;print("Mdacfionauxgdtr"[i::5],end=" ."[i>3]);i+=1;i

# 67 bytes, H(X)=4.28. "Thanks for supporting Python development."
q=b"qx!%%0077C";a,b,*q=q;print((str(credits)*2)[49:][a:b],end='');q

# 60 bytes, H(X) = 3.51. "Fix the bed old pal"
s="Fixthebedoldpal";a,b,c,*s=s;print(a+b+c,end='. '[s>[]]);s

Você quer dizer que envolve?

OK, alguma explicação sobre o # 2 (spoilers)

  • creditsé um python embutido que contém o texto que eu gostaria de usar. É de um tipo especial, com um formato formatado, reprpara que você possa digitá-lo no interpretador interativo e ver uma saída agradável, então eu preciso str()disso. Passei um bom tempo analisando os componentes internos para isso e "Obrigado por apoiar o desenvolvimento do Python" como uma frase era boa demais para deixar passar.

  • Como há muito texto e quero apenas minhas 5 palavras, desejo armazenar as posições inicial e final de cada substring. Isso está nos bytes no começo. bytesobjetos em python3 agem como matrizes de números inteiros quando você usa operações de sequência neles.

  • Mas o código pode conter apenas caracteres imprimíveis, então tive que encontrar um deslocamento (49) que tornasse todos os meus valores de posição imprimíveis como caracteres.

  • "Obrigado" está próximo do início da sequência, enquanto as outras palavras estão mais próximas do final, o que significa que meus valores de posição estavam muito distantes para que todos estivessem no intervalo imprimível. Multiplicar a string por 2 faz outra cópia de "Obrigado" que está mais próxima das outras palavras.

  • Tomar a [49:]fatia da cadeia de caracteres é um byte de origem a menos do que adicionar 49 a a e b.

  • O construto usado nas três respostas é x=<value>;dostuff and increment;x. O final xnão faz nada, mas quando combinado com a próxima cópia do código, ele se transforma no xx=<value>que impede que o xcontador seja substituído.

  • a,b,*q=q é perfeitamente normal descompactar sequência Python 3.


+1. Truque perverso. :) Posso atualizá-lo para a minha resposta?
Vetorizado

Bem, eu usei o seu meio
Jason S

Atualmente, estou maravilhado com a sua segunda resposta. Tantos truques embalados nele.
Vetorizado

2
Você pode me dizer como funciona a segunda resposta?
Sajas

8

Python 2 (37)

Depois que Sarah se tornou presidente de seu capítulo local na Mensa, ela se tornou um foco de atenção romântica de homens que procuravam um parceiro inteligente. Em todos os encontros, Sarah tentava fazer uma conexão pessoal, mas os homens apenas a investigavam sobre questões filosóficas abstrusas. Frustrada por ninguém se importar com seu lado emocional, ela exclamou ...

i=4;print"mniIMeosQy!t"[i::5],;i-=1;i

Saída:

My
My IQ
My IQ is
My IQ is not
My IQ is not me!

A entropia é H(x)=3.5exatamente.

Os meus agradecimentos a Jason S., cuja resposta eu basicamente usei no atacado. O iitruque envolvente é maravilhoso.


Agradável! Suportes para encontrar uma frase mais curta com a entropia correta. Eu desisto. Também se esqueceu de que PY2 printespaços prepends em vez de acrescentar-lhes
Jason S

Isso é incrivelmente curto para uma resposta em Python! Bem feito.
Isaacg

Você pode remover a vírgula que você possui no meio do seu programa para diminuir para 36 caracteres.
Xleviator

8

C - 65

Comentar abuso :)

char*z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//

Por esse motivo, as novas linhas são importantes e o código deve ser anexado da seguinte maneira:

char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//...

Esta é uma boa solução!
MilkyWay90

4

CJam, 24 bytes

"LwOtmiaKoezs"W):W>5%]S*

Se executado cinco vezes, a impressão de que Liz estava bem para mim . Pontuação não incluída, desculpe.

Como funciona

"LwOtmiaKoezs"  " Push that string. ";
W):W            " Push W (initially -1), increment and save the result in W. ";
>               " Shift that many characters from the string. ";
5%              " Select every fifth character, starting with the first. ";
]S*             " Wrap the stack in an array and join its strings using spaces. ";

Idéia legal, embora a frase seja meio fraca: p
aditsu

Eu admito isso, mas tinha que ser xxx xxx xx xx xx , sem letras repetidas. Essa é a única frase que eu poderia vir acima com que fez pelo menos um pouco de senso ...
Dennis

Que tal "Sun estava bem comigo"? Você também pode substituir "Sun" por outra palavra ou nome.
Aditsu

Está melhor, obrigado.
Dennis

3

Pyth , 32

p?kqZ4d@P"It is by a rope."dZ~Z1

Frase: "É por uma corda".

Entropia: 3,5

Como funciona:

p significa imprimir com separador especificado.

O primeiro argumento ?kqZ4d,, fornece o separador. ?kqZ4dmeios k if Z==4 else d. ké '', enquanto dé ' '.

O segundo argumento, o valor a ser impresso, é gerado dividindo ( P) no espaço ( d) e a indexação nessa lista ( @) em Z.

Por fim, Zinicializado automaticamente como 0, é incrementado por 1 ( ~Z1).


2
Eu não conseguia pensar em um contexto em que esta fase seria naturalmente caber no ^^
flawr

1
@flawr "Onde eu morava a bola?" "É por uma corda."
Isaacg

3

Golfscript, 53

Este foi divertido.

{'1'-print}:puts;.'You; are; not; a; duck.'';'/\,=\1+

Frase: "Você não é um pato". (o que é completamente verdadeiro; entropia 3.5110854081804286)

Explicação:

A pilha começará como ''na primeira "execução" (já que nenhum STDIN é fornecido). '1's são anexados a isso para indicar quantas vezes o código foi colado.

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: '' ''
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (0)
                              # Stack: '' [words] 0
=                             # Stack: '' 'You'
\1+                           # Stack: 'You' '1'

Agora, o que acontece na segunda execução:

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: 'You' '1' '1'
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (1)
                              # Stack: 'You' '1' [words] 1
=                             # Stack: 'You' '1' ' are'
\1+                           # Stack: 'You' ' are' '11'

E assim por diante.

"Mas", você está pensando, "como você consegue que os 1s não saiam?" Ah, essa é a parte divertida de hacky. O Golfscript implementa puts(que é chamado quando o programa termina) assim:

{print n print}:puts;

Eu simplesmente mudei para

{'1'-print}:puts;

Para que os 1s sejam suprimidos da saída final.


3

J - 42 char

Eu poderia usar uma frase mais curta, mas por quê? Não seria o meu favorito.

(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '

Isso funciona devido à dualidade da mônada / díade de J: todo verbo pode ser invocado como mônada - com um argumento à direita - ou como díade - com um argumento à esquerda e outro à direita.

Considere a seguinte sessão com o J REPL:

   'You multiplied 6 by 9. '
You multiplied 6 by 9.
   'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
You multiplied 6 by 9. You multiplied 6 by 9.
   ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '   NB. break into words
+---+----------+-+--+--+---+----------+-+--+--+
|You|multiplied|6|by|9.|You|multiplied|6|by|9.|
+---+----------+-+--+--+---+----------+-+--+--+
   (#\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '             NB. count off
1 2 3 4 5 6 7 8 9 10
   (6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '         NB. mod 6
1 2 3 4 5 0 1 2 3 4
   (1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
1 0 0 0 0 0 1 0 0 0
   (#~ 1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '  NB. select
+---+----------+
|You|multiplied|
+---+----------+
   (#~ 1 = 6 | #\)&.;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. ' NB. undo ;:
You multiplied

Lá, ,é tratado como díade, porque está entre dois argumentos e (#~1=6|#\)&.;:é uma mônada, porque não tem argumento à esquerda. Portanto, se tivéssemos um verbo que pudesse agir como ,diádico e (#~1=6|#\)&.;:monádico, estaríamos definidos.

Como você já deve ter adivinhado, essa conjunção existe e parece :. Monádico f :gé equivalente a f, e é equivalente a gquando diádico. Isso resolve o problema.

Exemplos, que você pode tentar em tryj.tk :

   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by 9.

E sim, a natureza do inverso de ;:faz com que não haja espaços à direita.

Usando It is by a rope.como a frase dá 35 Char: (#~1=6|#\)&.;: :,'It is by a rope.'. Não precisamos do espaço à direita, como precisamos para minha sentença, por ;:motivos misteriosos e baseados em fatos.


3

BBC Basic, 40

Inclui uma nova linha. Seria 30 se as palavras-chave pudessem ser consideradas como tokenizadas em vez de ASCII.

Eu peguei minha namorada dormindo com o leiteiro, então eu a larguei e estou dormindo com sua irmã por vingança. As my ex do I!(cinco "palavras" de duas letras com caracteres únicos) não eram entropia suficiente, então adicionei o smiley de língua no final para tornar a entropia exatamente 3,5. Afinal, na realidade, tenho uma vida bastante normal, não um enredo estranho de novela.

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Repetindo o programa 5 vezes, obtemos

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Somente as 5 READinstruções são executadas e os 5 primeiros itens de dados são lidos na primeira DATAinstrução. o restante dos dados é redundante. Saída:

  (once)
  As 
  (5 times)
  As my ex do I:-P 

2

Ruby, 50

puts'The fat pig can fly.'[0..File.size($0)/12-1]#

Isso usa seu próprio comprimento para determinar quantas palavras serão impressas. Caso contrário, suas repetições serão ignoradas, terminando no caractere de comentário #,. Frase emprestada do bitpwner : é muito conveniente ter uma frase curta com o mesmo número de letras em cada palavra.

Uma vez que cada palavra + final é 4 caracteres, a fórmula seria, por exemplo, para o programa de 56 de comprimento: (File.size($0)/56)*4 - 1, mas eu posso dividir antes do tempo, 56/4 = 14, assim File.size($0)/14 - 1, poupando alguns caracteres. 50não é múltiplo de 4, mas 12está próximo o suficiente para o intervalo necessário.


2

Chip , 165 + 3 = 168 bytes

+3 para bandeira -w

| ,z `Z`Z  `Z
| |ZZZ>Z>ZZZ>ZZZZ
>((((((((((((((((
|)-)))-)-)))-))))g
|)d)xx-x-)xx-))x)e
||b+))-x-x))-x)xc
|`v))xa(-x(x-((^d
|*`.))d| b | b
|Z~<b( |~Zf|
>~T| | |   |

"Ganhei um terno vermelho" (3.5) (na verdade não ganhei nada disso) (... ainda)

Observe a nova linha à direita, para que a cópia concatenada apareça abaixo do código existente.

Experimente online! (o original)
Experimente online! (o original, mais as quatro cópias)

Esta é uma bagunça emaranhada. Aconteceu que a parte mais complicada foi a condição de rescisão. (Minha primeira iteração imprimiu a (s) palavra (s), seguida por um fluxo interminável de bytes nulos ...).

Como funciona

Primeiro a frase:
12 caracteres únicos + 4 espaços = exatamente 3,5 entropias.

E o código:
cada cópia imprime a primeira palavra e depois informa a cópia abaixo para imprimir a próxima palavra. Se houver apenas uma instância, não haverá segunda cópia; portanto, nada, exceto a primeira palavra, será impresso.

Se houver duas cópias, ambas imprimirão a primeira palavra simultaneamente (os bytes estão juntos OU, portanto, tudo bem), somente a segunda cópia imprimirá a segunda palavra.

Se todas as cinco cópias estiverem presentes, todas imprimirão a primeira palavra, etc, etc, e a quinta cópia imprimirá a última palavra sozinha.

O circuito de terminação encerrará o programa assim que todas as cópias não estiverem sendo ativamente impressas.


1

Ruby, 63

+1;puts"See Dick and Jane run!"[/(.*?( |!)){#$.}/]if($.+=1)==$.

1

Perl, 37

print qw(My IQ is not me!)[$i++].' ';

É parecido com o que tinha acontecido, mas aproveitando o qw do perl para salvar mais alguns caracteres.


1

Comprimento da mensagem Rebmu + 27

Fomos com "Meu QI não sou eu!" isso seria 43. Mas eu apoio esta mensagem:

uV?'s[S[{The}{rebellion}{against}{software}{complexity.}]]proTKsPROsp

Rebol equivalente / vermelho:

unless value? 's [
    s: [{The}{rebellion}{against}{software}{complexity.}]
]

print/only take s
print/only space

O Rebol possui 3 condicionais básicos: SE, MAIS E MENOS. A menos que seja equivalente a SE NÃO, mas pode ser mais claro: "Sempre faça o seguinte, A menos que essa condição seja verdadeira".

Nesse caso, a condição é que testemos para ver se o símbolo S recebeu um valor no contexto atual. Temos que usar uma citação, porque tentar usar um S não citado em uma expressão condicional o avaliaria e possivelmente causaria um erro. ( value?não cita seu parâmetro por padrão, porque você pode querer ter qual símbolo está verificando em uma variável, por exemplo sym: 's, if value? sym [...]na verdade, verificaria se S foi definido, não SYM)

Somente a primeira pasta do programa atribui a série de strings a S. Pastas sucessivas pegam uma string da cabeça da série e a passam para PRINT / ONLY, que imprimirá seu argumento sem adicionar um avanço de linha.

(Nota: PRINT / ONLY é uma maneira de substituição sugerida para dizer PRIN, que está sendo considerada em Rebol 3 e Red; uma substituição de impressão agora está sendo testada em Rebmu.)


1

AHK , 44 bytes

i++
Send % SubStr("He is an OK ex",i*3-2,3)

Observe a nova linha no final. A única coisa inteligente aqui é que a string é composta por palavras de três letras, para que não tenhamos que dividir nada. Em vez disso, apenas puxamos uma substring com base em i. A saída é para a tela ativa como se tivesse sido digitada no teclado.


0

Javascript (53)

Peguei o texto do aditsu porque não estou fazendo nada sofisticado com o texto, para que as palavras escolhidas sejam um pouco irrelevantes para a solução (exceto a contagem de bytes).

var i=i|0;alert("He 0is 0but 0a 0dog".split(0)[i++]);

Conta alertneste caso? Edit: Lendo as regras, provavelmente não, como eu não estou juntando as cordas com espaços. Vou adicionar espaços para torná-lo justo.

Observe também que o caro varé realmente relevante nesse caso.


Alguém pode explicar por var i|=0;que não funciona aqui ??
flawr

@ flawr Você não pode fazer algo |=parecido var. Sem var, você recebe um ReferenceError: i is not defined. var i=i|0expande para var i=undefined|0, e undefined|0é aparentemente 0.
precisa saber é o seguinte

Isso funciona por causa da elevação. var i=i|0é equivalente a var i;i=i|0. É por isso que você não recebe o erro de referência. A razão pela qual será definido como 0 pela primeira vez é o que @ nyuszika7h disse.
Ingo Bürk

1
Mas isso alertará as palavras separadamente.
haskeller orgulhoso

0

Perl, 43 56

print substr'Mine was not Red 5!',4*$i++,4;

Eu aceito que não posso ganhar este. Minha tentativa original explica por que:

@a=('This',' code',' is',' too',' long.');print$a[$i++];

0

Lua, 77

Uma solução bastante simples:

i=(i or 0)+1;io.write((i==1 and""or" ")..("Thebigfoxwasup."):sub(3*i-2,3*i))

(H (X) = 4,23)


0

Javascript, 138

g=this;clearTimeout(g.t);g.i|=0;i++;g.t=setTimeout(
    function(){console.log(["I'll","sleep","when","I'm","dead."].slice(0,i).join(' '))},0);

(a nova linha adicional é adicionada apenas para facilitar a leitura)

Imprime I'll sleep when I'm dead. Usa um timer para garantir que a saída seja impressa apenas uma vez


0

Pure Bash, 51 bytes

a=(All you need is Love!)
printf "${i:+ }${a[i++]}"

H (X) = 3,59447

Isso poderia ser um pouco mais complicado ao se usar uma das frases mais curtas, mas fico feliz em seguir a citação mais famosa de Descartes, Lennon. (Desculpe @Descartes, mas todas as palavras precisam ser únicas).

Saída:

$ ./phrase.sh 
All$ cat phrase.sh phrase.sh phrase.sh > phrase3.sh
$ chmod +x phrase3.sh 
$ ./phrase3.sh 
All you need$ 
$ cat phrase.sh phrase.sh phrase.sh phrase.sh phrase.sh > phrase.sh
$ chmod +x phrase5.sh 
$ ./phrase5.sh 
All you need is Love!$ 

Tome cuidado para inserir espaços entre as palavras, mas não espaços à esquerda ou à direita.

Conta com o fato de que no bash, variáveis ​​indefinidas, quando expandidas como seqüências de caracteres têm o valor "", mas quando expandidas aritmeticamente, têm o valor 0.


As 5 palavras são obrigados a ser único ...
Trichoplax

Como seu código parece versátil o suficiente para lidar com qualquer frase de 5 palavras, tenho certeza de que você pode pensar em uma que tenha a entropia necessária de 3,5 (muitas letras duplas nesta ...).
Trichoplax

@githubphagocyte Eu estava esperando que você me desse o benefício de arredondar ;-) Ok, eu o consertei com um extra !agora - parece fazer o truque.
Digital Trauma

0

PHP 89 78 char

É um pouco detalhado, e definitivamente não vai ganhar, mas foi divertido de qualquer maneira. Aqui está o que eu vim com

Frase:

code golf is pretty fun

Entropia = 3.82791

Código:

<?
$i=(isset($i)?$i+1:0);
$w=["code","golf","is","really","fun"];
echo $w[$i].";

Golfe:

<?$i=(isset($i)?$i+1:0);$w=["code","golf","is","really","fun"];echo $w[$i].

0

Python3 - 122 bytes

Abra as portas do compartimento de pods [HAL]

Eu acho que vou ganhar algum crédito nerd com este. Se ao menos a pergunta permitisse mais uma palavra ...

O que meu programa faz é pegar o nome do arquivo (p.py é a base) e verifica quantas vezes o nome da base é iterado. Em seguida, leva fatias de um ntempo de seqüência de caracteres . nsendo o número de ps no nome do arquivo.

import sys,re
for i in range(len(re.findall(re.compile('p'),sys.argv[0]))):print('Otpbdphoaoeedyon   r    s'[i::5],end='')

~ $ python p.py
Open

~ $ python pp.py
Open the

~ $ python ppp.py
Open the pod

~ $ python pppp.py
Open the pod bay

~ $ python ppppp.py
Open the pod bay doors

O benefício do regex é que o programa pode ser chamado como você quiser e ainda funcionará (desde que você altere o nome da base no código): meu programa original foi chamado golfed.py.


0

05AB1E , 21 bytes (Não-competidor)

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?

Experimente online!

Usos:

This works for literally anything. 
H(x) = 4.02086

Explicação

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # Pushes "This works for literally anything."
              #       # Split on spaces
               ¾è     # get element at index of counter_variable (default 0)
                 ¼    # Increment the counter_variable
                  ?   # Print the selected element
                   ð? # Prints a space

Não vi isso, postado quase o mesmo com “€í€Ü€…‚¿‹·“hehe
Magic Octopus Urn


0

SmileBASIC, 54 bytes

DATA"Does"," anybody"," have"," a"," key?
READ W$?W$;

Eu preferiria "A areia pode ser comida". mas isso falha no teste de entropia de alguma forma. Claro que eu poderia ter escolhido uma frase mais curta, mas isso é chato.

A READpalavra-chave lê um valor DATAe o armazena em uma variável. Usar READnovamente obterá o próximo item e assim por diante.


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.