Caneta Ananás Apple Pen… com suas próprias canetas, abacaxis e maçãs

16

Prelúdio:

Esse desafio é diferente de "outro programa para gatos".
Há toneladas literais de reviravoltas diferentes, por que não posso ter o meu pessoal?
Coisas únicas:

  • Não está lendo entrada direta para saída.
  • Está manipulando a corda de uma maneira que com certeza não é um gato reto.

Desafio:

Dadas três entradas (ou uma entrada, separadas como você quiser), três objetos (palavras) serão substituídos por canetas, abacaxis e maçãs na letra e na saída.

Formato de saída (de acordo com as letras encontradas no AZLyrics ):

Supondo (substitua valores por colchetes por estes):

  • A, B, C com palavras de entrada (ex. apple)
  • UA, UB, UC com palavras de entrada com as primeiras letras maiúsculas (se ainda não estiverem maiúsculas) (ex. Apple)
  • FUA, FUB, FUC com respectivamente as primeiras letras maiúsculas: (ex. A)
  • a / an com artigo correspondente à primeira letra da vogal / consoante (ex. an)
[FUA] - [FUB] - [FUC] - [FUA]

Eu tenho [a / an] [A], eu tenho [a / an] [C].
Uh! [UC] - [UA]!

Eu tenho [a / an] [A], eu tenho [a / an] [B].
Uh! [UB] - [UA]!

[UC] - [UA], [UB] - [UA].
Uh! [UA] - [UB] - [UC] - [UA].
[UA] - [UB] - [UC] - [UA]!

Caso de teste:

Teste com pen, pineapplee apple:

P-P-A-P

I have a pen, I have an apple.
Uh! Apple-Pen!

I have a pen, I have a pineapple.
Uh! Pineapple-Pen!

Apple-Pen, Pineapple-Pen.
Uh! Pen-Pineapple-Apple-Pen.
Pen-Pineapple-Apple-Pen!

Regras:

  • Se a entrada não começar com uma letra, assuma consoante ( a) e primeiro em maiúscula o primeiro caractere (ex. 123 -> 1).
  • , menor quantidade de caracteres ganha!
n4melyh4xor
fonte
1
Vamos dizer que introduzimos caneta, abacaxi e 1 maçã; devemos considerar consoante a apenas para o PPAP de primeira linha OU as outras instâncias de '1pple' também devem ser alteradas para 'apple'?
officialaimm
@officialaimm, irá editar, assume o primeiro caractere (no seu caso 1).
N4melyh4xor
13
Eu não deveria ter pesquisado isso no Google. Agora, é preso na minha cabeça -_-
Gurupad Mamadapur
1
A regra a / a trata consoantes / vogais como sons e não letras. Por exemplo, você escreve um usuário , não um usuário . Será difícil acertar, a menos que devamos ignorar a regra "real" para esse desafio e apenas olhar para a primeira letra. Nesse caso, você deve especificar quais letras devem ser consideradas vogais.
Dennis
@ Dennis, vou ignorar por enquanto.
N4melyh4xor

Respostas:

10

JavaScript (ES6), 217 ... 187 183 bytes

Recebe a entrada como uma matriz de 3 seqüências, como ['pen', 'pineapple', 'apple'].

a=>`0-1-2-0

6, 895-3!

6, 794-3!

5-3, 4-393-4-5-3.
3-4-5-3!`.replace(/\d/g,n=>[u=(w=a[n%3])[0].toUpperCase(),u+w.slice(1),`I have a${~'AEIOU'.search(u)?'n':''} `+w,`.
Uh! `][n/3|0])

Exemplos

Arnauld
fonte
3
'golf', 'puzzle', 'code'IMHO
Neil
4

Perl 6 , 165 bytes

{"0-3-6-0

2, 897-1!

2, 594-1!

7-1, 4-191-4-7-1.
1-4-7-1!".subst: /\d/,->$x {((.tc.comb[0],.tc,"I have a{'n' if /:i^<[aeiou]>/} $_" for $_),".
Uh! ").flat[$x]},:g}

Usa a mesma abordagem que a resposta JS de Arnauld .

smls
fonte
3

Lote, 494 490 bytes

@echo off
set s=%1
set t=%2
set u=%3
call:u %s:~,1%- %t:~,1%- %u:~,1%- %s:~,1%
echo(
call:h %1 %3
call:u Uh! %3- %1!
echo(
call:h %1 %2
call:u Uh! %2- %1!
echo(
call:u %3- %1, %2- %1.
call:u Uh! %1- %2- %3- %1.
call:u %1- %2- %3- %1!
exit/b
:h
set s=I have a %1, I have a %2.
for %%v in (a e i o u)do call set s=%%s:a %%v=an %%v%%
echo %s%
exit/b
:u
set s= %*
for %%u in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)do call set s=%%s: %%u= %%u%%
echo%s:- =-%

Explicação: A :hsub-rotina processa a linha I have a %, I have a %.As %s são substituídos a partir dos argumentos da linha de comando apropriados, e, em seguida, as cordas a a, a e, a i, a oea u são substituir com o equivalente anversão. A :usub-rotina lida com as outras linhas; leva as palavras de parâmetro e maiúsculas todas as primeiras letras. (Um espaço extra é prefixado para permitir que a primeira palavra seja colocada em maiúscula, mas é removida na saída.) Para manipular as palavras após -s, os espaços extras são passados, mas também são excluídos na saída. A :usub-rotina também é usada para a primeira linha, embora extrair as iniciais seja complicado.

Neil
fonte
3

Python 3.6 - 351 287 286 bytes

def x(a,b,c):t=(a,b,c);p,q,r=('a'+'n'*(i[0]in'aeiouAEIOU')for i in t);A,B,C=map(str.title,t);print(f"""{A[0]}-{B[0]}-{C[0]}-{A[0]}

I have {p} {a}, I have {r} {c}.
Uh! {C}-{A}!

I have {p} {a}, I have {q} {b}.
Uh! {B}-{A}!

{C}-{A}, {B}-{A}.
Uh! {A}-{B}-{C}-{A}.
{A}-{B}-{C}-{A}!""")

Não há nada sofisticado aqui, exceto usar o novo recurso de formatação literal de strings.

Entrada:
s ('golfe', 'quebra-cabeça', 'código')
Resultado:
GPCG

Eu tenho um golfe, eu tenho um código.
Uh! Code-Golf!

Eu tenho um golfe, eu tenho um quebra-cabeça.
Uh! Puzzle-Golf!

Código-Golf, Puzzle-Golf.
Uh! Código-Golf-Puzzle-Golf.
Golf-Puzzle-Code-Golf!
 

Nota - A versão é 3.6onde a formatação literal da string foi introduzida . Portanto, isso não funcionará em versões anteriores.

Gurupad Mamadapur
fonte
Não tenho certeza, mas como você já está recuando em sua cadeia longa, acho que você poderia usar os caracteres reais \ n e conseguir pular as aspas triplas.
nedla2004
@ nedla2004 Usar '\ n' será realmente mais longo. Ignorar "economizará apenas 2 bytes, mas \nadicionará 12 bytes.
Gurupad Mamadapur
1

Lua, 615 607 bytes

Economizou 8 bytes graças a [um usuário anônimo]

Ufa, longa. Experimente aqui.

w=io.read a,b,c=w(),w(),w()function d(u)if ("aeiouAEIOU"):find(z(u))~=nil then return "an" else return "a" end end function z(y)return y:sub(1,1):upper()end f=z(c)..c:sub(2).."-"..z(a)..a:sub(2).."-"..z(b)..b:sub(2).."-"..z(a)..a:sub(2)print(z(a).."-"..z(b).."-"..z(c).."-"..z(a).."\n\nI have "..d(a).." "..a..", I have "..d(c).." "..c..".\nUh! "..z(c)..c:sub(2).."-"..z(a)..a:sub(2).."!\n\nI have "..d(a).." "..a..", I have "..d(b).." "..b..".\nUh! "..z(b)..b:sub(2).."-"..z(a)..a:sub(2).."!\n\n"..z(c)..c:sub(2).."-"..z(a)..a:sub(2)..", "..z(b)..b:sub(2).."-"..z(a)..a:sub(2)..".\nUh! "..f..".\n"..f.."!")

Estou 100% certo de que isso pode ser reduzido. Eu sou apenas preguiçoso ..

Basicamente, usa muita manipulação de strings. Existem 3 funções principais e uma variável:

  • d(string): retorna um se string é vogal ( AEIOUaeiou), senão retorna um
  • z(string): retorna a primeira letra em maiúscula
  • z(s) .. s:sub(2): retorna a palavra inteira, mas a primeira letra é maiúscula
  • f: a palavra final (em uma variável, para salvar alguns bytes). No seu caso de teste, seria Pen-Pineapple-Apple-Pen.

Entrada: pen, pineapple,apple

Resultado:

P-P-A-P

I have a pen, I have an apple.
Uh! Apple-Pen!

I have a pen, I have a pineapple.
Uh! Pineapple-Pen!

Apple-Pen, Pineapple-Pen.
Uh! Pen-Pineapple-Apple-Pen.
Pen-Pineapple-Apple-Pen!
devRicher
fonte
1
Para quem o usuário anon foi: não faça edições no código das pessoas do golfe. (apenas no caso de eles voltarem)
Rɪᴋᴇʀ
1

Python 2 , 283 bytes

a=input()
r='0-1-2-0\n\n9 3, 9 5.\nUh! 8-6!\n\n9 3, 9 4.\nUh! 7-6!\n\n8-6, 7-6.\nUh! 6-7-8-6.\n6-7-8-6!'
for j in range(10):r=r.replace(str(j),([i[:1].upper()for i in a]+[['a ','an '][1+'aeiouAEIOU'.find(i[:1])/9]+i for i in a]+[i[:1].upper()+i[1:]for i in a]+['I have'])[j])
print r

Experimente online!

officialaimm
fonte