Pen Pineapple Apple Pen ... ด้วยปากกาสับปะรดและแอปเปิ้ลของคุณเอง


16

โหมโรง:

ความท้าทายนี้แตกต่างจาก "โปรแกรมแมวอื่น"
มีเกลียวที่แตกต่างกันมากมายทำไมฉันจึงไม่มีคนเป็นของตัวเอง?
สิ่งที่ไม่ซ้ำกัน:

  • มันไม่ได้อ่านอินพุตโดยตรงไปยังเอาต์พุต
  • มันกำลังจัดการกับสตริงด้วยวิธีที่แน่นอนว่าไม่ใช่แมวตัวตรง

ท้าทาย:

เมื่อได้รับ 3 อินพุต (หรือหนึ่งอินพุตแยกจากกันตามที่คุณต้องการ) รับสามวัตถุ (คำ) ที่เราจะใช้แทนปากกาสับปะรดและแอปเปิ้ลในเนื้อเพลงและเอาต์พุต

รูปแบบเอาต์พุต ( ตามเนื้อเพลงที่พบใน AZLyrics ):

สมมติ (แทนที่ค่าด้วยวงเล็บด้วยสิ่งเหล่านี้):

  • A, B, C พร้อมคำที่ป้อน (เช่นapple)
  • UA, UB, UC ที่มีคำที่ป้อนด้วยตัวอักษรตัวพิมพ์ใหญ่ตัวแรก (ถ้าไม่ใช่ตัวพิมพ์ใหญ่แล้ว) (เช่นApple)
  • FUA, FUB, FUC ที่มีตัวอักษรตัวพิมพ์ใหญ่ตัวแรกตามลำดับ: (เช่น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
ช่วยบอกว่าเราใส่ปากกาสับปะรดและ 1pple; เราควรสมมติว่าพยัญชนะเพียงสำหรับ PPAP บรรทัดแรกหรืออินสแตนซ์อื่นของ '1pple' ควรเปลี่ยนเป็น 'apple' ด้วยหรือไม่
ยืนยันอย่างเป็นทางการ

@officialaimm จะแก้ไขถือว่าเป็นอักขระตัวแรก (ในกรณีของคุณ 1)
n4melyh4xor

13
ฉันไม่ควรทำแบบนี้ ตอนนี้มันติดอยู่ในหัวของฉัน -_-
Gurupad Mamadapur

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'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}

ใช้วิธีการเดียวกับArnauld คำตอบของ


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

คำอธิบาย: :hsubroutine จัดการสายs ถูกเปลี่ยนตัวจากอาร์กิวเมนต์บรรทัดคำสั่งที่เหมาะสมแล้วสตริง, , , และมีแทนที่ด้วยเทียบเท่ารุ่น subroutine จัดการสายอื่น ๆ ; มันใช้คำพารามิเตอร์และตัวพิมพ์ใหญ่ทุกตัวอักษรแรก (มีการเว้นวรรคพิเศษนำหน้าเพื่อให้คำแรกเป็นคำบนที่ใส่ซอง แต่จะถูกลบออกที่เอาต์พุต) เพื่อจัดการคำหลังจากs ช่องว่างพิเศษจะถูกส่งผ่าน แต่จะถูกลบออกที่เอาต์พุต ย่อยยังใช้สำหรับบรรทัดแรกแม้จะแยกชื่อย่อเป็นที่น่าอึดอัดใจI have a %, I have a %.%a aa ea ia oa uan:u-: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

ฉันมีสนามกอล์ฟฉันมีรหัส
เอ่อ! รหัสกอล์ฟ!

ฉันมีสนามกอล์ฟฉันมีตัวต่อ
เอ่อ! ปริศนากอล์ฟ!

รหัส - Golf, Puzzle-Golf
เอ่อ! กอล์ฟปริศนารหัสกอล์ฟ
กอล์ฟปริศนารหัสกอล์ฟ!
 

หมายเหตุ - รุ่นเป็น3.6ที่สตริงการจัดรูปแบบตัวอักษรได้รับการแนะนำให้รู้จัก ดังนั้นสิ่งนี้จะไม่ทำงานในเวอร์ชันก่อนหน้า


ไม่แน่ใจ แต่เนื่องจากคุณได้เยื้องในสายยาวของคุณแล้วฉันคิดว่าคุณสามารถใช้อักขระจริง \ n และสามารถข้ามเครื่องหมายคำพูดสามคำได้
nedla2004

@ nedla2004 การใช้ '\ n' จะนานกว่าจริง การข้าม"จะบันทึกได้เพียง 2 ไบต์ แต่\nจะเพิ่ม 12 ไบต์
Gurupad Mamadapur

1

Lua, 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 เป็นสระ (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ɪᴋᴇʀ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.