Aktywne Wpisy

Lardor +148
Chryste panie za trupa do remontu gość chce 70k w tych okolicach to można kupić sprawny egzemplarz.... https://allegro.pl/ogloszenie/fiat-125p-1974-r-zabytkowy-pierwszy-wlasciciel-benzyna-1300-wloska-licencja-17943905212
#motoryzacja #samochody #januszebiznesu
#motoryzacja #samochody #januszebiznesu
źródło: temp_file8822526901243416189
Pobierz
Adam_wkladamispadam +218
Czy trzydziestoletniemu Mirkowi wolno plusa? #urodziny
źródło: 1000004983
Pobierz




987654321111111 - 98
811111111111119 - 89
234234234234278 - 78
818181911112111 - 92
Niżej jest rozwiązanie w JavaScript, ale system nie przyjmuje odpowiedzi, więc gdzieś jest błąd. Znajdziecie?
Czy to zadanie można zrobić w Excelu? ChatGPT wykazał, że da się.
1. Kopiujemy dane wejściowe do Excela w kolumnie A.
2. W kolumnie B piszemy formułę:
=MAX(ARRAYFORMULA(VALUE(MID(A1; SEQUENCE(LEN(A1)-1); 2))))
=MAX(ARRAYFORMULA(WARTOŚĆ(FRAGMENT.TEKSTU(A1; SEQUENCE(DŁ(A1)-1); 2))))
Sam jestem ciekawy, co te poszczególne funkcje robią, więc rozbijmy to:
DŁ(A1) - ilość znaków
SEQUENCE(99) - liczby od 1 do 99
FRAGMENT.TEKSTU(A1; SEQUENCE(DŁ(A1)-1); 2) - wyodrębnia 2 znaki
ARRAYFORMULA - używanie tablic w funkcjach niezwiązanych z tablicami
MAX - wartość maksymalna
Oczywiście jest to błędne rozwiązanie, bo bierze pod uwagę 2 kolejne cyfry, a mogą być w różnej odległości.
Chat to poprawił tak:
=JEŻELI(DŁ(A1)<=1; 0;LET(
s; A1;
n; DŁ(s);
d; WARTOŚĆ(FRAGMENT.TEKSTU(s; SEQUENCE(n); 1));
MAX(
MAP(
SEQUENCE(n-1);
LAMBDA(i;
10 * INDEKS(d; i; 1) +
MAX( INDEKS(d; SEQUENCE(n-i) + i; 1) )
)
)
)
)
)
ale wywala BŁĄD
w każdym razie rozwiązanie będzie w JavaScripcie
const fs = require('fs');
const path = require('path');
// Ścieżka do pliku
const filePath = path.join(__dirname, '3.txt');
let data;
try {
data = fs.readFileSync(filePath, 'utf-8');
} catch (err) {
console.error('Błąd przy wczytywaniu pliku:', err);
return;
}
const lines = data.split(/\r?\n/);
let sum = 0;
let processedLines = 0;
for (const line of lines) {
let first = 0;
let second = 0;
let digits = line.split('').map(x => parseInt(x));
let length = digits.length - 1;
for (let i = 0; i < length; ++i) {
if (digits[i] > first) {
first = digits[i];
second = digits[i+1];
} else if (digits[i] > second) {
second = digits[i];
}
}
const numberToAdd = 10 * first + second;
sum += numberToAdd;
console.log(line, first, second, numberToAdd, sum);
++processedLines;
}
console.log('Result: ', sum);
console.log('Processed lines:', processedLines);
Niestety system nie akceptuje odpowiedzi. Podobno wynik jest za niski.
Czy moja logika jest OK?
Dla każdej linijki:
1. Ustaw obie cyfry na 0.
2. Jedź znak po znaku od 1 do n-1:
2.1. Jeśli napotkana cyfra jest większa od tej, którą mamy zapisaną jako first, to:
2.1.1. Ustaw first na tę cyfrę.
2.1.2. Ustaw second na kolejną cyfrę.
2.2. Inaczej, jeśli napotkana cyfra jest większa od tej, którą mamy zapisaną jako second, to:
2.2.1. Ustaw second na tę cyfrę
#adventofcode #programista15k #programowanie
@SendMeAnAngel: nie wiem bo sie nie znam ale myślę że tak