La programmazione è molto rigida. Non puoi dire a un programma di "emettere il conteggio delle banane", devi dirlo a print(bananas).
Ma quando lo fai, ti ritrovi con un problema: non sai quante banane hai in anticipo, quindi non sai se usare un plurale.
A volte, i programmatori diventano pigri. Invece di controllare, stampano solo there are X banana(s).
Ma è brutto, quindi abbiamo bisogno di un programma per risolvere questo problema.
I metodi
Per rimuovere i plurali ambigui in una stringa, attenersi alla seguente procedura:
Dividi la stringa sugli spazi in un elenco di parole.
Per ogni parola che termina con
(s), procedi come segue:- Se la parola precedente è
a,an,1oone, rimuovere il(s)alla fine della parola. - Altrimenti, se la parola è la prima parola della stringa o la parola precedente non è
a,an,1oone, sostituire il(s)alla fine della parola cons.
- Se la parola precedente è
Unisci nuovamente l'elenco di parole in una stringa, preservando lo spazio bianco originale.
Esempio (s)
Prendiamo una corda there's a banana(s) and three apple(s).
Innanzitutto, dividiamo la stringa in un elenco di parole: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
Per il secondo passo, prendiamo le due parole che terminano con (s): banana(s)e apple(s).
La parola prima banana(s)è a, quindi rimuoviamo il (s), facendolo banana. La parola prima apple(s)è three, quindi cambiamo il (s)in s, così diventa apples.
Ora abbiamo ["there's", "a", "banana", "and", "three", "apples"]. Unendo nuovamente l'elenco, otteniamo there's a banana and three apples. Questo è il nostro risultato finale.
Le sfide)
Creare un programma o una funzione che accetta una stringa ambigua in qualsiasi formato ragionevole e restituisce la versione non ambigua di quella stringa.
Puoi presumere che la stringa non contenga nuove righe, tabulazioni o ritorni a capo.
Ho dimenticato di specificare se dividere su gruppi di spazi o spazi (cioè se okay thencon due spazi dovrebbe essere ["okay", "then"]o ["okay", "", "then"]) quando si pubblica la sfida, quindi è possibile assumere entrambe le forme di divisione.
Casi test)
Input -> Output
there are two banana(s) and one leprechaun(s) -> there are two bananas and one leprechaun
there's a banana(s) and three apple(s) -> there's a banana and three apples
apple(s) -> apples
one apple(s) -> one apple
1 banana(s) -> 1 banana
banana -> banana
preserve original whitespace(s) -> preserve original whitespaces
11 banana(s) -> 11 bananas
an apple(s) -> an apple
this is a te(s)t -> this is a te(s)t
I am a (s)tranger(s) -> I am a (s)tranger
punteggio
Dato che si tratta di code-golf , vince l'invio con il minor numero di byte!
apple(s)cedere il caso di test apples? La sfida afferma Otherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.che noto che questo caso ha ceduto applesalla sandbox per le prime tre revisioni, ma è cambiato alla quarta.
There's a single banana(s)-> There's a single bananas.