Definição
A classificação de uma palavra é definida como a posição da palavra quando todas as permutações (ou arranjos) possíveis de suas letras são organizadas em ordem alfabética, como em um dicionário, independentemente de as palavras serem significativas ou não.
Vamos considerar essas duas palavras - "azul" e "visto". Para começar, escreveríamos todos os arranjos possíveis das letras dessas palavras em ordem alfabética:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Agora vamos olhar da esquerda e encontrar a posição das palavras que precisamos. Vemos que a palavra "azul" está na 4ª posição e "vista" está na 10ª posição. Portanto, a classificação da palavra "azul" é 4, e a de "visto" é 10. Essa é a maneira geral de calcular a classificação de uma palavra. Certifique-se de começar a contar apenas de 1.
Tarefa
Sua tarefa é escrever um código para receber qualquer palavra como entrada e exibir sua classificação. A classificação deve ser a saída. Tenha cuidado com as palavras que contêm letras repetidas.
Exemplos
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Você pode assumir que a entrada esteja completamente em minúscula e a entrada conterá apenas caracteres alfabéticos . Além disso, se um espaço em branco ou uma sequência inválida for inserida, você poderá retornar qualquer coisa.
Pontuação
Isso é código-golfe , então o código mais curto vence!
fonte
O(n log n)
ou menos. (desculpe, não Python) Minha submissão (C ++) leva 2.53s para resolver teste 14.['h', 'e', 'l', 'l', 'o']
em oposição a'hello'
?Respostas:
Gaia , 4 bytes
Experimente online!
fonte
Python 3 , 71 bytes
Experimente online!
fonte
05AB1E , 5 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
Pitão , 6 bytes
Suíte de teste.
Explicação
fonte
Geléia , 5 bytes
Experimente online! ou veja a suíte de testes
Como funciona
fonte
Œ¿
não funciona.ṢŒ¿
?1
Python 2 , 78 bytes
Experimente online!
Python 3 , 73 bytes
Experimente online!
fonte
CJam , 8 bytes
Experimente online!
+1 byte devido a um requisito indexado a 1.
fonte
Haskell , 56 bytes
Experimente online!
+6 bytes devido ao requisito de 1 indexação. :(
fonte
Japonês ,
810 bytesIndexado a 0.Poxy, indexação 1 desnecessária, aumentando minha contagem de bytes em 25%!Teste-o
Explicação
á
obtém todas as permutações da entrada,â
remove duplicatas, asn
classifica eb
obtém o índice da primeira ocorrência da entradaU
,.fonte
J ,
2823 bytes-5 bytes graças ao FrownyFrog
Como funciona?
Experimente online!
fonte
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 bytes
O Tcl não possui um método interno para calcular a próxima permutação lexicográfica, por isso temos que fazer isso sozinhos. Mas espere ... é mais curto fazê-lo com uma função recursiva simples que calcula todas as permutações possíveis em qualquer ordem.
Ungolfed:
fonte
K (oK) ,
2318 bytesSolução:
Experimente online!
Exemplos:
Explicação:
Gere permutações dos índices da string de entrada classificada, use-os para indexar de volta para a string de entrada, faça distinções, veja onde a string original correspondeu e adicione um.
fonte
Java 8, 211 bytes
Explicação:
Experimente online.
fonte
Python 3 ,
183182 bytesA primeira resposta que é executada em tempo polinomial!
Experimente online!
Exija que a entrada seja toda em maiúscula, porque ... ela salva um byte.
Programa completo, leva entrada
stdin
e saída parastdout
.Nomes de variáveis: (tipo de código não armazenado)
Infelizmente,
from math import factorial as f
leva exatamente mais 1 byte.(Nota não relacionada: verifiquei o
Combinatorica`
pacote do Mathematica, nada de útil, inclusiveRankPermutation
)fonte
Casca , 6 bytes
Experimente online! Eu sinto que deveria haver uma maneira de desistir
(
.Explicação:
fonte
Limpo ,
113111 bytesExperimente online!
+3 bytes para lidar com a indexação 1: /
fonte
APL (Dyalog Unicode) , 33 bytes (SBCS)
Experimente online!
fonte
Python 3 ,
105104103 bytesExperimente online!
fonte
Ruby , 49 bytes
Experimente online!
fonte
JavaScript (ES6),
106100 bytesCasos de teste
Mostrar snippet de código
Quão?
P () é a nossa função de permutação recursiva. Mas o objeto abrangente de P também é usado para armazenar as fileiras das permutações.
O código de embalagem agora é lido como:
fonte
C ++, 230 bytes
Conforme minha pergunta, o código definitivamente precisa ser executável como está. A cláusula somente de função é basicamente lixo. : - @
Agradeço a quem gentilmente respondeu à pergunta sobre o que pode ser cortado para mim. No interesse do código válido , evitei o popular GCC-ism de incluir <bits / stdc ++. H>, que sempre considerei uma fraude de brecha.
O que se segue é o que resta da minha postagem original:
Sempre estou inseguro ao usar C e C ++ o que conta para o total de bytes. De acordo com Programa, Função ou Snippet? a resposta ainda é vaga (desde que não seja um trecho, eu acho). Então, eu vou com a menor das duas possibilidades.
Aqui, ele é destruído com os cabeçalhos necessários, etc:
Isso atinge até 230 bytes, um terço do padrão exigido por todos os programas C ++. (Portanto, não me sinto muito mal por não contar, mas como nunca vi uma queixa firme de qualquer maneira, o OP terá que me dizer o que ele prefere satisfazer “escreva um código para usar qualquer palavra como entrada e exibir sua classificação. ”)
Também não tenho certeza se isso satisfaz "a classificação deve ser gerada".
fonte
using namespace std
,#include <algorithm>
cabeçalhos usados para definir a função em bytes. E ... Não,main(){}
é um programa C ++ (g ++) válido em 8 bytes.import math
muitas vezes é necessário. Deixe-me encontrar a meta relevante ...puts
eprintf
). Seu código deve compilar e executar com êxito como está para que seja válido. Veja: codegolf.meta.stackexchange.com/a/10085/45941main
funções não pode ser executado como está.Perl 5 , 98 + 3 (
-pF
) = 101 bytesExperimente online!
fonte
Oitava , 43 bytes
Experimente online!
fonte
Perl 6 , 53 bytes
Experimente online!
fonte
PowerShell , 275 bytes
Experimente online!
Então, isso é uma bagunça sangrenta.
O PowerShell não possui permutações internas; portanto, esse código usa o algoritmo daqui (com muita intensidade), disponível sob a Licença Pública Limitada da Microsoft ( Anexo B nesta página de licenciamento).
O programa recebe a entrada
$s
como uma string e o programa atual começa com$b=New-Object ...
. Estamos construindo um novo objeto StringBuilder , que é (essencialmente) uma sequência de caracteres mutável. Isso nos permitirá lidar com as permutações mais facilmente. Em seguida, chamamos a funçãon
(definindo$j
ao longo do caminho o comprimento da string de entrada),sort
com o-u
sinalizador nique de saída, pegamos o.indexOf()
para encontrar a string de entrada e adicionamos1
porque o PowerShell é zero-indexado.A função é a parte principal do programa. Ele assume como entrada um número e cada iteração é decrescente até alcançarmos
1
(ou seja, uma única letra). O restante da função essencialmente chama recursivamente a função, pega a letra atual e a itera em todas as posições.Há um único bit adicional de lógica
if($s.length-eq1){1;exit}
para considerar as seqüências de caracteres de comprimento1
devido a como a função de permutações funciona.fonte
Pyt , 5 bytes
Explicação:
Experimente online!fonte