Pen Pineapple Apple Pen… avec vos propres stylos, ananas et pommes

16

Prélude:

Ce défi est différent d'un "autre programme de chat".
Il y a des tonnes de rebondissements différents, pourquoi ne puis-je pas avoir les miens, les gens?
Choses uniques:

  • Il ne lit pas l'entrée directe à la sortie.
  • Il manipule la chaîne d'une manière qui n'est certainement pas un chat droit.

Défi:

Étant donné 3 entrées (ou une entrée, séparées comme vous le souhaitez), obtenez trois objets (mots) que nous allons remplacer par des stylos, des ananas et des pommes dans les paroles et la sortie.

Format de sortie ( selon les paroles trouvées sur AZLyrics ):

En supposant (remplacez les valeurs par des crochets par celles-ci):

  • A, B, C avec des mots d'entrée (ex. apple)
  • UA, UB, UC avec des mots d'entrée avec les premières lettres majuscules (si ce n'est pas déjà le cas) (ex. Apple)
  • FUA, FUB, FUC avec respectivement les premières lettres majuscules: (ex. A)
  • a / an avec un article correspondant à la voyelle / consonne de la première lettre (ex. an)
[FUA] - [FUB] - [FUC] - [FUA]

J'ai [a / an] [A], j'ai [a / an] [C].
Euh! [UC] - [UA]!

J'ai [a / an] [A], j'ai [a / an] [B].
Euh! [UB] - [UA]!

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

Cas de test:

Testez avec pen, pineappleet 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!

Règles:

  • Si l'entrée ne commence pas par une lettre, supposez consonance ( a) et commencez par mettre en majuscule le premier caractère (ex. 123 -> 1).
  • , le plus petit nombre de personnages gagne!
n4melyh4xor
la source
1
Disons que nous entrons stylo, ananas et 1pple; devons-nous supposer la consonne a uniquement pour la première ligne PPAP OU les autres instances de «1pple» doivent-elles également être remplacées par «pomme»?
officialaimm
@officialaimm, éditera, assumera le premier caractère (dans votre cas 1).
n4melyh4xor
13
Je n'aurais pas dû googler ça. Maintenant, c'est coincé dans ma tête -_-
Gurupad Mamadapur
1
La règle a / an traite les consonnes / voyelles comme des sons et non des lettres. Par exemple, vous écrivez un utilisateur , pas un utilisateur . Ce sera difficile à faire correctement, à moins que nous ne devons ignorer la "vraie" règle pour ce défi et regarder simplement la première lettre. Dans ce cas, vous devez spécifier quelles lettres doivent être considérées comme des voyelles.
Dennis
@ Dennis, je vais ignorer pour l'instant.
n4melyh4xor

Réponses:

10

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

Prend l'entrée comme un tableau de 3 chaînes, comme ['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])

Exemples

Arnauld
la source
3
'golf', 'puzzle', 'code'IMHO
Neil
4

Perl 6 , 165 octets

{"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}

Utilise la même approche que la réponse JS d'Arnauld .

smls
la source
3

Lot, 494 490 octets

@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:- =-%

Explication: Le :hsous - programme gère la ligne I have a %, I have a %.Les %s sont substitués par les arguments de ligne de commande appropriés, puis les cordes a a, a e, a i, a oet a usont remplacer par l'équivalent anversions. Le :usous-programme gère les autres lignes; il prend les mots paramètres et les majuscules toutes les premières lettres. (Un espace supplémentaire est préfixé pour permettre au premier mot d'être placé en majuscule, mais il est supprimé en sortie.) Pour gérer les mots après -s, des espaces supplémentaires sont passés, mais ils sont également supprimés en sortie. Le :usous-programme est également utilisé pour la première ligne, bien que l'extraction des initiales soit maladroite.

Neil
la source
3

Python 3.6 - 351 287 286 octets

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

Il n'y a rien d'extraordinaire ici, sauf en utilisant la nouvelle fonctionnalité de formatage littéral de chaîne.

Contribution:
s ('golf', 'puzzle', 'code')
Production:
GPCG

J'ai un golf, j'ai un code.
Euh! Code-Golf!

J'ai un golf, j'ai un puzzle.
Euh! Puzzle-Golf!

Code-Golf, Puzzle-Golf.
Euh! Golf-Puzzle-Code-Golf.
Golf-Puzzle-Code-Golf!
 

Remarque - La version est l' 3.6endroit où le formatage littéral de chaîne a été introduit . Par conséquent, cela ne fonctionnera pas dans les versions antérieures.

Gurupad Mamadapur
la source
Je ne sais pas, mais comme vous indiquez déjà dans votre longue chaîne, je pense que vous pouvez utiliser les caractères réels \ n et pouvoir sauter les guillemets triples.
nedla2004
@ nedla2004 L'utilisation de '\ n' sera en fait plus longue. Ignorer "ne fera économiser que 2 octets, mais \najoutera 12 octets.
Gurupad Mamadapur
1

Lua, 615 607 octets

8 octets enregistrés grâce à [un utilisateur anonyme]

Ouf, longue. Essayez-le ici.

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

Je suis certain à 100% que cela peut être raccourci. Je suis juste paresseux ..

Utilise essentiellement beaucoup de manipulation de chaînes. Il y a 3 fonctions principales et une variable:

  • d(string): renvoie une chaîne if si vowel ( AEIOUaeiou), sinon renvoie une chaîne
  • z(string): retourne la première lettre en majuscule
  • z(s) .. s:sub(2): retourne le mot entier, mais la première lettre en majuscule
  • f: le mot de fin (dans une variable, pour économiser quelques octets). Dans votre cas de test, ce serait Pen-Pineapple-Apple-Pen.

Entrée: pen, pineapple,apple

Production:

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
la source
1
À qui que ce soit que l'utilisateur anon était: veuillez ne pas modifier le code des golfeurs. (juste au cas où ils reviendraient)
Rɪᴋᴇʀ
1

Python 2 , 283 octets

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

Essayez-le en ligne!

officialaimm
la source