Kernighans large earthquake problem: Difference between revisions

m
syntax highlighting fixup automation
m (syntax highlighting fixup automation)
Line 21:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">L(ln) File(‘data.txt’).read_lines()
I Float(ln.split(‘ ’, group_delimiters' 1B)[2]) > 6
print(ln)</langsyntaxhighlight>
 
{{out}}
Line 34:
I'm going to make the assumption that all magnitudes are given as floating points rounded to one decimal place, e.g. "6.0" when the magnitude is exactly 6. That way I don't need to actually use floating point logic. The hardware print routines were omitted to keep things short, since the Sega Genesis doesn't have a built-in kernel and so I'd have to manually write to the video chip. Chances are you're not interested in seeing all that fluff when you'd rather look at the actual algorithm for the task.
 
<langsyntaxhighlight lang="68000devpac">;Macros
macro pushRegs 1
MOVEM.L \1,-(SP)
Line 149:
bra lineseek
.done:
RTS</langsyntaxhighlight>
{{out}}
<pre>8/27/1883 Krakatoa 8.8
Line 164:
automatically.
 
<langsyntaxhighlight lang="8080asm">FCB1: equ 5Ch ; FCB for first command line argument
puts: equ 9 ; CP/M syscall to print a string
fopen: equ 15 ; CP/M syscall to open a file
Line 230:
jmp 5
emsg: db 'Error!$'
line: equ $ ; Line buffer after program </langsyntaxhighlight>
 
{{out}}
Line 252:
{{libheader|Action! Tool Kit}}
{{libheader|Action! Real Math}}
<langsyntaxhighlight Actionlang="action!">INCLUDE "H6:REALMATH.ACT"
 
BYTE FUNC FindFirstNonspace(CHAR ARRAY s BYTE start)
Line 314:
PrintRE(value) PutE()
Process(fname,value,1)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Kernighans_large_earthquake_problem.png Screenshot from Atari 8-bit computer]
Line 339:
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">-- Kernighans large earthquake problem
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
Line 371:
end loop;
Close (Inpt_File);
end Main;</langsyntaxhighlight>
The file data.txt contains a 0 length line as well as a line composed of only blanks.
<pre>
Line 391:
 
=={{header|ALGOL 68}}==
<langsyntaxhighlight lang="algol68">IF FILE input file;
STRING file name = "data.txt";
open( input file, file name, stand in channel ) /= 0
Line 461:
# close the file #
close( input file )
FI</langsyntaxhighlight>
 
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="amazing hopper">
<lang Amazing Hopper>
/* Kernighans large earthquake problem. */
 
Line 491:
CEND
END
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 534:
<p>On the other hand, HOPPER processes dates in DD/MM/YYYY format, and the file records dates in MM/DD/YYYY format: therefore, it is necessary to exchange "DD" for "MM", because HOPPER does not allow other types of format for "dates".</p>
<p>The final program would be as follows:</p>
<syntaxhighlight lang="amazing hopper">
<lang Amazing Hopper>
/* Kernighans large earthquake problem. */
 
Line 568:
CEND
END
</syntaxhighlight>
</lang>
<p>And this is fast!</p>
<p>If you want to print the original dates, just add the line "Swap Day By Month(1,2)" before printing the result. In this case, the results are printed with the dates changed.</p>
Line 581:
=={{header|AppleScript}}==
 
<langsyntaxhighlight lang="applescript">on kernighansEarthquakes(magnitudeToBeat)
-- A local "owner" for the long AppleScript lists. Speeds up references to their items and properties.
script o
Line 616:
end kernighansEarthquakes
 
kernighansEarthquakes(6)</langsyntaxhighlight>
 
===Functional===
Line 623:
while emphasising code reuse, and speed of writing and refactoring:
 
<langsyntaxhighlight lang="applescript">use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
Line 762:
set my text item delimiters to dlm
str
end unlines</langsyntaxhighlight>
{{Out}}
<pre>Magnitudes above 6.0 in ~/Desktop/data.txt:
Line 775:
and the magnitude as an optional left argument (defaulting to 6).
 
<langsyntaxhighlight APLlang="apl">quakes←{
⍺←6
nl←⎕UCS 13 10
Line 782:
keep←⍺{0::0 ⋄ ⍺ < ⍎3⊃(~⍵∊4↑⎕TC)⊆⍵}¨lines
↑keep/lines
}</langsyntaxhighlight>
 
{{out}}
Line 799:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">data: {
3/13/2009 CostaRica 5.1
8/27/1883 Krakatoa 8.8
Line 808:
 
print first sort.descending.by:'magnitude map split.lines data =>
[to :earthquake split.words &]</langsyntaxhighlight>
 
{{out}}
Line 815:
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk"> awk '$3 > 6' data.txt</langsyntaxhighlight>
 
=={{header|Bash}}==
<langsyntaxhighlight lang="bash">#!/bin/bash
while read line
do
[[ ${line##* } =~ ^([7-9]|6\.0*[1-9]).*$ ]] && echo "$line"
done < data.txt</langsyntaxhighlight>
 
{{out}}
Line 840:
 
=={{header|BASIC256}}==
<syntaxhighlight lang="basic256">
<lang BASIC256>
f = freefile
filename$ = "data.txt"
Line 852:
close f
end
</syntaxhighlight>
</lang>
 
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <string.h>
#include <stdlib.h>
Line 883:
if (line) free(line);
return 0;
}</langsyntaxhighlight>
 
{{output}}
Line 895:
 
=={{header|C sharp}}==
<langsyntaxhighlight lang="csharp">using System;
using System.IO;
using System.Linq;
Line 913:
select parts;
 
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">// Randizo was here!
#include <iostream>
#include <fstream>
Line 959:
 
return 0;
}</langsyntaxhighlight>
 
New version:
<langsyntaxhighlight lang="cpp">// Jolkdarr was also here!
#include <iostream>
#include <iomanip>
Line 984:
cout << endl << "Number of quakes greater than 6 is " << count_quake << endl;
return 0;
}</langsyntaxhighlight>
 
=={{header|Cixl}}==
<langsyntaxhighlight lang="cixl">
use: cx;
 
Line 995:
$m1 6 >= $m2 0 > and {[$time @@s $place @@s $mag] say} if
} for
</syntaxhighlight>
</lang>
 
{{output}}
Line 1,007:
First, with a data file. This adds a fair amount of verbosity to COBOL. For something this one-off, a simpler cut using ACCEPT from standard in is shown.
 
<langsyntaxhighlight lang="cobol">
*>
*> Kernighan large earthquake problem
Line 1,093:
.
 
end program quakes.</langsyntaxhighlight>
 
{{output}}
Line 1,108:
A slighter shorter-version.
 
<langsyntaxhighlight lang="cobol"> *>
*> Tectonics: ./kerighan-earth-quakes <quakes.txt
identification division.
Line 1,140:
 
goback.
end program quakes.</langsyntaxhighlight>
 
That cut would be used as <pre>prompt$ ./kernighans-large-earthquakes <quakes.txt</pre>
 
=={{header|Cowgol}}==
<langsyntaxhighlight lang="cowgol">include "cowgol.coh";
include "file.coh";
 
Line 1,226:
end if;
 
ForEachLine(&quakes, PrintIfGt6); </langsyntaxhighlight>
 
{{out}}
Line 1,243:
=={{header|D}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="d">import std.conv : to;
import std.regex : ctRegex, split;
import std.stdio : File, writeln;
Line 1,257:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>Those earthquakes with a magnitude > 6.0 are:
Line 1,264:
 
=={{header|Emacs Lisp}}==
<langsyntaxhighlight lang="lisp">(with-temp-buffer
(insert-file-contents "data.txt")
(goto-char (point-min))
Line 1,273:
(when (> (string-to-number magn) 6.0)
(message line)))
(forward-line 1)))</langsyntaxhighlight>
 
=={{header|Factor}}==
<code>lines</code> is a convenience word that reads lines from standard input. If you don't want to type them all in yourself, it is suggested that you give the program a file to read. For example, on the Windows command line: <code>factor kernighan.factor < earthquakes.txt</code>
<langsyntaxhighlight lang="factor">USING: io math math.parser prettyprint sequences splitting ;
IN: rosetta-code.kernighan
 
lines [ "\s" split last string>number 6 > ] filter .</langsyntaxhighlight>
 
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">
Dim As Long f
f = Freefile
Line 1,301:
Close #f
Sleep
</syntaxhighlight>
</lang>
 
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,336:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,348:
=={{header|Groovy}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="groovy">import java.util.regex.Pattern
 
class LargeEarthquake {
Line 1,361:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>Those earthquakes with a magnitude > 6.0 are:
Line 1,369:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import qualified Data.ByteString.Lazy.Char8 as C
 
main :: IO ()
Line 1,378:
(\x ->
[ x
| 6 < (read (last (C.unpack <$> C.words x)) :: Float) ])</langsyntaxhighlight>
{{Out}}
<pre>"8/27/1883 Krakatoa 8.8"
Line 1,384:
 
=={{header|J}}==
<syntaxhighlight lang="j">
<lang J>
NB. this program is designed for systems where the line ending is either LF or CRLF
 
Line 1,399:
(y <: magnitudes) # lines
)
</syntaxhighlight>
</lang>
 
<pre>
Line 1,409:
=={{header|Java}}==
Input file contains sample data shown in the task
<syntaxhighlight lang="java">
<lang Java>
import java.io.BufferedReader;
import java.io.FileReader;
Line 1,430:
 
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,440:
=={{header|JavaScript}}==
Input file contains sample data shown in the task. The code below uses Nodejs to read the file.
<syntaxhighlight lang="javascript">
<lang JavaScript>
const fs = require("fs");
const readline = require("readline");
Line 1,463:
}
});
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,487:
where data.txt is as for [[#Snobol|Snobol]].
 
<langsyntaxhighlight lang="jq">input as $one
| "The earthquakes from \(input_filename) with a magnitude greater than 6 are:\n",
( $one, inputs
Line 1,498:
| $line) catch "WARNING: column 3 is not a recognized number in the line:\n\($line)"
end )
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,510:
=={{header|Julia}}==
Using the example data as a small text file.
<langsyntaxhighlight lang="julia">using DataFrames, CSV
 
df = CSV.File("kernighansproblem.txt", delim=" ", ignorerepeated=true,
Line 1,517:
 
println(filter(row -> row[:Magnitude] > 6, df))
</langsyntaxhighlight> {{output}} <pre>
2×3 DataFrame
│ Row │ Date │ Location │ Magnitude │
Line 1,527:
 
=={{header|Klingphix}}==
<langsyntaxhighlight Klingphixlang="klingphix">arg pop nip len dup
 
( [get nip]
Line 1,544:
$f fclose
 
"End " input</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// Version 1.2.40
 
import java.io.File
Line 1,557:
if (it.split(r)[2].toDouble() > 6.0) println(it)
}
}</langsyntaxhighlight>
 
{{output}}
Line 1,570:
=={{header|Lua}}==
For each line, the Lua pattern "%S+$" is used to capture between the final space character and the end of the line.
<langsyntaxhighlight lang="lua">-- arg[1] is the first argument provided at the command line
for line in io.lines(arg[1] or "data.txt") do -- use data.txt if arg[1] is nil
magnitude = line:match("%S+$")
if tonumber(magnitude) > 6 then print(line) end
end</langsyntaxhighlight>
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module Find_Magnitude {
data$={8/27/1883 Krakatoa 8.8
Line 1,599:
 
 
</syntaxhighlight>
</lang>
 
 
Line 1,610:
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">Import["data.txt", "Table"] // Select[Last /* GreaterThan[6]]</langsyntaxhighlight>
 
=={{header|Nim}}==
Here is one way to do that:
 
<langsyntaxhighlight Nimlang="nim">import strscans
 
for line in "data.txt".lines:
Line 1,623:
if magnitude > 6:
echo line
# else wrong line: ignore.</langsyntaxhighlight>
 
Here is another way with less checks:
 
<langsyntaxhighlight Nimlang="nim">import strutils
 
for line in "data.txt".lines:
let magnitude = line.rsplit(' ', 1)[1]
if magnitude.parseFloat() > 6:
echo line</langsyntaxhighlight>
 
{{out}}
Line 1,639:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">perl -n -e '/(\S+)\s*$/ and $1 > 6 and print' data.txt</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">filename</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"data.txt"</span>
Line 1,656:
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 1,664:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">argument tail nip len dup
if
get nip
Line 1,685:
endif
endwhile
fclose</langsyntaxhighlight>
 
=={{header|PHP}}==
Parse using PHP's fscanf().
<langsyntaxhighlight lang="php"><?php
 
// make sure filename was specified on command line
Line 1,706:
 
fclose( $fh );
</syntaxhighlight>
</lang>
 
Usage: Specify file name on command line. Ex:
Line 1,718:
 
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">
<lang PicoLisp>
(load "@lib/misc.l")
 
Line 1,727:
(prinl (align -10 Date) " " (align -15 Quake) " " Mag)))))
(bye)
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,737:
{{works with|SWI Prolog}}
Example command line: <code>swipl kernighans_earthquake.pl earthquake.txt</code>.
<langsyntaxhighlight lang="prolog">:- initialization(main, main).
 
process_line(Line):-
Line 1,765:
main(_):-
swritef(Message, 'File argument is missing\n', []),
write(user_error, Message).</langsyntaxhighlight>
 
{{out}}
Line 1,774:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">If OpenConsole() And ReadFile(0,"data.txt")
PrintN("Those earthquakes with a magnitude > 6.0 are:")
While Not Eof(0)
Line 1,784:
CloseFile(0)
Input()
EndIf</langsyntaxhighlight>
{{out}}
<pre>Those earthquakes with a magnitude > 6.0 are:
Line 1,792:
=={{header|Python}}==
Typed into a bash shell or similar:
<langsyntaxhighlight lang="python">python -c '
with open("data.txt") as f:
for ln in f:
if float(ln.strip().split()[2]) > 6:
print(ln.strip())'</langsyntaxhighlight>
 
 
Or, if scale permits a file slurp and a parse retained for further processing, we can combine the parse and filter with a concatMap abstraction:
 
<langsyntaxhighlight lang="python">from os.path import expanduser
from functools import (reduce)
from itertools import (chain)
Line 1,838:
# MAIN ---
if __name__ == '__main__':
main()</langsyntaxhighlight>
{{Out}}
<pre>[('8/27/1883', 'Krakatoa', '8.8'), ('5/18/1980', 'MountStHelens', '7.6')]</pre>
Line 1,848:
This is just a file filter, matching lines are printed out.
 
<langsyntaxhighlight lang="racket">#lang racket
 
(with-input-from-file "data/large-earthquake.txt"
Line 1,854:
(for ((s (in-port read-line))
#:when (> (string->number (third (string-split s))) 6))
(displayln s))))</langsyntaxhighlight>
 
 
Or, defining a list -> list function in terms of '''filter''':
<langsyntaxhighlight lang="scheme">#lang racket
 
; largeQuakes :: Int -> [String] -> [String]
Line 1,889:
; unlines :: [String] -> String
(define (unlines xs)
(string-join xs "\n"))</langsyntaxhighlight>
 
{{out}}
Line 1,896:
 
To combine filtering with more pre-processing, we can use '''concatMap''' in place of '''filter''':
<langsyntaxhighlight lang="scheme">#lang racket
 
(require gregor) ; Date parsing
Line 1,935:
(define (readFile fp)
(file->string
(expand-user-path fp)))</langsyntaxhighlight>
{{Out}}
<pre>(#<date 1883-08-27> "Krakatoa" 8.8)
Line 1,944:
{{works with|Rakudo|2018.03}}
Pass in a file name, or use default for demonstration purposes.
<syntaxhighlight lang="raku" perl6line>$_ = @*ARGS[0] ?? @*ARGS[0].IO !! q:to/END/;
8/27/1883 Krakatoa 8.8
5/18/1980 MountStHelens 7.6
Line 1,950:
END
 
map { .say if .words[2] > 6 }, .lines;</langsyntaxhighlight>
 
=={{header|REXX}}==
Line 1,959:
:::* &nbsp; the number of records that met the qualifying magnitude
:::* &nbsp; the qualifying magnitude
<langsyntaxhighlight lang="rexx">/*REXX program to read a file containing a list of earthquakes: date, site, magnitude.*/
parse arg iFID mMag . /*obtain optional arguments from the CL*/
if iFID=='' | iFID=="," then iFID= 'earthquakes.dat' /*Not specified? Then use default*/
Line 1,977:
say
if j==0 then say er 'file ' iFID " is empty or not found."
else say # ' earthquakes listed whose magnitude is ≥ ' mMag</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>
Line 1,993:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
# Project : Kernighans large earthquake problem
 
Line 2,019:
ok
next
</syntaxhighlight>
</lang>
Output:
<pre>
Line 2,054:
 
=={{header|Rust}}==
<langsyntaxhighlight Rustlang="rust">fn main() -> Result<(), Box<dyn std::error::Error>> {
use std::io::{BufRead, BufReader};
 
Line 2,072:
 
Ok(())
}</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight Scalalang="scala">scala.io.Source.fromFile("data.txt").getLines
.map("\\s+".r.split(_))
.filter(_(2).toDouble > 6.0)
.map(_.mkString("\t"))
.foreach(println)</langsyntaxhighlight>
 
=={{header|Snobol}}==
Line 2,085:
This is hard-coded to read the input from "data.txt".
 
<langsyntaxhighlight lang="snobol"> input(.quake, 1,, 'data.txt') :f(err)
num = '.0123456789'
 
Line 2,093:
 
err output = 'Error!'
end</langsyntaxhighlight>
 
{{output}}
Line 2,113:
Expects the program to be started with the path to the data file.
 
<langsyntaxhighlight Swiftlang="swift">import Foundation
 
guard let path = Array(CommandLine.arguments.dropFirst()).first else {
Line 2,131:
 
print(line)
}</langsyntaxhighlight>
 
=={{header|Tcl}}==
Inspired by awk.
<langsyntaxhighlight lang="tcl">catch {console show} ;## show console when running from tclwish
catch {wm withdraw .}
 
Line 2,151:
if {$f3 > 6} { puts "$line" }
}
close $fh </langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<langsyntaxhighlight lang="vbnet">Imports System.IO
 
Module Module1
Line 2,172:
End Sub
 
End Module</langsyntaxhighlight>
 
=={{header|Vlang}}==
<langsyntaxhighlight lang="vlang">import os
fn main() {
lines := os.read_lines('data.txt')?
Line 2,186:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 2,198:
=={{header|Wren}}==
{{libheader|Wren-pattern}}
<langsyntaxhighlight lang="ecmascript">import "io" for File
import "os" for Process
import "/pattern" for Pattern
Line 2,213:
var mag = Num.fromString(data[2])
if (mag > 6) System.print(line)
}</langsyntaxhighlight>
 
{{out}}
Line 2,225:
=={{header|XPL0}}==
Usage: quake <data.txt
<langsyntaxhighlight XPL0lang="xpl0">int C;
[loop [OpenO(8); \get line from input file
repeat C:= ChIn(1);
Line 2,242:
];
];
]</langsyntaxhighlight>
 
{{out}}
Line 2,260:
 
=={{header|Yabasic}}==
<langsyntaxhighlight Yabasiclang="yabasic">if peek("argument") then
filename$ = peek$("argument")
else
Line 2,274:
if val(tok$(3)) > 6 print a$
wend
close a</langsyntaxhighlight>
 
=={{header|zkl}}==
Line 2,280:
is bad practice so I don't do it (written so text is automatically
converted to float).
<langsyntaxhighlight lang="zkl">fcn equake(data,out=Console){
data.pump(out,fcn(line){ 6.0line.split()[-1] },Void.Filter)
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">equake(Data(Void,
#<<<
"8/27/1883 Krakatoa 8.8\n"
Line 2,289:
"3/13/2009 CostaRica 5.1\n"
#<<<
));</langsyntaxhighlight>
or
<langsyntaxhighlight lang="zkl">equake(File("equake.txt"));</langsyntaxhighlight>
or
<langsyntaxhighlight lang="zkl">$ zkl --eval 'File.stdin.pump(Console,fcn(line){ 6.0<line.split()[-1] },Void.Filter)' < equake.txt</langsyntaxhighlight>
{{out}}
<pre>
10,333

edits