Desafío
Dado un conjunto de números de un solo dígito, averigüe si 2 de ellos suman 10 e imprímalos
Ejemplo
Entrada
(1,2,3,4,5,5,6,7)
Esto vuelve ((4,6),(5,5),(3,7))
Entrada
(1,2,3,4,5)
Esto vuelve ()
. ya que solo hay un 5
Entrada
(5,5,5,5,5)
Esto regresa ((5,5),(5,5))
ya que hay un número impar de 5s y cada 5 se puede usar solo una vez
Reglas
¡Estas son las reglas!
- Suponga que la entrada solo será una matriz sin clasificar de enteros positivos de un solo dígito
- Cada número se emparejará solo una vez, lo que significa que si hay tres 5, solo formará 1 par (5,5). Si hay (3,3,7) solo formará 1 par (3,7)
- Para la entrada: puede usar cualquier tipo de paréntesis (o falta) siempre y cuando los lectores puedan decir que la entrada es un conjunto único de números.
- Para la salida: debe verse como una matriz de pares. Donde la matriz tiene la misma forma que su entrada (si no usó ningún paréntesis en su entrada, debe usar algún tipo de símbolos para que cualquier lector pueda decir que son pares en una matriz)
Casos de prueba
(1,2,3,4,5,5,6,7) =((4,6),(5,5),(3,7))
(1,2,3,4,5) = ()
(5,5,5,5,5) = ((5,5),(5,5))
(1,2,3,3,4,5,6,7)=((3,7),(4,6))
(9,8,7,6,4,4,3,1)=((9,1),(7,3),(6,4))
¡Buena suerte!
La shorter
respuesta es, ¡mejor!
Edición 1: actualice las reglas y las pruebas de los comentarios
Edición 2: actualizar las reglas para definir el formato de entrada.
Edición 3: actualizar las reglas para definir el formato de salida. tratando de ser lo más complaciente posible.
(5,5)
para el caso de prueba final?(1,2,3,3,4,5,6,7)
1,2,3,4,5,5,6,7
?Respuestas:
GolfScript,
454237 caracteresEl nuevo enfoque también toma matrices con un solo elemento como entrada. Por otra parte, es varios caracteres más cortos.
Versión previa:
El algoritmo utilizado en este código se describe a continuación:
El código espera una matriz de al menos dos dígitos en STDIN.
Ejemplos (ver en línea ):
fuente
Python 2.7 (70)
Casos de prueba:
Un byte extra para el bonito paréntesis.
fuente
<?$a=fgetcsv(STDIN);while($a){$b=10-array_pop($a);if($a[$b]){unset($a[$b]);echo"($b,",10-$b,")";}}
Javascript,
18818318115314112112311210598caracteresJugar al golf en JS es algo difícil, pero solo quería tener una fiesta sobre este problema, así que aquí está el código:
Entrada: ej
[1,2,3,3,4,5,6,7]
. Salida, por ejemplo,[[4,6],[3,7]]
a la consola.105-> 98: ¡Utilicé el asombroso algoritmo de Daniel para reescribir completamente el código! Vea su respuesta para un algoritmo legible.Completamente desordenado, por lo que se convirtió en 105 caracteres.112-> 105: Inicializado
i
a cero, usó la salida deo.push
setk
(k=a[i]=a[j]=-o.push...
) y la salida registrada a la consola en lugar de alertar para eliminar"["+
y+"]"
ya que la consola ya sale bien.123-> 112: Ahora se eliminaron los corchetes externos en la salida, ya que golfscript puede :) También finalmente se aplicó la sugerencia de eliminación
|=0
.121-> 123: Cambiado
o+="("+p+","+k+"),"
ao.push("("+[p,k]+")")
(agrega 2 caracteres :() e hizoo
una matriz en lugar de una cadena (o=""
->o=[]
). Ahora la salida ya no está mal (como((5,5),(5,5),)
).141-> 121: a partir de ahora asumí que la pregunta significaba que podíamos obtener información en el formato de matriz del lenguaje, que en el caso de JS es
[a,b,c,...]
y hechoo
, la salida "acumula" una cadena en lugar de una matriz (o.push(...),
->o+=...,
).153-> 141: restablezca las entradas de la matriz en lugar de eliminarlas después del uso.
181-> 153: Cambios aplicados a
u=[]
, reorganizados bucles,a[i]
ya[j]
-> temp vars, convertidos si es lógico y convertido a lógico inta[i]|=0
.183-> 181: reemplazado
i<=0
pori+1
y lo mismo paraj
.188-> 183: Colocado
o=[]
dentroprompt()
() y reemplazado;
for(j=i;
confor(j=i-1;
().i==j&&
(¡Gracias mellamokb, Paul Walls y Ryan!)
fuente
i>=0
coni+1
yj>=0
conj+1
para guardar 2 caracteres.u=[]
lugar dex
), reorganicé los bucles para ir de 0 hacia arriba, asignéa[i]
ya[j]
a variables temporales para guardar referencias repetidas, moví algunas inicializaciones de variables a otras declaraciones, convertí laif
lógica a||
lógica encadenada y convertí el int analizando a los más concisosa[i]|=0
, para obtener un ahorro total de 30 caracteres :). Aquí está mi arnés de prueba que demuestra la precisión de la solución: jsfiddle.net/GKUDb/8 , y la solución de trabajo de golf de 151 caracteres: jsfiddle.net/DVtW2 .o+="("+[p,k]+")"
).for(a=eval(prompt(o=[])),i=-1;k=a[j=++i]|=0;)for(;p=a[--j];)k+p-10||(o.push("["+[p,k]+"]"),k=a[i]=a[j]=-1);alert(o)
lo reduce a 115a=eval(prompt(o=[])),i=-1
ena=eval(prompt(i=o=[]))
sin pérdida de fidelidad, durante 3 ahorro de caracteres.J,
545350464544 caracteresUso:
El algoritmo es básicamente:
+/|:(1+i.9)=/
(<.|.)
(entonces 1 y 9, 2 y 8, etc.)1 9
par) y suelte todo después de los primeros cinco pares<.4({.,-:@{::)
implementa los dos pasos anteriores)-
el número(>:,.9&-)I.
fuente
Pitón (142)
La entrada debe darse entre corchetes en lugar de corchetes. http://ideone.com/p2QR11
Algoritmo:
Si se permiten resultados con malformaciones graves (90) : http://ideone.com/GR762f
fuente
C,
142,138, 124Pruebas:
Notas de implementación:
fuente
Perl 52
Prueba:
Y hay un código comentado sin golf:
Tal vez las explicaciones se vean como pidgin francés (no soy un escritor nativo de inglés), así que si alguien quiere editarlo y hacerlo más comprensible, hágalo.
fuente
Javascript -
131129125 caracteresSupongo que el orden de y en las matrices de resultados anidados no es obligatorio :)
Casos de prueba evaluados:
Editar : como la descripción del problema dice 'Array', estamos hablando de la notación específica del lenguaje de una matriz, ¿verdad?
fuente
Mathematica 70
Uso
fuente
PostScript (46)
Esto usa tokens binarios codificados a mano, por lo tanto, aquí hay un hexdump:
Me subido el archivo binario si quieres probarlo.
Esto espera que los números estén en la pila. Pueden anteponerse al código o suministrarse en la línea de comando, por ejemplo, cuando se usa Ghostscript de la siguiente manera:
Si insiste en la sintaxis de matriz para la entrada, esto requiere dos tokens más (
aload pop
) al principio. En tokens binarios, esto es cuatro bytes más.Sin golf y comentado:
fuente
Python 84
Requiere entrada entre paréntesis en lugar de paréntesis.
Para obtener más o menos la misma respuesta, mejor ve la respuesta de Daniel .
fuente
PHP
150149148146142-> 140Usar con PHP CLI.
Entrada:
1,2,3,4,5,5,6,7
Salida:
(3,7)(4,6)(5,5)
Sin golf:
fuente
SED, 112 caracteres
Probablemente algo más simple que las otras soluciones.
fuente
Perl, 72 con la
-p
banderafuente
-p
debería contarse ya que el equivalente agregaríaLINE: while (<ARGV>){...}continue{die "-p destination: $!\n" unless print $_}
#!perl -p
plus newline.