Autor Tema: Advent of Code

0 Usuarios y 1 Visitante están viendo este tema.

08 Diciembre, 2021, 09:55 pm
Respuesta #20

C. Enrique B.

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 566
  • País: es
  • Karma: +0/-0
    • Mi página en WikiPedia.
.
Mmm ... creo que hace pocos días leí algo sobre una pestigri ... prestigri ... pestigiri ... ... ... importante competición internacional, de Programación ... que ganó un equipo ruso ... y allí estaba todo el mundo, MIT, etc.
____________________


P.D.: No quiero ser impreciso; hay que aclarar que en dicha competición no estaba Rincón Informático, y eso restaba algo de calidad media ... pero aun así se reunió una buena nómina de equipos.
.
-- FALTAN LAS MUJERES en muchos ámbitos sociales. Yo no me siento perteneciente al bando masculino; soy del bando de las personas. Chicas, manifestáos; no concibo charlar sobre un tema si no estáis vosotras: es impropio, casi absurdo.

09 Diciembre, 2021, 02:13 pm
Respuesta #21

martiniano

  • Moderador Global
  • Mensajes: 1,964
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Gracias por subir tus códigos geómetracat, seguro que son muy interesantes. Lo único es que para variar no pillo cómo hacer para verlos.

En tus spoilers veo una sentencia que supongo que carga una función desde un archivo txt y un enlace que pone "seleccionar". Si lo aprietas se selecciona la sentencia. ¿Qué más hay que hacer para ver el código? Disculpa mi torpeza, y gracias.

Yo le he estado dando vueltas en mi cabeza a cómo resolver estas cosas en Java, que ahora mismo es lo que tengo más fresco. Si en un futuro próximo puedo implementar algo lo subiré por aquí.

Un saludo.

09 Diciembre, 2021, 02:25 pm
Respuesta #22

franma

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,120
  • País: uy
  • Karma: +2/-0
  • Sexo: Masculino
Buenas martiniano,

La verdad que yo lo veo igual que tu, parece que el código esta ahí, puedes moverte con las flechitas de la derecha pero es solo 1 linea a la vez.
Lo que hice fue darle a "Seleccionar" luego Ctrl+C, abrí el bloc de notas y darle a Ctrl+V y ahí puedes ver el código correctamente.

De momento lo veo como una posible solución temporal  :D

Saludos,
Franco.
En ninguna parte puede hallar el hombre un retiro tan apacible y tranquilo como en la intimidad de su alma.

09 Diciembre, 2021, 02:36 pm
Respuesta #23

geómetracat

  • Moderador Global
  • Mensajes: 3,188
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Vaya, lo puse en cajitas de código dentro del spoiler, pero por lo que decís parece que no se ve bien. Yo sí lo veo bien. Lo pongo aquí en texto plano de nuevo a ver si se ve mejor.

Día 8:
Spoiler
with open("input8.txt") as f:
    inp = [x[:-1] for x in f.readlines()]
data = [(x.split('|')[0].split(), x.split('|')[1].split()) for x in inp]

# Part 1
fourdigits = [x[1] for x in data]
print(sum([len(x) in [2,3,4,7] for x in [x for y in fourdigits for x in y]]))

# Part 2

# Segments: a: upper, b: upper left, c: upper right, d: central, e: lower left, f: lower right, g: lower

num_to_char = {0:'abcefg',
              1:'cf',
              2:'acdeg',
              3:'acdfg',
              4:'bcdf',
              5:'abdfg',
              6:'abdefg',
              7:'acf',
              8:'abcdefg',
              9:'abcdfg'}

char_to_num = {y:x for x,y in num_to_char.items()}

def find_letters(inp):
    """Given a list of the digit segment (randomized) returns
    a dict with the correspondence with the original segments (dict[random]=original)"""
    # Convert every element of the list to a set
    inp = [set(x) for x in inp]
    corr = dict()
    # Step 1: Find the letter which is in 7 (length = 3) but not in 1 (length = 2)
    a = list([x for x in inp if len(x)==3][0] - [x for x in inp if len(x)==2][0])[0]
    corr['a'] = a
    # Step 2: Find b (appears 6 times), e (appears 4 times) and f (appears 9 times)
    for char in 'abcdefg':
        x = sum([char in x for x in inp])
        if x==6:
            corr['b'] = char
        elif x==4:
            corr['e'] = char
        elif x==9:
            corr['f'] = char
    # Step 3: Find c as the only char appearing in 1 (unique set of len 2) which is not f
    corr['c'] = list([x for x in inp if len(x)==2][0] - {corr['f']})[0]
    # Step 4: Find g as the only char appearing in 0 which is not abcef
    corr['g'] = list([x for x in inp if len(x)==6 and set([corr[ x ] for x in 'abcef']).issubset(x)][0]\
                - {corr[ x ] for x in 'abcef'})[0]
    # Step 5: Find d as the remaining letter
    corr['d'] = [x for x in 'abcdefg' if x not in corr.values()][0]
    return {y:x for x,y in corr.items()}

def word_to_num(inp, corr):
    """Given a list of 4 words returns the corresponding number.
    Corr: dictionary giving the correspondences with original segments"""
    digits = []
    for x in inp:
        x = char_to_num[''.join(sorted(list({corr[y] for y in x})))]
        digits.append(x)
    return sum([10**(3-i)*digits for i in range(4)])

def solve(inp):
    """Returns the sum of all 4-digit numbers"""
    nums = []
    for x,y in inp:
        corr = find_letters(x)
        nums.append(word_to_num(y,corr))
    return sum(nums)
       
print(solve(data))
[cerrar]

Día 9:
Spoiler
with open("input9.txt") as f:
    inp = [x[:-1] for x in f.readlines()]

# Part 1

import numpy as np

matrix = np.array([[int(x) for x in y] for y in inp])

def local_minima(matrix):
    """Returns list with locations of all local minima"""
    ncol, nrow = len(matrix), len(matrix[0])
    matrix = np.pad(matrix, ((1,),(1,)), constant_values=(9,9))
    minima=[]
    for i in range(1, nrow+1):
        for j in range(1, ncol+1):
            if matrix[j] < min(matrix[i-1][j], matrix[j-1], matrix[i+1][j], matrix[j+1]):
                minima.append((i-1,j-1))
    return minima

minima = local_minima(matrix)
print(sum([matrix[j]+1 for i,j in minima]))

# Part 2

def basin(minima, matrix):
    """Returns a list with the points of the basin corresponding to the given minima"""
    matrix = np.pad(matrix, ((1,),(1,)), constant_values=(9,9))
    points = [minima]
    iteration = points
    end = False
    while not end:
        new_iter = []
        for x in iteration:
            list_pos = [(x[0]-1, x[1]), (x[0]+1, x[1]), (x[0], x[1]-1), (x[0], x[1]+1)]
            new_iter = new_iter + [(i,j) for (i,j) in list_pos if matrix[i+1][j+1] != 9]
        new_iter = [x for x in list(set(new_iter)) if x not in points]
        if not new_iter:
            end = True
        iteration = new_iter
        points = points + new_iter
    return points

basin_sizes = [len(basin(x, matrix)) for x in minima]
print(np.prod(sorted(basin_sizes)[-3:]))
[cerrar]
La ecuación más bonita de las matemáticas: \( d^2=0 \)

09 Diciembre, 2021, 02:42 pm
Respuesta #24

franma

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,120
  • País: uy
  • Karma: +2/-0
  • Sexo: Masculino
Buenas,

En texto plano lo veo correctamente :aplauso:.

Solo para ampliar, así es como veo yo el código (y entiendo que martiniano también) en tu anterior mensaje:



Un saludo,
Franco.
En ninguna parte puede hallar el hombre un retiro tan apacible y tranquilo como en la intimidad de su alma.

09 Diciembre, 2021, 02:47 pm
Respuesta #25

geómetracat

  • Moderador Global
  • Mensajes: 3,188
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Vaya, debe ser algún problema del foro, o del navegador o qué sé yo.

Yo lo veo así:

Y con la barra de la derecha me puedo mover a lo largo de todo el código.
La ecuación más bonita de las matemáticas: \( d^2=0 \)

09 Diciembre, 2021, 03:20 pm
Respuesta #26

mathtruco

  • Moderador Global
  • Mensajes: 5,508
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Yo lo veo igual que geómetracat, sin problema. Estoy usando firefox 94.0, ¿Será problema del navegador o versión? ¿Qué navegador usan ustedes?

09 Diciembre, 2021, 03:37 pm
Respuesta #27

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,725
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Yo lo veo así:

Y con la barra de la derecha me puedo mover a lo largo de todo el código.


¿Serás una de esas 4 personas privilegiadas que cambió de tema? >:D :laugh:

Saludos

P.D. Estoy usando Chrome Versión 96.0.4664.93 (Build oficial) (64 bits) y me pasa lo mismo que solo veo 1 línea de código. De hecho creo que nunca anduvo bien el bloque de Código, o al menos como lo "pintan" desde SMF, pues porque por ejemplo creo que se podía cambiar el formato según un parámetro para el lenguaje de programación usado, pero en el foro no está configurado.

09 Diciembre, 2021, 04:00 pm
Respuesta #28

geómetracat

  • Moderador Global
  • Mensajes: 3,188
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
No, uso el tema por defecto del foro.
La ecuación más bonita de las matemáticas: \( d^2=0 \)

09 Diciembre, 2021, 06:00 pm
Respuesta #29

franma

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,120
  • País: uy
  • Karma: +2/-0
  • Sexo: Masculino
Yo lo veo igual que geómetracat, sin problema. Estoy usando firefox 94.0, ¿Será problema del navegador o versión? ¿Qué navegador usan ustedes?

Utilizo Chrome Versión 96.0.4664.93 (Build oficial) (64 bits).

Probé con la ultima versión de Firefox y se despliega correctamente. Así que será problema del navegador :'(

Un saludo,
Franco.
En ninguna parte puede hallar el hombre un retiro tan apacible y tranquilo como en la intimidad de su alma.