Pen Pineapple Apple Pen… со своими ручками, ананасами и яблоками

16

Прелюдия:

Эта задача отличается от «другой программы для кошек».
Там буквально тонны разных поворотов, почему у меня не может быть своих, людей?
Уникальные вещи:

  • Это не чтение прямого ввода для вывода.
  • Он манипулирует строкой таким образом, что наверняка не прямой кот.

Вызов:

Учитывая 3 входа (или один вход, разделенный, как вам нравится), получите три объекта (слова), которые мы собираемся заменить ручками, ананасами и яблоками в тексте и выходе.

Выходной формат (в соответствии с текстами песен, найденными на AZLyrics ):

Предполагая (замените значения в скобках этими):

  • A, B, C с входными словами (напр. apple)
  • UA, UB, UC с входными словами с заглавными буквами (если уже не заглавными) (напр. Apple)
  • FUA, FUB, FUC с соответственно первыми заглавными буквами: (напр. A)
  • a / an со статьей, соответствующей первой букве гласного / согласного (напр. an)
[FUA] - [FUB] - [ОФП] - [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!

Правила:

  • Если ввод не начинается с буквы, предположите, что consonant ( a) и первая заглавная буква первого символа (например, 123 -> 1).
  • , выигрывает наименьшее количество персонажей!
n4melyh4xor
источник
1
Допустим, мы вводим ручку, ананас и 1pple; Должны ли мы предполагать, что согласный a только для первой строки PPAP ИЛИ другие экземпляры '1pple' также должны быть заменены на 'apple'?
officialaimm
@officialaimm, отредактирует, примет первый символ (в вашем случае 1).
n4melyh4xor
13
Я не должен был гуглить это. Теперь, это застряло в моей голове -_-
Гурупад Мамадапур
1
Правило a / a рассматривает согласные / гласные как звуки, а не буквы. Например, вы пишете пользователь , а не пользователь . Это будет трудно понять правильно, если мы не будем игнорировать «реальное» правило для этой задачи и просто посмотрим на первую букву. В этом случае вы должны указать, какие буквы следует считать гласными.
Деннис
@ Денис, пока проигнорируешь.
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])

Примеры

Arnauld
источник
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}

Использует тот же подход, что и ответ Арно .

SMLS
источник
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 %.The% 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

У меня есть гольф, у меня есть код.
Э-э! Код-гольф!

У меня есть гольф, у меня есть загадка.
Э-э! Головоломка-гольф!

Код-Гольф, Пазл-Гольф.
Э-э! Гольф-головоломка-Code-гольф.
Гольф-головоломка-Code-гольф!
 

Примечание. В этой версии введено3.6 форматирование строкового литерала . Следовательно, это не будет работать в более ранних версиях.

Гурупад Мамадапур
источник
Не уверен, но поскольку вы уже делаете отступ в своей длинной строке, я думаю, что вы могли бы использовать настоящие символы \ n и иметь возможность пропустить тройные кавычки.
Недла2004
@ 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): возвращает строку if vowel ( AEIOUaeiou), иначе возвращает
  • 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!
devRicher
источник
1
Для того, кем бы ни был пользователь anon: пожалуйста, не вносите изменения в код игроков в гольф. (на всякий случай, если они вернутся)
Rɪᴋᴇʀ
1

Python 2 , 283 байта

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

Попробуйте онлайн!

officialaimm
источник