Usando o idioma de sua escolha, escreva a menor função / script / programa possível, que identificará a palavra com o maior número de letras exclusivas em um texto.
- Letras exclusivas devem incluir qualquer caractere distinto usando a codificação UTF-8 .
- As versões em maiúsculas e minúsculas do mesmo caractere são diferentes e distintas;
'a' != 'A'
- As versões em maiúsculas e minúsculas do mesmo caractere são diferentes e distintas;
- As palavras são vinculadas por qualquer caractere de espaço em branco.
- 'Letras' são qualquer símbolo que possa ser representado por um único caractere unicode.
- O documento de texto deve ser lido pelo seu código - não é permitido pré-carregamento / codificação do texto.
- A saída deve ser a palavra, seguida pela contagem de letras únicas.
llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch - 18
- Qualquer delimitador / espaçamento entre os dois valores é com você, desde que haja pelo menos um caractere para separá-los.
- Caso exista mais de uma palavra com a contagem mais alta, imprima todas as palavras dessa contagem, com uma nova delimitação de linha.
super-reconhecimento - 16 pseudolamellibranchiate - 16
- Isso é código de golfe, então o código mais curto vence.
Essa resposta no English.SE me inspirou a criar esse desafio. O exemplo usa apenas uma lista de palavras , mas qualquer texto deve poder ser processado.
LlanfairPG
é uma palavra em galês e contém letras do alfabeto galês -ll
ech
são letras únicas no idioma galês.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+~`<>/\\?'";:{}[],.
é uma "palavra" válida?Respostas:
APL (56)
Essa é uma função (a pergunta diz que é permitida) que pega uma string e retorna uma matriz de palavras e comprimentos únicos.
Uso:
Explicação:
⎕ML←3
: defina o nível de migração como 3 (para que⊂
seja partição em vez de delimitar)W←⍵⊂⍨⍵≠' '
: armazena naW
sequência especificada, em que cada partição consiste em caracteres que não são de espaço em branco.⍙←⍒∆←↑∘⍴∘∪¨W
: obtenha a quantidade (⍴
) de∪
elementos únicos ( ) em cada parte (¨
)W
e armazene-os∆
, em seguida, obtenha a ordem de classificação quando classificada abaixo (⍒
) e armazene-a em⍙
.∆[⍙
...]
: classifique∆
por⍙
, agora temos os comprimentos únicos em ordem.∆∘.=∆←∆
: armazene os classificados∆
novamente∆
e veja quais elementos∆
são iguais.↑+/
: some as linhas (agora sabemos quantos elementos são iguais a cada elemento) e, em seguida, pegue o primeiro item (agora sabemos quantos elementos são iguais ao primeiro elemento, ou seja, quantas das palavras estão ligadas em primeiro lugar).W[⍙]⍴⍨
: classifiqueW
por⍙
e pegue o primeiro N, onde N é o número que acabamos de calcular.{⍵,⍴∪⍵}¨
: para cada um deles, obtenha a palavra em si e a quantidade de caracteres únicos na palavra⊃
: formato como matrizfonte
Mathematica
96115Editar : o código agora encontra todas as palavras com o número máximo de caracteres. Recuso-me a tratar vírgulas como caracteres de palavras.
Exemplos
ou
ou
Exemplos mais longos
Surpresa: A palavra mais "única" da Declaração de Independência também é a palavra mais única de Alice no País das Maravilhas !
fonte
Python 2 (110 (98 usando a entrada de arquivo))
.
O que há para melhorar: impressão (33 caracteres)
A pontuação é considerada letras.
fonte
NameError: global name 'r' is not defined
. Depois de adicionar aspas simples em torno dor
:AttributeError: 'file' object has no attribute 'split'
. Python 3.3.0:SyntaxError: invalid syntax 'print i,c'
.Este é o meu primeiro codegolf, estou muito empolgado :) Também significa que provavelmente não é bom.
Groovy
127117112105Edit: Como as funções parecem permitidas aqui, é uma em 105. Também renomei as variáveis para fazer a primeira coluna ler ACDC, porque isso é importante em qualquer tipo de código-fonte:
Você poderia chamar assim:
Sem função usando a entrada padrão no 112 :
Entrada: Lorem Ipsum Text from primo
Todos os scripts são gerados:
Alguém tem uma idéia de como torná-los mais sensuais?
fonte
Perl 78 bytes
Interpretação da restrição "O documento de texto deve ser lido pelo seu código" para significar que opções de linha de comando que lêem e analisam a entrada não são permitidas. Como na solução PHP abaixo, apenas os caracteres 10 e 32 são considerados delimitadores de palavras. Entrada e saída também são obtidas da mesma maneira.
PHP 128 bytes
Os únicos caracteres considerados delimitadores de palavras são o caractere 10 e o caractere 32. Os demais, incluindo a pontuação, são considerados parte da palavra.
Ele contém alguns caracteres binários, o que salva aspas, mas, como resultado, precisa ser salvo com uma codificação ANSI para funcionar corretamente. Como alternativa, esta versão pode ser usada, que é 3 bytes mais pesada:
E / S de amostra:
entrada 1:
saída 1:
entrada 2:
saída 2:
fonte
incredulity
tem 10 letras únicas, não 11.GoRuby 2.0.0 - 66 caracteres
As soluções abaixo não encontraram todas as correspondências, mas apenas uma. Aqui está a minha versão final:
Exemplos:
produz:
GoRuby 2.0.0 - 29 caracteres (formato de saída não exato)
Espera entrada de stdin. O formato de saída é um pouco diferente, no entanto. Por exemplo:
GoRuby 2.0.0 -
4240 caracteresespera entrada de stdin
Ruby 1.9.3 - 6965 caracteresespera entrada de stdin (o mesmo que acima, mas sem abreviações do GoRuby)
fonte
Javascript
163 155 152162 bytesIsso é o mais curto possível:
Nesta versão,
/\s/
as palavras são separadas por espaços em branco, incluindo pontuação, vírgulas, pontos etc. como parte das palavras. Isso é facilmente alterado para/\b/
para não incluí-los.Vou ver o que posso fazer com for-loops em vez de forEaches daqui a pouco.
E / S:
fonte
In the event more than one word exists with the highest count, print all words for that count, **with one new line delimiting**.
Scala 129 caracteres:
fonte
R - 106 caracteres
Como uma função com o texto de entrada como parâmetro:
E alguns exemplos:
Ou R - 100 caracteres
Como uma função com o caminho para o arquivo de texto como parâmetro:
Uso:
fonte
Python
176168fonte
Python3 119
Lê de um arquivo chamado
a
.Testado com os textos de entrada do @primo:
fonte
VBScript - 430 / VBA - 420
VBScript:
VBA:
fonte