Desafio
Dadas duas seqüências, resolva se ambas têm exatamente os mesmos caracteres.
Exemplo
Entrada
palavra, errado
Isso retorna true
porque eles são os mesmos, mas apenas embaralhados.
Entrada
palavra wwro
Isso retorna false
.
Entrada
barco, toba
Isso retorna true
Regras
Aqui estão as regras!
- Suponha que a entrada tenha pelo menos 1 caractere e não mais que 8 caracteres.
- Sem caracteres especiais, apenas
a
-z
- Todas as entradas podem ser consideradas minúsculas
Casos de teste
boat, boat = true
toab, boat = true
oabt, toab = true
a, aa = false
zzz, zzzzzzzz = false
zyyyzzzz, yyzzzzzy = true
sleepy, pyels = false
p,p = true
code-golf
string
permutations
Tom Gullen
fonte
fonte
Respostas:
Python, 32 bytes
fonte
def f(a,b):return sorted(a)==sorted(b)
O trade off é que você começa a substituir def + voltar com lambda em troca de não usar quaisquer declaraçõesGolfscript, 3 caracteres?
uso:
fonte
'
).J, 8
Literalmente, combine (
-:
) em (&
) classifique (/:~
)Uso da amostra:
Onde os números inteiros de 64 bits entram em jogo?
fonte
v arg
(mônadas) ou dois de ambos os lados como emarg1 v arg2
(díades). A que enviei é obviamente uma díade. Não me preocupei em nomeá-lo, pois não foi solicitado e é mais curto dessa maneira. Se você realmente quiser dar um nome a ele, faça assim:is_anagram_of =: -:&(/:~)
e use como'a' is_anagram_of 'aa'
.Javascript,
192157152 152147125 bytesOk, algumas dessas línguas são muito mais flexíveis do que eu pensava! Enfim, essa é a maneira mais longa, eu acho, mas pelo menos uma técnica diferente.
Comprimido
Obrigado a Peter e David por espremer mais caracteres!
Então faça:
Código expandido
O comprimido teve muitas mudanças, mas esta é a teoria básica:
fonte
a=[2];for(p=3,j=0;j<26;)if(a[j]){if(p%a[j++]==0){p++;j=0}}else{a[j]=p;j=0}
for(a=[j=p=2];j<123;)a[j]?p%a[++j]<1&&p++&&(j=0):(a[j]=p,j=0);function b(c,i){return c[i=i||0]?a[c.charCodeAt(i)]*b(c,++i):1}
Golfscript, 8 bytes
Isso define uma função chamada
A
Casos de teste
fonte
Haskell, 31 bytes
função - 31
programa -
815855Uso:
Parabéns ao lambdabot e sua refatoração sem pontos .
fonte
perl
ainda pode ser chamado de "programa"? :-)x#y=sort x==sort y
é 1 caractere menorC #, 129 caracteres
Legível:
fonte
using System.Linq;
vez de colocar o namespace?Ruby, 34 bytes
Usando o esquema de E / S da solução Peter Taylors Perl:
fonte
-e:1:in '<main>': undefined method 'chars' for nil:NilClass (NoMethodError)
Programa C, 118
fonte
t[256],i;main(c){for(;c+3;)(i=getchar())>10?t[i]+=c:(c-=2);for(i=257;--i&&!t[i-1];);puts(i?"false":"true");}
- são 108 caracteres. Muito importante, seuc
truque de inicialização ainda é empregado.Perl, 58 bytes
(programa completo, diferente da outra resposta Perl, que é apenas uma função)
49 em função
fonte
"
true e false, pois sem usar estritos / avisos, uma palavra de barra é uma string.($c,$d)=map{[sort split//]}@ARGV;exit("@$c"ne"@$d")
(51 caracteres) para que ele possa receber argumentos da linha de comando e usar os códigos de saída da linha de comando. Seriam 48 caracteres retidos<>
com uma entrada de várias linhas.Clojure - 23 caracteres
Como uma função anônima:
Exemplo de caso de teste:
fonte
Javascript
Com base na solução de @ zzzzBov.
Comparação, 65 caracteres (40 sem função)
Comparador, 43 caracteres
fonte
+""
para coagir a string.C ++ (104 caracteres não-ws)
Com base na classificação da contagem. Nota: assume cadeias do mesmo comprimento, o que parece estar implícito (embora não declarado) pela pergunta.
fonte
i=123;while(i&&u[--i]);return!i;
PHP (linha de comando, 87 caracteres)
fonte
Javascript
Uma versão (muito) ligeiramente mais curta da solução do @ zzzzBov, que usa, em
.join()
vez do boxe String:Similarmente:
fonte
Clojure REPL 41 chars
fonte
Java
(Aparentemente, o idioma favorito de todos!)
173 caracteres:
(Não imprime caracteres de nova linha para salvar 2 caracteres de println)
Compile e execute:
Amor para ver um mais curto ...
fonte
java.util.Arrays x=null;
e usarx.
em vez deArrays.
:class g{public static void main(String[]p){java.util.Arrays x=null;String[]a=p[0].split(""),b=p[1].split("");x.sort(a);x.sort(b);System.out.print(x.equals(a,b));}}
( 163 bytes ) E, convertendo-a Java 8,class g{public static void main
poderia serinterface g{static void main
assim, mas eu acho que Java 8 wasn ainda está por aí em 2011, portanto, manterclass
também é bom. ; psed, 45 caracteres
É até possível no meu favorito -
sed
! Apenas uma expressão regular para resolver o anagrama ! Continue removendo as letras correspondentes:(a ser invocado com
-nE
)Perl, 48
Para ser invocado com
-p
.Função Perl, 39
fonte
APL, 2 caracteres
Essa é a função Multiset Match do Nars2000 , uma das implementações de APL de ponta. Quando aplicado a strings, calcula exatamente a função necessária:
fonte
⍦
símbolo, o que duvido.05AB1E ,
64 bytes (não concorrente)Experimente online!
Isso levou um tempo devido a dificuldades de entrada. Golfe devido ao pop.
Explicação:
fonte
Perl,
7775 caracteresA E / S do problema não está bem especificada; isso lê duas linhas de stdin e gera true ou false para stdout.
(Obrigado a Tim por 77 -> 75)
fonte
$a=;
? Além disso, você pode pular as parênteses desort
e o espaço a seguirprint
.Perl, 62 bytes
Essa função aceita as seqüências de caracteres como argumentos e retorna verdadeiro ou falso.
Armazena os valores ASCII em uma matriz e verifica se está nivelado. Incrementos para a primeira palavra e decrementos para a segunda palavra.
fonte
Python 3,
107977664Obviamente, isso pode ser abreviado se não considerarmos literalmente as palavras do OP e em minúsculas "true" e "false" ...
fonte
;s=sorted
à primeira linha e substituir as duas instâncias desorted
pors
na segunda linha. Deve salvar ... 3 caracteres?Python, 32 bytes
fonte
Bash, 88 caracteres
fonte
R , 54 bytes
Experimente online!
fonte
utf8ToInt
e seu reverso tende a reduzir a divisão das cordas do que as funções convencionais.Scala em REPL (32)
Função Scala (43)
Programa Scala (61)
Eles utilizam um recurso interessante do Scala, no qual uma String também pode ser tratada como uma sequência de caracteres (
Seq
), com todas as operaçõesSeq
disponíveis.fonte
APL - 13 caracteres
Ligue assim:
No último exemplo,
'a'
representa um único caractere e o prefixo,
o converterá em uma sequência.fonte
Java (134 bytes)
Isso faz com que uma matriz conte o número de vezes que cada letra aparece e compara as matrizes para verificar se são iguais.
fonte
(c[0], c[1])
efor (int i=0;
.JavaScript, 41
Função de comparação (41) :
Função comparadora (21) :
Função comparadora (48):
Função de comparação (78):
Assume que
String
temsplit
eArray
temsort
.fonte
c=>d=>(a=b=>''+[...b].sort())(c)==a(d)