Ordine alfabetico spagnolo antico


22

Prima del 1994, i dizionari spagnoli usavano l'ordine alfabetico con una peculiarità : digrafi lle chvenivano considerati come se fossero lettere singole. chimmediatamente seguito c, e llimmediatamente seguito l. Aggiungendo la lettera ñ, che segue nin spagnolo, l'ordine era quindi:

a, b, c, ch, d, e, f, g, h, i, j, k, l, ll, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z

Dal 1994 lle chsono considerati come gruppi di due lettere ( l, le c, hrispettivamente), e quindi l'ordine alfabetico è lo stesso dell'inglese, ad eccezione della lettera ñ.

Il vecchio ordine era decisamente più interessante .

La sfida

Inserisci un elenco di zero o più parole e visualizza l'elenco ordinato secondo il vecchio ordine alfabetico spagnolo. L'ordinamento è tra le parole (non tra le lettere all'interno di una parola). Cioè, le parole sono atomiche e l'output conterrà le stesse parole in un ordine forse diverso.

Per semplificare, non considereremo la lettera ñ, o le vocali accentate á, é, í, ó, ú, o lettere maiuscole. Ogni parola sarà una sequenza di uno o più caratteri presi dall'intervallo compreso tra ASCII 97 ( a) e ASCII 122 ( z).

Se ci sono più di due llettere di fila, dovrebbero essere raggruppate da sinistra a destra. Cioè, lllè lle quindi l(non le quindi ll).

Il formato di input può essere: parole separate da spazi, da newline o da qualsiasi carattere conveniente. Le parole possono essere racchiuse tra virgolette o meno, a scelta. È accettabile anche un elenco o una serie di parole. Qualsiasi formato ragionevole è valido; dichiaralo nella tua risposta.

In modo simile, l'output avrà un formato ragionevole (non necessariamente uguale all'input).

Codice golf, vittorie più brevi.

Casi test

Negli esempi seguenti le parole sono separate da spazi. Viene immessa la prima riga, viene emessa la seconda:

llama coche luego cocina caldo callar calma
caldo calma callar cocina coche luego llama

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

Le "parole" possono anche essere lettere singole:

b c a ch ll m l n
a b c ch l ll m n

o combinazioni improbabili (ricorda la regola che lè raggruppata da sinistra a destra):

lll llc llz llll lllz
llc lll lllz llll llz

Un input vuoto dovrebbe dare un output vuoto:



Naturalmente, questo ordine può essere applicato anche ad altre lingue:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at

5
È troppo tardi per correggere la domanda ora, perché ha una risposta, ma in realtà rr era anche una singola lettera. Credo che abbia perso il suo status di singola lettera dopo ll e ch, quindi la spiegazione in Wikipedia non è tanto sbagliata quanto parziale.
Peter Taylor,

"Tweo"? filler +
CalculatorFeline

3
@PeterTaylor L'Accademia ufficiale (RAE) non ha preso in considerazione rruna sola lettera ; almeno non dal 1803. Ma è vero che apparentemente era considerata una singola lettera nelle Americhe
Luis Mendo,

1
Sembra che l'ungherese meriti una sfida separata, molto più difficile :-)
Luis Mendo il

1
L'alfabeto gallese ne ha molti ed è probabilmente interessante poiché non sono in ordine alfabetico (inglese) o includono tutti i caratteri latini: a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y
Algy Taylor

Risposte:


7

Pyth, 14 13 byte

Aggiornamento: visto che questo è stato accettato e notato un banale golf da 1 byte. Ops.

:D"ll|ch|."1Q

Provalo online. Suite di test.

Per ogni parola, trova tutte le corrispondenze non sovrapposte per la regex ll|ch|.. Questo divide la parola in "lettere". Quindi, basta ordinare le parole in base agli elenchi divisi.


Ottimo approccio! (Ora che finalmente lo capisco) :-)
Luis Mendo il

Quel codice è assolutamente affascinante:D
Erik the Outgolfer,

3

PowerShell, 46 44 51 50 byte

$args|sort @{e={$_-replace'(?=ch|ll)(.).','$1Α'}}

Il Αpersonaggio è la lettera greca alfa che arriva dopo tutte le lettere latine nell'ordinamento predefinito di PowerShell (almeno sulla mia macchina, non sono sicuro che sia diverso in altre lingue). È conteggiato come 2 byte nella codifica UTF8.

Esempio di utilizzo, supponendo che questa stringa sia salvata in un file denominato es-sort.ps1:

> es-sort.ps1 'lzego' 'luego' 'llama'

luego
lzego
llama

2

Mathematica, 81 byte

StringReplace[Sort@StringReplace[#,"ch"->"cZ","ll"->"lZ"],"cZ"->"ch","lZ"->"ll"]&

Stesso approccio della risposta di TimmyD.


1

Python 2, 128 116 byte

lambda p:map(''.join,sorted([{'!':'ll','?':'ch'}.get(c,c)for c in w.replace('ll','!').replace('ch','?')]for w in p))

Sento ancora che c'è sicuramente spazio per miglioramenti qui.


1

Javascript, 95 byte

s=>s.map(a=>a.replace(/ll|ch/g,m=>m[0]+'~')).sort().map(a=>a.replace(/.~/g,m=>m>'d'?'ll':'ch'))

1

Perl, 40 byte

Include +1 per -p

Esegui con l'elenco di parole su STDIN:

perl -p spanisort.pl <<< "llama coche luego cocina caldo callar calma"

spanisort.pl

s/ll|ch|./\u$&/g;$_="\L@{[sort split]}"
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.