Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




RubberDuck

#59430 Hasta donde tengo entendido (la jerga aún no la controlo), es un IDE propio de Harvard, que tiene módulos instalados para facilitar la ejecución de los ejercicios. Va sobre VS Code, el enlace que te dan es https://cs50.dev

Lo de clang lo introdujeron el otro día, en la clase 2 (esta que estoy haciendo), pero muy por encima, para que tengamos en cuenta que nos estamos ahorrando comandos gracias a que han simplificado el sistema para las clases.

1 respuesta
desu

#59431 Te recomiendo que uses esta pagina para ver las funciones disponibles en la librería: https://manual.cs50.io/#cs50.h

por ejemplo, en lugar de:

        if (sourcetext[i] == '.')

podrias usar estas funciones:

Si usas el curso de Hardvard no creo que tengas que tirar mucho del libro... xq el curso estará hecho basandose en el para empezar.

1 1 respuesta
RubberDuck

#59432 Sí, lo tengo en marcadores, junto con la guía de estilo, pero sí es cierto que no me he puesto a estudiarla detenidamente para ver qué funciones me pueden ahorrar código y tiempo.

Bueno, la última parte del código ha funcionado con mi clunky code, poco a poco iré estudiando más para ir optimizándolo. Gracias, desu, después de comer me leo tu código, que tengo la glucosa bajo mínimos ya...

2 respuestas
desu

#59433 me he instalado el cs50.h en local, si tienes cualquier duda en algun ejercicio dime y lo tiro.

1 1 respuesta
RubberDuck

#59434 Vale, pero no me gusta ocupar de más a la gente con cosas que tarde o temprano acabaré resolviendo (como la que puse). Además me interesa acostumbrar el cerebro a la frustración de toparme con un muro durante un buen tiempo, que no tengo costumbre ya... Ya si veo que es algo que me es imposible entender tras mirarlo desde todos los ángulos, lo pongo por aquí. Pero gracias, crack!

1 respuesta
r2d2rigo

#59433 tienes una carpeta de marcadores para big black cocks? Ay piraton.

3
desu

#59435 q equivocado estas fpero, si alguien te resuelve algo es para humillarte y recordarte tu sitio

#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>

typedef struct text_stats {
    int letters;
    int words;
    int sentences;
} text_stats;

text_stats text_stats_calc(size_t text_length, const string text);
void print_text_stats(const text_stats *stats);
float avg_letters(const text_stats *stats);
float avg_sentences(const text_stats *stats);
float CLindex(float avgletters, float avgsentences);
void test_text_stats_calc(void);

text_stats text_stats_calc(size_t text_length, const string text) {
    if (text_length == 0) {
        return (text_stats) {0, 0, 0};
    }

text_stats stats = {.letters = 0, .words = 1, .sentences = 0}; 

for (size_t i = 0; i < text_length; i++) {
    if (isalpha(text[i])) {
        stats.letters++;
    } else if (isspace(text[i])) {
        stats.words++;
    // TODO what if text is: `hello!!! how are you??` how many sentences
    } else if (text[i] == '.' || text[i] == '!' || text[i] == '?') {
        stats.sentences++;
    }
}

// Adjust word count if text ends with space
// TODO what if text is: `word     ` how many words do we need to subtract?
if (isspace(text[text_length - 1])) {
    stats.words--;
}

return stats;
}

void print_text_stats(const text_stats *stats) {
    printf("The text has %i letters, %i words, and %i sentences.\n", 
           stats->letters, stats->words, stats->sentences);
}

float avg_letters(const text_stats *stats) {
    return ((float) stats->letters / (float) stats->words) * 100;
}

float avg_sentences(const text_stats *stats) {
    return ((float) stats->sentences / (float) stats->words) * 100;
}

float CLindex(float avgletters, float avgsentences) {
    return (0.0588 * avgletters) - 0.296 * avgsentences - 15.8;
}

void test_text_stats_calc(void) {
    // Test 1: Empty string
    {
        const string text = "";
        text_stats stats = text_stats_calc(strlen(text), text);
        assert(stats.letters == 0);
        assert(stats.words == 0);
        assert(stats.sentences == 0);
    }

// Test 2: Simple sentence
{
    const string text = "Hello, world!";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 10);
    assert(stats.words == 2);
    assert(stats.sentences == 1);
}

// Test 3: Multiple sentences
{
    const string text = "This is a test. It has three sentences. Right?";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 35);
    assert(stats.words == 9);
    assert(stats.sentences == 3);
}

// Test 4: Text with multiple spaces
{
    const string text = "Extra   spaces   between   words.";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 21);
    assert(stats.words == 4);
    assert(stats.sentences == 1);
}

printf("All tests passed!\n");
}

int main(void) {
    test_text_stats_calc();

const string text = "some text goes here. we want to count the words. and so on. and so forth.";
printf("%s\n", text);

const size_t text_length = strlen(text);
const text_stats stats = text_stats_calc(text_length, text);
print_text_stats(&stats);

const float avgletters = avg_letters(&stats);
printf("The text has an average of has %f letters per 100 words.\n", avgletters);

const float avgsentences = avg_sentences(&stats);
printf("The text has an average of has %f sentences per 100 words.\n", avgsentences);

const float clindex = CLindex(avgletters, avgsentences);
printf("The text has a Coleman-Liau index of %f.\n", clindex);
}

toma anda, hazme trims y normaliza las strings porque tu codigo de mierda no funciona, te he puesto un par de todos y unos tests q petan

2 3 respuestas
RubberDuck

#59437 Ya me siento como en casa, gracias!¡
Iba a decir "la mitad", pero es más lo que no entiendo. No llego ni a fpero :man_shrugging:

1 respuesta
desu

#59438 lleves 2 semanas o 20 años te humillo igual. esto se llama igualdad.

1
RubberDuck
#59428desu:

es igual que:

int letternum = lettercalc(text);
int wordnum = wordcalc(text);
printf("The text has an average of has %f letters per 100 words.\n", avgletters100(letternum, wordnum));

Leído y asimilado, danke.

Lo que estoy viendo con lo que explicas de declarar las variables para no meter dentro de los printf los calls a las funciones lo pensé, porque cada vez se veía más largo y feo, pero como estaba funcionando, lo dejé así de momento, por miedo tocar algo que hiciese que dejase de funcionar. Principalmente mi duda es dónde declarar esas variables, supongo que dentro de main, no?

#59437desu:

toma anda, hazme trims y normaliza las strings porque tu codigo de mierda no funciona, te he puesto un par de todos y unos tests q petan

Ahora me pondré a limpiar el código y a hacer las pruebas, pero todo eso que has hecho de los asserts y demás ni lo voy a tocar, porque no es para mi nivel de retraso y de momento solo me frenaría. Estoy intentando hacerlo todo según la metodología del curso, que es bastante básica y asequible (aunque yo haga que parezca que no).

1 respuesta
Kaledros
#59437desu:

si alguien te resuelve algo es para humillarte y recordarte tu sitio

Dramatización:

3 1 respuesta
RubberDuck

#59441 jajaja, lo bonito de entrar en un nuevo mundo. Memes desconocidos 😍

desu

#59440 declara e inicializa en la misma linea int a = 20;
vs

int a; 
a = 20;

usa const siempre const a = 20; y en los parámetros: float avg_sentences(const text_stats *stats) {

para indexar, while, for loops, el tamaño de un array, vector, string... usa siempre size_t en lugar de int.

cuando pases un array, vector, string a una función, siempre pasa la length: text_stats text_stats_calc(const size_t text_length, const string text);

inicializa las cosas en variables antes de llamarlo a funciones, si

quizás la unica excepcion son los predicados:

 if (isalpha(text[i])) {
            stats.letters++;
        }

vs

 // no se suele hacer esto si es un simple predicado 
 const is_alpha = isalpha(text[I])
 if (is_alpha) {
     stats.letters++;
 }

pero si tienes muchos si puede tener sentido xq se entiende mejor:

const is_true1 = predicate1();
const is_true2 = predicate2();
if (is_true1 && is_true2) ...

ya esta, solo con estos consejos ya programaras en C mejor que el 90% de los estudiantes.

cuando hayas terminado arrays, structs, heap y punteros te pongo las recomendaciones q faltan.

pero vamos, C es un lenguaje muy muy muy fácil.


en linux como curiosidad, la mayoria del codigo no sigue la guía de estilo de declarar+init, sino que declara todo arriba del todo de la función y después lo usa, yo no lo recomiendo.

por ejemplo, me parece un mal estilo para gente que aprende mucho mejor tener todo definido como const y inicializado. de esta manera te paras a pensar que estas haciendo y el codigo no compilara cuando quieres mutar algo.

1 1 respuesta
ManKorR

A cuanto vendes el curso ? Siempre quise ser bootcamper o fpero

Seyriuu

Desucamp, de pajeet a héroe en un plis plas

Wei-Yu

https://www.reddit.com/r/ExperiencedDevs/comments/1fu0e5q/the_hardest_bug_investigation_of_my_career_and/

1 1 respuesta
RubberDuck

#59443 me voy a marcar en favoritos todas tus respuestas para revisitarlas a medida que pueda aprovecharlas más. Gracias, kind humilliator.

#59443desu:

cuando hayas terminado arrays, structs, heap y punteros te pongo las recomendaciones q faltan.

thx

desu

#59446 por estas cosas los bootcampers, físicos y matemáticos de pacotilla no valen para nada.

HeXaN

Hace nueve meses: vuestro proyecto es el más importante.
Hace una semana: sacadlo como esté que vamos a invertir todo en IA generativa.

Mucho han tardado los corpos en unirse a la corriente esta vez.

4 1 respuesta
RubberDuck

Duda. Estoy terminando el ejercicio de ayer, ando con la última función, que solo tiene que coger un float, convertirlo a ceiling e imprimir el valor. Hasta donde tenía entendido, cuando querías que una función solo devolviera un efecto (como algo en printf), la función debía ser de tipo void. Pues la he creado y la he llamado y todo funciona, pero esa función no hace nada, no imprime. Dejo por aquí el código, por si alguien lo ve rápido. La función es finalgrade.

spoiler

Todo el código (aún me falta limpiarlo un poco):

spoiler

EDIT: resuelto, es que estaba definiendo la función en main, en lugar de llamarla, por eso no hacía nada. Excuse my retardedness.

1 respuesta
laZAr0

#59450 Muy minimalista el código. Puede que esté ahí el fallo

Edit: vale que estabas editando xD

1 1 respuesta
RubberDuck

#59451 Sí, el primer spoiler es solo la función que no imprime nada, por ver si era algún fallo en la propia definición de la función. (Edit: ya lo resolví).

Escuchando esto mientras tecleo. Ojito al tema que empieza en el 4:30.

Edit: ya no da error, pero no funciona correctamente, me da resultados diferentes a los esperados. Supongo que se debe a la interpretación de lo que Harvard entiende por "sentence". Voy a investigar un poco, a ver cuál es el problema.

spoiler

Edit: ya he dado con el error. El problema era que estaba usando la función ceil en lugar de round. No sé por qué cojones se me metió en la cabeza que el programa quería que redondease al entero superior más cercano (si es que eso es lo que hace la función ceil). Voy a que chatgpt me explique qué cojones hace realmente la función.

Vale, todo entendido ya. Cuando terminas de resolver estos ejercicios introductorios te quedas un poco con la sensación de "si es que es sencillísimo", pero suputamadre hasta que sale todo como debe...

spoiler
Wei-Yu

#59449 de hecho han tardado tanto que me da que sólo llegan a comerse el hostión xd

1 1 respuesta
HeXaN

#59453 Eso pensamos todos, sí.

RubberDuck

¿Pensáis que la IA se va a cargar el trabajo de programador, si no a corto/medio plazo, cuando salgan los ordenadores cuánticos?

Konishi

No hay IA que arregle las bazofias que me he encontrado hoy en el curro

1
Fyn4r

Los ordenadores cuánticos son muy pre-covid, supong ya no amenazan el futuro de la criptografía ni el fin de los tiempos

2 1 respuesta
desu

#59457 existen algoritmos cuánticos analfabeto. el hecho de que sea cuántico no influye en p vs np.

1 respuesta
Soltrac

#59458 Aprovechando para soltar el unrelated para insultar a alguien, muy típico de ti :)

1 respuesta
desu

#59459 insultar de que? describir a alguien no es un insulto.


System design question:

Arena tournaments

Clients connected to a tournament page request new data about the tournament every 4s or so, with XHR HTTP requests.

Each player requests information about a different leaderboard page: the one they're in.

When a tournament has 17k connected clients, like it happened during the Agadmator Arena, then lila has to serve about 5k tournament update requests per second.

It's too much. Even tho most of the data is cached by lila, these requests are authenticated and have a cost. lila usually serves at most 2k requests per second, and is not designed to suddenly serve 5k/s more.

So, the plan is to have a new service handle these tournament update requests. It gets info about ongoing tournaments from lila, and propagates it to the clients.

Que opinais de esta solución? Que problema veis y como lo arreglaríais vosotros?

2 respuestas