-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathstd.itp
252 lines (177 loc) · 8.44 KB
/
std.itp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
Salli kohdekoodi.
# Object
Sisällytä kohdekoodi "
Object.prototype.t_assign = function(n, v) { this[n] = v; };
".
Tulkitse kohdekoodiolio kohdekoodityyppinä "Object".
Kohdekoodiolio liitettynä kivaan alkioon on "[this].concat(kiva_alkio)" kohdekoodina.
Kun kiva kohdekoodiolio kirjataan lokiin,
suorita kohdekoodi "console.log(this);".
# Array
Sisällytä kohdekoodi "
Array.prototype.nth_last = function(n) { return this[this.length-n]; };
".
Tulkitse kohdekoodilista kohdekoodityyppinä "Array".
Kohdekoodilistan määrä on "this.length" kohdekoodina.
Kohdekoodilistan summa on "this.reduce((a,b) => a+b)" kohdekoodina.
Kohdekoodilista järjestettynä on "Array.from(this.alkio).sort()" kohdekoodina.
Kohdekoodilista järjestettynä järkevään järjestykseen on
"Array.from(this.alkio).sort(järkevä_järjestys.verrata_P_PSt_Mukaisesti.bind(järkevä_järjestys))" kohdekoodina.
Kun kivaksi kohdekoodilistaksi lisätään kiva arvo,
suorita kohdekoodi "this.push(kiva_arvo);".
Kun kiva kohdekoodilista järjestetään,
suorita kohdekoodi "this.sort();".
Kun kiva kohdekoodilista järjestetään järkevään järjestykseen,
suorita kohdekoodi "this.sort(järkevä_järjestys.verrata_P_PSt_Mukaisesti.bind(järkevä_järjestys));".
# Lista
Listalla on alkiot.
Listan koko on "this.alkio.length" kohdekoodina
(eli sen alkioiden määrä).
Listan pituus on sen koko.
Listan häntä on "new lista({alkio: this.alkio.slice(1)})" kohdekoodina
(eli uusi lista, jonka alkiot ovat sen alkiot toisesta alkaen).
Lista järjestettynä on uusi lista, jonka alkiot ovat sen alkiot järjestettynä.
Lista järjestettynä järkevään järjestykseen on uusi lista, jonka alkiot ovat sen alkiot järjestettynä järkevään järjestykseen.
Listan suurin alkio on "this.alkio.reduce((a, b) => Math.max(a, b), -Infinity)" kohdekoodina.
Listan pisin alkio on "this.alkio.reduce((a, b) => a.f_pituus()<b.f_pituus()?b:a, {f_pituus(){return -Infinity;}})" kohdekoodina.
Kun kiva lista etsii indeksin kivalle arvolle,
suorita kohdekoodi "return this.alkio.indexOf(kiva_arvo);".
Kun kiva lista järjestetään,
sen alkiot järjestetään.
Kun kiva lista järjestetään järkevään järjestykseen,
sen alkiot järjestetään järkevään järjestykseen.
Kun kivaan listaan lisätään kiva arvo,
suorita kohdekoodi "this.alkio.push(kiva_arvo);".
Kun kivasta listasta poistetaan kiva arvo,
suorita kohdekoodi "var i = this.alkio.indexOf(kiva_arvo); if (i > -1) this.alkio.splice(i, 1);".
Kiva lista on tyhjä, jos sen alkioiden määrä on nolla.
Olkoon tyhjä lista uusi lista.
# Järjestys
Järjestyksellä ei ole kenttiä.
Suuruusjärjestys on järjestys, jolla on suunta.
Kun selkeän suuruusjärjestyksen mukaisesti verrataan a:ta b:hen,
komento "(this.suunta?a<b:a>b)?-1:(a==b?0:1)" kohdekoodina palautetaan.
Olkoon nouseva suuruusjärjestys suuruusjärjestys, jonka suunta on "true" kohdekoodina.
Olkoon laskeva suuruusjärjestys suuruusjärjestys, jonka suunta on "false" kohdekoodina.
Olkoon käänteinen suuruusjärjestys laskeva suuruusjärjestys.
# Function
Tulkitse kohdekoodifunktio kohdekoodityyppinä "Function".
Kun kiva kohdekoodifunktio suoritetaan,
suorita kohdekoodi "this();".
# Number/luku
Sisällytä kohdekoodi "
const power_handler = {get: (a, b) => Math.pow(a, Number.parseInt(b)+1)};
".
Tulkitse luku kohdekoodityyppinä "Number".
Tulkitse määrä lukuna.
Luvun potenssit ovat "new Proxy(this, power_handler)" kohdekoodina.
Luvun neliö on se kerrottuna sillä.
Luvun kuutio on se kerrottuna sillä kerrottuna sillä.
Luvun neliöjuuri on "Math.sqrt(this)" kohdekoodina.
Luvun kuutiojuuri on "Math.cbrt(this)" kohdekoodina.
Luvun sini on "Math.sin(this)" kohdekoodina.
Luvun kosini on "Math.cos(this)" kohdekoodina.
Luvun tangentti on "Math.tan(this)" kohdekoodina.
Luvun logaritmi on "Math.log(this)" kohdekoodina.
Luvun vastalogaritmi on "Math.exp(this)" kohdekoodina.
Luvun merkki on "Math.sign(this)" kohdekoodina.
Luvun itseisarvo on "Math.abs(this)" kohdekoodina.
Luvun vastaluku on "-this" kohdekoodina.
Luvun käänteisluku on "1/this" kohdekoodina.
Luvun seuraaja on se kasvatettuna yhdellä.
Luvun edeltäjä on se vähennettynä yhdellä.
Luvun kertoma on "this<=1 ? 1 : this*(this-1).f_kertoma()" kohdekoodina.
Luvun tekijät ovat "(()=>{var l=[]; for (var i=1; i<=this; i++) if (this%i===0) l.push(i); return l;})()" kohdekoodina.
Luvun alkutekijät ovat "(()=>{var l=[]; for (var i=2; i<this; i++) if (this%i===0&&!l.some(j=>i%j===0)) l.push(i); return l;})()" kohdekoodina.
Luku pyöristettynä on "Math.round(this)" kohdekoodina.
Luku pyöristettynä kivaan tarkkuuteen on "Math.round(this*Math.pow(10, e))/Math.pow(10, e)" kohdekoodina.
Luku kokonaislukuna on "Math.floor(this)" kohdekoodina.
Luku merkkijonona on "this.toString()" kohdekoodina.
Luvun merkkijonoesitys on "this.toString()" kohdekoodina.
# String/merkkijono
Tulkitse merkkijono kohdekoodityyppinä "String".
Merkkijonon pituus on "this.length" kohdekoodina.
Merkkijonon merkit ovat "Array.from(this)" kohdekoodina.
Merkkijonon sanat ovat "this.split(/\\s+/)" kohdekoodina.
Merkkijonon kentät ovat "this.split(/,/)" kohdekoodina.
Merkkijono siistittynä on "this.trim()" kohdekoodina.
Merkkijono merkkijonona on se itse.
Merkkijonon merkkijonoesitys on se itse.
Kun kiva merkkijono näytetään käyttäjälle,
suorita kohdekoodi "alert(this);".
Kun kiva merkkijono jaetaan kivasta erottimesta kivoiksi alamerkkijonoiksi,
suorita kohdekoodi "for (var s of this.split(kiva_erotin)) kiva_alamerkkijono.push(s);".
# HTMLDocument/sivu
Tulkitse sivu kohdekoodityyppinä "HTMLDocument".
Sisällytä kohdekoodi "
if (typeof HTMLDocument !== 'undefined') {
".
Kun kiva sivu näyttää kivan tekstin,
suorita kohdekoodi "this.write(kiva_teksti);".
Kun kiva sivu etsii elementin kivalla nimellä mukavaan muuttujaan,
suorita kohdekoodi "mukava_muuttuja.arvo = this.getElementById(kiva_nimi);".
Kun kiva sivu etsii elementin kivalla nimellä,
suorita kohdekoodi "return this.getElementById(kiva_nimi);".
Sisällytä kohdekoodi "}\u".
# HTMLElement/elementti
Tulkitse elementti kohdekoodityyppinä "HTMLElement".
Sisällytä kohdekoodi "if (typeof HTMLElement !== 'undefined') {
HTMLElement.prototype.t_assign = function(n, v) {
switch (n) {
case 'painaa_P__P':
this.addEventListener('click', v);
break;
}
this[n] = v;
};
".
Kun kivalle elementille kirjoitetaan kiva teksti,
suorita kohdekoodi "this.innerHTML += kiva_teksti;".
Kun kivaan elementtiin kirjoitetaan kiva teksti,
suorita kohdekoodi "this.innerHTML += kiva_teksti;".
Kun kiva elementti pyyhitään,
suorita kohdekoodi "this.innerHTML = '';".
Sisällytä kohdekoodi "}\u".
# Date/ajankohta
Tulkitse ajankohta kohdekoodityyppinä "Date".
Ajankohta päivämäärämerkkijonona on "this.getLocaleDateString()" kohdekoodina.
Ajankohta kellonaikamerkkijonona on "this.getLocaleTimeString()" kohdekoodina.
Ajankohta merkkijonona on "this.getLocaleString()" kohdekoodina.
Ajankohta millisekunteina on "this.getTime()" kohdekoodina.
Ajankohdan vuosi on "this.getFullYear()" kohdekoodina.
Ajankohdan kuukausi on "this.getMonth()" kohdekoodina.
Ajankohdan päivä on "this.getDay()" kohdekoodina.
Ajankohdan tunti on "this.getHours()" kohdekoodina.
Ajankohdan minuutti on "this.getMinutes()" kohdekoodina.
Ajankohdan sekunti on "this.getSeconds()" kohdekoodina.
Olkoon nykyinen aika "new Date()" kohdekoodina.
# Muuttuja
Muuttujalla on arvo.
Kun kivaan muuttujaan luetaan luku,
suorita kohdekoodi "this.arvo = Number.parseInt(prompt('Syötä luku'));".
Kun kivaan muuttujaan luetaan luku kivalla viestillä,
suorita kohdekoodi "this.arvo = Number.parseInt(prompt(kiva_viesti));".
# Promise
Sisällytä kohdekoodi "
Promise.prototype.a_jälkeen = Promise.prototype.then;
Promise.prototype.a_onnistuessa = Promise.prototype.then;
Promise.prototype.a_epäonnistuessa = Promise.prototype.catch;
".
# toistetaan
Kun toistetaan n kertaa tehokas toiminto,
suorita kohdekoodi "for (var i = 0; i < n; i++) tehokas_toiminto();".
# tehdään
Kun tehdään määritellyn ajan kuluttua tehokas toiminto,
suorita kohdekoodi "setTimeout(tehokas_toiminto, määritelty_aika);".
# tulostetaan
Kun tulostetaan kiva viesti,
suorita kohdekoodi "console.log(kiva_viesti);".
Olkoon nykyinen konsoli "console" kohdekoodina.
Kun tulostetaan kiva viesti kivaan konsoliin,
suorita kohdekoodi "kiva_konsoli.log(kiva_viesti);".
# annetut argumentit
Sisällytä kohdekoodi "
if (typeof process !== 'undefined') {
".
Olkoon annetut argumentit "process.argv.slice(2)" kohdekoodina.
Sisällytä kohdekoodi "}\u".