Kalem Ananas Elma Kalem… kendi kalemleriniz, ananaslarınız ve elmalılarınızla


16

Prelude:

Bu zorluk "başka bir kedi programı" ndan farklıdır.
Gerçekten tonlarca farklı bükülme var, neden kendime sahip olamıyorum, insanlar?
Benzersiz şeyler:

  • Çıktıya doğrudan girdi okumuyor.
  • Dizeyi, kesinlikle düz bir kedi olmayacak şekilde manipüle ediyor.

Meydan okuma:

Verilen 3 giriş (veya istediğiniz gibi ayrılmış bir giriş), şarkı sözlerinde ve çıktıda kalem, ananas ve elma yerine koyacağımız üç nesne (kelime) alır.

Çıktı biçimi ( AZLyrics'te bulunan şarkı sözlerine göre ):

Varsayım (değerleri parantezle değiştirin):

  • A, B, C ile giriş kelimeleri (ör. apple)
  • UA, UB, büyük ilk harfleriyle giriş sözlerle UC (yoksa büyük zaten) (ex. Apple)
  • FUA, FUB, FUC sırasıyla ilk büyük harflerle: (ör. A)
  • a / an ilk harf sesli harf / ünsüz harfle ilgili (ör. an)
[FUA] - [FUB] - [FUC] - [FUA]

[A / an] [A] var, [a / an] [C] var.
Ah! [UC] - [UA]!

[A / an] [A] var, [a / an] [B] var.
Ah! [UB] - [UA]!

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

Test durumu:

İle test edin pen, pineappleve 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!

Kurallar:

  • Giriş bir harfle başlamazsa, ünsüz ( a) olduğunu ve önce ilk karakteri (ör. 123 -> 1) Büyük harf aldığını varsayın .
  • , en az karakter kazanır!

1
Diyelim ki kalem, ananas ve 1 ple giriyoruz; sadece ilk satır PPAP için ünsüz olduğunu varsaymalı mıyız yoksa diğer '1pple' örnekleri de 'apple' olarak değiştirilmelidir mi?
officialaimm

@officialaimm, düzenleyecek, ilk karakteri alacaktır (sizin durumunuzda 1).
n4melyh4xor

13
Bunu almamalıydım. Şimdi, kafamda sıkışmış -_-
Gurupad Mamadapur

1
A / an kural davranır ünsüzleri / olarak sesliler sesler değil mektuplar. Örneğin, yazma bir kullanıcı değil, bir kullanıcı . Bu meydan okuma için "gerçek" kuralı göz ardı etmemiz ve sadece ilk harfe bakmamız gerekmiyorsa, bunu doğru yapmak zor olacaktır. Bu durumda, hangi harflerin sesli harf olarak kabul edilmesi gerektiğini belirtmelisiniz.
Dennis

@Dennis, şimdilik göz ardı edeceğim.
n4melyh4xor

Yanıtlar:


10

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

Girişi 3 dizeden oluşan bir dizi olarak alır ['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])

Örnekler


3
'golf', 'puzzle', 'code'IMHO
Neil

4

Perl 6 , 165 bayt

{"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'un JS cevabı ile aynı yaklaşımı kullanır .


3

Toplu, 494 490 bayt

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

Açıklama: :haltprogram hattı kolları s, uygun komut satırı bağımsız değişkenleri ile ilgili ikame edilmiş ve daha sonra şeritler , , , ve sayıdaki eşdeğer ile değiştirin sürümü. Altprogram diğer çizgiler kolları; parametre kelimelerini alır ve tüm ilk harfleri büyük harflerle gösterir. (İlk sözcüğün üst kasalı olmasına izin vermek için fazladan bir boşluk eklenir, ancak çıktıda kaldırılır.) S'den sonraki sözcükleri işlemek için fazladan boşluklar geçer, ancak çıktıda da silinir. Baş ayıklanması zor olmasına rağmen altprogram de ilk satırı için kullanılır.I have a %, I have a %.%a aa ea ia oa uan:u-:u


3

Python 3.6 - 351 287 286 bayt

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

Burada dizgi değişmez biçimlendirmesinin yeni özelliğini kullanmaktan başka süslü bir şey yoktur.

Giriş:
s ( 'golf', 'bulmaca', 'kod')
Çıktı:
GPCG

Golfüm var, kodum var.
Ah! Kod-Golf!

Bir golf var, bir bulmaca var.
Ah! Bulmaca-Golf!

Kod-Golf, Bulmaca-Golf.
Ah! Golf-Bulmaca-Kod-Golf.
Golf-Bulmaca-Kod-Golf!
 

Not - Sürüm, 3.6dize değişmez biçimlendirmesinin tanıtıldığı yerdir . Bu nedenle, bu önceki sürümlerde çalışmaz.


Emin değilim, ancak zaten uzun dizenize girintili olduğunuz için, gerçek karakterleri kullanabileceğinizi düşünüyorum \ n ve üçlü tırnak işaretlerini atlayabilirsiniz.
nedla2004

@ nedla2004 '\ n' kullanmak aslında daha uzun olacaktır. Atlama "yalnızca 2 bayt tasarruf sağlar, ancak \n12 bayt ekler.
Gurupad Mamadapur

1

Lua, 615 607 bayt

[Anonim kullanıcı] sayesinde 8 bayt kaydedildi

Vay, uzun olan. Burada deneyin.

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

Bunun kısaltılabileceğinden% 100 eminim. Ben sadece tembelim

Temelde çok sayıda dize manipülasyonu kullanır . 3 ana fonksiyon ve bir değişken vardır:

  • d(string): bir if dizesi sesli harf ( AEIOUaeiou) döndürür, aksi takdirde bir
  • z(string): büyük harfle ilk harfi döndürür
  • z(s) .. s:sub(2): tüm kelimeyi döndürür, ancak ilk harf büyük
  • f: bitiş sözcüğü (bir değişkende, bazı baytları kaydetmek için) Test durumunuzda olur Pen-Pineapple-Apple-Pen.

Girdi: pen, pineapple,apple

Çıktı:

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 kullanıcısı kim olursa olsun: Lütfen golf kodlarında düzenlemeler yapmayın. (geri gelmeleri durumunda)
Rɪᴋᴇʀ

1

Python 2 , 283 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.