Page 77 of 83

Re: Koodaaminen

Posted: 06 Sep 2024, 10:19
by hashtag rikesakko
Image

kirjotellut tällästä intel 8080 mikrotietokone simulaattoria

nyt pitäs ladata joku toinen disassembleri ja ettiä vertailemalla bugeja (esim. tuo db 31h epäilyttää) megän implementaatiosta

Re: Koodaaminen

Posted: 06 Sep 2024, 10:32
by Tuulipuku
eh wrote:
31 Jul 2024, 13:10
En oo kuukauden kesäloman aikana kirjoittanut riviäkään mitään koodia ja olen aivan tyytyväinen asiain tilaan.
Ite en vuoteen ja ei haittais vaikka jatkaisin tällä linjalla hautaan asti, mutta kohta pitää taas alkaa tätäkin paskaa talikoimaan.

Re: Koodaaminen

Posted: 06 Sep 2024, 19:49
by Santeri Endman
hashtag rikesakko wrote:
06 Sep 2024, 10:19
Image

kirjotellut tällästä intel 8080 mikrotietokone simulaattoria

nyt pitäs ladata joku toinen disassembleri ja ettiä vertailemalla bugeja (esim. tuo db 31h epäilyttää) megän implementaatiosta
[-o<

Re: Koodaaminen

Posted: 08 Sep 2024, 12:57
by badger
miten tekisitte tämmösen auton perusvero kokonaismassan mukaan funktion,
että ku syöttää painon niin se antaa veron per päivä

Code: Select all

Kokonaismassa kg	€/päivä	€/365 päivää
enintään 1 300		0,610	222,65
	 1 301–1 400	0,640	233,60
	 1 401–1 500	0,672	245,28
	 1 501–1 600	0,706	257,69
	 1 601–1 700	0,742	270,83
	 1 701–1 800	0,780	284,70
	 1 801–1 900	0,820	299,30
	 1 901–2 000	0,862	314,63
	 2 001–2 100	0,906	330,69
	 2 101–2 200	0,952	347,48
	 2 201–2 300	1,000	365,00
	 2 301–2 400	1,050	383,25
	 2 401–2 500	1,102	402,23
	 2 501–2 600	1,156	421,94
	 2 601–2 700	1,212	442,38
	 2 701–2 800	1,270	463,55
	 2 801–2 900	1,330	485,45
	 2 901–3 000	1,392	508,08
	 3 001–3 100	1,456	531,44
	 3 101–3 200	1,522	555,53
	 3 201–3 300	1,590	580,35
	 3 301–3 400	1,660	605,90
	 3 401 tai enemmän	1,732	632,18
https://www.traficom.fi/fi/liikenne/aut ... n%20mukaan

ei tällä mitään väliä ole ja tein jo ihan vaan kasan if lauseita, mutta kai tähän hienompikin tapa on, en vaan keksi mitään toimivaa :o

Re: Koodaaminen

Posted: 08 Sep 2024, 13:09
by jaltsun käyttäjänimi
badger wrote:
08 Sep 2024, 12:57
miten tekisitte tämmösen auton perusvero kokonaismassan mukaan funktion,
että ku syöttää painon niin se antaa veron per päivä

Code: Select all

Kokonaismassa kg	€/päivä	€/365 päivää
enintään 1 300		0,610	222,65
	 1 301–1 400	0,640	233,60
	 1 401–1 500	0,672	245,28
	 1 501–1 600	0,706	257,69
	 1 601–1 700	0,742	270,83
	 1 701–1 800	0,780	284,70
	 1 801–1 900	0,820	299,30
	 1 901–2 000	0,862	314,63
	 2 001–2 100	0,906	330,69
	 2 101–2 200	0,952	347,48
	 2 201–2 300	1,000	365,00
	 2 301–2 400	1,050	383,25
	 2 401–2 500	1,102	402,23
	 2 501–2 600	1,156	421,94
	 2 601–2 700	1,212	442,38
	 2 701–2 800	1,270	463,55
	 2 801–2 900	1,330	485,45
	 2 901–3 000	1,392	508,08
	 3 001–3 100	1,456	531,44
	 3 101–3 200	1,522	555,53
	 3 201–3 300	1,590	580,35
	 3 301–3 400	1,660	605,90
	 3 401 tai enemmän	1,732	632,18
https://www.traficom.fi/fi/liikenne/aut ... n%20mukaan

ei tällä mitään väliä ole ja tein jo ihan vaan kasan if lauseita, mutta kai tähän hienompikin tapa on, en vaan keksi mitään toimivaa :o
taulukkoon indeksoimalla:

Code: Select all

verotyms[0] = vitusti
verotyms[1] = vitusti+1
verotyms[2] = vitusti+2

painostaVerotaulukkoon (paino):
  painoIndeksi = min(0, paino-1201)
  painoIndeksi = painoIndeksi/100
  jos painoIndeksi suurempi ku taulukon koko niin painoIndeksi taulukon koko
  palauta verotyms[painoIndeksi]
varmaan saa siistimminkin jos hetken ajattelis mutta jooh, jonkinlainen taulukko kuitenkin ja sitten mappaa painon taulukon alkioon.

vaihtoehtosesti on myös olemassa valmiitakin kirjastoja ja semmosia tommosille range-based indeksoinneille

voi myös tehdä loopin, joka etsii läpi taulukon, jonne on talletettu noi ranget ja palauttaa sen missä range osuu kohilleen. se voi olla koodina selkeämpi.

looppiratkaisu:

Code: Select all

painostaveroihinTaulukko[0] = {alapaino: 0, yläpaino: 1300, verot: miljardi}
painostaveroihinTaulukko[1] = {alapaino: 1301, yläpaino: 1400, verot: triljoona}
painostaveroihinTaulukko[2] = {alapaino: 1401, yläpaino: 1501, verot: tsiljoona}

etsiVerot(paino):
  for elementti in painostaveroihinTaulukko:
    jos paino >= elementti.alapaino ja paino <= elementti.yläpaino
      palauta elementti

Re: Koodaaminen

Posted: 08 Sep 2024, 13:18
by armi
Array bisection, esim. Pythonissa https://docs.python.org/3.10/library/bisect.html

Re: Koodaaminen

Posted: 08 Sep 2024, 14:17
by badger
nonni, kiitos vinkeistä

Re: Koodaaminen

Posted: 08 Sep 2024, 14:17
by Henkkamaukka Perusjätkä
About tälleen?

Code: Select all

import bisect

massat = [0, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400]
verot = [0.610, 0.640, 0.672, 0.706, 0.742, 0.780, 0.820, 0.862, 0.906, 0.952, 1.000, 1.050, 1.102, 1.156, 1.212, 1.270, 1.330, 1.392, 1.456, 1.522, 1.590, 1.660, 1.732]

def verolaskuri():
    kokonaismassa = int(input('Anna auton kokonaismassa: '))
    pos = bisect.bisect_left(massat, kokonaismassa)
    if kokonaismassa < 1:
        print("Onko sulla edes autoa?")
    else:
        value = verot[pos-1]
        print(f"Perusvero kokonaismassan mukaan on {value}€ päivässä.")

verolaskuri()

Re: Koodaaminen

Posted: 08 Sep 2024, 14:52
by ei vittu mikä meno
Toinen vaihtoehto on, että laskee vaan, mihin väliin annettu paino asettuu.

Code: Select all

const tax = [0.610, 0.640, 0.672, 0.706, 0.742, 0.780, 0.820, 0.862, 0.906, 0.952, 1.000, 1.050, 1.102, 1.156, 1.212, 1.270, 1.330, 1.392, 1.456, 1.522, 1.590, 1.660, 1.732]

const getIntervalIndex = weight => {
  return Math.max(0, Math.floor((weight - 1301) / 100) + 1);
}

const getTax = weight => {
  const i = getIntervalIndex(weight);
  return (i < tax.length
    ? tax[i]
    : tax[tax.length - 1]
   );
}
Säästyy yhden arrayn kirjoittelulta, mutta ei välttämättä ole muutoin parempi.

Re: Koodaaminen

Posted: 08 Sep 2024, 15:12
by badger
tässähän on vielä semmonen, että vero nousee 0.03 ekasta ja lisääntyy 0.002, 100kg välein :o

Code: Select all

for i,v in enumerate(verot):
     print(f'{verot[i+1]} - {verot[i]} = {round(verot[i+1]-verot[i], 3)}')
0.64 - 0.61 = 0.03
0.672 - 0.64 = 0.032
0.706 - 0.672 = 0.034
0.742 - 0.706 = 0.036
0.78 - 0.742 = 0.038
0.82 - 0.78 = 0.04
0.862 - 0.82 = 0.042
0.906 - 0.862 = 0.044
0.952 - 0.906 = 0.046
1.0 - 0.952 = 0.048
1.05 - 1.0 = 0.05
1.102 - 1.05 = 0.052
1.156 - 1.102 = 0.054
1.212 - 1.156 = 0.056
1.27 - 1.212 = 0.058
1.33 - 1.27 = 0.06
1.392 - 1.33 = 0.062
1.456 - 1.392 = 0.064
1.522 - 1.456 = 0.066
1.59 - 1.522 = 0.068
1.66 - 1.59 = 0.07
1.732 - 1.66 = 0.072

Re: Koodaaminen

Posted: 09 Sep 2024, 08:21
by satanismista kiinnostunut nudisti
Oletteko käyttäneet/kokeilleet yksikkötestausta? Tollaisen algoritmin testaus onnistuu ja voi askarrella useamman version ratkaisuksi ja kaikkien pitäisi toimia suht samalla tavalla. Virhetilanteiden käsittelyyn hyvä homma myös.

Re: Koodaaminen

Posted: 09 Sep 2024, 08:38
by Spandau Mullet
Jos koodirojekti on jotain muuta kun kertakäyttöinen skripti, joku opetteluhomma tai puhdas kokeilu, niin tokihan testit pitää olla. CI ja kattavat testikeissit pelastaa päivän monta kertaa viikossa.

Re: Koodaaminen

Posted: 09 Sep 2024, 08:45
by Darkthronen tunnettu Hiisi
hashtag rikesakko wrote:
06 Sep 2024, 10:19
Image

kirjotellut tällästä intel 8080 mikrotietokone simulaattoria

nyt pitäs ladata joku toinen disassembleri ja ettiä vertailemalla bugeja (esim. tuo db 31h epäilyttää) megän implementaatiosta
Cool 8) Mä aloin jossain vaiheessa tekeen Z80 emu-/simulaattoria C#:lla. Ihan kivaa näpräystä ja jonkin verran pääsinkin eteenpäin ennenku alko kyllästyttää ja vittu miten omituinen arkkitehtuuri muutenkin kun rekisterit on joko 8-bittisiä tai sitten ne voi jesarilla ja niittipyssyllä vetää yhdeksi 16-bittiseksi rekisteriksi ja voi jeesus oisinpa aloittanu jonku 6502 emulaatorin ton sijaan.

Ehkä mä joskus jatkan tota rojektia.

Re: Koodaaminen

Posted: 09 Sep 2024, 12:01
by Tuulipuku
satanismista kiinnostunut nudisti wrote:
09 Sep 2024, 08:21
Oletteko käyttäneet/kokeilleet yksikkötestausta? Tollaisen algoritmin testaus onnistuu ja voi askarrella useamman version ratkaisuksi ja kaikkien pitäisi toimia suht samalla tavalla. Virhetilanteiden käsittelyyn hyvä homma myös.
Kyllä, aina pl. tosiaan joku kertakäyttökoodi. Ite suosittelen kyllä lämpimästi opetelemaan test driven development lähestymistapaa. Testit eka, tulee ensinnäkin tehtyä niitä testejä, testeistä tulee parempia ja koodistakin tulee takuulla parempaa kun sitä voi refaktoroida huoletta.

Re: Koodaaminen

Posted: 09 Sep 2024, 12:06
by Spandau Mullet
Tuulipuku wrote:
09 Sep 2024, 12:01
satanismista kiinnostunut nudisti wrote:
09 Sep 2024, 08:21
Oletteko käyttäneet/kokeilleet yksikkötestausta? Tollaisen algoritmin testaus onnistuu ja voi askarrella useamman version ratkaisuksi ja kaikkien pitäisi toimia suht samalla tavalla. Virhetilanteiden käsittelyyn hyvä homma myös.
Kyllä, aina pl. tosiaan joku kertakäyttökoodi. Ite suosittelen kyllä lämpimästi opetelemaan test driven development lähestymistapaa. Testit eka, tulee ensinnäkin tehtyä niitä testejä, testeistä tulee parempia ja koodistakin tulee takuulla parempaa kun sitä voi refaktoroida huoletta.
Kaikkeen ei TDD välttämättä sovi, mutta noin yleisesti komp. Jos on joku muutos/lisäys olemassaolevaan featureen tai bugifiksi, niin itse yleensä päivitän ensin testit ottamaan halutun lopputuloksen huomioon ja vasta sit lähden muokkaamaan koodia.