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

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.


Ś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

2

Mathematica, 81 bajtów

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

Takie samo podejście jak odpowiedź TimmyD.


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.


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'))

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]}"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.