Ci sono stati un paio di precedenti tentativi di porre questa domanda, ma nessuno dei due è conforme agli standard moderni su questo sito. Per discussione su Meta , lo sto ripubblicando in modo da consentire una concorrenza leale nell'ambito dei nostri moderni set di regole.
sfondo
Un palindromo è una stringa che "legge la stessa avanti e indietro", cioè il contrario della stringa è uguale alla stringa stessa. Non stiamo parlando di "comodi palindromi" qui, ma di una rigida inversione carattere per carattere; per esempio, ()()
non è un palindromo, ma lo ())(
è.
L'obiettivo
Scrivi un programma o una funzione che accetta come input una stringa S (o l'equivalente appropriato nella tua lingua) e ha un output Q (di un tipo a tua scelta). È possibile utilizzare qualsiasi mezzo ragionevole per accettare l'input e fornire l'output.
- Quando l'ingresso S è un palindromo, l'uscita Q dovrebbe avere un valore A (che è lo stesso per qualsiasi S palindromica ).
- Quando l'ingresso S non è un palindromo, l'uscita Q dovrebbe avere un valore B (che è lo stesso per qualsiasi S non palindromica ).
- A e B devono essere distinti l'uno dall'altro.
O in altre parole: associa tutti i palindromi a un valore e tutti i non palindromi a un altro.
Inoltre, il programma o la funzione che scrivi deve essere un palindromo stesso (ovvero il suo codice sorgente deve essere palindromico), rendendolo una sfida a fonte limitata .
chiarimenti
- Sebbene
true
efalse
siano scelte ovvie per A e B , puoi usare due valori distinti per i tuoi output "è un palindromo" e "non è un palindromo", che non devono essere booleani. - Qui stiamo definendo l'inversione di stringa a livello di carattere ;
éé
è palindromico indipendentemente dal fatto che il programma sia codificato in UTF-8 o Latin-1, anche se non è una sequenza palindromica di ottetti dopo la codifica UTF-8. - Tuttavia, anche se il tuo programma contiene caratteri non ASCII, deve funzionare solo per l'input ASCII. In particolare, l'ingresso S conterrà solo caratteri ASCII stampabili (incluso lo spazio, ma non la nuova riga). Tra le altre cose, ciò significa che se si considera l'input come una sequenza di byte piuttosto che una sequenza di caratteri, è probabile che il programma sia ancora conforme alle specifiche (a meno che la codifica I / O della propria lingua non sia molto strana). In quanto tale, la definizione di palindromo nel proiettile precedente conta davvero solo quando si controlla che il programma abbia una forma corretta.
- Nascondere metà del programma in un commento o stringa letterale, pur non essendo creativo, è legale; vieni valutato sulla lunghezza, non sulla creatività, quindi sentiti libero di usare metodi "noiosi" per assicurarti che il tuo programma sia un palindromo. Ovviamente, poiché ti viene assegnato un punteggio in lunghezza, parti del tuo programma che non fanno nulla peggioreranno il tuo punteggio, quindi essere in grado di utilizzare entrambe le metà del programma sarà probabilmente utile se riesci a gestirlo .
- Poiché il criterio di vittoria è misurato in byte, dovrai specificare la codifica in cui è scritto il tuo programma per essere in grado di assegnarlo (anche se in molti casi sarà ovvio quale codifica stai utilizzando).
Criterio di vittoria
Anche se il programma deve essere un palindromo a livello di personaggio, stiamo usando i byte per vedere chi vince. In particolare, più breve è il tuo programma, misurato in byte, meglio è; questa è una sfida di code-golf . Per consentire il confronto degli invii (in particolare gli invii nella stessa lingua), inserire un conteggio di byte per il programma nell'intestazione dell'invio (più un conteggio di caratteri, se diverso dal numero di byte).
(
con a
e )
con b
. È abab
un palindromo? No, dovrebbe essere abba
. Quindi ()()
non è nemmeno un palindromo; dovrebbe essere ())(
.
()() is not a palindrome, but ())( is.
Congratulazioni, sei arrivato su reddit!