Entropy/Narcissist: Difference between revisions

(→‎{{header|Wren}}: Now uses new core library method.)
(→‎{{header|jq}}: def sum():)
 
(12 intermediate revisions by 10 users not shown)
Line 1:
{{task}}
[[File:ENTROPY.JPG|800px400px||right]]
 
;Task:
Line 12:
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Text_Io;
with Ada.Command_Line;
with Ada.Numerics.Elementary_Functions;
Line 77:
Float_Io.Put (Entr);
New_Line;
end Entropy;</langsyntaxhighlight>
{{out}}
<pre>Entropy of 'entropy.adb' is 4.559854</pre>
Line 86:
Note that the source here uses spaces, not tabs, hence the low entropy, replacing all runs of four spaces with a single space
results in an entropy of +4.64524532762062e +0.
<langsyntaxhighlight lang="algol68">BEGIN
# calculate the shannon entropy of a string #
PROC shannon entropy = ( STRING s )REAL:
Line 144:
print( ( shannon entropy( file contents ), newline ) )
FI
END</langsyntaxhighlight>
{{out}}
<pre>
Line 152:
=={{header|AutoHotkey}}==
{{works with|AutoHotkey 1.1}}
<langsyntaxhighlight AutoHotkeylang="autohotkey">FileRead, var, *C %A_ScriptFullPath%
MsgBox, % Entropy(var)
 
Line 167:
}
return, e
}</langsyntaxhighlight>
{{Output}}
<pre>5.942956</pre>
 
=={{header|AWK}}==
The record separator RS is set to end of file. So getline reads the whole file in one line.
<syntaxhighlight lang="awk">
BEGIN{FS=""
RS="\x04"#EOF
getline<"entropy.awk"
for(i=1;i<=NF;i++)H[$i]++
for(i in H)E-=(h=H[i]/NF)*log(h)
print "bytes ",NF," entropy ",E/log(2)
exit}</syntaxhighlight>
{{Output}}
<pre>bytes 158 entropy 5.2802</pre>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang="bbcbasic"> DIM Freq%(255)
FOR I%=PAGE TO LOMEM Freq%(?I%)+=1 NEXT
Size=LOMEM - PAGE
FOR I%=0 TO 255
IF Freq%(I%) Entropy+=Freq%(I%) / Size * LN(Freq%(I%) / Size) / LN(2)
NEXT
PRINT "My size is ";Size " bytes and my entropy is ";-Entropy "!"
END</syntaxhighlight>
{{out}}
<pre>My size is 224 bytes and my entropy is 5.11257089!</pre>
 
=={{header|C}}==
Line 176 ⟶ 202:
 
Assumes that the source file is stored in the working directory as "entropy.c".
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
Line 223 ⟶ 249:
printf("%lf\n",H);
return 0;
}</langsyntaxhighlight>
{{out}}
<syntaxhighlight lang="text">5.195143</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <fstream>
#include <cmath>
Line 268 ⟶ 294:
cout<<entropy(readFile("entropy.cpp"));
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>4.58688</pre>
Line 274 ⟶ 300:
=={{header|Crystal}}==
{{trans|Ruby}}
<langsyntaxhighlight lang="ruby">def entropy(s)
counts = s.chars.each_with_object(Hash(Char, Float64).new(0.0)) { |c, h| h[c] += 1 }
counts.values.sum do |count|
Line 282 ⟶ 308:
end
 
puts entropy File.read(__FILE__)</langsyntaxhighlight>
{{out}}
<pre>
Line 289 ⟶ 315:
 
=={{header|D}}==
<langsyntaxhighlight lang="d">void main(in string[] args) {
import std.stdio, std.algorithm, std.math, std.file;
 
Line 299 ⟶ 325:
.sum
.writeln;
}</langsyntaxhighlight>
{{out}}
<pre>6.29803</pre>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">File.open(__ENV__.file, [:read], fn(file) ->
text = IO.read(file, :all)
leng = String.length(text)
Line 315 ⟶ 341:
end)
|> IO.puts
end)</langsyntaxhighlight>
 
{{out}}
Line 323 ⟶ 349:
 
=={{header|Emacs Lisp}}==
<langsyntaxhighlight lang="lisp">(defun shannon-entropy (input)
(let ((freq-table (make-hash-table))
(entropy 0)
Line 342 ⟶ 368:
(shannon-entropy (with-temp-buffer
(insert-file-contents "U:/rosetta/narcissist.el")
(buffer-string))))</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="lisp">(narcissist)
4.5129548515535785</langsyntaxhighlight>
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">#! /usr/bin/escript
 
-define(LOG2E, 1.44269504088896340735992).
Line 372 ⟶ 398:
_ -> count(Data, I+1, Frq #{Chr => 1})
end.
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 379 ⟶ 405:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: assocs io io.encodings.utf8 io.files kernel math
math.functions math.statistics prettyprint sequences ;
IN: rosetta-code.entropy-narcissist
Line 390 ⟶ 416:
"entropy-narcissist.factor" utf8 [
contents entropy .
] with-file-reader</langsyntaxhighlight>
{{out}}
<pre>
Line 397 ⟶ 423:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight FreeBASIClang="freebasic">' version 01-06-2016
' compile with: fbc -s console
' modified code from ENTROPY entry
Line 449 ⟶ 475:
Print : Print "hit any key to end program"
Sleep
End</langsyntaxhighlight>
{{out}}
<pre>Windows version
Line 462 ⟶ 488:
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 496 ⟶ 522:
l := float64(len(d))
return math.Log2(l) - hm/l
}</langsyntaxhighlight>
{{out}}
<pre>
Line 504 ⟶ 530:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import qualified Data.ByteString as BS
import Data.List
import System.Environment
Line 514 ⟶ 540:
entropy = sort >>> group >>> map genericLength >>> normalize >>> map lg >>> sum
where lg c = -c * logBase 2 c
normalize c = let sc = sum c in map (/ sc) c</langsyntaxhighlight>
 
{{out}} In a shell
Line 531 ⟶ 557:
 
=={{header|J}}==
'''Solution''':<langsyntaxhighlight lang="j"> entropy=: +/@:-@(* 2&^.)@(#/.~ % #)
1!:2&2 entropy 1!:1 (4!:4 <'entropy') { 4!:3''</langsyntaxhighlight>
'''Example''':<langsyntaxhighlight lang="j"> load 'entropy.ijs'
4.73307</langsyntaxhighlight>
 
=={{header|Java}}==
 
<langsyntaxhighlight lang="java">
import java.io.BufferedReader;
import java.io.File;
Line 579 ⟶ 605:
 
}
</syntaxhighlight>
</lang>
 
{{out}}
<pre>Entropy of file "src/EntropyNarcissist.java" = 4.691381977073.</pre>
 
=={{header|jq}}==
'''Works with jq, the C implementation of jq'''
 
'''Works with gojq, the Go implementation of jq'''
 
'''Works with jaq, the Rust implementation of jq'''
 
The program assumes it will be presented to itself using
an invocation of jq with the -sR options, along the lines of:
<pre>
jq -sR -f entropy-narcissist.jq < entropy-narcissist.jq
</pre>
 
If your jq supports `keys_unsorted`, feel free to use it instead of `keys`.
<syntaxhighlight lang="jq">
def chars: explode[] | [.] | implode;
 
def bow(stream):
reduce stream as $word ({}; .[($word|tostring)] += 1);
 
def sum(s): reduce s as $x (0; .+$x);
 
length as $l
| bow(chars)
| sum(keys[] as $k | .[$k] as $c | $c * ($c|log2) )
| ($l|log2) - ./$l
</syntaxhighlight>
{{output}}
<pre>
{{output}}
<pre>
4.796499915496963
</pre>
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">using DataStructures
 
entropy(s) = -sum(x -> x / length(s) * log2(x / length(s)), values(counter(s)))
println("self-entropy: ", entropy(read(Base.source_path(), String)))</langsyntaxhighlight>
 
{{out}}
Line 594 ⟶ 654:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.0 (entropy_narc.kt)
 
fun log2(d: Double) = Math.log(d) / Math.log(2.0)
Line 616 ⟶ 676:
val prog = java.io.File("entropy_narc.kt").readText()
println("This program's entropy is ${"%18.16f".format(shannon(prog))}")
}</langsyntaxhighlight>
 
{{out}}
Line 625 ⟶ 685:
=={{header|Lua}}==
arg[0] gives the path of the script currently being executed
<langsyntaxhighlight Lualang="lua">function getFile (filename)
local inFile = io.open(filename, "r")
local fileContent = inFile:read("*all")
Line 650 ⟶ 710:
end
 
print(entropy(getFile(arg[0])))</langsyntaxhighlight>
{{out}}
<pre>4.3591214356783</pre>
Line 657 ⟶ 717:
As we have compiled without specific options to change the way the executable is named, we can retrieve the source file name by adding the suffix “.nim” to the executable file name. We suppose also that the source file is in the same directory as the executable (which is true in our environment).
 
<langsyntaxhighlight Nimlang="nim">import os, math, strutils, tables
 
let execName = getAppFilename().splitPath().tail
Line 670 ⟶ 730:
 
echo "Source file entropy: ", srcName.readFile().entropy().formatFloat(ffDecimal, 5)
echo "Binary file entropy: ", execName.readFile().entropy().formatFloat(ffDecimal, 5)</langsyntaxhighlight>
 
{{out}}
Line 677 ⟶ 737:
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">entropy(s)=s=Vec(s);my(v=vecsort(s,,8));-sum(i=1,#v,(x->x*log(x))(sum(j=1,#s,v[i]==s[j])/#s))/log(2);
entropy(Str(entropy))</langsyntaxhighlight>
{{out}}
<pre>%1 = 4.54978213</pre>
 
=={{header|Perl}}==
<langsyntaxhighlight Perllang="perl">#!/usr/bin/perl
use strict ;
use warnings ;
Line 709 ⟶ 769:
}
$infocontent *= -1 ;
say "The information content of the source file is $infocontent !" ;</langsyntaxhighlight>
{{out}}
<pre>The information content of the source file is 4.6487923749222 !</pre>
Line 715 ⟶ 775:
=={{header|Phix}}==
Minor edit to the [[Entropy#Phix|Entropy]] answer, if compiled assumes source code is in the same directory.
<!--<syntaxhighlight lang="phix">(notonline)-->
<lang Phix>function log2(atom v)
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- command_line, file i/o</span>
return log(v)/log(2)
<span style="color: #008080;">function</span> <span style="color: #000000;">entropy</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
end function
<span style="color: #004080;">sequence</span> <span style="color: #000000;">symbols</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span>
 
<span style="color: #000000;">counts</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
function entropy(sequence s)
<span style="color: #004080;">integer</span> <span style="color: #000000;">N</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
sequence symbols = {},
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">N</span> <span style="color: #008080;">do</span>
counts = {}
<span style="color: #004080;">object</span> <span style="color: #000000;">si</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
integer N = length(s)
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">si</span><span style="color: #0000FF;">,</span><span style="color: #000000;">symbols</span><span style="color: #0000FF;">)</span>
for i=1 to N do
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
object si = s[i]
<span style="color: #000000;">symbols</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">symbols</span><span style="color: #0000FF;">,</span><span style="color: #000000;">si</span><span style="color: #0000FF;">)</span>
integer k = find(si,symbols)
<span style="color: #000000;">counts</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">counts</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
if k=0 then
<span symbols style="color: append(symbols,si)#008080;">else</span>
<span style="color: #000000;">counts</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
counts = append(counts,1)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
else
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
counts[k] += 1
<span style="color: #004080;">atom</span> <span style="color: #000000;">H</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
end if
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">counts</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
end for
<span style="color: #004080;">atom</span> <span style="color: #000000;">ci</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">counts</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]/</span><span style="color: #000000;">N</span>
atom H = 0
<span style="color: #000000;">H</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">ci</span><span style="color: #0000FF;">*</span><span style="color: #7060A8;">log2</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ci</span><span style="color: #0000FF;">)</span>
integer n = length(counts)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
for i=1 to n do
<span style="color: #008080;">return</span> <span style="color: #000000;">H</span>
atom ci = counts[i]/N
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
H -= ci*log2(ci)
end for
<span style="color: #0000FF;">?</span><span style="color: #000000;">entropy</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">get_text</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">open</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">command_line</span><span style="color: #0000FF;">()[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">],</span><span style="color: #008000;">".exe"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">".exw"</span><span style="color: #0000FF;">)),</span><span style="color: #008000;">"rb"</span><span style="color: #0000FF;">))</span>
return H
<!--</syntaxhighlight>-->
end function
Output is eg 4.993666233, but that may vary with Windows/Linux line endings, tabs vs spaces, trailing returns, BOM headers, etc.
 
?entropy(get_text(open(substitute(command_line()[2],".exe",".exw")),"rb"))</lang>
{{out}}
<pre>
4.993666233
</pre>
 
=={{header|PHP}}==
 
<langsyntaxhighlight PHPlang="php"><?php
$h = 0;
$s = file_get_contents(__FILE__);
Line 758 ⟶ 813:
( $c / $l ) *
log( $c / $l, 2 );
echo $h;</langsyntaxhighlight>
 
{{out}}
<pre>2.9339128173013</pre>
 
=={{header|Picat}}==
{{trans|Go}}
{{works with|Picat}}
<syntaxhighlight lang="picat">
entropy(File) = E =>
Bytes = read_file_bytes(File),
F = [0: I in 1..256],
foreach (B in Bytes)
B1 := B + 1,
F[B1] := F[B1] + 1
end,
HM = 0,
foreach (C in F)
if (C > 0) then
HM := HM + C * log(2, C)
end
end,
L = Bytes.length,
E = log(2, L) - HM / L.
 
main(Args) =>
printf("Entropy: %f\n", entropy(Args[1])).
</syntaxhighlight>
{{out}}
<pre>
$ picat entropy.pi entropy.pi
Entropy: 4.384622
</pre>
 
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">
<lang PicoLisp>
(scl 8)
(load "@lib/math.l")
Line 795 ⟶ 879:
 
(bye)
</syntaxhighlight>
</lang>
{{Out}}
<pre>
My entropy is 4.12169822
</pre>
 
=={{header|Python}}==
{{works with|Python 3.4}}
Line 805 ⟶ 890:
Minor edit to the [[Entropy#Python|Entropy]] answer.
 
<langsyntaxhighlight Pythonlang="python">import math
from collections import Counter
 
Line 815 ⟶ 900:
b=f.read()
print(entropy(b))</langsyntaxhighlight>
{{Output}}
<pre>4.575438063744619</pre>
Line 821 ⟶ 906:
=={{header|Racket}}==
The entropy of the program below is 4.512678555350348.
<langsyntaxhighlight lang="racket">
#lang racket
(require math)
Line 829 ⟶ 914:
(- (for/sum ([(d c) (in-hash (samples->hash ds))])
(* (/ c n) (log2 (/ c n)))))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
{{Works with|rakudo|2016.05}}
<syntaxhighlight lang="raku" perl6line>say log(2) R/ [+] map -> \p { p * -log p }, $_.comb.Bag.values >>/>> +$_
given slurp($*PROGRAM-NAME).comb</langsyntaxhighlight>
Result should be in the neighborhood of 4.9
{{out}}
Line 842 ⟶ 927:
=={{header|REXX}}==
REXX doesn't have a BIF (built-in function) for &nbsp; '''log''' &nbsp; or &nbsp; '''ln''', &nbsp; so the subroutine (function) &nbsp; '''log2''' &nbsp; is included herein.
<langsyntaxhighlight lang="rexx">/*REXX program calculates the "information entropy" for ~this~ REXX program. */
numeric digits length( e() ) % 2 - length(.) /*use 1/2 of the decimal digits of E. */
#= 0; @.= 0; $=; $$=; recs= sourceline() /*define some handy─dandy REXX vars. */
Line 872 ⟶ 957:
ox=izz; ii=ii+is*2**j; end /*while*/; x= x * e** -ii -1; z= 0; _= -1; p= z
do k=1; _= -_ * x; z= z+_/k; if z=p then leave; p= z; end /*k*/
r= z + ii; if arg()==2 then return r; return r / log2(2,.)</langsyntaxhighlight>
{{out|output|text=&nbsp; when using this REXX program as input:}}
<pre>
Line 883 ⟶ 968:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">def entropy(s)
counts = s.each_char.tally
size = s.size.to_f
Line 894 ⟶ 979:
s = File.read(__FILE__)
p entropy(s)
</syntaxhighlight>
</lang>
{{out}}
<pre>4.653607496799478
Line 900 ⟶ 985:
 
=={{header|Rust}}==
<langsyntaxhighlight Rustlang="rust">use std::fs::File;
use std::io::{Read, BufReader};
 
Line 925 ⟶ 1,010:
let file = BufReader::new(File::open(name).expect("Could not read file."));
println!("Entropy is {}.", entropy(file.bytes().flatten()));
}</langsyntaxhighlight>
{{out}}
<pre>Entropy is 5.7108583.</pre>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">func entropy(s) {
[0,
s.chars.freq.values.map {|c|
Line 939 ⟶ 1,024:
}
 
say entropy(File(__FILE__).open_r.slurp)</langsyntaxhighlight>
{{out}}
<pre>
Line 947 ⟶ 1,032:
=={{header|Tcl}}==
Note that this code doesn't bother to close the open handle on the script; it is only suitable as a demonstration program.
<langsyntaxhighlight lang="tcl">proc entropy {str} {
set log2 [expr log(2)]
foreach char [split $str ""] {dict incr counts $char}
Line 958 ⟶ 1,043:
}
 
puts [format "entropy = %.5f" [entropy [read [open [info script]]]]]</langsyntaxhighlight>
{{out}}
<pre>
entropy = 4.59099
</pre>
 
=={{header|V (Vlang)}}==
{{trans|Go}}
<syntaxhighlight lang="go">import os
import math
 
fn main() {
println("Binary file entropy: ${entropy(os.args[0])?}")
}
fn entropy(file string) ?f64 {
d := os.read_bytes(file)?
 
mut f := [256]f64{}
for b in d {
f[b]++
}
mut hm := 0.0
for c in f {
if c > 0 {
hm += c * math.log2(c)
}
}
l := f64(d.len)
return math.log2(l) - hm/l
}</syntaxhighlight>
{{out}}
<pre>
Binary file entropy: 5.676177202237735
</pre>
 
=={{header|Wren}}==
Basically an amalgam of the code in the [[Print_itself#Wren]] and [[Entropy#Wren]] tasks.
<langsyntaxhighlight ecmascriptlang="wren">import "os" for Process
import "io" for File
 
Line 982 ⟶ 1,097:
}
var l = s.count
System.print(l.log2 - hm/l)</langsyntaxhighlight>
 
{{out}}
Line 988 ⟶ 1,103:
4.6302314663
</pre>
 
=={{header|XPL0}}==
To run: entropy < entropy.xpl
<syntaxhighlight lang "XPL0">int Count(128), I, Len, Ch;
real Sum, Prob;
[for I:= 0 to 127 do Count(I):= 0;
Len:= 0;
loop [Ch:= ChIn(1);
if Ch = $1A\EOF\ then quit;
Count(Ch):= Count(Ch)+1;
Len:= Len+1;
];
Sum:= 0.;
for I:= 0 to 127 do
if Count(I) then
[Prob:= float(Count(I)) / float(Len);
Sum:= Sum + Prob*Ln(Prob);
];
RlOut(0, -Sum/Ln(2.));
]</syntaxhighlight>
{{out}}
<pre>
4.63457</pre>
 
=={{header|zkl}}==
Minor edit to the [[Entropy#zkl|Entropy]] answer.
<langsyntaxhighlight lang="zkl">fcn entropy(text){
text.pump(Void,fcn(c,freq){ c=c.toAsc(); freq[c]=freq[c]+1; freq }
.fp1((0).pump(256,List,(0.0).create.fp(0)).copy()))
Line 1,000 ⟶ 1,138:
}
 
entropy(File("entropy.zkl").read().text).println();</langsyntaxhighlight>
{{out}}
<pre>
2,456

edits