I found a programming problem submission & scoring site provided by the University of Aizu called AIZU ONLINE JUDGE and it was fun, so I have problems in various languages. I decided to solve it.
Select 5 languages: C ++, python, php, sqlite3, common lisp. The language I usually use is C ++, and I wrote other languages while searching online.
This time, the problem is 0001 List of Top 3 Hills.
List of Top 3 Hills
There are 10 pieces of data that represent the height of the mountain as an integer in meters. Create a program that reads the 10 data, outputs 3 of them in descending order, and finishes.
Input
Mountain height 1 (integer) Mountain height 2 (integer) . . Mountain height 10 (integer)
Constraints
0 ≤ mountain height ≤ 10000
Output
Highest mountain height The height of the second highest mountain The height of the third highest mountain
Sample Input
1819 2003 876 2840 1723 1673 3776 2848 1592 922
Output for the Sample Input
3776 2848 2840
For the time being, write something that returns the correct answer to the sample input. Sorting is included as standard in all languages, so I didn't have to write the algorithm myself.
C++
#include <iostream>
#include <set>
using namespace std;
int main() {
typedef std::multiset<int> MySet;
MySet heightSet;
for(int i = 0; i < 10; ++i)
{
int val;
cin >> val;
//Automatically sorts when you insert an element into set
heightSet.insert(val);
}
//Reverse to access in descending order_use iterator
MySet::reverse_iterator rit = heightSet.rbegin();
for(int i = 0; i < 3; ++i)
{
cout << *rit << endl;
++rit;
}
return 0;
}
If you use STL's multiset container, it will be sorted automatically when you insert an element, so you can skip it a little.
python
#Create an array
n = list()
for var in range(0, 10):
#Read one line from standard input
#Cast to int
n.append( int(raw_input()) )
#Sort the array in descending order
n.sort(reverse = True)
for var in range(0, 3):
print n[var]
I was impressed that I could write it short with python.
PHP
<?php
$hi = fopen('php://stdin', "r");
$ho = fopen('php://stdout', "w");
#Create an empty array
$arr = array();
#Set data from standard input
for($i = 0; $i < 10; $i++)
{
fscanf($hi, "%d", $arr[]);
}
#Descending sort
rsort($arr);
#output
for($i = 0; $i < 3; $i++)
{
fwrite($ho, sprintf("%d\n", $arr[$i]));
}
fclose($ho);
fclose($hi);
It feels like C language except for adding $ to variables.
sqlite3
--Creating a table
create table tbl(height integer);
--Read data from a text file
.import data.txt tbl
-- 'tbl'From'height'Sort in descending order by field and read 3 lines
select * from tbl order by height desc limit 3;
I didn't know how to put information into a record from standard input in sqlite3, so I'm reading from a file.
Common Lisp
;;Receive n times from standard input and add to list
(defun input (lst n)
(cond
((eq (length lst) n)
lst
)
(t
(input (append lst (list (read)) ) n )
)
)
)
;;Create a subarray of the first n elements of the list
(defun gettop (lst n)
(if (or (= n 0) (null lst))
nil
(cons (car lst)
(gettop (cdr lst) (- n 1))
)
)
)
(mapcar #'(lambda (x) (format t "~A~%" x)) ;Output list elements separated by line breaks
(gettop
(sort (input () 10) #'>) ;Create a list from standard input and sort in descending order
3 ;Create the first three lists
)
)
Common Lisp was too foreign for me to get used to procedural programming, and it took a lot of time.
Recommended Posts