Faz alguns meses no trabalho e sinto que só quero gritar na cara do meu chefe. No entanto, eu não sou o único a confrontar diretamente pessoas com as quais tenho problemas. Eu também não quero perder meu emprego.
Então, eis uma idéia: quero poder insultá-lo, sem que ele descubra. E percebi da maneira perfeita: preciso de algum tipo de software que codifique um insulto dentro de uma mensagem perfeitamente perfeita. E, como ele sabe que não vê florestas para árvores, acho que sei exatamente como:
Escreva-me um programa que tenha como entrada uma sequência de comprimento desconhecido, mas sem quebras de linha. Essa será a mensagem não processada que desejo enviar.
Se possível, retorne a seqüência de caracteres formatada de forma que a mensagem "MORTE EM UM GRANDE INCÊNDIO" constitua a coluna esquerda inteira. Com novos parágrafos onde os espaços entre as palavras devem ir. Agora, como estou com muita raiva, é igualmente importante que todas as letras estejam em maiúsculas.
Você não pode modificar a string de nenhuma outra maneira, ou seja, não pode transformar toda a string em caracteres maiúsculos.
Se a sequência em questão não puder ser formatada dessa maneira, você deve retornar a sequência original. Leia a entrada da entrada padrão.
Aplicam-se regras normais: sem solicitações HTTP, sem consultar Marvin da THGTTG, etc.
Exemplo de entrada:
Caro chefe, como estão as coisas? Chegou ao meu conhecimento que recebi toda a culpa pelo acidente na sexta-feira passada. Não é apenas a maioria. Todo último pedaço. É errado eu pensar que o resto da equipe seja pelo menos em parte responsável? Afinal, nós seis estávamos envolvidos desde o início. Não que eu ache que devo ficar sem culpa. De modo nenhum. Tudo o que estou dizendo é o seguinte: eu faço o meu melhor. Eu esforço-me. Eu melhoro constantemente. E eu estou constantemente assumindo a responsabilidade. De um modo geral, estou muito bem em assumir total responsabilidade por minhas ações. Mas depois desta primavera, parece que recebo mais do que mereço. Lembra do contrato da Flakenhauser? Tudo correu tão suave quanto se poderia esperar. Ou assim parecia a princípio. Foi apenas no último minuto que as coisas desmoronaram. Toda a equipe concordou que era mais parecido com um acidente do que com planejamento mal feito ou recursos mal administrados. Ainda assim, eu - sozinho - fui culpado por isso. Mesmo que eu não tenha dito nada, meu nível de tolerância para levar a culpa levou um sério impacto então. A partir daí, senti que era necessário sempre tentar duas vezes mais, apenas para escapar do escrutínio. E ainda assim, aqui estamos novamente. Apesar de todas as minhas realizações. Exatamente onde sempre parecemos acabar hoje em dia. Todo projeto. Está se tornando insuportável. apenas para escapar do escrutínio. E ainda assim, aqui estamos novamente. Apesar de todas as minhas realizações. Exatamente onde sempre parecemos acabar hoje em dia. Todo projeto. Está se tornando insuportável. apenas para escapar do escrutínio. E ainda assim, aqui estamos novamente. Apesar de todas as minhas realizações. Exatamente onde sempre parecemos acabar hoje em dia. Todo projeto. Está se tornando insuportável.
Exemplo de saída:
Caro chefe, como estão as coisas?
Chegou ao meu conhecimento que recebi toda a culpa pelo acidente na sexta-feira passada. Não é apenas a maioria.
Todo último pedaço.É errado eu pensar que o resto da equipe seja pelo menos em parte responsável? Afinal, nós seis estávamos envolvidos desde o início.
Não que eu ache que devo ficar sem culpa. De modo nenhum.Tudo o que estou dizendo é o seguinte: eu faço o meu melhor. Eu esforço-me. Eu melhoro constantemente. E eu estou constantemente assumindo a responsabilidade.
De um modo geral, estou muito bem em assumir total responsabilidade por minhas ações. Mas depois desta primavera, parece que recebo mais do que mereço.
Lembre-se do contrato da Flakenhauser.
Tudo correu tão suave quanto se poderia esperar. Ou assim parecia a princípio. Foi apenas no último minuto que as coisas desmoronaram.
Toda a equipe concordou que era mais parecido com um acidente do que com planejamento mal feito ou recursos mal administrados.
Ainda assim, eu - sozinho - fui culpado por isso.
Mesmo que eu não tenha dito nada, meu nível de tolerância para levar a culpa levou um sério impacto então.A partir daí, senti que era necessário sempre tentar duas vezes mais, apenas para escapar do escrutínio. E ainda assim, aqui estamos novamente.
Apesar de todas as minhas realizações.
Exatamente onde sempre parecemos acabar hoje em dia.
Todo projeto. Está se tornando insuportável.
Isso é código de golfe. O menor código vence.
Respostas:
CJam,
5653 bytesExperimente online!
Como funciona
fonte
Perl - 60 bytes
Contando o shebang como um.
Esta solução usa a cadeia mais interna para criar o seguinte regex:
que é semelhante ao regex usado na solução de m.buettner . O regex gerado é comparado com a entrada. Em um contexto de lista, isso retornará uma matriz que contém cada um dos grupos de correspondência, que são unidos por uma nova linha (a razão para os grupos 'combinar nada'
(\.*)
é inserir uma nova linha adicional). Se não houver correspondência, a sequência original será exibida.Perl - 73 bytes
Contando o shebang como dois.
Isso divide a string nos delimitadores apropriados e coleta as peças em uma matriz. Se algum deles falhar na correspondência, o separador de registro de saída (que foi definido como uma nova linha com a
-l
opção) será desabilitado e, portanto, a sequência será emitida sem modificação.fonte
./script.pl
, então provavelmente sim. Se invocado comoperl script.pl
, então não..
afterI
irá inserir uma nova linha adicional antesI
(porque corresponde novamente na mesma posição). Talvez um pouco contra-intuitivo.-M
opção ao shebang, que morrerá com o erro fatal:Too late for "-M" option at line 1.
Mas a principal razão pela qual eu o coloquei lá, também evito precisar explicar que ele precisa ser executado comoperl -pl script.pl
- em sua forma atual, ele é executado como é.GolfScript, 53 bytes
Parece que Dennis e eu criamos coisas parecidas em paralelo ... Mas aqui está minha tentativa.
Clique nos links antes de cada bloco de código para experimentá-lo online. Infelizmente, o intérprete on-line não permitirá que você execute códigos maiores que 1024 caracteres, então eu tive que executar alguma ... "compactação" da entrada de teste. Mas ainda funciona.
Versão Squished
Versão comentada não terminada
Um ponto levantado por Dennis: Todos os programas GolfScript imprimem uma nova linha final automática. Se isso deve ou não invalidar minha solução como está, não tenho certeza. Acredito que custaria 4 caracteres para suprimir a nova linha final, adicionando
"":n
algo próximo ao final.fonte
Ruby - 140
Não há regexes neste . Ele caminha simultaneamente os caracteres na entrada ARGV [0] e uma string contendo caracteres que precisamos quebrar para criar nossa mensagem na coluna da esquerda. Originalmente, ele mantinha espaços após as letras que precisavam ter uma nova linha, mas descobriu que era um pouco mais curto para codificar os índices nos quais inserir a quebra de linha.
Depois de tudo dito e feito, ele verifica se o
i
índice aumentou o tempo suficiente para passar por todas as letras que precisavam ser quebradas. Caso contrário, apenas imprimimos a string original. Se houver, damos a eles o formatado.n-[i]!=n
foi um truque interessante para salvar caracteres ao verificar se o índice atual era ou não um que precisava de uma quebra de linha extra (em comparação comn.include? i
). Também salvou alguns caracteres usando{}
s em vez dedo/end
apesar de ser um bloco com várias linhas e usou uma condição ternária nas colocações finais para salvar caracteres ao determinar qual deles sair.Não é o mais curto, mas achei que seria legal ficar sem expressões regulares.
fonte
Perl, 184 bytes
Não é uma pontuação espetacular para Perl, mas aqui está uma solução simples para regex
fonte
print($_)
==print
. +1 ponto de legibilidade: é incrivelmente fácil ver o que está acontecendo, o que não é exatamente o caso de outras soluções.JavaScript 116
Implementação de Javascript da idéia de m-buettner
Snippet de teste
fonte
FIFA
teste (comentários OP)From that FIFA point on
. Ele coloca uma nova linha antesFA
e antes do espaço antesFI
.Python3 (
166138)Golfe:
Ungolfed-ish:
Embora o uso do lambda me agrade um pouco, esse número maciço de variáveis usadas e o desenvolvimento um tanto bagunçado têm o efeito oposto. Regex também pode ter sido uma boa ideia. Hay ho, pelo menos funciona :).
Editar: variável lambda substituída por
count
builtin e instrução de divisão abreviada.fonte
Python3 (165)
Ungolfed
Explicação
chunk
recursivamente divide o final da mensagem que contém o último cabeçalho e o anexa a uma lista.Advertência: isso não funcionará se não houver espaços entre os dois títulos propostos em sua carta por algum motivo, mas isso parece improvável em uma carta ao seu chefe.
fonte
Ruby 115
Ruby 95
fonte
J -
110103 bytesPor que J não possui boas funções para lidar com strings, mas apenas funções de array? Vou revisar isso se descobrir algo inteligente.
Editar: Saída reduzida e fixa (tinha espaços extras antes) e verificação. Eu também melhorei a explicação.
Explicação:
Exemplos (muito tempo?):
fonte
JavaScript (ES6),
93115 bytesEu costumava
replace
percorrer a sequência, com uma correspondência para/\b./g
encontrar apenas caracteres que seguiam um espaço ou iniciavam a sequência. Em seguida, verifiquei cada caractere para ver se ele correspondia ao índice atual na matriz que eu estava procurando e adicionei uma nova linha antes, se sim, e incrementeii
.EDIT: Perdeu a necessidade de criar novas linhas entre as palavras. Eu fiz isso agora, o que eleva para 115.
fonte
PHP, 328 bytes
Dado um arquivo chamado 'G' contendo o texto bruto para "immensagem"
Explicação (~ código não digitado && comentado):
fonte
PHP, 136 bytes
se todo o insulto puder ser posto; imprime a string modificada com um espaço à esquerda ou quebra de linha; saída vazia, se não. Corra com
-r
.demolir
fonte
Python - 190 bytes
Ungolfed
Esta é minha primeira tentativa de golfe :) Procurando aprender algumas ótimas técnicas de codificação, independentemente, eu apenas foquei no uso de find e, em seguida, em algumas seqüências de caracteres para encontrar os caracteres apropriados e formatar a saída.
Variáveis -
lr = l possui caracteres atribuídos que usaremos como nosso guia para criar nosso novo parágrafo formatado. r é designado para o novo caractere de linha no espaçamento da nova saída.
k, p = O parágrafo de entrada. K é usado para reverter para o original, pois não é reatribuído durante a execução do script. Verifico contra x para saber quando adicionar uma nova linha dupla para fins de espaçamento.
y, i = y é um tipo de "cursor", acompanha a última posição em que um caractere foi encontrado, para que possamos encontrar o parágrafo corretamente para fins de emenda; reverta o parágrafo (variável p) para sua entrada original através da variável k.
h = Comprimento da entrada, que usamos na emenda.
x = A posição do caractere atual representado por C, usado também para emenda.
c = Caracteres em l para iterar e procurar.
O código a seguir é reformulado e dividido do código original para facilitar a leitura conforme o que está acontecendo:
Gostaria muito de receber seu feedback! Eu estou procurando aprender.
fonte
x<0
parai
. Em python Verdadeiro é o mesmo que 1 e False é o mesmo que 0. Então, se x é -1, ele adiciona 1 e caso contrário, 0.i+=
é o mesmo quei=i+
True == 1
dá. :)