Para aqueles que desejam muito mais desafio do que a antiga ordem alfabética espanhola , vamos dar uma olhada em como o alfabeto húngaro é ordenado.
a, á, b, c, cs, d, dz, dzs, e, é, f, g, gy, h, i, í, j, k, l, ly, m, n, ny, o, ó, ö, õ, p, q, r, s, sz, t, ty, u, ú, ü, v, v, w, x, y, z, zs
na verdade, q
, w
, x
e y
não são usados em palavras húngaras, mas eles são incluídos para loanwords e nomes estrangeiros. Caracteres com sotaque estrangeiro que não fazem parte do alfabeto húngaro (como ñ
), têm a mesma prioridade que os sem sotaque, mas os desconsideramos neste desafio.
As regras, resumidas:
- Dígrafos (
cs
,sz
, etc.) eo trigraph (dzs
) são considerados como eram letras por conta própria.
cudar cukor cuppant csalit csata
- Se o mesmo dígrafo ou trigrama ocorrer duas vezes diretamente um após o outro em uma palavra, eles serão escritos de uma maneira simplificada: em
ssz
vez deszsz
, emddzs
vez dedzsdzs
mas para a ordem alfabética, a ordem não simplificada é usada. Por exemplokasza
<kaszinó
<kassza
, porquekassza
é usado comok
+a
+sz
+sz
+a
por causa da ordenação. Às vezes, você pode encontrar a versão não contratada em uma palavra, no caso de palavras compostas.
kasza kaszinó kassza kaszt nagy naggyá nagygyakorlat naggyal nagyít
- letras maiúsculas não importa, com exceção das duas palavras exatamente iguais sem letras maiúsculas, caso em que a letra minúscula tem prioridade
jácint Jácint Zoltán zongora
- As versões curtas e longas de vogais acentuadas têm a mesma prioridade (
a - á
,e -é
,i - í
,o - ó
,ö - ő
,u - ú
ü - ű
), com uma única exceção: se as duas palavras de outra forma seria exatamente o mesmo, a vogal curta tem prioridade sobre a vogal longa. Observe que as vogais com trema (ö
eü
) são caracteres completamente diferentes deo
eu
.
Eger egér író iroda irónia kerek kerék kérek szúr szül
- Hífens ou espaços (por exemplo, em palavras compostas, nomes etc.) são completamente ignorados
márvány márványkő márvány sírkő Márvány-tenger márványtömb
A tarefa
Seu programa / função recebe seqüências de caracteres, compostas por caracteres do alfabeto húngaro (letras maiúsculas e minúsculas), mas uma sequência pode conter espaços ou hífens. Por uma questão de simplicidade, o sinal de menos (ASCII 45) pode ser usado como um hífen. Observe que alguns caracteres (como o ő
) não fazem parte do ASCII. Você pode usar qualquer codificação que desejar, se ela suportar todos os caracteres necessários.
Você precisa ordenar as linhas corretamente e exibir / retornar o resultado.
Você pode usar qualquer subconjunto ordenado aleatoriamente dos exemplos acima para teste.
EDITAR:
Por favor, não use nenhuma maneira interna ou de outra maneira que já conheça a ordem alfabética húngara por si só. Isso tornaria a competição inútil e levaria todo o desafio de encontrar a melhor expressão regular ou os melhores truques de golfe com código.
EDIT2:
Para esclarecer um esclarecimento solicitado por isaacg: "duas cadeias que diferem apenas em maiúsculas e vogais longas versus vogais curtas, mas diferem nos dois sentidos": Embora nenhuma regra no documento oficial lide explicitamente com essa questão, um exemplo encontrado dentro de pontos para o comprimento da vogal tendo mais importância que a capitalização.
malacsült
ounyílászáró
. Pergunto-me se houver algum (mas você precisa de um vocabulário para verificar se que, o que não é, presumivelmente, parte deste desafio)Respostas:
Perl, 250
Inclui +11 para
-Mutf8 -CS
.Usa o idioma decorar-classificar-não decorado (AKA Schwartzian Transform ) e a classificação multinível † , onde os níveis são:
Internamente,
␜
(ASCII 0x1C Field Separator - cujo valor é menor que qualquer caractere no alfabeto para este desafio) é usado como um separador de nível.Esta implementação tem muitas limitações, entre elas:
Versão expandida:
†. Alguns algoritmos de intercalação de vários níveis conhecidos são o Algoritmo de intercalação Unicode (UCA, Unicode UTS # 10) , ISO 14651 (disponível no site da ISO ITTF ) e as partes LC_COLLATE na ISO TR 30112 (rascunho disponível na ISO / IEC JTC1 / SC35 / WG5 home ) obsoleta a ISO / IEC TR 14652 (disponível na ISO / IEC JTC1 / SC22 / WG20 ) e LC_COLLATE no POSIX.
‡. Fazer isso corretamente exigiria um dicionário. A UTI trata grupos estranhamente capitalizados como não-contrações / não-dígrafos / não-trigrafos, por exemplo: ccS < 3 CcS < 3 c Cs < 3 c CS < 3 C Cs < 3 cS < 3 cs < 3 Cs < 3 CS < 3 ccs < 3 Ccs < 3 CCS
fonte
Java 8, 742 bytes
Pode reduzir em mais 3 bytes nomeando a função em
s
vez desort
ou em outros 16 bytes, se não contar a definição de classe.Pode ser usado assim:
Suíte de teste:
produzindo
Ungolfed:
Estou usando o
List
tipo de Java e aorder()
função dele, mas o comparador é todo meu.fonte
<String>
e salvar alguns caracteres ao custo de alguns avisos?Object
como tipo de aeb então. Eu provavelmente poderia sair definindo uma extensão de parâmetro genérico de classeString
. Também não estou esperando ter o código mais curto. ;-)Python 3, 70
Economizou 8 bytes graças a shooqie.
Eu amo Python. : D
Espera uma lista de cadeias.
fonte
from locale import*
salva um monte de bytes