last day (64 days later) » 

2:52 PM
Buenas ^^
 
No fue la intención!!!! Para nada!!!! Al contrario, yo estaba con una sonrisa de ver una buena pregunta
Sabés lo difícil que es encontrar una buena pregunta de regex?
 
@Mariano se que no es con mala intención. agradezco la publicacion. no la habia leido .
 
Hasta te diría que últimamente le dedico mucho tiempo a las no tan buenas
Esto es lo que tenía escrito cuando apareció el cartel de eliminada:
La lógica para obtener las coincidencias solapadas es utilizando una inspección (*lookahead*) con un grupo adentro, de modo que no cosuma caracteres, pero aún así capture el texto. Esto está explicado en detalle en es.stackoverflow.com/q/53129/127.

    (?=(\d\D*\d))

Para verificar que haya exactamente 3 signos de interrogación entre cada uno de los 2 dígitos, buscamos que se repita 3 veces `[^\d?]*\?`:

    \d(?:[^\d?]*\?){3}\D*\d

Ahora bien, podríamos buscar las parejas que coinciden con `1.*?9`, `2.*?8`, etc. Sin embargo, esto lo convertiría en un regex demasiado tedioso. Para 
 
Perdona el cortarte la respuesta :/ Además, necesito no solo sacar las que tiene 3 "?" exactas si no tambien las que cumplen la caracteristica de "pareja" para que si hay parejas que no tienen 3, devolver false. antes cogia solo las que exclusivamente tenian 3 y fallaba muchos test
y para más tediosidad adivina la longitud maxima que tiene que tener el codigo haciendo todo eso hahah 102 caracteres!
 
@lois6b eso venía a continuación: un if (m[2]+m[3]==10), pero por fuera del regex
 
2:58 PM
mira el codigo que tenia : `sum10=s=> {a=[],r=/(\d)(?:[a-z ]*\?[a-z ]*){3}(\d)/g
while(m=r.exec(s)){m.forEach((m,g)=>g>0?a.push(+m):0)}return!!(a.length&&a.reduce((t,e)=>t+=e)/(a.length/2)==10)
}`
HAHAHAH intentando ocupar pocos caracteres
para cada grupo, lo meto en un array y luego sumo todo y divido entre la mitad de la longitud para ver que todos los pares suman 10
pero claro , necesito meter los pares que no encuentra mi regex y ademas si alguna pareja tiene <> 3 x"?" devolver falso
 
@lois6b creo que es fácilmente editable a "leí esta respuesta, pero aún me cuesta ver el cómo implementarlo"
 
@Mariano ^^' y ahora no seria mentira
 
O ni siquiera eso... yo no creí que fuera duplicada... sólo una parte no la hace duplicada
 
he intentado poner el "?=" al rededor de toda la expresion sin mucha aclaracion hahah
 
Lo que sí, agregaría el resultado esperado (no me quedaba del todo claro si esperás un array, imprimirlos, o qué)
(o si da igual)
 
3:05 PM
@Mariano entiendo ..lo que intento que salga del regex son todas las coincidencias para luego en el while meter en el array los valores de los grupos de captura (aquellos que tengan 3 "?" en medio.
aunque no se si es lo más optimo para el reto ..
porque pasar de 160 caracteres + los que ocupe la parte de la solucion que falta ... bajar eso hasta 102 va a costar xD
pero primero quiero resolverlo aunque ocupe más caracteres
con el positive lookahead salen todos los grupos que necesito , pero falta el full match
que sea el que mire cuantas "?" tiene.. o quizá deberia hacer 2 regex.. una que coja solo las que tienen exactamente 3 y luego una que detecte si hay al menos 1 par sin 3 "?"...
y usar la segunda regex como "si hay match, return false"
 
@lois6b un grupo más, alrededor de todo... y no veo el por qué de {1,} en vez de {3}
 
@Mariano el grupo alrededor de todo no muestra nada en full match . el {1,} es por lo que te digo de hacerlo todo en una regex
 
@lois6b en full match vas a tener un texto vacío, pero en match[1] vas a tener el texto que estás buscando
Es la única forma de que coincida con textos solapados
si estuviese todo en el fullmatch, significa que ya consumió esos caracteres, entonces no podría usarlos de nuevo
 
@Mariano aah
 
Para tu regex, lo llevaría a algo como \d(?=(?:[a-z ]*\?){3}[a-z ]*(\d))
 
3:17 PM
@Mariano con el \d fuera? el reguex101 no me da el resultado esperado
 
ah,, jaja... me adelanté un paso :-)
 
para este problema en particular , tiene que haber otra manera que con positive lookahead ya que me está dando timeout
y si, la pregunta era duplicada.. porque realmente el "?=" lo resuelve. ahora el problema es el resto xD
 
El timeout te da por...
2
Q: ¿Por qué hay que evitar un loop infinito con expresiones regulares incrementando RegExp.lastIndex?

MarianoEsta es la forma recomendada de obtener todas las coincidencias y capturas de una expresión regular en JavaScript, en donde el resultado puede ser una cadena vacía: const texto = "ab-cde", regex = /(?=(\w{2}))/g; let match; while ((match = regex.exec(texto)) !== null) { if ...

(por eso es que ya estaba mandando el \d para afuera, para acortar el código)
 
@Mariano ahh cierto v.v hahah pues más código
 
Tené en cuenta que todavía no tengo la respuesta a tu pregunta... estaba pensándola mientras escribía :-)
Es decir, la tengo, pero no del todo llevada a código
En eso estaba
 
3:22 PM
@Mariano pero el codigo JS no es parte de la pregunta
 
¿Por qué no? Estaba divertido
 
@Mariano hahaha editaré con mi codigo actual y el algoritmo que tenia pensado para añadir los grupos encontrados
pero añadiendo el"?=" a mi pregunta, la duda ya cambia completamente
 
3:36 PM
>! había spoilers en chat?
 
@Mariano creo que no
 
@lois6b Esta es mi primera aproximación: jsfiddle.net/marianom/m24bwm4s
 
@Mariano funciona muy bien. en esa comprobacion de la suma si fuera distinto de 10, devolveria false a la funcion global
ahora, o cambio el {3} por {1,} o creo otra reguex para que detecte la existencia de "1?asfa2" (por ejemplo)
ya que es un par valido pero no tiene exactamente 3 dentro y eso hace que devuelva false tambien
 
@lois6b todavía no vi cómo devolver el false global si no hay ninguna pareja... ya llegaré a esa parte
 
@Mariano eso es la longitud de array a no ?
 
3:45 PM
@lois6b es que recién ahora estoy leyendo el ejercicio :-)
 
@Mariano ^^'
 
pensé que había que devolver TODO, no solamente true/false
 
@Mariano Aprovecho para decir que la extensión del Timeline no funciona.
 
@ArtEze sale abajo de la pagina
(@Mariano te puse un comentario en la pagina de la extnsion del Chrome store)
 
@lois6b @ArtEze sí... parece que cambiaron el HTML de SO... tengo que buscar algún momento para corregirlo
 
3:48 PM
@Mariano sin prisa ^^ (por mi parte hehe )
 
ctrl + click les abre el timeline en nueva pestaña :-/
eso sigue funcionando :-(
 
@Mariano Estos días aprendí a usar querySelector, la verdad me parece genial, mucho más fácil que estar con getElementsBy....
 
@ArtEze y tanto hahah
puedes hacer muchas peripecias
 
@Mariano Bien, funciona, se ve el timeline... Pero no lo decía por eso... Me gustaba la estrellita en las publicaciones propias.
 
@ArtEze HAHAHA
 
4:01 PM
@ArtEze jajaja... desarrollado especialmente a pedido tuyo... ya le voy a meter un par de horas a arreglarlo... el tema es que se dejen de hacer cambios en las páginas así no trabajo para que se vuelva a romper
 
@Mariano Genial... Sí, o buscar alguna inteligencia que permita reconocer los elementos, sin importar los cambios que hagan.
 
@ArtEze imposible!!!
 
@Mariano Entiendo.
 
@mariano, mira este test: "npwlr8vrnjzdxo5? t?gj?5oevfdphffk9msn?fp?f?1jaltv1bsh?p??d9 kyz xvizc8aa?j??ju?2kdg?j??8"
deberia dar false porque 8aa?j??ju?2 tiene 4 "?"
por eso tenia antes el {1,}. cogemos todo y luego se comprueba que tenga 3 exactos xD
 
@lois6b me da bien... pero estoy arreglando algunos errores que metí no sé muy bien por qué...
 
4:19 PM
Nunca hice estas cosas de golf!!! primero que hago
 
el unico que me esta fallando es 1xx9???9
espera false ... por que?
ah mierda claro, no suma 10
es cosa de este if if (10 == m[0] | 0 + m[3])
sum10=s=> { let r = /\d(?=((\D*?\?){1,}[^\d?]*(\d)))/g,
m, a = []

console.log(s)

while (m = r.exec(s)) {
if (10 == +m[0] + +m[3]) a.push(m[0] + m[1])
}

if(a.length == 0) return false


return a.filter(
x => x.split("").reduce(
(x, y) => x += (y == "?" ? 1 : 0), 0) !=3).length ==0

}
con ese codigo funciona todo menos el limite de caracteres
ahora a refactorizar xD
 
4:35 PM
@lois6b dónde está definido Test.assertEquals() ?
 
@Mariano en el panel bajo solucion:
Test.assertEquals(sum10("arrb6???4xxbl5???eee5abc"), true)
Test.assertEquals(sum10("abc6? ?4"), false)
Test.assertEquals(sum10("no digit no pair"), false)
Test.assertEquals(sum10("1 digit still no pair"), false)
Test.assertEquals(sum10("2 digits but no question marks still no pair 8"), false)
Test.assertEquals(sum10("1"), false)
Test.assertEquals(sum10("1???9"), true)
Test.assertEquals(sum10("1????9"), false)
Test.assertEquals(sum10("1??????9"), false)
Test.assertEquals(sum10("1x?x?x?9"), true)
 
@lois6b claro, pero la función en sí, así la pruebo por mi cuenta
vale comparar param1 == param2 ??
 
@Mariano ah, es propia de JS
si
 
Uncaught ReferenceError: Test is not defined
    at <anonymous>:1:1
(no me suena que sea propia de JS)
123 caracteres
 
@Mariano :OOOOOO yo lo minimo 216.
 
4:43 PM
@lois6b igual todavía me fallan algunos.... revisando
 
@Mariano a mi solo me falta el tema de los 101 caracteres
sum10=s=>{let r=/\d(?=((\D*?\?){1,}[^\d?]*(\d)))/g,m,a=[];while(m=r.exec(s))10==+m[0]+ +m[3]?a.push(m[0]+m[1]):0
if(!a.length )return !1
return a.filter(x=>x.split("").reduce((x,y)=>x+=(y=="?"?1:0),0)!=3).length==0}
 
jajaja
 
voy a marchar a casa. luego lo miro hahaha
Muchas gracias por la ayuda Mariano :P mañana veré si planteo la pregunta de otro modo para recuperarla o no. el tema que tenia de "?=" era claramente duplicado heheh
En cuanto lo resuelva podremls ver como lo hicieron los 10 que lo resolvieron antes xD
Y posiblemente me dé una palmada en la frente por alguna obviedad obviada
 
ahhhhhhhh tengo que leer mejor!!!
Pensé que 1xx2???8 tenía que ser falso
 
Hahahaha
 
4:52 PM
quizás con split.... pensando
@lois6b Si te interesa, esto es lo que tengo:
sum10=t=>{a=false;r=/\D*(\d)(?=([^\d?]*?\?){3}[^?]*?(\d))/gy;while(m=r.exec(t)){a=true;if(10!=~~m[1]+~~m[3])return !a}return a}
1 true
2 true
3 true
4 true
5 true
6 true
7 true
8 true
9 true
10 true
11 true
12 true
13 true
14 true
15 true
16 true
17 false
18 false
19 true
20 true
el 17 y 18 me mataron... mala interpretación del texto
 
False puede ser ! 1
 
121 caracteres
 
5:34 PM
@lois6b LO TENGO!!!
107 caracteres
 
@Mariano :O
A ver?
 
sum10=t=>/^\w*-[-\w]*$/.test(t.replace(/(\d)([^\d?]*\?){3}[^\d?]*(?=(\d))/g,(m,a,b,c)=>(10!=~~a+~~c?b:-1)))
 
Wow!!!! Poco más se puede reducir
 
En la última función, por que tienes m?
 
5:39 PM
@lois6b porque el replace pasa esos parámetros
match, grupo 1, grupo 2, grupo 3
 
Ohh
 
Lo pongo en castelllano... dame unos minutos
 
Más o menos lo sigo. Aunque ahora no tengo mucha cabeza para pensar xD
La gata en celo, los de arriba en obras y voy a ver la segunda temporada de Jessica Jones
 
sum10=t=>{

    resultado = t.replace(
        /(\d)([^\d?]*\?){3}[^\d?]*(?=(\d))/g,
        function(m,digito1,signo,digito2){
            return (10!=~~digito1+~~digito2 ? signo : -1 );
        }
    );

    return/^\w*-[-\w]*$/.test(resultado);
}
El truco es que si no suma 10, en el replace vuelvo a insertar el signo... y si suma 10, inserto "-1"
Al final, reviso con otro regex que tenga un "-", y que no tenga un "?" (porque el "?" no coincide con \w)
Pero se puede seguir acortando...
sum10=t=>/^\w*_\w*$/.test(t.replace(/(\d)([^\d?]*\?){3}[^\d?]*(?=(\d))/g,(m,a,b,c)=>(10!=~~a+~~c?b:'_')))
105 caracteres
 
Increíble hahah
 
5:49 PM
¿dónde veo cuántos caracteres tiene el que va ganando?
 
@Mariano esto no es una competición de code golf, aunque este kata en particular pide 101 caracteres máximo. Una vez dado a submit y todo OK, muestra las otras soluciones
 
Y no sé si hay una forma más corta de convertir en números y sumar. Usé ~~a+~~c
 
Ah
Con +a+ +c vale
Un carácter menos
 
claaaaaaro!!!
104 caracteres
 
Y creo que a- -c
Que es más corto
Este ni estoy seguro
 
5:52 PM
Funciona
103 caracteres
 
:D
Ay si la función no se llamase sum 10... XD
Eh! Creo que te sobran dos paréntesis
 
No, esperá... hay un test que me falla
 
Después del último => no hace falta
 
Es cierto!
Pero ahora tengo que ver ese error
 
Mh... Salen test random los de 100
Los de 10 son siempre iguales
 
5:58 PM
ahhhhhh me olvidé del espacio :-(
 
Oh y se me ocurre una idea.
Nada nada. No era nada xD
 
volví a 105
sum10=t=>/^[^?]*-[^?]*$/.test(t.replace(/(\d)([^\d?]*\?){3}[^\d?]*(?=(\d))/g,(m,a,b,c)=>10!=+a+ +c?b:-1))
ahhh el menos de nuevo
 
El a- -c no valía?
 
si si si, lo volví atrás intentando debuggear
sum10=t=>/^[^?]*-[^?]*$/.test(t.replace(/(\d)([^\d?]*\?){3}[^\d?]*(?=(\d))/g,(m,a,b,c)=>10!=a- -c?b:-1))
104
 
Uff tan cerca y tan lejos xD
 
6:03 PM
@lois6b el nombre de la función se cuenta, no?
 
Si y no se puede cambiar, a menos que los test sean editable
El - 1 del final lo usas como separador?
 
@lois6b claro, al final estoy buscando que haya un "-"
/^[^?]*-[^?]*$/.test(   resultado del reemplazo   )
así verifico que al menos haya habido un par... y si no hay un par, da falso
 
Pa ahorrarte unas comillas... Claro
 
:-)
 
Vaya cabeza tienes, Mariano
 
6:11 PM
... pero todavía no llegué a 101
 
Tiempo al tiempo ;)
 
quizás acortando [^\d?]
no se me ocurre
 
6:32 PM
/^[^?]*-[^?]*$/ es lo mismo que /^(?!.*\?).*-/
103
Elimino a a y uso m[0]
sum10=s=>/^(?!.*\?).*-/.test(s.replace(/\d([^\d?]*\?){3}[^\d?]*(?=(\d))/g,(m,b,c)=>10!=m[0]- -c?b:-1))
102
@lois6b se puede una solución inválida pero que pasa todas las pruebas??
 
@Mariano no... El número de caracteres es un test... V.v
Espera, invalida?
 
@lois6b no, me refiero a una solución que pasa todos los tests, pero que si le pongo otro test fallaría
 
Si pasa los de la página aunque no pase todos los posibles pues bien. Hahah
Son 110 test creo
 
ahhhhh.... eso me lo dijiste y no me di cuenta
yo sólo estaba comparando contra los 20 básicos... perdón, estaba con la cabeza en otro lado claramente
había encontrado una forma de pasar los 20, no los 120
 
6:50 PM
@Mariano no entiendo esto
Lo de a y m[0]
 
antes estaba usando el grupo1 para el primer dígito
a era el primer grupo
eliminé los paréntesis, no uso más ese grupo, tampoco tengo que pasar ",a" como parámetro de replace()
Y uso m (el match global)... m[0] me da el primer caracter (que es ese primer dígito)
 
Ahhhh
 
(\d) ----> \d ::: -2 caracteres
elimino ,a ::: -2 caracteres
m -----> m[0] ::: +3 caracteres
-1 en total
 
Hahaha muy gráfico ^^
 
falta 1 maldito caracter
 
6:54 PM
El peor xD
 
Estoy cerca, estoy probando algo como ~(m[0]- -c-10) al final, pero no me sale
10-m[0]-c?'?':-1
@lois6b LISTO!!!!!
El de sin regex parece una maquina de Turing
101 caracteres
 
@Mariano tiempo al tiempo heheh
Yo no lo habría logrado.
Que, te entró el gusanillo de code golf también? XD es increíble las repuestas de ese sitio... Pero no hay quien las entienda hahahaha
 
7:13 PM
@lois6b es que para jugar a eso hace falta meterse en lenguajes esotéricos... este me gustó porque tenía regex
wait a min....
me olvidé de reemplazar algo
 
Ya hay 11 soluciones. Enhorabuena, mariano. Luego miro a ver como lo hicieron los demás... Si es que puedo usar la respuesta ^^'
@Mariano siempre puedes usar el lenguaje que quieras... Aunque probablemente no ganes en el global de lenguajes
 
Oh dios. Un tramposo
99 caracteres
 
Wtf ahora no paras :O
 
No, hasta ahí llego.... es lo mismo que tenía antes pero me había olvidado de reemplazar una parte que usé para pruebas
El '?' por b al final
 
Amazing
 
7:19 PM
@lois6b más vale, usala!... lo que no tengo claro es qué tengo que comentar o cómo
 
@Mariano comentar?
 
me dice que la comente para enviarla
(ahora me hago un usuario y la mando.... quiero ver las otras respuestas)
 
:| te registraste?
 
no
 
Aah eso.
 
7:22 PM
@lois6b me imagino que no hay problema con que enviemos lo mismo
 
@Mariano no. Hay muchas katas sencillas que cientos de personas escriben exactamente lo mismo
Intentaré mañana bajar de 216 a ver cuanto consigo
 
@lois6b El problema es que me está costando más hacerme un usuario que el golf de recién :-/
 
@Mariano Hahaha y eso?
 
ni idea, se cerró la ventana de Chrome, lo mismo en Firefox, ahora estoy probando desde el celu
 
8:16 PM
@lois6b 92 caracteres la mejor solución
está muy bien hecha
quedé 7mo
 
Woow. Voy a ver
Un tramposo
Hahahaha
Elbayas
Y una sin regex!
El de sin regex parece una maquina de Turing
Con estados. Igual que el esquema que crea debuggex
 
8:48 PM
jaja.. sí, me costó un poco seguir las soluciones... ya estoy quemado
pero muy interesantes la mayoría
y me aprendí un par de trucos de paso
 
Me alegra que encontraras el reto Hahaha
Aunque poniendo la etiqueta regex, no hay nada que se te escape
 
@lois6b De hecho, la mejor solución es mucho más interesante de lo que iba a responderte... conviene claramente eliminar todo lo que no sean dígitos ni "?" y revisar ese string
se hace mucho más sencillo
 
Uf y como no se nos pasó por la cabeza? Hahah estábamos demasiado enfocados en esa manera? XD
 
Pero el truco que usó, con (?=(\?+.)), con el punto para cualquier caracter, jamás se me hubiese ocurrido
No estoy acostumbrado a pensar en función de menos caracteres...
Un mundo nuevo para mí
Demasiada mania acumulada en buscar eficiencia/código limpio
 
9:06 PM
Esa es muy buena
 
9:33 PM
@lois6b completamente quemado por el día de hoy... avisame si recuperás la pregunta (que no me llega como notificación)... Yo aún creo que está buena y se le puede sacar jugo... y si no te dan ganas, tampoco estaría mal recuperarla y marcarla como duplicado (y recuperar esos 5 votos :-))
 
Na, los votos lo de menos.. A ver si la replanteo para que luzcas con tu respuesta
 
Son temas interesantes, y es difícil verlos... La idea principal puede ser la validación, que viene después. Es decir, solapado + revisar grupos... Lo que no sé es cómo articular eso con una respuesta de codewars, lo opuesto a lo que es una respuesta en el sitio
Esta es otra similar que respondí, si te interesa sacar ideas de temas:
5
A: Perl regular expression (starts with ATG and ends with TAG, TAA, or TGA)

MarianoSince you're dealing with codons here, you probably forgot to mention that the nuclotides in between must be a multiple of 3. Code: my $sequence = 'AATGGTTTCTCCCATCTCTCCATCGGCATAAAAATACAGAATGATCTAACGAA'; # |--------------1-------------| # ...

 
Bueno,la pregunta habla sobre el reto, la respuesta puede estar enfocada a eso igual que una respuesta puede estar enfocada en POO o en otro paradigma
 
Supongo... No sé si alguna vez se discutió el tema de golf/código más corto
Creo que en la publicación de "temática" estaba, pero no sé cómo iba en votos
-3
A: Definición de la temática apropiada para el sitio

Fabián Heredia MontielPreguntas de reto de programacion, como los que se hacen en Code Golf - Stack Exchange. Todos los retos deberan contar con: Una especificacion clara de lo que constituye una respuesta correcta, de tal forma que sea posible decidir indisputablemente si una respuesta es valida o no. Pruebas ...

Puntaje: -3
 
9:54 PM
Lo bueno es que la temática la formamos todos. Si la gente quisiera es algo que se podría probar a q ver que tal. Algo como reto. En Spanish.se hablan de ortografía, de sintaxis y demás pero tienen retos de Word golf en el que intentan reformular una frase con el menor número de caracteres sin perder sentido ni significado
 
Sería en un futuro muy lejano, crear subdominios de este.
 
@lois6b yo fui uno de los que votó a favor de esa temática... el problema son los otros 10 :-)
@ArtEze en respuesta a por qué se rompió el script:
59
Q: Ch-ch-ch-changes: Left nav, responsive design, & themes

Joe FriendCh-ch-ch-changes are coming. As you've hopefully read in our various posts on Teams, we are in the midst of some major work. We're introducing a new product, Teams (née channels), and doing the requisite research and design thinking to get it right. In addition, early on we realized that we have ...

as seen on featured MSE posts!!!
 
@Mariano Perfecto, entonces cambiaron la estructura, pero todavía no pusieron el panel izquierdo.
 
@ArtEze no le presté mucha atención, ni tampoco vi cómo está el html, pero la publicación anterior hablada de que iba a estar sólo para alguien que está en Teams... o sea, supongo que ya está en el tema pero no lo vemos
(pura hipótesis, sin tener claro qué se hizo)
 
@Mariano Bueno, quizás haya un booleano que la active.
 
10:09 PM
ponele
 
Lo busqué, pero no está.
 
 
1 hour later…
11:34 PM
@ArtEze ni me fijé... estaba en un raid de respuestas (7 en 1 hora :-))
Agarré las preguntas de que no veía hace mucho y me puse a responder las últimas
 
Está bien, hay que tener paciencia.
 
@ArtEze hace mucho que no reviso tus respuestas,... la última vez que miré no estabas respondiendo mucho
 
@Mariano La última fue del 23 de Enero.
1
A: Error parsear un Json

ArtEzeDa error al principio porque se está intentando usar el JSON sin que esté descargado completamente. Normalmente se usa una descarga asíncrona, y se le ejecuta una operación llamada callback. Otra manera es hacer un temporizador, que espere tantos segundos y lo intente parsear nuevamente, con un...

Que la respondí porque me dijo Alvaro Montoro.
 

  last day (64 days later) »