Penna Pineapple Apple Pen ... con penne, ananas e mele


16

Preludio:

Questa sfida è diversa da "un altro programma per gatti".
Ci sono tonnellate di colpi di scena diversi, perché non posso avere la mia, gente?
Cose uniche:

  • Non legge l'input diretto all'output.
  • Sta manipolando la corda in un modo che sicuramente non è un gatto semplice.

Sfida:

Dati 3 input (o un input, separati come preferisci) ottieni tre oggetti (parole) che sostituiremo penne, ananas e mele nei testi e nell'output.

Formato di output ( secondo i testi trovati su AZLCRIP ):

Supponendo (sostituire i valori con parentesi con questi):

  • A, B, C con parole di input (es. apple)
  • UA, UB, UC con parole di input con le prime lettere maiuscole (se non già maiuscole) (es. Apple)
  • FUA, FUB, FUC rispettivamente con le prime lettere maiuscole: (es. A)
  • a / an con articolo relativo alla vocale / consonante di prima lettera (es. an)
[FUA] - [FUB] - [FUC] - [FUA]

Ho [a / an] [A], ho [a / an] [C].
Uh! [UC] - [UA]!

Ho [a / an] [A], ho [a / an] [B].
Uh! [UB] - [UA]!

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

Caso di prova:

Metti alla prova con pen, pineapplee 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!

Regole:

  • Se l'input non inizia con una lettera, assumere consonant ( a) e prima di tutto il carattere maiuscolo (es. 123 -> 1).
  • , vince il minor numero di personaggi!

1
Diciamo che inseriamo penna, ananas e 1pple; dovremmo supporre che la consonante sia solo per la prima riga PPAP O che anche le altre istanze di '1pple' debbano essere cambiate in 'apple'?
officialaimm

@officialaimm, modificherà, assumerà il primo carattere (nel tuo caso 1).
n4melyh4xor

13
Non avrei dovuto cercarlo su Google. Ora, è bloccato nella mia testa -_-
Gurupad Mamadapur

1
La regola a / an tratta consonanti / vocali come suoni e non lettere. Ad esempio, scrivi un utente , non un utente . Sarà difficile da ottenere, a meno che non dovremmo ignorare la regola "reale" per questa sfida e guardare solo la prima lettera. In tal caso, è necessario specificare quali lettere devono essere considerate vocali.
Dennis,

@Dennis, per ora lo ignorerò.
n4melyh4xor

Risposte:


10

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

Accetta l'input come una matrice di 3 stringhe, ad esempio ['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])

Esempi


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}

Utilizza lo stesso approccio della risposta JS di Arnauld .


3

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

Spiegazione: La :hsubroutine gestisce la linea I have a %, I have a %.I %s sono sostituiti dai appropriati argomenti della riga di comando e quindi le corde a a, a e, a i, a oe a usono sostituire con l'equivalente anversione. La :usubroutine gestisce le altre linee; prende le parole dei parametri e in maiuscolo tutte le prime lettere. (Uno spazio extra è prefissato per consentire alla prima parola di essere maiuscola, ma viene rimossa in output.) Per gestire le parole dopo -s, vengono passati spazi extra, ma vengono anche eliminati in output. La :usubroutine viene utilizzata anche per la prima riga, sebbene l'estrazione delle iniziali sia scomoda.


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

Non c'è niente di speciale qui se non l'uso della nuova funzionalità di formattazione letterale delle stringhe.

Ingresso:
s ( 'campo', 'enigma', 'codice')
Produzione:
GPCG

Ho un golf, ho un codice.
Uh! Codice-Golf!

Ho un golf, ho un puzzle.
Uh! Puzzle-Golf!

Code-Golf, Puzzle-Golf.
Uh! Golf-puzzle-Codice-Golf.
Golf-puzzle-Codice-Golf!
 

Nota : la versione è 3.6dove è stata introdotta la formattazione letterale delle stringhe . Quindi, questo non funzionerà nelle versioni precedenti.


Non sono sicuro, ma poiché stai già rientrando nella tua lunga stringa, penso che potresti usare i caratteri effettivi \ n ed essere in grado di saltare le virgolette triple.
nedla2004,

@ nedla2004 L'uso di '\ n' sarà effettivamente più lungo. Saltare "salverà solo 2 byte, ma \naggiungerà 12 byte.
Gurupad Mamadapur,

1

Lua, 615 607 byte

8 byte salvati grazie a [un utente anonimo]

Accidenti, lungo. Provalo qui.

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

Sono sicuro al 100% che questo può essere abbreviato. Sono solo pigro ..

Fondamentalmente utilizza molta manipolazione delle stringhe. Ci sono 3 funzioni principali e una variabile:

  • d(string): restituisce una stringa if se è vocale ( AEIOUaeiou), altrimenti restituisce a
  • z(string): restituisce la prima lettera in maiuscolo
  • z(s) .. s:sub(2): restituisce una parola intera, ma la prima lettera maiuscola
  • f: la parola finale (in una variabile, per salvare alcuni byte). Nel tuo caso di prova, lo sarebbe Pen-Pineapple-Apple-Pen.

Ingresso: pen, pineapple,apple

Produzione:

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
Per chiunque fosse l'utente anon: per favore non apportare modifiche al codice delle persone golf. (per ogni evenienza)
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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.