Autor Tema: Advent of Code 2023, solución día 1.

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

02 Diciembre, 2023, 07:37 pm
Leído 90 veces

w a y s

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 255
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
  • I
Buenas tardes foro, un año más se celebra el evento de programación llamado Advent of Code, en el que cada día desde el 1 de diciembre hasta el 25 se publican un par de problemas de programación.

Este hilo tiene el propósito de compartir nuestras soluciones de dichos problemas en distintos lenguajes de programación e ir solucionándolos entre todos.

Aquí dejo mi solución en Java.

Spoiler
Código: [Seleccionar]
package day1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Day1 {

    private static final String [] NUMBERS = {"one","two","three","four","five","six","seven","eight","nine"};
    private File input ;

    public Day1(String input){
        this.input = new File(input);
    }

    private String isAlphaNumber(String alphaNumber){
        for (int i = 0; i < NUMBERS.length; i++) {
            if(alphaNumber.contains(NUMBERS[i]))
                return (i+1) + "";
        }

        return "0";
    }

    public int partOne(){
        int sum = 0;

        try(BufferedReader in = new BufferedReader(new FileReader(input))){
            String line = "";

            while((line = in.readLine()) != null){
                String number = "";

                for (int i = 0; i < line.length(); i++) {
                    if(Character.isDigit(line.charAt(i))){
                        number += line.charAt(i);
                        break;
                    }
                }

                for (int i = line.length()-1; i >=0 ; i--) {
                    if(Character.isDigit(line.charAt(i))){
                        number += line.charAt(i);
                        break;
                    }
                }
                sum += Integer.parseInt(number);
                number = "";
            }



        }catch(IOException e){
            System.err.println("Input not found");
        }

        return sum;
    }

    public int partTwo(){
        int sum = 0;

        try(BufferedReader in = new BufferedReader(new FileReader(input))){
            String line = "";

            while((line = in.readLine()) != null){
                String number = "";

                String alphaNumber = "";

                for (int i = 0; i < line.length(); i++) {
                    if(Character.isDigit(line.charAt(i)) && isAlphaNumber(alphaNumber).equals("0")){
                        number += line.charAt(i);
                        break;
                    }else if(!isAlphaNumber(alphaNumber).equals("0")){
                        number += isAlphaNumber(alphaNumber);
                        break;
                    }else{
                        alphaNumber += line.charAt(i);

                    }
                }

                alphaNumber = "";

                for (int i = line.length()-1; i >=0 ; i--) {
                    if(Character.isDigit(line.charAt(i)) && isAlphaNumber(alphaNumber).equals("0")){
                        number += line.charAt(i);
                        break;
                    }else if(!isAlphaNumber(alphaNumber).equals("0")){
                        number += isAlphaNumber(alphaNumber);
                        break;
                    }else{
                       alphaNumber = line.charAt(i) +alphaNumber;

                    }
                }
                sum += Integer.parseInt(number);
                number = "";
            }



        }catch(IOException e){
            System.err.println("Input not found");
        }

        return sum;
    }

    public static void main(String[] args) {
        Day1 d1 = new Day1("inputs/day1/input.txt");

        System.out.println(d1.partTwo());
    }
}

[cerrar]

A ver si este año consigo acabarlo, un saludo a todos.

03 Diciembre, 2023, 04:18 am
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 5,424
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola ways

Gracias por avisarnos, intentaré hacer algunos.

Dejo el primero en python.

Spoiler
Código: [Seleccionar]
def traductor(palabra):
    a=[] #almacena todos lo9s dígitos de una palabra
    for i in palabra:
        if i.isdigit():
            a.append(i)
    cifra=int(a[0]+a[-1]) #para unir el primero y el último dígito
    print(cifra)
    return(cifra)

b=["1abc2","pqr3stu8vwx","a1b2c3d4e5f","treb7uchet"]

c=[]

for i in b:   
    c.append(traductor(i))

print(sum(c))

El nombre dado a la función no es muy preciso, pero al menos hace el trabajo...  :P

[cerrar]

Es primera vez que participo, espero haber entendido bien el problema.

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...