Sua tarefa é classificar uma matriz que contenha as cadeias "quarto", "moeda de dez centavos", "níquel" e "centavo" várias vezes em nenhuma ordem específica e classificá-las para que elas estejam nessa ordem: quarter dime nickel penny
(em outras palavras, maior ou menor valor monetário).
Regras
- Seu programa deve usar uma matriz como entrada, contendo os nomes das moedas dos EUA e classificá-las do maior para o menor em valor monetário.
- Para quem não é dos EUA ou não usa troco, os valores das moedas dos EUA, do maior para o menor, são:
- Trimestre: 25 centavos
- Moeda de dez centavos: 10 centavos
- Níquel: 5 centavos
- Centavo: 1 centavo
- Para quem não é dos EUA ou não usa troco, os valores das moedas dos EUA, do maior para o menor, são:
- Você pode classificar essa matriz da maneira que desejar, desde que a saída seja ordenada pelos valores monetários mostrados acima.
- A entrada pode ser recebida de qualquer forma, seja argumentos de linha de comando ou STDIN.
- Uma matriz de entrada seria composta por minúsculas, algo como isto:
quarter dime nickel nickel quarter dime penny penny
- O formato real de entrada e saída é com você.
Casos de teste
"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 é o código-golfe , portanto, aplicam-se regras e brechas padrão.
code-golf
string
array-manipulation
sorting
ckjbgames
fonte
fonte
Respostas:
Japonês ,
53 bytesTeste online!
Explicação
Também adicionei uma função de classificação ao meu idioma nas últimas semanas :-)
ñ
pega uma matriz e uma função e classifica a matriz como se cada item tivesse sido mapeado por essa função.A
g
função em uma string recebe um númeron
e retorna on
th char na string, quebrando sen
for negativo ou após o final da string. As seqüências de caracteres podem ser alinhadas da seguinte maneira:O nono caractere (indexado 0) de cada sequência foi destacado em negrito. Eles estão na ordem correta, então tudo o que precisamos fazer é
ñg9
. (Embora agora que eu olhe para trás,ñg5
funcione também ...)fonte
V , 7 bytes
Experimente online!
Isto usa o spiffy novo tipo de comando I adicionados ao V cerca de uma semana atrás (
ú
). Momento doce!A maneira como isso funciona é classificando todas as linhas por classificação padrão (valores ASCII), mas ignorando a primeira correspondência de um determinado regex. Nesse caso, o regex é
(qu)?
, embora tenha algumas coisas brutas não-ASCII para evitar o uso de barras invertidas. Se você ignorar as duas primeiras letras de "quarto", começa com 'a' e todas as moedas já estão em ordem alfabética.Versão não concorrente, 4 bytes
Esse recurso já foi implementado, mas eu ainda não o havia testado extensivamente, portanto havia um bug que só percebi por causa desse desafio. Não há link TIO porque o TIO está um pouco atrasado.
Isso funciona classificando inversamente todas as linhas, mas ignorando o primeiro caractere em cada linha.
fonte
Python, 36 bytes
Função sem nome que classifica a lista no local pela função de chave fornecida.
As fatias de cada nome de moeda são então,
arter
,dime
,ickel
, epenny
- que estão em ordem alfabética (ou, mais importante, ordinal).fonte
el
a maneira errada ao redor eu perca oc
: pBash + coreutils, 18
Experimente online .
fonte
Python 3 ,
424138 bytesUma função lambda sem nome que recebe a entrada como uma lista de seqüências de caracteres, classifica no lugar.
(Superado por Jonathan Allan)
Experimente online!
Outras soluções com as quais eu brinquei:
fonte
PowerShell , 21 bytes
Experimente online!
Explicação
Roubou descaradamente o algoritmo na resposta da ETHproductions (basicamente). Multiplico cada string por 3 e, em seguida, classifico com base no nono caractere da string resultante.
fonte
$_
no PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
produzirá cada número vezes 2; o bloco de scripts é executado uma vez por item de entrada.Gelatina , 4 bytes
Experimente online! (o rodapé,
ÇY
junta-se à lista resultante com alimentações de linha para uma impressão mais bonita.)Quão?
O enésimo índice de uma lista no Jelly é o enésimo item, começando à esquerda, contando de 1 e retornando ao início quando necessário. (O 0º está à direita, o -1º à esquerda e assim por diante).
Portanto, o sexto caractere de
['d','i','m','e']
é'i'
que seis é congruente a dois módulos quatro.O sexto caractere das quatro moedas em ordem é quart
e
r, di
me, nickel
,p
enny. Estes estão em ordem alfabética (ou mais importante, ordinal).Outra maneira de conseguir a mesma coisa seria a de ordenar por as cordas giradas com
ṙ5µÞ
, ondeṙ
gira para a direita, fazendo com que as cordaserquart
,imed
,lnicke
, epenny
.fonte
Python , 32 bytes
Experimente online! Classifica a lista no lugar.
A idéia é usar uma função de chave de classificação sem a
lambda
. Um bom candidato foix.strip
, que pega a stringx
e remove as bordas esquerda e direita de todos os caracteres da entrada. Por exemplo,"abcdef".strip("faces") == "bcd"
,.O método
"npr".strip
leva:que são classificadas lexicograficamente. Encontrei a corda
npr
por força bruta.npu
enpt
também trabalho, e não há mais curto.fonte
Bash (+ coreutils) 11 bytes
Golfe
Como funciona
Classificação reversa, com a "chave de classificação" do segundo caractere do primeiro campo (palavra) até o final da linha, ou seja:
Teste
Experimente Online!
fonte
CJam , 8 bytes
Experimente online!
Explicação
fonte
Pyke,
975 bytesExperimente aqui!
fonte
Retina, 10
610 bytes salvos graças a @ETHproductionsq
porb
b
volta aq
Experimente online .
fonte
V ,
87 bytes1 byte salvo graças a @DJMcMayhem
[Experimente online!]
Veja a resposta de @ DJMcMayhem em V (
10 bytes menor que o meu)Experimente online!
Aqui está uma solução mais antiga com 1 byte maior, mas eu realmente gosto disso.
V , 8 bytes
[Experimente online!]
Experimente online!
Explicação
Agora o buffer estará neste formato:
A única coisa que resta a fazer agora é mover os quartos para o topo.
fonte
:m0
em seu solução alternativa para salvar um byte (e me amarrar)Úçq/:m0
:move
Japonês , 3 bytes
Experimente online!
Algumas outras soluções de 3 bytes:
Experimente online!
Experimente on-line!
fonte
T-SQL,
413634 bytesExplicação
Suponha que a entrada seja pré-carregada em uma variável de tabela denominada
@
, com uma única coluna denominadaa
, em que cada valor é uma moeda a ser classificada.A
select * from @
peça é a placa da caldeira 'obtém todos os valores para retornar'. A verdadeira magia acontece naorder by
cláusula.Usando a mesma estratégia como Johnathan Allan , eu ordenar por os últimos cinco caracteres (SQL retornará a seqüência inteira se é demasiado curta):
arter
,dime
,ickel
,penny
.fonte
q
é a próxima letra a seguirp
, portanto, para que um mod simples resulte emq
menos do quep
o valor precisa ser um fator deq
, o que é primo. Você poderia subtrair 1 primeiro e depois um módulo de 7 iria funcionar, mas que, presumivelmente, ter pelo menos tantos bytes como 113.JavaScript (ES6),
3533 bytesCasos de teste
Mostrar snippet de código
fonte
Anterior, 158 bytes
Experimente online!
O processamento e a classificação de strings não são o tipo de coisa que você normalmente gostaria de tentar no Befunge, mas esta solução está aproveitando a observação de John Kasunich de que não precisamos realmente classificar nada. Contamos apenas o número de ocorrências de cada moeda (que pode ser facilmente determinada a partir do primeiro caractere) e, em seguida, produzimos muitos dos nomes de cada moeda na ordem apropriada.
Ainda não é nada competitivo com outros idiomas em termos de tamanho, mas essa abordagem é pelo menos melhor do que teria sido se tentássemos lidar com o desafio como um exercício de classificação de cadeias.
fonte
Pitão, 3 bytes
Demonstração
Baseado em ETHproductions resposta está em Japt.
Explicação:
fonte
APL (Dyalog APL) , 11 bytes
Retorna e retorna a lista de strings.
Experimente online!
{
função anônima:⍵[
...]
o argumento indexado por⍋
os índices ascendentes de↑
a matriz cujas linhas são acolchoadas5⌽
girado em cinco etapas¨⍵
itens do argumento}
fonte
Braquilog , 3 bytes
Experimente online!
Abordagem roubada da resposta japonesa da ETHproductions.
fonte
Casca , 3 bytes
Experimente online!
Portado da minha resposta Brachylog, que rasga a resposta Japt da ETHproductions, mas não é uma tradução exata, pois usa rotação em vez de simples acesso ao enésimo elemento. Lá, eu fiz isso porque
∋
não permite que você indexe além do final da entrada (o que provavelmente é bastante útil em muitas circunstâncias devido à natureza declarativa da linguagem). Em Husk,!
faz deixar você índice após o fim da entrada, com o mesmo em torno de embrulho modular que Japtñg9
usos, mas é a partir de 1 de modo que este programa, em particular, iria acabar por ser um byte mais:Ö!10
.fonte
Lote, 82 bytes
Leva a entrada como argumentos da linha de comando e gera STDOUT. Funciona concatenando as listas resultantes da filtragem da lista original em cada moeda.
fonte
Ruby, 34 bytes
entrada e saída como uma matriz de strings
fonte
Ruby, 31 bytes
fonte
Ruby, 30 bytes
Números mágicos encontrados por tentativa e erro. Um pouco desajeitado, mas mais curto do que usar
.reverse
.fonte
Perl 6 ,
40 3634 bytesTente
Tente
Tente
Expandido:
fonte
Mathematica, 50 bytes
fonte
RProgN, 18 bytes
Explained
Try it online!
fonte
java 8,
128112 bytesThis is a lambda expression for a
java.util.function.Function<String[],String[]>
Explantion: For each of the 4 coins in order, go through the input and append the coin's name to the result every time there is a match for that coin's unique character. Split the result into an array and return it.
fonte
Ruby, 27 bytes
fonte