ペンパイナップルアップルペン…自分のペン、パイナップル、リンゴを使って


16

前奏曲:

この課題は、「別の猫プログラム」とは異なります。
文字通りさまざまなひねりがありますが、なぜ私は自分の人々を持てないのですか?
ユニークなもの:

  • 出力への直接入力を読み取っていません。
  • それは確かにまっすぐな猫ではない方法で文字列を操作しています。

チャレンジ:

3つの入力(または1つの入力、好きなように区切られた入力)が与えられると、歌詞と出力でペン、パイナップル、リンゴを置き換える3つのオブジェクト(単語)を取得します。

出力形式(AZLyricsで見つかった歌詞による):

仮定(これらの値を角括弧で置き換えます):

  • A、B、C、入力語(例: apple
  • 大文字の最初の文字が入力されたUA、UB、UC(まだ大文字でない場合)(ex。 Apple
  • FUA、FUB、FUC、それぞれ最初の大文字:(ex。 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]!

テストケース:

使用したテストpenpineappleおよび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を入力するとします。子音aを最初の行のPPAPのみと仮定するか、または「1pple」の他のインスタンスも「apple」に変更する必要がありますか?
officialaimm

@officialaimm、編集し、最初の文字(あなたの場合は1)を想定します。
n4melyh4xor 16

13
これをググってはいけません。今、それは私の頭の中に詰まっています-_-
Gurupad Mamadapur

1
a / anルールは、子音/母音を文字ではなくとして扱います。たとえば、userではなくuserを記述ます。この課題の「実際の」ルールを無視して、最初の文字だけを見る必要がある場合を除き、これを正しく行うのは困難です。その場合、母音とみなされる文字を指定する必要があります。
デニス

@Dennis、今のところ無視します。
n4melyh4xor 16

回答:


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}

ArnauldのJS answerと同じアプローチを使用します


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サブルーチンハンドルラインは、Sは、適切なコマンドライン引数から置換した後、文字列されている、、、と同等と交換されているバージョン。サブルーチンは他の行を処理します。パラメータの単語と、すべての最初の文字を大文字にします。(最初の単語を大文字にするために余分なスペースが前に付けられますが、出力では削除されます。)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( 'golf'、 'puzzle'、 'code')
出力:
GPCG

私にはゴルフがあり、コードがあります。
えっ!コードゴルフ!

私にはゴルフがあり、パズルがあります。
えっ!パズルゴルフ!

コードゴルフ、パズルゴルフ。
えっ!ゴルフパズルコードゴルフ。
ゴルフパズルコードゴルフ!
 

-このバージョンでは3.6、文字列リテラル形式が導入されました。したがって、これは以前のバージョンでは機能しません。


確かではありませんが、すでに長い文字列でインデントしているので、実際の文字\ nを使用して、三重引用符をスキップできると思います。
nedla2004 16

@ nedla2004「\ n」の使用は実際には長くなります。スキップ"すると2バイトしか保存されません\nが、12バイト追加されます。
グルパッドママダプール

1

Lua、615607バイト

[匿名ユーザー]のおかげで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.."!")

これを短くできることは確かです。私は怠け者です。

基本的に、多くの文字列操作を使用ます。3つの主要な関数と1つの変数があります。

  • d(string):文字列が母音(AEIOUaeiou)の場合に、そうでない場合に
  • z(string):最初の文字を大文字で返します
  • z(s) .. s:sub(2):単語全体を返しますが、最初の文字は大文字です
  • f:終了ワード(変数内、いくつかのバイトを保存するため)。テストケースでは、になりますPen-Pineapple-Apple-Pen

入力:penpineappleapple

出力:

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

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.