펜 파인애플 애플 펜… 자신의 펜, 파인애플 및 사과 포함


16

전주곡:

이 도전은 "또 다른 고양이 프로그램"과 다릅니다.
문자 그대로 톤이 다른데 왜 내 자신의 사람들을 가질 수 없습니까?
독특한 것들 :

  • 직접 입력을 출력으로 읽지 않습니다.
  • 그것은 곧은 고양이가 아닌 방식으로 끈을 조작하고 있습니다.

도전:

3 개의 입력 (또는 하나의 입력, 원하는대로 분리 된 입력)이 주어지면 가사와 출력에서 ​​펜, 파인애플 및 사과를 대신 할 3 개의 객체 (단어)를 얻습니다.

출력 형식 ( AZLyrics의 가사에 따름 ) :

가정 (값을 대괄호로 바꾸십시오) :

  • A, B, 입력 된 단어와 함께 C (예. apple)
  • UA, UB, 대문자 첫 글자로 입력 단어 UC (그렇지 않으면 대문자 이미) (예. Apple)
  • 각각 첫번째 대문자와 FUA, FUB, FUC : (예. A)
  • A / 첫 글자 모음 / 자음에 각각의 글과 함께 (예. 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, pineappleapple:

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

@officialaimm은 첫 번째 문자 (귀하의 경우 1)를 편집합니다.
n4melyh4xor

13
나는 이것을 구글하지 말아야했다. 지금, 그것은 내 머리에 갇혀있다 -_-
Gurupad Mamadapur

1
규칙은 자음 / 모음을 문자 아닌 소리 로 취급합니다 . 예를 들어, 쓰기 사용자 가 아닌 사용자 . 우리가이 도전에 대한 "진정한"규칙을 무시하고 첫 글자 만 보지 않으면 제대로하기가 어려울 것입니다. 이 경우 모음으로 간주 할 문자를 지정해야합니다.
Dennis

@Dennis, 지금은 무시하겠습니다.
n4melyh4xor

답변:


10

자바 스크립트 (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

4

펄 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 이후 의 단어를 처리하기 위해 여분의 공백이 전달되지만 출력에서도 삭제됩니다. 이니셜 추출하기 어려운이지만 서브 루틴은, 제 라인에 사용된다.I have a %, I have a %.%a aa ea ia oa uan:u-:u


3

파이썬 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 바이트 만 저장되지만 \n12 바이트가 추가됩니다.
Gurupad Mamadapur

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 % 확신합니다. 나는 단지 게으르다 ..

기본적으로 많은 문자열 조작을 사용 합니다 . 세 가지 주요 기능과 하나의 변수가 있습니다.

  • d(string): 문자열이 모음 ( AEIOUaeiou)이면 if를 반환하고 그렇지 않으면 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ɪᴋᴇʀ

1

파이썬 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.