Ручка Ананас Перо яблучна ручка… з власними ручками, ананасами та яблуками


16

Прелюдія:

Ця проблема відрізняється від "іншої програми для котів".
Є буквально багато різних поворотів, чому я не можу мати своє, люди?
Унікальні речі:

  • Він не зчитує прямий вхід для виводу.
  • Це маніпулювання струною таким чином, що точно не є прямолінійною кішкою.

Виклик:

З урахуванням 3-х входів (або одного вводу, відокремленого, як вам подобається), ви отримаєте три об’єкти (слова), які ми будемо замінювати ручками, ананасами та яблуками у тексті та виведенні.

Формат виводу ( відповідно до текстів, знайдених на AZLyrics ):

Припустимо (замініть значення в дужках на ці):

  • A, B, C із вхідними словами (наприклад apple)
  • UA, UB, UC із введеними словами з великими літерами (якщо це вже не великі регістри) (наприклад Apple)
  • FUA, FUB, ОФП з відповідно першим великими літерами (напр. A)
  • a / an зі статтею відповідно до голосної / приголосної першої літери (наприклад an)
[FUA] - [FUB] - [FUC] - [FUA]

У мене є [a / an] [A], у мене є [a / an] [C].
А-а! [UC] - [UA]!

У мене є [a / an] [A], у мене є [a / an] [B].
А-а! [UB] - [UA]!

[UC] - [UA], [UB] - [UA].
А-а! [UA] - [UB] - [UC] - [UA].
[UA] - [UB] - [UC] - [UA]!

Тестовий випадок:

Випробування з pen, pineappleі 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!

Правила:

  • Якщо введення не починається з літери, припустіть приголосний ( a) і спочатку прописні букви першого символу (наприклад 123 -> 1).
  • , виграє найменша кількість символів!

1
Скажімо, ми вводимо ручку, ананас та 1пл; чи слід вважати приголосним a тільки для першого рядка PPAP АЛЕ інші екземпляри '1pple' також слід змінити на 'apple'?
officialaimm

@officialaimm, буде редагувати, припускати перший символ (у вашому випадку 1).
n4melyh4xor

13
Я б не мав цього гугл. Тепер мені застрягло в голові -_-
Гурупад Мамадапур

1
Правило a / правило трактує приголосні / голосні звуки як звуки, а не літери. Наприклад, ви пишете користувача , а не користувача . Це буде важко виправити, якщо тільки ми не будемо ігнорувати "справжнє" правило для цього виклику і просто подивитися на першу букву. У такому випадку слід вказати, які букви слід вважати голосними.
Денніс

@Dennis, поки що ігнорую.
n4melyh4xor

Відповіді:


10

JavaScript (ES6), 217 ... 187 183 байт

Приймає вхідний сигнал в вигляді масиву 3 рядків, таких як ['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])

Приклади


3
'golf', 'puzzle', 'code'ІМХО
Ніл

4

Perl 6 , 165 байт

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

Використовується той же підхід, що і відповідь Арнаульда JS .


3

Пакетна, 494 490 байт

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

Пояснення: :hПідпрограма обробляє рядок I have a %, I have a %.В %s заміщені з відповідних аргументів командного рядка, а потім рядки a a, a e, a i, a oі a uє замінити еквівалентну anверсію. :uПідпрограма обробляє інші рядки; він бере параметри слова, а великі регістри - всі перші літери. (Додатковий пробіл є префіксом, щоб дозволити перше слово вводити верхній регістр, але воно видаляється на виході.) Для обробки слів після -s передаються додаткові пробіли, але вони також видаляються на виході. :uПідпрограма також використовуються для першої лінії, хоча витяг ініціалів незручно.


3

Python 3,6 - 351 287 286 байт

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

Тут немає нічого фантазійного, окрім використання нової функції формального рядкового форматування.

Вхід:
s ('гольф', 'головоломка', 'код')
Вихід:
GPCG

У мене є гольф, у мене є код.
А-а! Код-Гольф!

У мене гольф, головоломка.
А-а! Головоломка-гольф!

Код-гольф, головоломка-гольф.
А-а! Гольф-головоломка-код-гольф.
Гольф-головоломка-код-гольф!
 

Примітка. У версії 3.6було введено літеральне форматування рядків . Отже, у попередніх версіях це не працюватиме.


Не впевнений, але оскільки ви вже відступаєте у своїй довгій строці, я думаю, що ви можете використовувати фактичні символи \ n та мати можливість пропустити потрійні лапки.
nedla2004

@ nedla2004 Використання '\ n' фактично буде довше. Пропуск "може зберегти лише 2 байти, але \nдодасть 12 байт.
Гурупад Мамадапур

1

Луа, 615 607 байт

Збережено 8 байт завдяки [анонімному користувачеві]

Коли, довгий. Спробуйте тут.

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

Я на 100% впевнений, що це можна скоротити. Я просто ледачий ..

В основному використовується багато маніпуляцій з струнами. Є 3 основні функції та одна змінна:

  • d(string): повертає, якщо рядок є голосним ( AEIOUaeiou), інакше повертає a
  • z(string): повертає першу літеру з великої літери
  • z(s) .. s:sub(2): повертає ціле слово, але першу букву
  • f: кінцеве слово (у змінній, щоб зберегти кілька байт). У вашому тестовому випадку це було б Pen-Pineapple-Apple-Pen.

Вхід: pen, pineapple,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!

1
Для тих, хто не був користувачем: будь ласка, не вносити зміни до коду людей у ​​гольф. (про всяк випадок, коли вони повернуться)
Rɪᴋᴇʀ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.