Su tarea es ordenar una matriz que contenga las cadenas "quarter", "dime", "nickel" y "penny" varias veces en un orden no específico y ordenarlas para que estén en este orden: quarter dime nickel penny
(en otras palabras, mayor a menor valor monetario).
Reglas
- Su programa debe tomar una matriz como entrada que contenga los nombres de las monedas estadounidenses y ordenarlas de mayor a menor por valor monetario.
- Para aquellos que no son de los EE. UU. O no usan el cambio, los valores de las monedas de EE. UU., De mayor a menor, son:
- Trimestre: 25 centavos
- Dime: 10 centavos
- Níquel: 5 centavos
- Penique: 1 centavo
- Para aquellos que no son de los EE. UU. O no usan el cambio, los valores de las monedas de EE. UU., De mayor a menor, son:
- Puede ordenar esta matriz de la forma que desee, siempre que la salida esté ordenada por los valores monetarios que se muestran arriba.
- La entrada se puede tomar de cualquier manera, ya sea argumentos de línea de comandos o STDIN.
- Una matriz de entrada sería todas cadenas minúsculas, algo como esto:
quarter dime nickel nickel quarter dime penny penny
- El formato real de entrada y salida depende de usted.
Casos de prueba
"penny nickel dime quarter"
-> "quarter dime nickel penny"
"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"
"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"
Este es el código de golf , por lo que se aplican reglas y lagunas estándar.
code-golf
string
array-manipulation
sorting
ckjbgames
fuente
fuente
Respuestas:
Japt ,
53 bytes¡Pruébelo en línea!
Explicación
Yo también he agregado una función de clasificación a mi idioma en las últimas semanas :-)
ñ
toma una matriz y una función y clasifica la matriz como si cada elemento hubiera sido mapeado a través de esa función.La
g
función en una cadena toma un númeron
y devuelve eln
th char en la cadena, ajustando sin
es negativo o más allá del final de la cadena. Las cadenas se pueden alinear de la siguiente manera:El noveno carácter (indexado a 0) de cada cadena se ha resaltado en negrita. Estos están en el orden correcto, por lo que todo lo que tenemos que hacer es
ñg9
. (Aunque ahora que lo recuerdo,ñg5
funcionaría también ...)fuente
V , 7 bytes
Pruébalo en línea!
Esto usa el nuevo comando de clasificación que agregué a V hace una semana (
ú
). Dulce momento!La forma en que esto funciona es ordenando cada línea de manera predeterminada (valores ASCII) pero ignorando la primera coincidencia de una expresión regular determinada. En este caso, la expresión regular es
(qu)?
, aunque tiene algunas cosas groseras que no son ASCII para evitar el uso de barras invertidas. Si ignora las dos primeras letras de "cuarto", comienza con 'a', y luego todas las monedas ya están en orden alfabético.Versión no competitiva, 4 bytes
Esta característica ya se implementó, pero aún no la había probado exhaustivamente, por lo que tenía un error que solo me di cuenta debido a este desafío. No hay un enlace TIO porque TIO está ligeramente detrás.
Esto funciona mediante la ordenación inversa de cada línea pero ignorando el primer carácter de cada línea.
fuente
Python, 36 bytes
Función sin nombre que ordena la lista en el lugar por la función clave dada.
Las rebanadas de cada nombre de la moneda son entonces,
arter
,dime
,ickel
, ypenny
- los cuales están en orden alfabético (o más importante, ordinal).fuente
el
equivoco, extraño elc
: pBash + coreutils, 18
Pruébalo en línea .
fuente
Python 3 ,
424138 bytesUna función lambda sin nombre que toma la entrada como una lista de cadenas, se ordena en su lugar.
(Afligido por Jonathan Allan)
Pruébalo en línea!
Otras soluciones con las que me metí:
fuente
PowerShell , 21 bytes
Pruébalo en línea!
Explicación
Desvergonzadamente robó el algoritmo en la respuesta de ETHproductions (básicamente). Multiplico cada cadena por 3, luego ordeno según el noveno carácter de la cadena resultante.
fuente
$_
en PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
generará cada número por 2; el bloque de script se ejecuta una vez por elemento de entrada.Jalea , 4 bytes
Pruébalo en línea! (el pie de página, se
ÇY
une a la lista resultante con avances de línea para una impresión más bonita).¿Cómo?
El enésimo índice de una lista en Jelly es el enésimo elemento que comienza en la izquierda, cuenta desde 1 y regresa al inicio cuando es necesario. (El 0 está a la derecha, el -1 a la izquierda de eso y así sucesivamente).
Entonces el sexto personaje de
['d','i','m','e']
es'i'
ya que seis es congruente con dos módulo cuatro.El sexto carácter de las cuatro monedas en orden son cuartos
e
r, di
mi, nickel
,p
enny. Estos están en orden alfabético (o más importante, ordinal).Otra forma de conseguir lo mismo sería ordenar por las cadenas de girar con
ṙ5µÞ
, dondeṙ
gira a la derecha, por lo que las cuerdaserquart
,imed
,lnicke
, ypenny
.fuente
Python , 32 bytes
Pruébalo en línea! Ordena la lista en su lugar.
La idea es usar una función de clasificación de teclas sin a
lambda
. Un buen candidato fuex.strip
, que toma la cadenax
y elimina los bordes izquierdo y derecho de todos los caracteres en la entrada. Por ejemplo,"abcdef".strip("faces") == "bcd"
.El método
"npr".strip
toma:que están clasificadas lexicográficamente. Encontré la cuerda
npr
por la fuerza bruta.npu
ynpt
también trabajo, y no hay ninguno más corto.fuente
Bash (+ coreutils) 11 bytes
Golfed
Cómo funciona
Clasificación inversa, con la "clave de clasificación" desde el segundo carácter del primer campo (palabra) hasta el final de la línea, es decir:
Prueba
¡Pruébelo en línea!
fuente
CJam , 8 bytes
Pruébalo en línea!
Explicación
fuente
Pyke,
975 bytesPruébalo aquí!
fuente
Retina, 10
610 bytes guardados gracias a @ETHproductionsq
ab
b
nuevo aq
Pruébalo en línea .
fuente
V ,
87 bytes1 byte guardado gracias a @DJMcMayhem
[¡Pruébalo en línea!]
Ver la respuesta de @ DJMcMayhem en V (
10 bytes más corto que el mío)Pruébalo en línea!
Aquí hay una solución anterior de 1 byte más grande, pero realmente me gusta.
V , 8 bytes
[¡Pruébalo en línea!]
Pruébalo en línea!
Explicación
Ahora el búfer estará en este formato:
Lo único que queda por hacer ahora es mover los cuartos hacia arriba.
fuente
:m0
con su solución alternativa para guardar un byte (y vincularme)Úçq/:m0
:move
Japt , 3 bytes
Pruébalo en línea!
Un par de otras soluciones de 3 bytes:
Pruébalo en línea!
Pruébalo onlin!
fuente
T-SQL,
413634 bytesExplicación
Suponga que la entrada está precargada en una variable de tabla denominada
@
, con una sola columna denominadaa
, donde cada valor es una moneda para clasificar.La
select * from @
parte es placa de caldera 'obtener todos los valores para devolver'. La verdadera magia ocurre en laorder by
cláusula.Utilizando la misma estrategia que Johnathan Allan , me ordenar por los últimos cinco caracteres (SQL volveré toda la cadena si es demasiado corto):
arter
,dime
,ickel
,penny
.fuente
q
es la siguiente letra despuésp
, por lo que para que un mod simple resulte enq
menosp
del valor debe ser un factor deq
, que es primo. Podría restar 1 primero y luego un módulo de 7 funcionaría, pero presumiblemente tomaría al menos tantos bytes como 113.JavaScript (ES6),
3533 bytesCasos de prueba
Mostrar fragmento de código
fuente
Befunge, 158 bytes
Pruébalo en línea!
El procesamiento y la clasificación de cadenas no son el tipo de cosas que normalmente querría intentar en Befunge, pero esta solución está aprovechando la observación de John Kasunich de que en realidad no necesitamos clasificar nada. Solo contamos el número de ocurrencias de cada moneda (que se puede determinar fácilmente desde el primer carácter), y luego mostramos muchos de los nombres de cada moneda en el orden apropiado.
Todavía no es del todo competitivo con otros idiomas en términos de tamaño, pero este enfoque es al menos mejor de lo que hubiera sido si hubiéramos tratado de manejar el desafío como un ejercicio de clasificación de cadenas.
fuente
Pyth, 3 bytes
Demostración
Sobre la base de ETHproductions respuesta 's en Japt.
Explicación:
fuente
APL (Dyalog APL) , 11 bytes
Toma y devuelve la lista de cadenas.
Pruébalo en línea!
{
función anónima:⍵[
...]
el argumento indexado por⍋
los índices ascendentes de↑
la matriz cuyas filas están acolchadas5⌽
cinco pasos rotados¨⍵
elementos del argumento}
fuente
Brachylog , 3 bytes
Pruébalo en línea!
Enfoque robado de la respuesta Japt de ETHproductions.
fuente
Casco , 3 bytes
Pruébalo en línea!
Portado de mi respuesta Brachylog, que arranca la respuesta Japt de ETHproductions pero no es una traducción exacta ya que usa la rotación en lugar del simple acceso al elemento n-ésimo. Allí, lo hice porque
∋
no te permite indexar más allá del final de la entrada (lo que probablemente sea bastante útil en muchas circunstancias debido a la naturaleza declarativa del lenguaje). En la cáscara,!
hace que deje índice más allá del final de la entrada, con la misma envoltura alrededor modular que Japtñg9
usos, pero es del 1 por lo que este programa en particular, podría llegar a ser un byte más largo:Ö!10
.fuente
Lote, 82 bytes
Toma entradas como argumentos de línea de comandos y salidas a STDOUT. Funciona mediante la concatenación de las listas resultantes del filtrado de la lista original en cada moneda.
fuente
Ruby, 34 bytes
entrada y salida como un conjunto de cadenas
fuente
Ruby, 31 bytes
fuente
Rubí, 30 bytes.
Números mágicos encontrados por ensayo y error. Un poco torpe, pero más corto que usar
.reverse
.fuente
Perl 6 ,
40 3634 bytesIntentalo
Intentalo
Intentalo
Expandido:
fuente
Mathematica, 50 bytes
fuente
RProgN , 18 bytes
Explicado
Pruébalo en línea!
fuente
java 8,
128112 bytesEsta es una expresión lambda para un
java.util.function.Function<String[],String[]>
Explantación: para cada una de las 4 monedas en orden, revise la entrada y agregue el nombre de la moneda al resultado cada vez que haya una coincidencia para el personaje único de esa moneda. Divide el resultado en una matriz y devuélvelo.
fuente
Rubí, 27 bytes
fuente