Długopis Ananasowy długopis jabłkowy… z własnymi długopisami, ananasami i jabłkami

16

Preludium:

To wyzwanie różni się od „innego programu dla kotów”.
Jest dosłownie mnóstwo różnych zwrotów akcji, dlaczego nie mogę mieć własnych ludzi?
Unikalne rzeczy:

  • Nie odczytuje bezpośredniego wejścia do wyjścia.
  • Manipuluje sznurkiem w sposób, który z pewnością nie jest prostym kotem.

Wyzwanie:

Biorąc pod uwagę 3 dane wejściowe (lub jedno wejście, rozdzielone w dowolny sposób) otrzymujemy trzy obiekty (słowa), które zastąpimy piórami, ananasami i jabłkami w tekście i wynikach.

Format wyjściowy ( według tekstów znalezionych na AZLyrics ):

Zakładając (zamień wartości na nawiasy):

  • A, B, C ze słowami wejściowymi (np. apple)
  • UA, UB, UC ze słowami wejściowymi z dużymi pierwszymi literami (jeśli już nie dużymi) (np. Apple)
  • FUA, FUB, FUC z odpowiednio pierwszymi dużymi literami: (np. A)
  • a / an z artykułem dotyczącym pierwszej litery samogłoski / spółgłoski (np. an)
[FUA] - [FUB] - [FUC] - [FUA]

Mam [a / an] [A], mam [a / an] [C].
Uh! [UC] - [UA]!

Mam [a / an] [A], mam [a / an] [B].
Uh! [UB] - [UA]!

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

Przypadek testowy:

Test z pen, pineapplei 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!

Zasady:

  • Jeśli wprowadzanie danych nie zaczyna się od litery, załóż spółgłoskę ( a) i pierwszą wielką literą pierwszy znak (np. 123 -> 1).
  • , wygrywa najmniejsza liczba postaci!
n4melyh4xor
źródło
1
Powiedzmy, że wprowadzamy długopis, ananas i 1 paczkę; czy powinniśmy założyć spółgłoskę tylko dla pierwszego wiersza PPAP LUB inne przypadki „1pple” również należy zmienić na „jabłko”?
officialaimm,
@officialaimm, edytuje, zakłada pierwszy znak (w twoim przypadku 1).
n4melyh4xor
13
Nie powinienem był tego wyszukiwać w Google. Teraz utknęło mi w głowie -_-
Gurupad Mamadapur,
1
Reguła a / an traktuje spółgłosek / samogłosek jako dźwięki, a nie litery. Na przykład piszesz użytkownika , a nie użytkownika . Trudno będzie to naprawić, chyba że powinniśmy zignorować „prawdziwą” zasadę tego wyzwania i po prostu spojrzeć na pierwszą literę. W takim przypadku należy określić, które litery należy uważać za samogłoski.
Dennis,
@Dennis, na razie zignoruję.
n4melyh4xor

Odpowiedzi:

10

JavaScript (ES6), 217 ... 187 183 bajtów

Pobiera dane wejściowe jako tablicę 3 ciągów znaków, takich jak ['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])

Przykłady

Arnauld
źródło
3
'golf', 'puzzle', 'code'IMHO
Neil,
4

Perl 6 , 165 bajtów

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

Stosuje to samo podejście, co odpowiedź JS Arnaulda .

smls
źródło
3

Partia, 494 490 bajtów

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

Objaśnienie: :hpodprogram obsługuje linię I have a %, I have a %.W %S są podstawione z odpowiednimi parametrami polecenia linię i łańcuchy a a, a e, a i, a oi a usą zastąpić równoważną anwersji. :uPodprogram obsługuje pozostałe linie; pobiera słowa parametrów i wielkie litery wszystkich pierwszych liter. (Przed spacją jest umieszczana dodatkowa spacja, aby pierwsze słowo było pisane dużymi literami, ale jest usuwane na wyjściu.) Aby obsłużyć słowa po -s, przekazywane są dodatkowe spacje, ale są również usuwane na wyjściu. :uPodprogram służy również do pierwszej linii, chociaż wydobywania inicjały jest niewygodne.

Neil
źródło
3

Python 3.6 - 351 287 286 bajtów

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

Nie ma w tym nic wyjątkowego poza skorzystaniem z nowej funkcji formatowania literałów łańcuchowych.

Wejście:
s („golf”, „puzzle”, „kod”)
Wynik:
GPCG

Mam golfa, mam kod.
Uh! Code-Golf!

Mam golfa, mam puzzle.
Uh! Puzzle-Golf!

Code-Golf, Puzzle-Golf.
Uh! Golf-Puzzle-Code-Golf.
Golf-Puzzle-Code-Golf!
 

Uwaga - W tej wersji wprowadzono3.6 formatowanie literału łańcuchowego . Dlatego nie będzie działać we wcześniejszych wersjach.

Gurupad Mamadapur
źródło
Nie jestem pewien, ale ponieważ już wcinasz długi ciąg, myślę, że możesz użyć rzeczywistych znaków \ ​​n i być w stanie pominąć potrójne cudzysłowy.
nedla2004
@ nedla2004 Używanie „\ n” będzie faktycznie dłuższe. Pominięcie "pozwoli zaoszczędzić tylko 2 bajty, ale \ndoda 12 bajtów.
Gurupad Mamadapur
1

Lua, 615 607 bajtów

Zaoszczędzono 8 bajtów dzięki [anonimowemu użytkownikowi]

Uff, długi. Wypróbuj tutaj.

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

Jestem w 100% pewien, że można to skrócić. Jestem po prostu leniwy

Zasadniczo używa wielu manipulacji ciągami. Istnieją 3 główne funkcje i jedna zmienna:

  • d(string): zwraca if jeśli string jest samogłoską ( AEIOUaeiou), w przeciwnym razie zwraca a
  • z(string): zwraca pierwszą literę dużymi literami
  • z(s) .. s:sub(2): zwraca całe słowo, ale pierwsza litera jest duża
  • f: słowo końcowe (w zmiennej, aby zapisać niektóre bajty). W twoim przypadku testowym byłoby Pen-Pineapple-Apple-Pen.

Wejście: pen, pineapple,apple

Wynik:

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
źródło
1
Kimkolwiek był użytkownik anon: nie wprowadzaj zmian w kodzie golfowym. (na wypadek, gdyby wrócili)
Rɪᴋᴇʀ
1

Python 2 , 283 bajtów

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

Wypróbuj online!

Officialaimm
źródło