Considere uma pergunta escrita em inglês comum cuja resposta envolva duas palavras ou frases razoavelmente precisas (mas potencialmente inteligentes) que podem ser separadas pela palavra 'e':
P: Quais são os dois lados de uma moeda? A: cara e coroa
P: Quais são as melhores maneiras de viajar? A: avião e jetpack
P: Por que um corvo é como uma escrivaninha? A: porque existe um 'b' em ambos e um 'n' em nenhum
Objetivo
Escreva um programa que, quando executado normalmente, produz essa pergunta.
Quando todos os outros caracteres são removidos do programa começando com o segundo caractere e o resultado é executado novamente, a saída deve ser o que estiver à esquerda do 'e' na resposta.
Quando todos os outros caracteres são removidos do programa começando com o primeiro caractere e o resultado é reexecutado, a saída deve estar à direita do 'e' na resposta.
(O 'e' em si não é produzido.)
Exemplo
Se o programa for
A1B2C3D4E5F6G7H8I9
e sua saída é
What are the two sides of a coin?
Então a saída de ABCDEFGHI
deveria ser heads
e a saída de 123456789
deveria ser tails
.
Regras sobre perguntas e respostas
- Você pode usar minhas perguntas de exemplo, mas eu recomendo que você faça as suas.
- A pergunta e as duas partes da resposta:
- todos devem ser distintos
- deve ser um inglês gramatical significativo e comum
- pode conter apenas ASCII imprimível (hex 20 a 7E)
- Idealmente, a pergunta será maiúscula e pontuada (mas as respostas não precisam ser).
- A pergunta deve ter pelo menos 30 caracteres e ter entropia acima ou igual a 3,5. (Digite a string, pressione calcular , procure o último H (X) .)
- As duas partes da resposta (sem incluir o
[space]and[space]
entre elas) devem ter pelo menos 5 caracteres com entropia acima ou igual a 2. - A palavra 'e' pode aparecer em qualquer parte da resposta.
Regras sobre código
- Nenhum dos três trechos de código pode:
- conter comentários ou qualquer outra coisa tradicionalmente ignorada pelo compilador / intérprete (não se preocupe em colocar um ponto e vírgula extra ou dois, mas se você acha que é um comentário, provavelmente é)
- sair do programa no meio da execução
- O código pode conter qualquer caractere, incluindo Unicode e ASCII não imprimível.
- Pode ter um número ímpar ou par de caracteres.
- A saída vai para stdout ou um arquivo ou o que parecer razoável. Não há entrada.
Pontuação
Como eu não quero incentivar respostas para o golfe, mas quero incentivar ainda mais respostas inteligentes, a pontuação será algo entre o código-golfe e o concurso de popularidade:
Pontuação = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)
A pontuação mais alta vence.
(Use http://mothereff.in/byte-counter como um contador de bytes.)
fonte
x0=00;;
. Grande desafio!00;
é tradicionalmente ignorados pelo compilador ...It may have an odd or even number of characters
Existe um número de caracteres que não é ímpar ou par?Respostas:
Javascript (148 bytes)
Cria alguns literais sem sentido, com o efeito colateral de criar um alerta * para a pergunta. (as divisões estão fazendo o mesmo, mas criando alertas * para cada uma das respostas).
Divisões:
e
Questão:
What is the ideal breakfast???
Respostas:
bacon
escrambled eggs
fonte
Brainfuck (437 caracteres)
Eu tenho que confessar que este é o meu primeiro programa de foda cerebral que realmente faz algo significativo. O programa é altamente otimizado para sistemas com pouca memória, pois utiliza apenas 4 locais de memória.
Questão:
What are the two main groups of trees?
Respostas:
conifers
ebroadleafs
Laço principal
O programa consiste em loop principal (que não é realmente um loop, pois todos os blocos [] são executados apenas uma vez) e duas seções.
Se você deseja testar as seções de forma independente, deve levar em consideração o loop principal. O local 0 contém -1 na resposta par, 1 na resposta ímpar e 2 na seção de pergunta.
Seção de resposta
Resposta par (instruções ímpares removidas):
Resposta impar (mesmo as instruções removidas):
Seção de perguntas
Decidi armazenar espaço para separar a localização, pois seu valor difere drasticamente de outros caracteres. Isso permite que o espaço seja impresso simplesmente com
<.>
.Atualização final
Na minha atualização final, otimizei multiplicações para que instruções mínimas sejam usadas. Também incluir 'l' para o segundo grupo de caracteres na seção de respostas ímpares provou ser uma grande melhoria. A economia de um caractere na resposta ímpar significa basicamente dois caracteres de todo o programa, pois também reduz o preenchimento da resposta par. Também removi algumas instruções desnecessárias daqui e de lá e acho que não posso otimizar ainda mais o código.
fonte
Lote - 84
Muito orgulhoso deste
Programa completo: Quais são os dois lados de uma moeda? (console)
Apenas pares: cabeças (arquivo 'c')
Apenas probabilidades: caudas (arquivo 'x')
Funciona redirecionando a saída de erro para um arquivo nos dois casos.
fonte
Python -
10496 (golfed: 76)My solution is rather simple (and somehow readable):
Output:
Honestly, I found the idea for the first line in bitpwner's answer.
Even more readable alternative: -
11310597Even shorter alternative: -
8676fonte
zebra
. And it fits nicely into a "golfed" version with a question of exactly 30 characters. Thus I slightly modified my solution. :)Rebmu: 79 chars OR (37 + length(p1) + 2 * max(length(p2), length(p3)))
First I'll give a 79 character solution that asks Which languages must you learn? (entropy 4.0, 30 letters not including
?
) and offers you the suggestions of Rebol and [Red]:A unique tactic available here that isn't in other languages comes from taking advantage of the fact that curly braces are an asymmetric string delimiter, that can nest legally:
That let me produce a generalized solution, that can work effortlessly on any program that doesn't use escape sequences. The 79 character version was simple enough to shortcut, but to properly contain arbitrary program source for programs p2 and p3 you'd need the full template. Had we used that, it would have been 87 characters:
The pattern for using this general form is that if you have three source texts of sequential characters of variable lengths (let's use an example like
AAA
,BBBBB
,CCCCCCC
) you can encode them as something along the lines of:(Note: Although this pattern won't work without tweaking on programs that use escape characters, this is not a fatal flaw. Getting an unmatched left brace in a string delimited by braces requires something like
{Foo ^{ Bar}
...but you could easily rewrite that using the alternative string notation"Foo { Bar"
, and combined cases can be managed with gluing together a mixture of unescaped strings.)So...how about an example? Once the general form was available, this 573 character program was assembled in only a couple of minutes from 3 prior code golf solutions:
If you don't modify the program, it is the Hourglass Solution.
If you take only the odd characters and run it, then it will print out the 99 bottles of beer poem
Only the even characters will do a little Roman Numeral Conversion for you.
If anyone wants to try writing that program in their language of choice, and thinks they can beat 573, let me know. I will bounty you a heavy amount of reputation if you do--assuming your language of choice is not Rebmu, because I know those programs aren't minimal. :-)
That "wasteful" spacing you get at the end is what happens when p2 and p3 are of imbalanced lengths. But all 3 programs are different sizes in this case so there isn't a particular good pairing to pick for p2/p3. (I picked these because there was no external data as input, such as a maze or whatever, not that they were of similar lengths. While I could have written new programs that were more optimal, I've spent enough time and the point was you don't have to write new programs...)
How it works
(Note: I started with a more "creative" approach that was not as streamlined but more interesting-looking. I moved it to an entry on my blog as describing this approach is already long.)
A key here is the "eval code as a string" trickery like some other entries, it just has the trump card of the asymmetric string delimiter. I'll start by explaining the workings of the 80 character case.
Here's the "whole" program, adjusting the whitespace for this case's readability:
Aqui, definimos DD como sinônimo de DO (também conhecido como "eval"). Mas o truque é que, quando os programas cortados pela metade são executados, eles acabam executando código cujo único efeito é definir D para o literal inofensivo 1.
Aqui está o que o código de caracteres ímpares cria, o espaço em branco ajustado novamente:
E aqui está o código de caracteres pares:
Na verdade, é o caso de que, para o programa não dividido pela metade,
dd {dd {(arbitrary code)qt}}
ele executará o código que você desejar. No entanto, existem duas chamadas para avaliar em vez de apenas uma. Isso ocorre porque, enquanto os aparelhos aninhados funcionam muito bem no código intercalado, eles atrapalham o comportamento de avaliação do DO. Porque:Carregará a string como um programa, mas esse programa acaba sendo apenas a constante da string
{print "Hello"}
. Portanto, o truque que uso aqui é pegar meu DD (mantendo o mesmo valor de função que DO) e executá-lo duas vezes. As metades mastigam as diferentes partes da cadeia, mas não as duas se a par / ímpar for correta para o conteúdo, e porque o que resta fora da cadeia após a divisão pela metade é apenas a constante integrald
elas são inofensivas.Com esse padrão, não há nenhum desafio em escrever o comportamento do programa quando ele não é cortado pela metade - você pode colocar qualquer coisa, desde que o comprimento do caractere do código seja par (estranho se você estiver contando o QT, que é QUIT). Se você precisar obter o número par de um número ímpar, jogue um espaço (para que haja um +1 na minha fórmula acima na p1 para comprimentos ímpares do programa de p1) . O truque parece escrever esse código intercalado posteriormente, que deve passar o analisador se for dividido pela metade. (Não será executado por causa do QT, mas precisa ser CARREGADO antes de ser executado.)
Este caso é trivial;
pp
carrega bem como um símbolo, mesmo indefinido, e é divididop
para impressão em cada meio programa. Mas podemos fazer outro truque usando uma string literal novamente. Os programas cortados pela metade ainda têm DO definido normalmente, então também poderíamos ter dito:Tendo a única parte escolhida pelo analisador no caso todo, seja a palavra simbólica
ddoo
e uma literal de cadeia, podemos então intercalar quaisquer dois programas que desejamos dentro dessa literal de cadeia e não irritar o analisador. As versões reduzidas ao meio dirão apenas:..e...
Como eu disse, esta parte parece familiar para outras soluções que tratam programas como seqüências de caracteres e os avaliam. Mas, no caso da competição, quando os programas que você está embalando contêm seqüências aninhadas, isso é uma chave para eles. Aqui, as únicas coisas que o colocam em problemas são o uso de escapes por sinal de intercalação (
^
) ... que podem ser facilmente contornados.(Pequena nota 'trapaça': eu adicionei QT para "QUIT" em resposta a esse problema. Na verdade, eu havia removido propositalmente a abreviação de desistir antes ... porque, de alguma forma, achei que era bom apenas para o uso do console e apenas ocupar o espaço de duas letras se não estivesse em um REPL. Estou adicionando porque vejo que estava errado, não o adicionando para este caso em particular. No entanto, antes dessa alteração, seriam 2 caracteres a mais. quando publiquei a solução pela primeira vez, havia um bug no Rebmu que a impedia de funcionar, mesmo que devesse ter ... agora funciona.)
fonte
Perl
186139135Quais são as melhores coisas da vida?
esmagar seus inimigos
ouvir as lamentações de suas mulheres
Usando respostas menos longas:
Perl
7972What are my preferred weapons?
(30Byte, H (X) = 3,76)swords
(H (X) = 2,25) emaces
(H (X) = 2,32)fonte
Python -
139103What are the ingredients for success?
->Unicorns
eRainbows
Teste:
Versão antiga:
fonte
Haskell, 117
Having to work with Haskell's functional paradigm means that everything has to be assigned to a variable or commented out with line
--
or block{- -}
comments; having nonsense functions run without assignment is out. So, to keep myself sane, I kept the question and answers as short as the rules allow.Question: What can I not have enough of?
"Shoes" and "cakes":
N.B. The appearance of
crank
under "What can I not have enough of?" should not be viewed as meaningful.fonte
Wa
is in the block comment, so, no, it's not actually anpttLWa.Lisp (76 characters)
31-character question, 6 characters in each answer ⟹ length - payload = 33
I wanted to use “What is your favorite color?”, but even stretched to British spelling, it only just reached the 30-character minimum for the question length, and I needed an odd-length question to balance the double quotes.
They say Common Lisp is verbose, but you wouldn't think so going by this one-liner. It's not even very obfuscated, you only need to insert a bit of whitespace to see what's getting quoted and what's getting executed.
Many Lisp implementations will shout out the colors, because they warp symbols to uppercase. If that bothers you, change
''fmuacghesnitaa
to""fmuacghesnitaa""
.fonte
STATA 295
Question: What are the best desserts to bake right now? Answer: brownies and cookies.
Explanation: Commands in STATA are delimited by new lines.
While "//" is a comment in STATA, "///" tells the compiler to continue to the next line and include its contents in the current command.
Commands in STATA can often be abbreviated to the point where they are considered unique enough to be differentiable (so "generate" becomes "g", "global" becomes "gl" or "glo", "capture" becomes "cap", "display" becomes "di", etc.). The display command displays text to the screen. The capture command captures all errors (including syntax errors), which is why this program compiles properly.
I guess if you want to get picky, any additional "/" after the first 3 consecutive ones in a line are ignored by the compiler. Also, in the "brownies" program, technically +" " is a comment. But I claim that it still counts because the capture command would still have made it irrelevant even if it wasn't a comment.
Thanks for reading my really long explanation. Now for the code:
"What are the best desserts to bake right now?"
"brownies"
"cookies"
fonte
Ksh (82 characters)
35-character question, 5 characters in each answer ⟹ length - payload = 37
I abuse the function definition syntax beyond POSIX. Dash and bash can't take it but ksh (public domain or ATT) can.
Nothing remarkable going on, just a bit of echo. Waste not, want not.
fonte
PowerShell 88
What is my favorite equipment? (30 chars, H(X) = 4.0314)
sword (5 chars, H(X) = 2.32193)
shield (5 chars, H(X) = 2.58496)
On the full program it redirects empty strings to a nonexistent variable
${x}
(the quotes for those empty strings are used to form a nonsense string that gets redirected either to an empty block{}
or nonexistent variable$x
on the even/odd versions), then prints the question and declares 2 unused variables (which are printed and placed next to another unused variable$XXXXXX
or$XXXXXXX
on the different cases).fonte
GolfScript, 51 bytes
Output
How it works
.;
duplicates the string and deletes the copy.""
pushes an empty string.thaeialdss
is undefined, so it does nothing.Odd chars
Output
How it works
;
deletes the first string from the stack.Even chars
Output
How it works
Wihaetesdso
andon
are noops..
duplicates the empty string on the stack.fonte