Desafío
Dadas dos cadenas, averigua si ambas tienen exactamente los mismos caracteres.
Ejemplo
Entrada
word, wrdo
Esto regresa true
porque son iguales pero simplemente revueltos.
Entrada
palabra, wwro
Esto vuelve false
.
Entrada
barco, toba
Esto vuelve true
Reglas
¡Estas son las reglas!
- Suponga que la entrada tendrá al menos 1 char de largo y no más de 8 caracteres.
- Sin caracteres especiales, solo
a
-z
- Se puede suponer que todas las entradas son minúsculas
Casos de prueba
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
fuente
fuente
Respuestas:
Python, 32 bytes
fuente
def f(a,b):return sorted(a)==sorted(b)
La compensación es que puedes reemplazar def + return con lambda a cambio de no usar ninguna declaraciónGolfscript, 3 caracteres?
uso:
fuente
'
).J, 8
Literalmente, match (
-:
) en (&
) sort up (/:~
)Uso de la muestra:
¿Dónde entran en juego los enteros de 64 bits?
fuente
v arg
(mónadas) o dos en ambos lados como enarg1 v arg2
(díadas). El que presenté es obviamente una diada. No me molesté en nombrarlo, ya que no fue solicitado y es más corto de esta manera. Si realmente quieres darle un nombre, lo harías así:is_anagram_of =: -:&(/:~)
y luego usarlo como'a' is_anagram_of 'aa'
.Javascript,
192157152147125 bytesOk, ¡algunos de estos idiomas son mucho más flexibles de lo que pensaba! De todos modos, esta es la forma más larga, supongo, pero al menos una técnica diferente.
Comprimido
¡Gracias a Peter y David por exprimir más caracteres!
Entonces hazlo:
Código expandido
El comprimido ha tenido muchos cambios, pero esta es la teoría básica:
fuente
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
Esto define una función llamada
A
Casos de prueba
fuente
Haskell, 31 bytes
función - 31
programa -
815855Uso:
Felicitaciones a lambdabot y su refactorización sin puntos .
fuente
perl
todavía se llama "programa"? :-)x#y=sort x==sort y
es 1 carácter más cortoC #, 129 caracteres
Legible:
fuente
using System.Linq;
lugar de espacios de nombres?Ruby, 34 bytes
Usando el esquema IO de la solución Peter Taylors Perl:
fuente
-e:1:in '<main>': undefined method 'chars' for nil:NilClass (NoMethodError)
Programa C, 118
fuente
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");}
eso son 108 caracteres. Muy importante, suc
truco de inicialización todavía está empleado.Perl, 58 bytes
(programa completo, a diferencia de la otra respuesta de Perl que es solo una función)
49 como una función
fuente
"
verdadero y falso, ya que sin usar estricto / advertencias, una palabra sin formato es una cadena.($c,$d)=map{[sort split//]}@ARGV;exit("@$c"ne"@$d")
(51 caracteres) para que pueda tomar argumentos de la línea de comando y usar los códigos de salida de la línea de comando. Sería 48 caracteres retenidos<>
con una entrada de varias líneas.Clojure - 23 caracteres
Como una función anónima:
Ejemplo de caso de prueba:
fuente
JavaScript
Basado en la solución de @ zzzzBov.
Comparación, 65 caracteres (40 sin función)
Comparador, 43 caracteres
fuente
+""
para coaccionar a la cadena.C ++ (104 caracteres no ws)
De acuerdo con el tipo de conteo. Nota: Asume cadenas de la misma longitud, lo que parece estar implícito (aunque no declarado) en la pregunta.
fuente
i=123;while(i&&u[--i]);return!i;
PHP (línea de comando, 87 caracteres)
fuente
Javascript
Una versión (muy) un poco más corta de la solución de @ zzzzBov, que usa en
.join()
lugar del boxeo String:Similar:
fuente
Clojure REPL 41 caracteres
fuente
Java
(¡el idioma favorito de todos aparentemente!)
173 caracteres:
(No imprime char de nueva línea para guardar 2 caracteres de println)
Compilar y ejecutar:
Me encanta ver uno más corto ...
fuente
java.util.Arrays x=null;
y usando enx.
lugar 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 ) Y al convertirlo a Java 8,class g{public static void main
podría serlointerface g{static void main
también, pero supongo que Java 8 no fue Aún no ha llegado en 2011, por lo que mantenerclass
también está bien. ; psed, 45 caracteres
¡Incluso es posible en mi favorito
sed
! ¡Solo una expresión regular para resolver el anagrama ! Solo sigue quitando las letras correspondientes:(para ser invocado con
-nE
)Perl, 48
Para ser invocado con
-p
.Función Perl, 39
fuente
APL, 2 caracteres
Esta es la función Multiset Match de Nars2000 , una de las implementaciones de APL de vanguardia. Cuando se aplica a cadenas, calcula exactamente la función requerida:
fuente
⍦
símbolo, lo cual dudo.05AB1E ,
64 bytes (no competitivos)Pruébalo en línea!
Esto tomó un tiempo debido a las dificultades de entrada. Golfed down debido al pop.
Explicación:
fuente
Perl,
7775 caracteresLa E / S del problema no está bien especificada; esto lee dos líneas de stdin y genera verdadero o falso en stdout.
(Gracias a Tim por 77 -> 75)
fuente
$a=;
? Además, puede omitir los parenssort
y el espacio despuésprint
.Perl, 62 bytes
Esta función toma las cadenas como argumentos y devuelve verdadero o falso.
Almacena los valores ASCII en una matriz y comprueba si se iguala. Incrementos para la primera palabra y decrementos para la segunda palabra.
fuente
Python 3,
107977664Obviamente, esto puede acortarse si no tomamos las palabras del OP literalmente y en minúsculas "verdadero" y "falso" ...
fuente
;s=sorted
a la primera línea y luego reemplaza las dos instancias desorted
cons
en la segunda línea. Debería guardar ... 3 caracteres?Python, 32 bytes
fuente
Bash, 88 caracteres
fuente
R , 54 bytes
Pruébalo en línea!
fuente
utf8ToInt
y su reverso tiende a hacer una división de cadena más corta que las funciones convencionales.Scala en REPL (32)
Función Scala (43)
Programa Scala (61)
Estos aprovechan una característica ordenada de Scala por la cual una Cadena también se puede tratar como una secuencia de caracteres (
Seq
), con todas las operacionesSeq
disponibles.fuente
APL - 13 caracteres
Llame así:
En el último ejemplo,
'a'
representa un solo carácter, y el prefijo,
lo convertirá en una cadena.fuente
Java (134 bytes)
Esto hace una matriz para contar la cantidad de veces que aparece cada letra, y luego compara las matrices para verificar si son iguales.
fuente
(c[0], c[1])
yfor (int i=0;
.JavaScript, 41
Función de comparación (41) :
Función de comparación (21) :
Función de comparación (48):
Función de comparación (78):
Asume
String
tienesplit
yArray
tienesort
.fuente
c=>d=>(a=b=>''+[...b].sort())(c)==a(d)