Charlie y el guión malvado


8

Aquí está el 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

En la menor cantidad de bytes posible:

  1. La entrada será estas palabras en un orden aleatorio, con las primeras letras eliminadas.
  2. Su objetivo es ordenar las palabras de nuevo a su orden original usando solo las letras que tiene ahora . En otras palabras: descubra cómo '[A] lfa' aparece antes que '[B] ravo', y así sucesivamente. Su código no debe hacer referencia a la lista original, claves de índice, etc.
  3. Restaura las primeras letras originales de cada palabra.

Reglas

  • El guión en los rayos X probablemente sea malo, pero necesita quedarse, porque yo también soy malo.
  • El resultado puede ser una cadena (separada por comas o nuevas líneas, por ejemplo) o una matriz.
  • La ortografía y los casos de letras no son negociables.
  • No es necesario mostrar resultados de ejemplo en las respuestas.

@LevelRiverSt Sin embargo, la clasificación es muy diferente sin el primer carácter
fəˈnɛtɪk

@ fəˈnɛtɪk etiquetar cada fragmento de palabra con su primera letra es posiblemente un método de clasificación. Creo que la propuesta de sparklepony está dentro de la intención del OP. Realmente, el OP debería responder esto, pero me inclinaría a cerrar el voto nuevamente debido a requisitos no observables si el OP dijera que no. Se vuelve desordenado (¿qué pasa si usa un bucle para pescarlos uno por uno, agrega una letra e imprime, luego están haciendo las dos cosas juntas?) Estoy con el meta OP de Martin en casos como este. (y la publicación a la que hizo referencia con 19 votos a favor y 0 votos a favor)
Level River St

Si alguien siente que esto podría ser útil, una cadena que ha identificado de forma única cada una de las palabras de entrada desde el comienzo de la cadena es "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
No estoy seguro de entender cuál es el resultado. ¿Es simplemente el estilo de complejidad kolmogorov del texto fonético exacto (o matriz de líneas), excepto que tiene una versión destrozada como entrada?
xnor

3
@xnor Podría funcionar mejor si se le da una selección aleatoria del alfabeto fonético barajado, entonces debe devolverlo en orden, en cuyo caso el texto fijo no sería una salida válida.
fəˈnɛtɪk

Respuestas:


4

Jalea , 21 bytes

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

La entrada y la salida son matrices de cadenas.

Pruébalo en línea!

Antecedentes

Si bien hay 26! = 403291461126605635584000000 entradas diferentes, podemos ordenar la entrada por lo que solo tenemos que lidiar con una permutación de este alfabeto fonético. Ordenando lexicográficamente, obtenemos

-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

Simplemente podemos indexar en esta matriz para ordenarla por las letras eliminadas. Los índices (basados ​​en 1) son

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

Todo lo que queda por hacer es anteponer las letras mayúsculas del alfabeto a las cadenas en el resultado.

Cómo 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.

1
Me sorprende lo bien que puedes jugar al golf ...
Christopher


2

JavaScript, 169/195 bytes

Si se puede reemplazar la primera letra antes de ordenar 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()

Pruébalo en línea!

Si la clasificación debe realizarse antes de agregar la primera 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}

Pruébalo en línea!

Un total de 20 bytes de cada uno de estos programas es solo String.fromCharCode () para recuperar el carácter ...

Otros 69 bytes son la cadena que identifica de forma exclusiva el inicio de cada una de las palabras en el alfabeto fonético.

Explicación del primer ejemplo.

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

La cadena codificada aquí se separa en una lista de los caracteres de identificación únicos que comienzan las palabras del alfabeto fonético después de eliminar el primer carácter.

return String.fromCharCode(i+64)+k

Esta información se utiliza para encontrar el índice donde la cadena cae en el alfabeto para volver a poner el carácter inicial.

.sort()

JavaScript se clasifica implícitamente como cadenas por los valores ASCII de los caracteres

Explicación del segundo ejemplo.

La función g = k => ... encuentra el índice para el que la cadena debe caer en el alfabeto fonético.

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

Ordena las cadenas por los números devueltos realizando g (...)

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

Reemplaza el primer carácter de cada una de las cadenas del alfabeto fonético


¿Por qué .sort()en la respuesta de 169 bytes? En la pregunta dice " 3. Restaure las primeras letras originales de cada palabra ", pero no menciona que la salida también debe clasificarse.
Kevin Cruijssen

@KevinCruijssen Su objetivo es ordenar las palabras de nuevo a su orden original usando solo las letras que tiene ahora. En otras palabras: descubra cómo '[A] lfa' aparece antes que '[B] ravo', y así sucesivamente. Su código no debe hacer referencia a la lista original, claves de índice, etc.
fəˈnɛtɪk

Ah, leí mal una parte de la segunda bala. Editaré mi código.
Kevin Cruijssen


1

05AB1E , 29 27 bytes

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

Pruébalo en línea!

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

-2 gracias a la magia de Emigna .•.


También podría construir la cadena con .•C5ê™вrΓ˜3åóMîõxÿ•u.
Emigna

¿Es eso solo un espacio de teclas indexado usando en A-Za-z0-9lugar de 0-9A-Za-z?
Magic Octopus Urn

Es un mapa de base 27 en <space> 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;}

Pruébalo aquí

Explicación:

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

Debe regresar en el orden original (Alfa Bravo Charlie ...)
fəˈnɛtɪk

@ fəˈnɛtɪk Se corrigió a un costo de 18 bytes, por lo que es 169.
Kevin Cruijssen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.