Pen Pineapple Apple Pen… mit eigenen Stiften, Ananas und Äpfeln

16

Auftakt:

Diese Herausforderung unterscheidet sich von "einem anderen Katzenprogramm".
Es gibt buchstäblich jede Menge verschiedene Wendungen. Warum kann ich meine eigenen nicht haben, Leute?
Einzigartige Dinge:

  • Es werden keine direkten Eingaben zur Ausgabe gelesen.
  • Es manipuliert die Saite auf eine Weise, die mit Sicherheit keine gerade Katze ist.

Herausforderung:

Bei 3 Eingaben (oder einer Eingabe, getrennt, wie Sie möchten) erhalten Sie drei Objekte (Wörter), die wir im Text und in der Ausgabe durch Stifte, Ananas und Äpfel ersetzen werden.

Ausgabeformat ( gemäß den auf AZLyrics gefundenen Texten ):

Angenommen (Werte durch eckige Klammern ersetzen):

  • A, B, C mit Eingabewörtern (Bsp. apple)
  • UA, UB, UC mit Eingabewörtern mit Großbuchstaben (falls nicht bereits in Großbuchstaben) (z. B. Apple)
  • FUA, FUB, FUC mit jeweils ersten Großbuchstaben: (Bsp. A)
  • ein / eine mit Artikel zum Anfangsbuchstaben Vokal / Konsonant (Bsp. an)
[FUA] - [FUB] - [FUC] - [FUA]

Ich habe [ein / eine] [A], ich habe [ein / eine] [C].
Äh! [UC] - [UA]!

Ich habe [ein / eine] [A], ich habe [ein / eine] [B].
Äh! [UB] - [UA]!

[UC] - [UA], [UB] - [UA].
Äh! [UA] - [UB] - [UC] - [UA].
[UA] - [UB] - [UC] - [UA]!

Testfall:

Testen Sie mit pen, pineappleund 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!

Regeln:

  • Wenn die Eingabe nicht mit einem Buchstaben beginnt, nehmen Sie Konsonant ( a) an und schreiben Sie zuerst das erste Zeichen (z. B. ) in Großbuchstaben 123 -> 1.
  • , die geringste Anzahl an Charakteren gewinnt!
n4melyh4xor
quelle
1
Nehmen wir an, wir geben Stift, Ananas und 1 Apfel ein. Sollen wir davon ausgehen, dass der Konsonant a nur für die erste Zeile PPAP ist, ODER die anderen Instanzen von '1pple' sollten ebenfalls in 'apple' geändert werden?
offiziell
@officialaimm, wird bearbeiten, erstes Zeichen annehmen (in deinem Fall 1).
n4melyh4xor
13
Ich hätte das nicht googeln sollen. Jetzt steckt es in meinem Kopf -_-
Gurupad Mamadapur
1
Die a / an-Regel behandelt Konsonanten / Vokale als Laute, nicht als Buchstaben. Beispielsweise schreiben Sie einen Benutzer , keinen Benutzer . Es wird schwierig sein, das richtig zu machen, es sei denn, wir sollten die "echte" Regel für diese Herausforderung ignorieren und uns nur den ersten Buchstaben ansehen. In diesem Fall sollten Sie angeben, welche Buchstaben als Vokale betrachtet werden sollen.
Dennis
@ Tennis, werde jetzt ignorieren.
n4melyh4xor

Antworten:

10

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

Nimmt die Eingabe als Array von 3 Zeichenfolgen, z ['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])

Beispiele

Arnauld
quelle
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}

Verwendet den gleichen Ansatz wie Arnauld's JS-Antwort .

smls
quelle
3

Batch, 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:- =-%

Erläuterung: Das :hUnterprogramm übernimmt die Leitung I have a %, I have a %.der %s aus den entsprechenden Befehlszeilenargumente substituiert sind, und dann werden die Zeichenketten a a, a e, a i, a ound a usind mit der äquivalenten ersetzen anVersion. Die :uUnterroutine behandelt die anderen Zeilen; Es werden die Parameterwörter und in Großbuchstaben alle Anfangsbuchstaben verwendet. (Ein zusätzliches Leerzeichen wird vorangestellt, damit das erste Wort in Großbuchstaben geschrieben werden kann. Es wird jedoch bei der Ausgabe entfernt.) Um Wörter nach -s zu behandeln, werden zusätzliche Leerzeichen übergeben, sie werden jedoch auch bei der Ausgabe gelöscht. Das :uUnterprogramm wird auch für die erste Zeile verwendet, obwohl das Extrahieren der Initialen umständlich ist.

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

Hier gibt es nichts Besonderes, als die neue Funktion der String-Literal-Formatierung zu nutzen.

Eingang:
s ('golf', 'puzzle', 'code')
Ausgabe:
GPCG

Ich habe Golf, ich habe einen Code.
Äh! Code-Golf!

Ich habe Golf, ich habe ein Rätsel.
Äh! Puzzle-Golf!

Code-Golf, Puzzle-Golf.
Äh! Golf-Puzzle-Code-Golf.
Golf-Puzzle-Code-Golf!
 

Hinweis - In der Version wurde die 3.6Formatierung von Zeichenfolgenliteralen eingeführt . Daher funktioniert dies in früheren Versionen nicht.

Gurupad Mamadapur
quelle
Ich bin mir nicht sicher, aber da Sie bereits in Ihrer langen Zeichenfolge eingerückt sind, denke ich, dass Sie die tatsächlichen Zeichen \ n verwenden und die dreifachen Anführungszeichen überspringen können.
Nedla2004
@ nedla2004 Mit '\ n' wird es tatsächlich länger dauern. Das Überspringen "spart nur 2 Bytes, \nfügt jedoch 12 Bytes hinzu.
Gurupad Mamadapur
1

Lua, 615 607 Bytes

8 Bytes gespart dank [einem anonymen Benutzer]

Puh, Langer. Probieren Sie es hier aus.

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

Ich bin zu 100% sicher, dass dies gekürzt werden kann. Ich bin nur faul ..

Verwendet grundsätzlich viel String-Manipulation. Es gibt 3 Hauptfunktionen und eine Variable:

  • d(string): gibt ein zurück, wenn der String vokal ( AEIOUaeiou) ist, andernfalls ein
  • z(string): Gibt den ersten Buchstaben in Großbuchstaben zurück
  • z(s) .. s:sub(2): Gibt ein ganzes Wort, aber den ersten Buchstaben in Großbuchstaben zurück
  • f: das Endwort (in einer Variablen, um einige Bytes zu speichern). In Ihrem Testfall wäre es Pen-Pineapple-Apple-Pen.

Input: pen, pineapple,apple

Ausgabe:

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
quelle
1
Für wen auch immer der anon Benutzer war: Bitte nehmen Sie keine Änderungen am Code der Golfleute vor. (nur für den Fall, dass sie zurückkommen)
18.
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

Probieren Sie es online!

officialaimm
quelle