... e golfe de verdade para meus amigos de código.
Este é um desafio baseado em uma história em quadrinhos XKCD de um ano que consiste principalmente de brindes (paródias da primeira história em quadrinhos) seguindo um padrão distinto, mas com uma ligeira variação.
Sua tarefa é escrever um programa (ou função) que receba a primeira metade de qualquer brinde do quadrinho (tudo, inclusive o friends
) como entrada (via stdin ou argumento de função) e produza (ou retorne) o texto preciso de A segunda parte. Você não precisa manipular entrada inválida, aplicam-se brechas padrão, o código mais curto em bytes ganha.
Exemplos
Para ajudar aqueles que não querem copiar os brindes de qualquer outro lugar, aqui estão todos eles, separados em entrada e saída.
Input: Champagne for my real friends
Output: and real pain for my sham friends!
Input: Pseudopods for my real friends
Output: and real pods for my pseudo-friends!
Input: Petticoats for my real friends
Output: and real coats for my petty friends.
Input: Loosestrife for my real friends
Output: and real strife for my loose friends!
Input: Ladybugs for my real friends
Output: and real bugs for my lady friends!
Input: Single-payer for my real friends
Output: and RealPlayer for my single friends.
Input: Tumbleweeds for my real friends
Output: and real weed for my Tumblr friends!
Input: Fauxhawks for my real friends
Output: and real hawks for my faux friends!
Input: Platonic solids for my real friends
Output: and real solids for my platonic friends!
Single-payer
(em vez deSingle-player
).Single-payer
.Respostas:
Retina , 119 bytes
A versão anterior não gerenciava corretamente o espaço em "sólidos platônicos", esta funciona e é mais curta :)
Experimente online!
Isso transforma a entrada na saída através de uma série de substituições.
A parte mais interessante é essa substituição (tipo um regex golf):
O que faz quase todo o trabalho, dividindo a primeira palavra, colocando suas peças nos lugares certos, removendo espaços extras e construindo a estrutura da saída. Para funcionar corretamente no caso de teste "Tumbleweeds", isso depende da substituição anterior "eds" -> "ed".
O restante é composto principalmente por substituições que tratam de casos especiais. Outras partes interessantes são:
Isso transforma tudo, exceto "T" (no Tumblr), em minúsculas.
Isso coloca um "." no final de cada frase, contendo uma palavra com "y" algumas letras após "p" ("mesquinho" e "pagador" na prática). Então coloca um "!" no final de todas as frases terminadas com um "s" (todas as outras).
fonte
platonic
. Correção sugerida: TIO (+5 bytes)Python 2,
291269293255247 bytesObrigado
Erik the Outgolfer
por salvar 22 bytes!+24 bytes para contabilizar algumas saídas que terminam em
.
vez de!
Solução simples para começar. Verifica a oitava letra da entrada, conforme sugerido nos comentários, e procura a saída correspondente em
um dicionáriouma matriz.Experimente Online!
fonte
Single-payer for my real friends
...RealPlayer
é um caso especialSOGL , 143 bytes
Isso usa essa string como parte principal. "|" são os divisores e "_" são espaços reservados para espaço, portanto, a divisão funcionaria corretamente.
Exemplo de entrada: "Sólidos platônicos para meus verdadeiros amigos" Explicação:
fonte
Python 3 ,
788,403,359396 bytesÚltima versão
Esta é agora a minha quinta tentativa. Consegui metade do tamanho do meu programa original. Agora inclui o "-" ausente e acredito que seja uma solução completa. Ainda suspeito do lado volumoso; mas muito mais perto do objetivo. Eu tive muita ajuda . Obrigado por todas as orientações úteis.
Experimente online!
Postagem original
Este é o meu primeiro post sobre código de golfe, então peço desculpas antecipadamente pelo meu programa desajeitado. Não é possível ver como um programa poderia ser feito para converter "Champagne" em "pain", "sham" analisando as palavras. No entanto, eu gostaria de ver alguém resolver isso. Portanto, como meu nível de habilidade determina que meu programa precise saber com antecedência que "Champagne" é "dor", "farsa", parecia haver pouco sentido em realmente codificar uma solicitação de entrada. Como resultado, deixei de fora e fui um pouco literal com minha saída de impressão. Espero que esteja tudo bem :)
fonte
Röda ,
299292288259 bytes4 bytes salvos graças a @fergusq por usar em
,
vez de..
naspush
instruçõesBytes salvos graças a @fergusq me mostrando o caminho
indexOf
Experimente online!
Tão perto de Python ... tão perto ....
Sua jogada, Python.Explicação
fonte
..
por,
.r=indexOf(a[7:8],"noarspekc")
.JavaScript (ES6),
230228221216 bytesTeste
Mostrar snippet de código
fonte
PHP,
202220204203 bytesfonte
Perl,
173168 bytesRemovendo novas linhas e recuos, isso se torna 173 bytes de código Perl5. Roubou descaradamente a primeira regexp da resposta de Retina de Leo. (O meu demorou alguns caracteres a mais)
Para a versão perl5> = 5.14, outros 5 bytes podem ser removidos com eval e o novo / r modificador de substituição de regexp. Terminando com 168 bytes:
Experimente online!
fonte
C, 367 bytes
Não acabou tão curto quanto parecia.
fonte
Java 7,
585553 bytes-32 bytes graças a @Zircon .
Definitivamente, você pode jogar golfe usando algo diferente de um mapa.
Explicação:
Código do teste:
Experimente aqui. (ideone.com está com problemas ultimamente, então estou usando o TIO agora ..)
fonte
put
vez dem.put
.C (gcc) , 311 bytes
Padrões claros, mas muitas exceções. Ainda assim, deve haver uma maneira melhor do que isso!
Experimente online!
fonte