Escreva um Quine na planície Inglês


41

Escreva um quine que consiste em palavras reais em inglês separadas por espaços únicos. Uma "palavra" é definida como uma sequência que contém apenas letras minúsculas e maiúsculas ( /[a-zA-Z]+/em regex). Para ser "real", sua palavra deve ser reconhecida pelo dicionário oficial de Scrabble .

Estou usando o dicionário Scrabble, pois fornece uma resposta definitiva sobre o que é e o que não é válido. Existem muitas áreas cinzentas com um dicionário normal. Observe que "A" e "I" (para não mencionar "quine") não são palavras válidas.

Como escrever um quine usando apenas letras e espaços é quase impossível na maioria das linguagens de programação, você tem a opção de substituir os espaços únicos entre as palavras por um caractere de sua escolha. Você também tem a opção de acrescentar caracteres à frente da primeira palavra e ao final da última palavra. Esses caracteres adicionados podem ser qualquer coisa (incluindo novas linhas e não ASCII), exceto letras (az, AZ) . Existe uma penalidade para adicioná-los (consulte Pontuação).

Detalhes

  • Como de costume, os quines podem não ler ou acessar seu próprio código-fonte. (Eu diria que o comando Q do HQ9 + viola isso.)
  • A saída deve ir para stdout ou uma alternativa semelhante. Não há entrada.
  • As palavras não precisam ser maiúsculas corretamente. Eles podem ter maiúsculas e minúsculas em qualquer lugar. A sequência de palavras não precisa fazer nenhum sentido.
  • Nenhuma palavra pode ser usada mais de 3 vezes no seu programa. Palavras com letras maiúsculas diferentes ainda são a mesma palavra (por exemplo, 'CÃO', 'cachorro' e 'dOg' são todas a mesma palavra).
  • O uso de linguagens como PHP ou HTML que podem apenas exibir seu conteúdo é considerado uma brecha trivial e não é permitido.
  • O programa deve conter pelo menos uma palavra.

Pontuação

Sua pontuação é o número de "palavras reais" em seu programa mais as seguintes penalidades:

  • +1 para cada espaço que foi substituído por outro personagem
  • n n para cada n caracteres adicionados antes da primeira palavra (sim, isso é n à potência n)
  • n n para todos os n caracteres adicionados após a última palavra

Por exemplo, o programa

We all LIKE PROgraMmING

pontuaria 4 porque contém 4 palavras; nenhum caractere foi adicionado ou substituído em nenhum espaço. É claro que seria o resultado We all LIKE PROgraMmING.

O programa

!We@all LIKE#PROgraMmING- =

pontuaria 4 + 2 + 1 + 27 = 34; 4 para as palavras, 2 para os espaços substituídos, 1 para !a frente e 27 para - =a extremidade. É claro que seria o resultado !We@all LIKE#PROgraMmING- =.

A pontuação mais baixa vence. O desempate vai para a resposta com o menor número de pontos de penalidade. Se ainda houver um empate, a resposta mais votada vence.


11
Esse dicionário também existe como uma lista? Seria muito mais útil navegar do que verificar cada palavra individualmente.
— Martin Ender

16
Shakespeare alguém?
— dwana 26/02


11
@JanDvorak Acho que não ... O fato de não poder escrever nada assim não deve levar as pessoas a ver isso como uma pergunta ruim, é um desafio válido, embora bastante difícil, não é?
— rorlork

7
Ainda estou interessado em uma solução de Shakespeare.
— John Dvorak

Respostas:


25

golfscript, 8 palavras + 8 símbolos = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

As palavras são apenas um preenchimento, o núcleo é um pequeno núcleo quine:

{".~"}.~

Duplica e avalia uma função que apenas anexa as instruções para duplicar e avaliar a si mesma. Quando uma função é impressa, ela é codificada automaticamente. Este é o menor quine que faz alguma coisa .

Ou podemos simplesmente usar uma função literal que nunca é avaliada. Mas parece trapaça ...

{whatever}

Você não precisa de concatenação. {a`b"x.y~z"c}x.y~z
— Dennis

@ Dennis Eu nem preciso da inspeção nesse caso. Obrigado! Eu sinto que eu preciso perguntar o OP alguma coisa ...
— John Dvorak

8
@ Cefalópode Eu não leio meu próprio código fonte. Estou apenas colocando uma função na pilha e o tempo de execução a imprime para mim, alegremente inconsciente do fato de que a totalidade do meu código-fonte é uma função literal.
— John Dvorak

11
Eu acho que o {whatever}que violaria a regra demasiado trivial ( "Usando linguagens como PHP ou HTML que pode apenas gato para fora seu conteúdo é considerado uma brecha trivial e não é permitido.")
— Claudiu

11
@ Claudiu, essa é uma regra contra idiomas, não soluções. É por isso que eu pedi.
— John Dvorak

54

> <> , 25 palavras + (22 + 1 1 + 1 1 ) extra = 57 49

Oh Deus, meu cérebro.

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Como as regras indicam "Não há entrada", para que este programa funcione, você precisará inserir um arquivo vazio.

Ah, e sim, brré uma palavra válida do Scrabble, como são tsktske pfft.

Explicação

Primeiro de tudo, as seguintes palavras são não ops:

deep clap beep flap leap clip blip flip

Isso ocorre por dois motivos:

  • abcdeflnúmeros push (10, 11, 12, 13, 14, 15 e o comprimento da pilha, respectivamente). Além disso, ipressiona -1 se EOF for atendido, visto que não há entrada.
  • O pcomando mostra três caracteres v,y,xe coloca vna posição x,y.

Sim,> <> permite modificar o código fonte em tempo real! Nós realmente não fazemos uso disso, pois precisamos apenas do ppopping.

Se nos livrarmos dessas no-ops, obtemos:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

De maneira semelhante, a laced appparte de placed applee a e alpparte de apple alptambém não são ops, e o rrde brrapenas inverte a pilha duas vezes, o que também podemos remover:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Finalmente, algo que se parece com um programa regular> <>! A idéia é fazer uso do padrão> <> quine, que funciona assim:

  • A inicial 'inicia a análise de string, pressionando cada caractere encontrado até atingirmos outro'
  • Continuamos pressionando caracteres até o final da linha, e nesse momento empacotamos o ponteiro de instruções de volta ao início (já que> <> é toroidal)
  • Nós pousamos na inicial 'novamente e paramos de analisar as cordas. O resultado é que colocamos todos os caracteres do programa (exceto o inicial ') na pilha.

Então acontece o seguinte:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

"Nenhuma palavra pode ser usada mais de 3 vezes no seu programa. Palavras em maiúsculas diferentes ainda são a mesma palavra (por exemplo, 'DOG', 'cachorro' e 'dOg' são todas a mesma palavra)." De qualquer forma, você recebe um voto positivo de mim, senhor.
— rorlork

@rcrmn Continuei adicionando tantas palavras que esqueci completamente dessa regra! Corrigido agora, embora eu quisesse evitar ter que usar i.
— Sp3000 26/02

11
TIL "pa", "la" e "ser" são palavras válidas em Scrabble
— John Dvorak

20
Ler seu programa em voz alta me faz imaginar como os computadores com cartões perfurados deveriam ter soado.
— Hobbies de Calvin

10
Acho que você roubou esse programa da fonte do sistema operacional do R2D2.
— deixou de girar contra-

21

Frango , 1 palavra

Normalmente não gosto de esolangs, mas este parecia perfeito para isso. Eu acho que isso é realmente verdadeiro:

chicken

Empurra 1 frango para a pilha. A pilha é então exibida.


11
Esta (e a resposta de Julia) limita-se a trivialmente inválida. Você pode mantê-los aqui, mas não há promessas de aceitação.
— Hobbies de Calvin

@ Calvin'sHobbies No interesse da justiça, vou excluí-lo com prazer, se você achar que é muito burro - Sua ligação. Eu estava trabalhando em uma solução AppleScript, mas fiquei frustrado com a regra "Nenhuma palavra pode ser usada mais de três vezes", que parece tornar isso especialmente difícil. Então, optei pelo truque barato :-)
— Digital Trauma

@ Calvin'sHobbies: Eu sou o autor da submissão de Julia. Eu gosto do sentimento da DigitalTrauma em remover minha postagem, se você achar que é muito limitado. Eu também fiz R. Isso é muito perto também?
— Alex A.

@ Alex e DT: Depende de vocês. Provavelmente não aceitarei nenhuma das respostas, mas não me importo que estejam aqui. Eu ainda estou indeciso meio da resposta R, embora a idéia é praticamente a mesma que a Julia ...
— Calvin Passatempos

12

R, 2 palavras + 1 substituição + 1¹ à direita = 4

Objetos que não são atribuídos a nada são apenas impressos em stdout. Como uma expressão é um objeto, o código a seguir se imprime:

expression(puppy)

Submissão anterior, 5 pontos:

function(hello)hello

Você foi inspirado pela minha solução barata de 3 pontos, não foi? ;-)
— John Dvorak

11
@JanDvorak: Na verdade, eu não vi isso antes de postar isso, mas agora é uma fonte retrospectiva de inspiração.
— 26415 Alex A.

12

Python 2, 58 = 37 palavras + 21 sinais de pontuação

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Com algumas novas linhas adicionadas:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

Os três usos por restrição de palavras foram o que dificultou a escrita. Eu queria usar a string com todo o código mais de três vezes, e cada string tinha que ser isolada com if else and oroperadores dos quais eu tinha apenas um suprimento limitado.


@ user23013 Ops, esquecemos de substituí-lo por um identificador aleatório.
— feersum 01/03/2015

7

Julia, 1 palavra + 1¹ anterior = 2

Julia tem objetos chamados símbolos que são definidos usando um precedente :. Muito parecido com a minha solução R, isso apenas imprime quando enviado.

:puppy

5

Linha de comando do DOS, 10

& was unexpected at this time.

Erro quine, não banido, parece


11
Este código não "codifica" nenhuma parte do código. Veja nossa definição de quine
— MilkyWay90

@ MilkyWay90 O uso da definição &codifica todo o código e para a saída
— l4m2

Ah, você pode editar a resposta para que eu possa remover o meu voto negativo
— MilkyWay90

11
Resposta loopholey interessante ... é &uma palavra, embora?
— Programas Redwolf

@RedwolfPrograms no, mas & são dois símbolos. 5 (palavras) + 1 (à direita) + 2 ^ 2 à esquerda = 10.
— Draco18s

3

Encantamentos Rúnicos , Pontuação 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Experimente online!

Palavras: hot ox not knot(4)
Substituições: 3 4 +(3)
Antes: "(1)
Depois: @(1)

Todos os personagens GNOQWghtxznão funcionam no Runic (assim como espaço e período, mas mais espaços não ajudam na pontuação). Incluindo Xe kexigido para a funcionalidade, isso fornece a seguinte lista de palavras disponíveis:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

Eu escolhi com base nas necessidades do espaço em que estava entrando e fazendo com que parecesse engraçado.

A remoção de todos os caracteres NOP fornece a seguinte solução:

"3X4+k@

Experimente online!


0

Hã? - 1 palavra + 1 ** 1/1 ^ 1 = 1 caractere após a palavra = 2 pontuação total.

Ouch!

Ouch! é um quine válido em hein?

Execute como pythuhn.py Ouch!e não pode haver um arquivo nomeado Ouch!no diretório atual.

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.