Alguém se lembra de Boaty ?
Você poderia fazer qualquer palavra antiga, certo?
- Escreva uma função para transformar uma string em Somethingy McSomethingface.
- Ele deve aceitar uma string como entrada. Ignore o caso da entrada.
- Se a palavra terminar em 'y', sua função não deve adicionar um 'y' adicional à primeira instância, mas deve removê-la na segunda instância.
- Se a palavra terminar em 'ey', ela não deverá ter um 'y' adicional adicionado na primeira instância, mas deverá remover as duas na segunda instância.
- A saída deve ter apenas letras maiúsculas no primeiro caractere, o 'M' de 'Mc' e o primeiro caractere após 'Mc'.
- ele só precisa trabalhar com cadeias de caracteres de 3 ou mais caracteres.
Exemplos:
boat => Boaty McBoatface
Face => Facey McFaceface
DOG => Dogy McDogface
Family => Family McFamilface
Lady => Lady McLadface
Donkey => Donkey McDonkface
Player => Playery McPlayerface
yyy => Yyy McYyface
DJ Grand Master Flash => Dj grand master flashy McDj grand master flashface
' y'
e' '
Respostas:
Stax , 26 bytes
Execute e depure
Execute este
fonte
V , 27
2830bytesExperimente online!
<Esc>
representa0x1b
Golpeou dois bytes depois de saber que não precisávamos oferecer suporte a entradas com menos de 3 caracteres.
1 byte economizado graças a @DJMcMayhem, trabalhando na segunda linha antes da primeira, removendo assim o
G
A entrada está no buffer. O programa começa convertendo tudo para minúsculas
V
seleciona a linha e au
minúscula~
alterna entre maiúsculas e minúsculas o primeiro caractere (convertendo-o para maiúsculas)e
Ù
duplica esta linha acima, deixando o cursor na linha inferioró
e substituie¿y$
, forma compactada dee\?y$
(opcionale
e ay
no final da linha), por nada (acontece na segunda linha)H
vai para a primeira linhaó
substituiy$
(y
no final da linha) por nada na primeira linhaÁ
anexay
a ao final da primeira linhaJ
e une a última linha à primeira com um espaço no meio e o cursor é movido para esse espaçoa
acrescentaMc
(<Esc>
retorna ao modo normal)A
finalmente, acrescentaface
no final da linhafonte
Python, 144 bytes
Experimente online aqui
fonte
f("Face")
não está de acordo com os casos de teste atuais ( TIO ).Excel,
204144137165 bytesDe dentro para fora:
Resposta antiga, criando todos os bits separadamente e concatenando (176 bytes). Não processa casos delimitados por espaço corretamente.
fonte
PROPER(A1)
é inválido (consulte oDJ Grand Master Flash
caso de entrada), a melhor substituição que eu encontrei enquanto trabalhava na minha solução VBA foiLEFT(UPPER(A1))&MID(LOWER(A1),2,LEN(A1))
- informe-me se você acabar jogando isso.Perl 6 ,
423735 bytesExperimente online!
fonte
C # (.NET Core) ,
122108139175180179154 bytesMuito obrigado, lee!
Experimente online!
C # (.NET Core, com LINQ), 152 bytes
Experimente online!
fonte
SOGL V0.12 , 38 bytes
Experimente aqui!
fonte
Ruby ,
6149 bytesExperimente online!
Guardou 12 bytes doces graças a @MartinEnder:
fonte
=~
e construído toda a string em vez de usarsub
. A interpolação de string pode ser usada sem colchetes se a variável for uma variável global, de instância ou classe.-p
sinalizador e usandosub
: tio.run/…Python 3 , 80 bytes
Leitor ávido de muito tempo, finalmente minha primeira submissão!
Experimente online
fonte
Retina , 29 bytes
Experimente online!
fonte
Python 2 ,
8892 bytesExperimente online!
fonte
Java 8,
121112107106 bytes-1 byte graças a @ OliverGrégoire .
Explicação:
Experimente online.
fonte
~32
->95
por 1 byte salvoJavaScript,
1039694 bytesBastante ingênuo primeiro passo nisso.
Experimente online
fonte
${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,``)}y Mc${s.replace(/e?y$/,``)}face
${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,'')}y Mc${s.replace(/e$/,``)}face
Donkey
e o segundo aFace
.vim,
3534 bytes<ESC>
é0x1b
Ungolfed
Experimente online!
Guardado 1 byte graças a DJMcMayhem
fonte
Y
vez deyy
Perl 5
-p
,4739 bytesSalvei 6 bytes com as sugestões de @ OlegV.Volkov, 1 com @ mwellnhof e 1 sozinho
Experimente online!
fonte
ucfirst
:$_=lc^$";
$_=s/y$//r."y Mc".s/e?y$//r.face
é um byte mais curto./y$|$/
->/y?$/
C ++ 14 (g ++),
181171148147134 bytesObserve que o clang não compila isso.
Crédito para Kevin Cruijssen e Olivier Grégoire pelo
&95
truque.Agradecimentos a Chris por jogar 11 bytes.
Experimente online aqui .
Versão não destruída:
fonte
s[0]=s[0]&~32;
paras[0]&=~32;
;s[i++]=s[i]|32;
paras[i++]|=32
; eint i=1,n=s.length()-1,b;
então você só precisa de 1int
.#include<string>
n
e apenas usando o valor dei
após o loop while. Experimente online!V ,
383632 bytes-5 bytes graças ao @Cows quack
<esc>
é um caractere de escape literal e[^
é codificado como\x84
Experimente online!
fonte
gu$
pode se tornarVu
[^
é um atalho de regex (veja aqui ), você pode usar 0x84 em vez de[^
salvar um byte. Da mesma forma,\?
pode ser simplificado<M-?>
para salvar outro byte. E$a
=>A
05AB1E , 30 bytes
Experimente online! ou como um conjunto de testes
fonte
Python 3 ,
117114 bytes-3 bytes graças ao Dead Possum
Experimente online!
fonte
[s,s[:-1],'',s[:-2]
pode ser alterado para0
para salvar 1 byte.'y'*1
*1
não é necessário. Mais 2 bytesreturn
porprint
1 byte menor.JavaScript (Node.js) , 87 bytes
Experimente online!
fonte
Buffer
, vou ter que tentar lembrá-lo para desafios futuros. Reduzimos para 87 bytes para você.K4 ,
746968 bytesSolução:
Exemplos:
Explicação:
Descobrir se os últimos caracteres são iguais a
"ey"
, converter resultado em base-2 para que possamos ignorar as palavras que terminam"e?"
. Índice em uma lista de números de caracteres para aparar.Consegui remover 5 bytes do meu código para determinar se os dois últimos caracteres,
"ey"
mas lutando para melhorá-lo ...Bônus:
Porta de 67 bytes em K (oK) :
Experimente online!
fonte
Ruby , 69 bytes
Explicação:
Experimente online!
fonte
s.capitalize
substitui o anteriors
? Se não, faz/e?y$/
lidar com um caso de teste que termina emY
,EY
ouEy
corretamente?s.capitalize
vss.capitalize!
(funções diferentes).s.capitalize!
derruba a versão antiga.s.capitalize!
. Nunca programado no Ruby, mas adicionar uma marca de explicação para substituir o valor anterior é muito legal. +1 de mim.Jstx , 27 bytes
Explicação
Experimente online!
fonte
Vermelho ,
143142 bytesExperimente online!
Ungolfed:
fonte
PHP: 132
Explicação:
fonte
Geléia ,
77757473 bytesExperimente online!
Todas as sugestões de golfe são bem-vindas (e desejadas)!
fonte
Pyth,
36.34 bytesExperimente online!
Explicação:
fonte
rz3
pararz4
que isso funcione corretamente no último caso de teste.Elixir ,
112110107106 bytesagora tão curto quanto java
Experimente online!
Explicação:
Obtém
x
o primeiro caractere em maiúsculas e todos os outros em minúsculas.Avalie o código e insira-o na string.
Concatena x com
y
se não termina comy
(ou seja, não corresponde à regexy$
).Remove à direita
ey
e à direitay
.fonte
PHP , 45
46bytesExperimente online!
fonte
boAty
. (Tampões incorretos, 'y' não removido).Pyth,
6059 bytes SBCSSuíte de teste
Eles não são exibidos aqui, mas três bytes,
Tradução Python 3:\x9c
,\x82
, e\x8c
estão na corda embalado entres
e÷
. Fique tranqüilo, o link os inclui.fonte