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.

Hobbies de Calvin
fonte
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}
John Dvorak
fonte
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
Sp3000
fonte
"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.

Trauma Digital
fonte
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
Alex A.
fonte
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.

feersum
fonte
@ 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
Alex A.
fonte
5

Linha de comando do DOS, 10

& was unexpected at this time.

Erro quine, não banido, parece

l4m2
fonte
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!

Draco18s
fonte
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.

MilkyWay90
fonte