Charlie e o hífen do mal

8

Aqui está o alfabeto fonético:

Alfa
Bravo
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
India
Juliett
Kilo
Lima
Mike
November
Oscar
Papa
Quebec
Romeo
Sierra
Tango
Uniform
Victor
Whiskey
X-ray
Yankee
Zulu

No menor número possível de bytes:

  1. A entrada será essas palavras em uma ordem aleatória, com as primeiras letras removidas.
  2. Seu objetivo é organizar as palavras de volta à ordem original usando apenas as letras que você possui agora . Em outras palavras: descubra como '[A] lfa' vem antes de '[B] ravo' e assim por diante. Seu código não deve consultar a lista original, chaves de índice, etc.
  3. Restaure as primeiras letras originais de cada palavra.

Regras

  • O hífen no raio-X provavelmente é mau, mas precisa ficar, pois eu também sou mau.
  • O resultado pode ser uma sequência (vírgula ou nova linha separada, por exemplo) ou uma matriz.
  • Os casos de ortografia e carta não são negociáveis.
  • Não há necessidade de mostrar exemplo de saída nas respostas.
rybo111
fonte
@LevelRiverSt A classificação é muito diferente sem o primeiro caractere embora
fənɛtɪk
@ fəˈnɛtɪk marcar cada fragmento de palavra com sua primeira letra é sem dúvida um método de classificação. Acho que a proposta do sparklepony está dentro da intenção do OP. Realmente o OP deveria responder a isso, mas eu estaria inclinado a votar novamente novamente devido a requisitos não observáveis ​​se o OP dissesse que não. Fica bagunçado (e se você usar um loop para pescá-los um por um, adicionar uma carta e imprimir - então você estará fazendo os dois juntos.) Estou com o meta OP de Martin em casos como este. (eo cargo que referenciada com 19 upvotes e 0 downvotes)
Nível River St
Se alguém achar que isso pode ser útil, uma string que identificou exclusivamente cada uma das palavras de entrada desde o início da string é "l, r, ha, e, c, ox, ol, ot, nd, uli, il, im , ik, ov, s, ap, ue, o, ie, ang, n, i, h, -, a, u "
fəˈnɛtɪk
1
Não sei se entendi qual deve ser a saída. É simplesmente o estilo de complexidade kolmogorov do texto fonético exato (ou da matriz de linhas), exceto que você tem uma versão confusa como entrada?
Xnor
3
@xnor Pode funcionar melhor do que se você receber uma seleção aleatória do alfabeto fonético embaralhado, então será necessário retorná-lo em ordem. Nesse caso, o texto fixo não seria uma saída válida.
fənɛtɪk

Respostas:

4

Gelatina , 21 bytes

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"

Entrada e saída são matrizes de strings.

Experimente online!

fundo

Enquanto existem 26! = 403291461126605635584000000 entradas diferentes, podemos classificar a entrada para que tenhamos que lidar apenas com uma permutação desse alfabeto fonético. Classificando lexicograficamente, obtemos

-ray
ango
ankee
apa
cho
elta
harlie
hiskey
ictor
ierra
ike
ilo
ima
lfa
ndia
niform
olf
omeo
otel
ovember
oxtrot
ravo
scar
uebec
uliett
ulu

Podemos simplesmente indexar esse array para classificá-lo pelas letras removidas. Os índices (com base em 1) são

14 22  7  6  5 21 17 19 15 25 12 13 11 20 23  4 24 18 10  2 16  9  8  1  3 26

Tudo o que resta a fazer é acrescentar as letras maiúsculas do alfabeto às seqüências de caracteres no resultado.

Como funciona

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"  Main link. Argument: A (string array)

“ṣȤW¶¬þḷẒ⁶4ẹ’          Replace the characters by their indices in Jelly's code page
                       and convert the result from bijective base 250 to integer.
                       This yields k := 214215675539094608445950965.
             Œ?        Construct the k-th permutation (sorted lexicographically)
                       of [1, ..., n], with minimal n (26 here). This yields
                       [14, 22,  7,  6,  5, 21, 17, 19, 15, 25, 12, 13, 11,
                        20, 23,  4, 24, 18, 10,  2, 16,  9,  8,  1,  3, 26].
                Ṣ      Yield A, sorted.
               ị       For each j in the array to the left, select the j-th string
                       from the array to the right.
                 ØA    Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
                   ;"  Concatenate zipwith; prepend the j-th character from the
                       alphabet to the j-th string of the permuted input.
Dennis
fonte
1
Espanta-me o quão bem você pode golfe ...
Christopher
3

Python 3 , 76 71 bytes

lambda x,S=sorted:S(map(str.__add__,'XTYPEDCWVSMKLAIUGRHNFBOQJZ',S(x)))

Experimente online!

Dennis
fonte
2

JavaScript, 169/195 bytes

Se a substituição da primeira letra puder ser feita antes da classificação de 169 bytes

x=>x.map(k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return String.fromCharCode(i+64)+k}).sort()

Experimente online!

Se a classificação precisar ser feita antes da adição da primeira letra, 195 bytes

x=>x.sort((a,b)=>g(a)-g(b)).map(a=>String.fromCharCode(g(a)+64)+a)
g=k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return i}

Experimente online!

Um total de 20 bytes de cada um desses programas é apenas String.fromCharCode () para recuperar o caractere ...

Outros 69 bytes são a string que identifica exclusivamente o início de cada uma das palavras no alfabeto fonético.

Explicação do primeiro exemplo

for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split,[i++]))return i

A cadeia codificada aqui é separada em uma lista dos caracteres de identificação exclusivos que iniciam as palavras do alfabeto fonético após a remoção do primeiro caractere.

return String.fromCharCode(i+64)+k

Esta informação é usada para encontrar o índice em que a string se encaixa no alfabeto para colocar o caractere inicial novamente.

.sort()

O JavaScript classifica implicitamente como cadeias de caracteres os valores ASCII dos caracteres

Explicação do segundo exemplo

A função g = k => ... encontra o índice para o qual a string deve cair no alfabeto fonético.

.sort((a,b)=>g(a)-g(b))

Classifica as strings pelos números retornados executando g (...)

.map(a=>String.fromCharCode(g(a)+64)+a)

Substitui o primeiro caractere de cada uma das seqüências de caracteres do alfabeto fonético

fəˈnɛtɪk
fonte
Por que a .sort()resposta de 169 bytes? Na pergunta, ele diz " 3. Restaure as primeiras letras originais de cada palavra. ", Mas não menciona que a saída também deve ser classificada.
Kevin Cruijssen
@KevinCruijssen Seu objetivo é organizar as palavras de volta à ordem original usando apenas as letras que você possui agora. Em outras palavras: descubra como '[A] lfa' vem antes de '[B] ravo' e assim por diante. Seu código não deve se referir a lista original, chaves de índice, etc.
fənɛtɪk
Ah, eu li errado uma parte da 2ª bala. Vou editar meu código.
Kevin Cruijssen 13/04/19
2

PHP , 94 bytes

<?for(sort($_GET);$i<26;sort($r))$r[]=XTYPEDCWVSMKLAIUGRHNFBOQJZ[$i].$_GET[+$i++];print_r($r);

Experimente online!

Jörg Hülsermann
fonte
1

05AB1E , 29 27 bytes

.•C5ê™вrΓ˜3åóMîõxÿ•uS|{)øJ{

Experimente online!

.•C5ê™вrΓ˜3åóMîõxÿ•uS       # Push exploded XTYPEDCWVSMKLAIUGRHNFBOQJZ.
                     |{)    # Push input in array, sorted.
                        øJ{ # Zip together, join, resort.

-2 graças à mágica de Emigna .•.

Urna de polvo mágico
fonte
Você também pode construir a string com .•C5ê™вrΓ˜3åóMîõxÿ•u.
Emigna
Isso é apenas um espaço de chave indexado usando em A-Za-z0-9vez de 0-9A-Za-z?
Magic Octopus Urn
É um mapa base-27 em <espaço> az
Emigna
0

Java 7, 169 bytes

import java.util.*;List c(List l){Collections.sort(l);int i=0;for(Object s:l)l.set(i,""+"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)+l.get(i++));Collections.sort(l);return l;}

Experimente aqui.

Explicação:

import java.util.*;                            // Import used for List and Collections

void c(List l){                                // Method with list parameter and no return-type
  Collections.sort(l);                         //  Sort the given list
  int i=0; for(Object s:l)                     //  Loop over the Strings in the list
    l.set(i,""+                                //   Replace the String-item in the list with:
      +"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)  //    The leading capital character
      +l.get(i++);                             //    Followed by itself
                                               //  End of loop (implicit / single-line body)
}                                              // End of method
Kevin Cruijssen
fonte
Ele precisa retornar na ordem original (Alfa Bravo Charlie ...)
fevnɛtɪk 13/04/19
@ fənɛtɪk fixo ao custo de 18 bytes, tornando-o 169.
Kevin Cruijssen