Pena Nanas Pena Apple… dengan pena, nanas, dan apel Anda sendiri

16

Pendahuluan:

Tantangan ini berbeda dari "program kucing lain".
Ada banyak sekali tikungan yang berbeda, mengapa saya tidak bisa memiliki sendiri, kawan?
Hal-hal unik:

  • Itu tidak membaca input langsung ke output.
  • Itu memanipulasi string dengan cara yang pasti bukan kucing langsung.

Tantangan:

Diberikan 3 input (atau satu input, pisahkan sesuka Anda) dapatkan tiga objek (kata-kata) yang akan kami ganti dengan pena, nanas, dan apel dalam lirik dan output.

Format output ( sesuai dengan lirik yang ditemukan di AZLyrics ):

Dengan asumsi (ganti nilai dengan tanda kurung dengan ini):

  • A, B, C dengan kata-kata masukan (mis. apple)
  • UA, UB, UC dengan kata input dengan huruf besar pertama (jika belum huruf besar) (mis. Apple)
  • FUA, FUB, FUC masing-masing dengan huruf besar pertama: (mis. A)
  • a / an dengan artikel masing-masing dengan huruf vokal / konsonan pertama (mis. an)
[FUA] - [FUB] - [FUC] - [FUA]

Saya punya [a / an] [A], saya punya [a / an] [C].
Uh! [UC] - [UA]!

Saya punya [a / an] [A], saya punya [a / an] [B].
Uh! [UB] - [UA]!

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

Kasus cobaan:

Uji dengan pen, pineappledan 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!

Aturan:

  • Jika input tidak dimulai dengan huruf, anggap konsonan ( a) dan huruf besar pertama karakter pertama (mis. 123 -> 1).
  • , jumlah karakter terendah yang menang!
n4melyh4xor
sumber
1
Katakanlah kita memasukkan pena, nanas, dan 1 sendok; haruskah kita menganggap konsonan hanya untuk PPAP baris pertama ATAU contoh lain dari '1pple' harus diubah menjadi 'apel' juga?
officialaimm
@officialaimm, akan mengedit, mengasumsikan karakter pertama (dalam kasus Anda 1).
n4melyh4xor atau
13
Aku seharusnya tidak mencari ini di Google. Sekarang, itu terjebak di kepalaku -_-
Gurupad Mamadapur
1
Aturan a / an memperlakukan konsonan / vokal sebagai suara bukan huruf. Misalnya, Anda menulis pengguna , bukan pengguna . Itu akan sulit untuk diperbaiki, kecuali kita harus mengabaikan aturan "nyata" untuk tantangan ini dan lihat saja huruf pertama. Dalam hal ini, Anda harus menentukan huruf mana yang harus dianggap vokal.
Dennis
@ Dennis, akan diabaikan untuk saat ini.
n4melyh4xor atau

Jawaban:

10

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

Mengambil input sebagai array dari 3 string, seperti ['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])

Contohnya

Arnauld
sumber
3
'golf', 'puzzle', 'code'IMHO
Neil
4

Perl 6 , 165 byte

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

Menggunakan pendekatan yang sama dengan jawaban JS Arnauld .

seseorang
sumber
3

Batch, 494 490 byte

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

Penjelasan: :hsubrutin menangani garis I have a %, I have a %.The %s diganti dari argumen baris perintah yang sesuai, dan kemudian string a a, a e, a i, a odan a uadalah mengganti dengan setara anversi. The :usubroutine menangani jalur lain; dibutuhkan kata-kata parameter, dan huruf besar semua huruf pertama. (Ruang tambahan diawali untuk memungkinkan kata pertama menjadi huruf besar, tetapi dihapus pada output.) Untuk menangani kata setelah -s, spasi ekstra dilewati, tetapi mereka juga dihapus pada output. The :usubroutine juga digunakan untuk baris pertama, meskipun penggalian inisial canggung.

Neil
sumber
3

Python 3.6 - 351 287 286 byte

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

Tidak ada yang mewah di sini kecuali memanfaatkan fitur baru pemformatan string literal.

Memasukkan:
s ('golf', 'puzzle', 'code')
Keluaran:
GPCG

Saya punya golf, saya punya kode.
Uh! Golf-Kode!

Saya punya golf, saya punya puzzle.
Uh! Puzzle-Golf!

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

Catatan - Versi ini adalah 3.6tempat pemformatan string literal diperkenalkan . Karenanya, ini tidak akan berfungsi di versi sebelumnya.

Gurupad Mamadapur
sumber
Tidak yakin, tetapi karena Anda sudah membuat indentasi dalam string panjang Anda, saya pikir Anda dapat menggunakan karakter sebenarnya \ n dan dapat melewati tiga tanda kutip.
nedla2004
@ nedla2004 Menggunakan '\ n' sebenarnya akan lebih lama. Melewati "hanya akan menghemat 2 byte, tetapi \nakan menambah 12 byte.
Gurupad Mamadapur
1

Lua, 615 607 byte

Disimpan 8 byte berkat [pengguna anonim]

Wah, panjang. Coba di sini.

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

Saya 100% yakin ini bisa dipersingkat. Saya hanya malas ..

Pada dasarnya banyak menggunakan manipulasi string. Ada 3 fungsi utama dan satu variabel:

  • d(string): mengembalikan sebuah jika string adalah vowel ( AEIOUaeiou), yang lain mengembalikan a
  • z(string): mengembalikan huruf pertama dalam huruf besar
  • z(s) .. s:sub(2): mengembalikan seluruh kata, tetapi huruf besar pertama
  • f: kata akhir (dalam variabel, untuk menyimpan beberapa byte). Dalam kasus uji Anda, itu akan menjadi Pen-Pineapple-Apple-Pen.

Input: pen, pineapple,apple

Keluaran:

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!
lebih kaya
sumber
1
Kepada siapa pun pengguna sebelumnya: tolong jangan menyunting kode golf orang. (kalau-kalau mereka kembali)
Rɪᴋᴇʀ
1

Python 2 , 283 byte

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

Cobalah online!

officialaimm
sumber