Kíváncsi vagy, hogyan tömörített egy teljes négyfunkciós, kiíratós számológépet Masatoshi Shima csupán 1024 byte-nyi ROM-ba? Nézd meg az újraalkotott assembly "forráskódot", amit a csapat legújabb tagja, a magyar Kintli Lajos analizált, dokumentált és kommentált.
- A hozzászóláshoz be kell jelentkezni
- 5854 megtekintés
Hozzászólások
Klassz :)
(Figyeljétek meg, az M$ majd nyúl belőle kódot a Vistába!)
- A hozzászóláshoz be kell jelentkezni
Bár tanulnának belőle :-|
- A hozzászóláshoz be kell jelentkezni
És akkor a következő Windows csak egy számológép lenne?
- A hozzászóláshoz be kell jelentkezni
Mért, az eddigiek mik voltak? :))
--
Debian - The "What?!" starts not!
- A hozzászóláshoz be kell jelentkezni
pasziansz.
Software is like sex, it's better with a penguin. :D (r)(tm)(c)
- A hozzászóláshoz be kell jelentkezni
inkabb az excelbe kene integralniuk, az nem tud meg egy egyszeru szorzast sem elvegezni hibatlanul...
A'rpi
- A hozzászóláshoz be kell jelentkezni
Multkor egy egyszeru hazit kellett megoldania egy hatodikosnak.
Ha osszeszoroznad 1-tol 50-ig a szamokat, akkor hany 0 lenne a vegen?
Excelben az ember megcsinalja, akkor csodalkozik, hogy kb. 30 nulla van a vegen, holott 12 a helyes megfejtes.
Szolhatna, hogyha egy cella tartalma tulcsordult. (cellak formazasnal be lehet allitani, hogy irja ki a teljes szamot (kb. 60 szamjegy). Csak kicsit sok benne a nulla)
(mondjuk python-ban 6 sor a program, dehat ugye a koznep(ertsd: nem programozo) excelhez fer hozza)
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Most megnéztem, az OOo Calc szerint pont 50 nullára végződik :-)
Úgy tűnik, az első 20 természetes szám szorzata még jó, aztán már biztosan nem.
- A hozzászóláshoz be kell jelentkezni
Most vagy én vagyok oktondi, vagy a php is szar ebből a szempontból.
Kipróbáltam 2 féle képpen is:
1.) while
$i = 1;
$j = 1;
while ( $i <= 50 ) {
$temp = $j * $i;
$j = $temp;
$i++;
}
2.) sima szorozgatás
$osszes = 1*2*3*4*5*6*7*8*9*10*...*46*47*48*49*50;
mind2 esetben az eredmény:
30414093201713375576366966406747986832057064836514787179557289984
Most akkor mi van?
- A hozzászóláshoz be kell jelentkezni
Én is php-val csináltam, bár ez nálam 5 sor volt. Lehet ott szúrtam el? :o)
$eredmeny=1;
for($i=1;$i<=50;$i++)
{
$eredmeny*=$i;
}
print($eredmeny);
Azaz 3.0414093201713E+64.
Most lusta vagyok megnézni, mivel lehetne maximális hosszában kiírni a számot...
- A hozzászóláshoz be kell jelentkezni
#!/usr/bin/perl
use bignum;
$m = 1;
for( $i=2; $i<=50; $i++ ){
$m *= $i;
}
print $m, "\n";
30414093201713378043612608166064768844377641568960512000000000000
Ez jó. ( http://www.research.att.com/~njas/sequences/b000142.txt )
- A hozzászóláshoz be kell jelentkezni
bc:
b=1;for (a=1;a<=50;a++) {b*=a;}; b
30414093201713378043612608166064768844377641568960512000000000000
Verseny feladat:
kerdes ugyen ez, de az 1-n ig kell megmondani, hany nulla van vegen, kurva gyorsan es n mondjuk lehet 1 milla is.
(Hasznalhato nyelvek c,c++,pascal,java, de most ez mindegy)
- A hozzászóláshoz be kell jelentkezni
Francba!
Most látom, hogy megoldáshoz a shell-script nem megengedett nyelv...
- A hozzászóláshoz be kell jelentkezni
public class Nulla {
public static void main(String [] args) {
long num = Long.parseLong(args[0]);
long sum = 0;
for (long i = 5; i <= num; i *= 5)
sum += (num / i);
System.out.println("Nullak: " + sum);
}
}
- A hozzászóláshoz be kell jelentkezni
De akkor a hiba kinek a készülékében van? A php se tud szorozni?
- A hozzászóláshoz be kell jelentkezni
Nagy szamok kezelesere nem szokas felkesziteni ez ilyen eszkozoket, mint php.
php tipusok resznel bovebben.
http://phpbuilder.com/manual/en/language.types.integer.php
http://phpbuilder.com/manual/en/language.types.float.php
32 bit unsigend-et altalaban minimum kezel.
64 bit -es lebegopontosat.
Big Integer
Ezzel tudsz nagy szamot kezelni.
- A hozzászóláshoz be kell jelentkezni
ebben a feladatban egyaltalan nem kell nagy szamokkal szamolni de ellenorizni lehet:
import java.math.BigInteger;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Nulla {
public static void main(String [] args) {
long num = Long.parseLong(args[0]);
BigInteger multi = new BigInteger("1");
for (int i = 2; i <= num; multi = multi.multiply(new BigInteger(new Long(i).toString())), i++);
System.out.println("Szorzat: " + multi);
Pattern pattern = Pattern.compile("0*$");
Matcher matcher = pattern.matcher(multi.toString());
if (matcher.find())
System.out.println("Regexp: " + matcher.group().length());
}
}
- A hozzászóláshoz be kell jelentkezni
És ez nem megy fejben, esetleg papíron?
Haskell kód, csak a vicc kedvéért:
f x n = if x `mod ` 10 == 0 then f (x `div` 10) (n+1) else n
hanynulla x = f x 0
main = print (hanynulla (product [1..50]))
Meg is számolja a nullákat :)
- A hozzászóláshoz be kell jelentkezni
Izgalmasabb a feladat, ha azt mondom:
Oldd meg papíron, számológép használata nélkül.
- A hozzászóláshoz be kell jelentkezni
Igy van, egy altalanos iskolai feladat nem arrol szol, hogy programokat farigcsal ra az ember. Piszok nehez am megszamolni, hany 5-tel ill. 25-tel oszthato szam van 50-ig.
- A hozzászóláshoz be kell jelentkezni
Bár először arra gondoltam, hogy minden számot primtényezős szorzatra bontanék és a 2 és 5 párba állítanám.
A 2-ből sok is van így elég az 5-t számolni...
Ezek alapján:
#!/bin/bash
j=0
i=$1
echo $i
while [ $i -ne 0 ]; do
i=`expr $i / 5`
j=`expr $j + $i`
done
echo $j
1 000 000-nál: 249998 db nulla van a szám végén.
- A hozzászóláshoz be kell jelentkezni
Bocsi, elírás van: Busicon helyett Busicom a cég neve, akik először használták ai i4004-et.
Kintli Lajosnak gratula, és köszönjük a sok melót, amit ebbe belefektetett!
- A hozzászóláshoz be kell jelentkezni
Es nincs 1024 byte az sw.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Már hogyne lenne. 0x3ff-nél van vége a kódnak.
Ami 0x400-nál kezdődik, az már csak a gyökvonás kódja, ami egy 5. RAM IC-n volt, és nem került bele minden számológépbe.
- A hozzászóláshoz be kell jelentkezni
Es a vegen levo 85db nulla?
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Nézd meg még egyszer a címeket, és olvasd el az elejét is! Főleg a ;4.2 Using of ROM areas. c. részt (látszik, hogy magyar ember írta :) ).
A végén a 85 db 0 már 0x4ab, azaz 1195-ös címen kezdődik. Bőven 1024 fölött.
- A hozzászóláshoz be kell jelentkezni
Ah. Nagy igazsag. Ennyire azert nem nyalaztam at. :)
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Aztan jon Nagyarc LTD, es szabadalomsertes miatt pereli oket ...
- A hozzászóláshoz be kell jelentkezni
Bénázok ezerrel, mert nem lelem semerre a forrást...
- A hozzászóláshoz be kell jelentkezni
A 4004.com-on a "Download Stuff Here" szöveg alatt. A 2. link megfelel.
- A hozzászóláshoz be kell jelentkezni