Stara hiszpańska kolejność alfabetyczna

22

Przed 1994 r. Hiszpańskie słowniki używały kolejności alfabetycznej ze szczególną osobliwością : digrafów lli chbyły uważane za pojedyncze litery. chnatychmiast nastąpiło ci llnatychmiast nastąpiło l. Dodając list ñ, który następuje npo hiszpańsku, kolejność była wtedy:

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

Od 1994 roku lli chsą uznawane za grupy dwóch liter ( l, li c, hodpowiednio), a zatem kolejności alfabetycznej jest taka sama jak w języku angielskim, z wyjątkiem litery ñ.

Stare zamówienie było zdecydowanie bardziej interesujące .

Wyzwanie

Wprowadź listę zero lub więcej słów i wypisz listę posortowaną według starej hiszpańskiej kolejności alfabetycznej. Sortowanie odbywa się między wyrazami (nie między literami w środku słowa). Oznacza to, że słowa są atomowe, a wynik będzie zawierać te same słowa w możliwie innej kolejności.

W celu uproszczenia, nie będziemy rozważać list ñlub akcentowane samogłoski á, é, í, ó, ú, lub wielkimi literami. Każde słowo będzie sekwencją jednego lub więcej znaków wziętych z zakresu od ASCII 97 ( a) do ASCII 122 ( z).

Jeśli są więcej niż dwie llitery z rzędu, należy je pogrupować od lewej do prawej. To znaczy, llljest lli wtedy l(nie li wtedy ll).

Format wejściowy może być: słowa oddzielone spacjami, znakami nowej linii lub dowolnym dogodnym znakiem. Słowa mogą być otoczone cudzysłowami lub nie, według własnego wyboru. Dopuszczalna jest również lista lub tablica słów. Każdy rozsądny format jest ważny; po prostu podaj to w swojej odpowiedzi.

W podobny sposób, wyjście będzie miało dowolny rozsądny format (niekoniecznie taki sam jak wejście).

Code golf, najkrótsze wygrane.

Przypadki testowe

W poniższych przykładach słowa są oddzielone spacjami. Pierwszy wiersz jest wprowadzany, drugi jest wyprowadzany:

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

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

„Słowa” mogą być również pojedynczymi literami:

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

lub mało prawdopodobne kombinacje (pamiętaj o zasadzie lpogrupowanej od lewej do prawej):

lll llc llz llll lllz
llc lll lllz llll llz

Puste wejście powinno dać puste wyjście:



Oczywiście ta kolejność może być zastosowana również w innych językach:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at
Luis Mendo
źródło
5
Jest już za późno, aby poprawić pytanie, ponieważ ma odpowiedź, ale w rzeczywistości rr była również pojedynczą literą. Uważam, że straciła swój status pojedynczej litery później niż ll i ch, więc wyjaśnienie w Wikipedii nie jest tak błędne, jak częściowe.
Peter Taylor,
„tweo”? filler +
CalculatorFeline
3
@PeterTaylor Oficjalna akademia (RAE) nie uwzględniła rrani jednej litery ; przynajmniej nie od 1803 roku. Ale prawdą jest, że najwyraźniej był uważany za jedną literę w obu Amerykach
Luis Mendo
1
Wygląda na to, że Węgier zasługuje na osobne, znacznie trudniejsze wyzwanie :-)
Luis Mendo
1
Alfabet walijski ma ich mnóstwo i jest prawdopodobnie interesujący, ponieważ nie są one w (angielskiej) kolejności alfabetycznej lub zawierają wszystkie znaki łacińskie: 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

Odpowiedzi:

7

Pyth, 14 13 bajtów

Aktualizacja: zobaczyłem, że został zaakceptowany i zauważyłem trywialny 1-bajtowy golf. Ups

:D"ll|ch|."1Q

Wypróbuj online. Zestaw testowy.

Dla każdego słowa znajdź wszystkie pasujące do siebie dopasowania wyrażenia regularnego ll|ch|.. To dzieli słowo na „litery”. Następnie posortuj słowa według podzielonych list.

PurkkaKoodari
źródło
Świetne podejście! (Teraz, kiedy w końcu to rozumiem) :-)
Luis Mendo,
Ten kod jest absolutnie fascynujący:D
Erik the Outgolfer
3

PowerShell, 46 44 51 50 bajtów

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

Jest Αto grecka litera alfa, która pojawia się po wszystkich literach łacińskich w domyślnej kolejności sortowania programu PowerShell (przynajmniej na moim komputerze nie jestem pewien, czy różni się w innych lokalizacjach). Jest liczony jako 2 bajty w kodowaniu UTF8.

Przykładowe użycie, zakładając, że ten ciąg jest zapisany w pliku o nazwie es-sort.ps1:

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

luego
lzego
llama
pswg
źródło
2

Mathematica, 81 bajtów

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

Takie samo podejście jak odpowiedź TimmyD.

CalculatorFeline
źródło
1

Python 2, 128 116 bajtów

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

Nadal mam wrażenie, że jest tu zdecydowanie miejsce na ulepszenia.

Orez
źródło
1

JavaScript, 95 bajtów

s=>s.map(a=>a.replace(/ll|ch/g,m=>m[0]+'~')).sort().map(a=>a.replace(/.~/g,m=>m>'d'?'ll':'ch'))
Charlie Wynn
źródło
1

Perl, 40 bajtów

Obejmuje +1 dla -p

Uruchom z listą słów na STDIN:

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

spanisort.pl

s/ll|ch|./\u$&/g;$_="\L@{[sort split]}"
Ton Hospel
źródło