Bolígrafo Bolígrafo de manzana ... con sus propios bolígrafos, piñas y manzanas.

16

Preludio:

Este desafío es diferente de "otro programa de gatos".
Hay literalmente toneladas de giros diferentes, ¿por qué no puedo tener el mío, gente?
Cosas únicas:

  • No está leyendo entrada directa a salida.
  • Está manipulando la cuerda de una manera que seguramente no es un gato directo.

Desafío:

Dadas 3 entradas (o una entrada, separadas como quieras) obtienes tres objetos (palabras) que vamos a sustituir por bolígrafos, piñas y manzanas en la letra y la salida.

Formato de salida ( según la letra que se encuentra en AZLyrics ):

Suponiendo (reemplace los valores con corchetes por estos):

  • A, B, C con palabras de entrada (ej. apple)
  • UA, UB, UC con palabras de entrada con primeras letras en mayúscula (si no es mayúscula ya) (ej. Apple)
  • FUA, FUB, FUC con las primeras letras mayúsculas, respectivamente: (ej. A)
  • a / an con artículo correspondiente a la primera letra vocal / consonante (ej. an)
[FUA] - [FUB] - [FUC] - [FUA]

Tengo [a / an] [A], tengo [a / an] [C].
Uh! [UC] - [UA]!

Tengo [a / an] [A], tengo [a / an] [B].
Uh! [UB] - [UA]!

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

Caso de prueba:

Pruebe con pen, pineappley 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!

Reglas:

  • Si la entrada no comienza con una letra, suponga consonante ( a) y primero en mayúscula el primer carácter (ej. 123 -> 1).
  • , ¡gana la menor cantidad de personajes!
n4melyh4xor
fuente
1
Digamos que ingresamos bolígrafo, piña y 1pple; ¿deberíamos asumir la consonante a solo para la primera línea PPAP O las otras instancias de '1pple' también deberían cambiarse a 'apple'?
officialaimm
@officialaimm, editará, asumirá el primer carácter (en su caso 1).
n4melyh4xor
13
No debería haber buscado en Google esto. Ahora, está atascado en mi cabeza -_-
Gurupad Mamadapur
1
La regla a / an trata las consonantes / vocales como sonidos, no como letras. Por ejemplo, usted escribe un usuario , no un usuario . Será difícil hacerlo bien, a menos que debamos ignorar la regla "real" para este desafío y solo mirar la primera letra. En ese caso, debe especificar qué letras deben considerarse vocales.
Dennis
@ Dennis, voy a ignorar por ahora.
n4melyh4xor

Respuestas:

10

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

Toma la entrada como una matriz de 3 cadenas, 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])

Ejemplos

Arnauld
fuente
3
'golf', 'puzzle', 'code'En mi humilde opinión
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}

Utiliza el mismo enfoque que la respuesta JS de Arnauld .

smls
fuente
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:- =-%

Explicación: La :hsubrutina maneja la línea I have a %, I have a %.Los %s son sustituidos a partir de los argumentos de línea de comandos apropiadas, y luego las cuerdas a a, a e, a i, a oy a uson reemplazar con el equivalente ande versión. La :usubrutina maneja las otras líneas; toma las palabras de parámetro y mayúsculas todas las primeras letras. (Un espacio adicional tiene el prefijo para permitir que la primera palabra esté en mayúscula, pero se elimina en la salida.) Para manejar palabras después de -s, se pasan espacios adicionales, pero también se eliminan en la salida. La :usubrutina también se usa para la primera línea, aunque extraer las iniciales es incómodo.

Neil
fuente
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}!""")

No hay nada lujoso aquí excepto hacer uso de la nueva característica de formato literal de cadena.

Entrada:
s ('golf', 'rompecabezas', 'código')
Salida:
GPCG

Tengo un golf, tengo un código.
Uh! Code-Golf!

Tengo un golf, tengo un rompecabezas.
Uh! Puzzle-Golf!

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

Nota : la versión es 3.6donde se introdujo el formato literal de cadena . Por lo tanto, esto no funcionará en versiones anteriores.

Gurupad Mamadapur
fuente
No estoy seguro, pero dado que ya está sangrando en su cadena larga, creo que podría usar los caracteres reales \ ny poder omitir las comillas triples.
nedla2004
@ nedla2004 Usar '\ n' en realidad será más largo. Omitir "solo ahorrará 2 bytes, pero \nagregará 12 bytes.
Gurupad Mamadapur
1

Lua, 615 607 bytes

Guardado 8 bytes gracias a [un usuario anónimo]

Uf, larga. Pruébalo aquí.

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.."!")

Estoy 100% seguro de que esto se puede acortar. Solo soy vago ...

Básicamente usa mucha manipulación de cadenas. Hay 3 funciones principales y una variable:

  • d(string): devuelve un if si la cadena es vocal ( AEIOUaeiou), de lo contrario devuelve un
  • z(string): devuelve la primera letra en mayúscula
  • z(s) .. s:sub(2): devuelve la palabra completa, pero la primera letra mayúscula
  • f: la palabra final (en una variable, para guardar algunos bytes). En su caso de prueba, lo sería Pen-Pineapple-Apple-Pen.

Entrada: pen, pineapple,apple

Salida:

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
fuente
1
Para quien sea el usuario anon: por favor no realice modificaciones en el código de la gente de golf. (solo en caso de que vuelvan)
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

Pruébalo en línea!

officialaimm
fuente