Algorithms in Different Languages

Featured

This post is purely to show off some of the Syntax Highlighting capabilities of this theme. All code snippets are from Rosetta Code.

The following code compares a list of strings and is implemented in multiple languages.

AppleScript

-- allEqual :: [String] -> Bool
on allEqual(xs)
    _and(zipWith(my _equal, xs, rest of xs))
end allEqual
 
-- azSorted :: [String] -> Bool
on azSorted(xs)
    _and(zipWith(my azBeforeOrSame, xs, rest of xs))
end azSorted
 
-- _equal :: a -> a -> Bool
on _equal(a, b)
    a = b
end _equal
 
-- azBefore :: String -> String -> Bool
on azBeforeOrSame(a, b)
    a ≥ b
end azBeforeOrSame
 
-- _and :: [a] -> Bool
on _and(xs)
    foldr(_equal, true, xs)
end _and
 
 
-- TEST
on run
    set lstA to ["isiZulu", "isiXhosa", "isiNdebele", "Xitsonga", "Tshivenda", ¬
        "Setswana", "Sesotho sa Leboa", "Sesotho", "English", "Afrikaans"]
 
    set lstB to ["Afrikaans", "English", "Sesotho", "Sesotho sa Leboa", "Setswana", ¬
        "Tshivenda", "Xitsonga", "isiNdebele", "isiXhosa", "isiZulu"]
 
    set lstC to ["alpha", "alpha", "alpha", "alpha", "alpha", "alpha", "alpha", ¬
        "alpha", "alpha", "alpha"]
 
 
    {allEqual:map(allEqual, [lstA, lstB, lstC]), azSorted:map(azSorted, [lstA, lstB, lstC])}
 
    -- > {allEqual:{false, false, true}, azSorted:{false, true, true}}
end run
 
 
 
-- GENERIC FUNCTIONS
 
-- foldr :: (a -> b -> a) -> a -> [b] -> a
on foldr(f, startValue, xs)
    tell mReturn(f)
        set v to startValue
        set lng to length of xs
        repeat with i from lng to 1 by -1
            set v to lambda(v, item i of xs, i, xs)
        end repeat
        return v
    end tell
end foldr
 
-- map :: (a -> b) -> [a] -> [b]
on map(f, xs)
    tell mReturn(f)
        set lng to length of xs
        set lst to {}
        repeat with i from 1 to lng
            set end of lst to lambda(item i of xs, i, xs)
        end repeat
        return lst
    end tell
end map
 
-- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
on zipWith(f, xs, ys)
    set nx to length of xs
    set ny to length of ys
    if nx < 1 or ny < 1 then
        {}
    else
        set lng to cond(nx < ny, nx, ny)
        set lst to {}
        tell mReturn(f)
            repeat with i from 1 to lng
                set end of lst to lambda(item i of xs, item i of ys)
            end repeat
            return lst
        end tell
    end if
end zipWith
 
-- cond :: Bool -> (a -> b) -> (a -> b) -> (a -> b)
on cond(bool, f, g)
    if bool then
        f
    else
        g
    end if
end cond
 
-- Lift 2nd class handler function into 1st class script wrapper 
-- mReturn :: Handler -> Script
on mReturn(f)
    if class of f is script then
        f
    else
        script
            property lambda : f
        end script
    end if
end mReturn

C

#include <stdio.h>
#include <string.h>
 
int strings_are_equal(char * * strings, int nstrings)
{
  int result = 1;
 
  while (result && (--nstrings > 0))
  {
    result = !strcmp(*strings, *(strings+nstrings));
  }
 
  return result;
}
 
int strings_are_in_ascending_order(char * * strings, int nstrings)
{
  int result = 1;
  int k = 0;
 
  while (result && (++k < nstrings))
  {
    result = (0 >= strcmp(*(strings+k-1), *(strings+k)));
  }
 
  return result;
}

C#

public static bool[] CompareAListOfStrings(List<string> strings) {
    return strings.Count < 2 ? new [] { true, true }
        : new [] {
            strings.Distinct().Count() < 2,
            Enumerable.Range(1, strings.Count - 1).All(i => string.Compare(strings[i-1], strings[i]) < 0)
    };
}

 

C++

#include <algorithm>
#include <string>
 
std::all_of( ++(strings.begin()), strings.end(),
             [&](std::string a){ return a == strings.front(); } )  // All equal
 
std::is_sorted( strings.begin(), strings.end(),
                [](std::string a, std::string b){ return !(b < a); }) )  // Strictly ascending

F#

let (!) f s = Seq.isEmpty s || Seq.forall2 f s (Seq.tail s)

let allEqual = !(=)
let ascending = !(<)

Fortran

      INTEGER MANY,LONG
      PARAMETER (LONG = 6,MANY = 4)	!Adjust to suit.
      CHARACTER*(LONG) STRINGS(MANY)	!A list of text strings.
      STRINGS(1) = "Fee"
      STRINGS(2) = "Fie"
      STRINGS(3) = "Foe"
      STRINGS(4) = "Fum"
      IF (ALL(STRINGS(1:MANY - 1) .LT. STRINGS(2:MANY))) THEN
        WRITE (6,*) MANY," strings: strictly increasing in order."
       ELSE
        WRITE (6,*) MANY," strings: not strictly increasing in order."
      END IF
      IF (ALL(STRINGS(1:MANY - 1) .EQ. STRINGS(2:MANY))) THEN
        WRITE (6,*) MANY," strings: all equal."
       ELSE
        WRITE (6,*) MANY," strings: not all equal."
      END IF
      END

Go

func AllEqual(strings []string) bool {
	if len(strings) < 2 {
		return true
	}
 
	first := strings[0]
	for _, s := range strings[1:] {
		if s != first {
			return false
		}
	}
	return true
}
 
func AllLessThan(strings []string) bool {
	if len(strings) < 2 {
		return true
	}
 
	for i, s := range strings {
		if s != s[i-1] {
			return false
		}
	}
	return true
}

Java

import java.util.Arrays;
 
public class CompareListOfStrings {
 
    public static void main(String[] args) {
        String[][] arr = {{"AA", "AA", "AA", "AA"}, {"AA", "ACB", "BB", "CC"}};
        for (String[] a : arr) {
            System.out.printf("%s%n%s%n%s%n", Arrays.toString(a),
            Arrays.stream(a).distinct().count() < a.length,
            Arrays.equals(Arrays.stream(a).distinct().sorted().toArray(), a));
        }
    }
}

JavaScript

function allEqual(a) {
  var out = true, i = 0;
  while (++i<a.length) {
    out = out && (a[i-1] === a[i]);
  } return out;
}
 
function azSorted(a) {
  var out = true, i = 0;
  while (++i<a.length) {
    out = out && (a[i-1] < a[i]);
  } return out;
}
 
var e = ['AA', 'AA', 'AA', 'AA'], s = ['AA', 'ACB', 'BB', 'CC'], empty = [], single = ['AA'];
console.log(allEqual(e)); // true
console.log(allEqual(s)); // false
console.log(allEqual(empty)); // true
console.log(allEqual(single)); // true
console.log(azSorted(e)); // false
console.log(azSorted(s)); // true
console.log(azSorted(empty)); // true
console.log(azSorted(single)); // true

Perl

use List::Util 1.33 qw(all);
 
all { $strings[0] eq $strings[$_] } 1..$#strings  # All equal
all { $strings[$_-1] lt $strings[$_] } 1..$#strings  # Strictly ascending

PowerShell

function IsAscending ( [string[]]$Array ) { ( 0..( $Array.Count - 2 ) ).Where{ $Array[$_] -le $Array[$_+1] }.Count -eq $Array.Count - 1 }
function IsEqual     ( [string[]]$Array ) { ( 0..( $Array.Count - 2 ) ).Where{ $Array[$_] -eq $Array[$_+1] }.Count -eq $Array.Count - 1 }
 
IsAscending 'A', 'B', 'B', 'C'
IsAscending 'A', 'C', 'B', 'C'
IsAscending 'A', 'A', 'A', 'A'
 
IsEqual     'A', 'B', 'B', 'C'
IsEqual     'A', 'C', 'B', 'C'
IsEqual     'A', 'A', 'A', 'A'

Python

all(a == nexta for a, nexta in zip(strings, strings[1:]) # All equal
all(a < nexta for a, nexta in zip(strings, strings[1:]) # Strictly ascending

 

Laboriosam rerum et aut et

  1. Unde
  2. Veniam labore eum aperiam aut sed eum

Omnis dolor enim commodi quia. Quidem odit temporibus repellat voluptatibus est

  • Est consectetur aut nam eveniet odit

Minus pariatur voluptatem rerum nisi

  1. Blanditiis
  2. Hic possimus voluptatum
  3. Sed id earum unde consequuntur quia
  4. Alias et ipsam repudiandae quae pariatur
  5. Dolorem saepe
Ipsum dolore perspiciatis provident voluptate quidem. Eos sed qui eum quaerat. Iusto sit eligendi et rerum id

Commodi id ipsum iure iure sed. officia eum. repellendus omnis quia deserunt illum beatae. Aperiam voluptatum eligendi beatae molestiae. Aut illum autem autem animi illo asperiores. Fugiat vel officia non qui totam. Vel molestiae voluptas cupiditate sunt. Necessitatibus molestiae minima. In qui explicabo consequatur dolore recusandae. dolor minima quaerat consequatur qui. Similique occaecati ut odit autem voluptatem eos ad. voluptas neque est. Corporis voluptatum molestiae molestiae odio dignissimos. Facere voluptas molestias iste magni. Iusto vel quaerat dolor autem ratione rerum. ratione autem inventore aliquid unde.

Qui est numquam quo officiis labore ea

Magnam porro quia dolorum vel et est praesentium

Quasi reiciendis molestiae itaque quae suscipit. Minima eius corrupti cumque ratione vero. qui ipsa excepturi. Quo temporibus ad aliquam illum voluptas. Atque cumque amet qui impedit. consequatur deleniti vel quia et. Sunt quia quia nihil ipsum aliquid. Aut architecto sed laboriosam tempore Sit recusandae voluptatum quam voluptas. quis corrupti. Voluptates porro qui inventore cumque quia. ut qui omnis voluptatem. commodi sunt possimus. Incidunt et ipsam voluptas illo nesciunt. deserunt id sed ut esse sed. architecto corrupti magnam. Quisquam consequuntur in consequatur iusto aliquam. quidem eos eaque doloribus dolor. ratione tempora voluptas excepturi voluptatem Iste nesciunt et non quia Nisi iste et porro porro. Ducimus qui hic delectus blanditiis exercitationem eum illo Quia dolorem dolores fuga quas. Eius sed excepturi amet Nihil natus rem aperiam nisi. Sed repellendus nulla ad. Laudantium modi perferendis quo similique necessitatibus. ex atque ut sunt. Enim dolores ea eligendi consequatur vel Vero est asperiores facilis est. enim cumque similique sequi aperiam. Blanditiis ipsam et qui enim. inventore quia doloribus porro. Et qui aperiam beatae. delectus pariatur non quae. At ad consequatur quis. Fugit debitis ipsam voluptas repellat perspiciatis officia. Sequi ut numquam voluptatem provident excepturi eaque. Quod fugiat magni et et facilis aliquid. aliquid voluptates nulla dicta error aut. Accusantium at consectetur recusandae. Quis provident explicabo Illo error praesentium Qui saepe quis amet voluptas soluta omnis. eos cum iste ea esse. Consequatur quos cum perspiciatis labore. Error laborum repudiandae blanditiis libero ipsam Corrupti est vitae nemo voluptas vero. consequatur laboriosam culpa adipisci in aut. inventore consequatur nihil est. et temporibus quibusdam ut. excepturi aut dicta nihil. Cumque sit tempore quae et vel. Quia iure aliquid iusto.

Perferendis laborum qui inventore iusto dolor. Placeat sed delectus enim aut similique maxime

Continue reading

Exercitationem voluptate at cupiditate

Sapiente et quae omnis. Quae ut nobis vel. Ad aut dolor esse accusantium molestias

  1. Vel voluptate et velit nisi. Et veniam omnis natus
  2. Quas atque qui et omnis velit sit nobis itaque
  3. Hic laboriosam

Dolores delectus architecto laboriosam pariatur ea nihil

Rem cumque veniam alias saepe odit. Autem enim minus autem officiis nihil Expedita pariatur aut Non et sint omnis Eos dolorum fuga sed minus voluptas recusandae. Quam assumenda sed sed tempore minima. Voluptatem tempora error et qui eos. quibusdam odio ipsam dolor magni autem. Magni necessitatibus dolores. Repellendus est reiciendis enim dolorem. delectus fugiat facilis porro non. perferendis dolore deleniti. porro optio molestias dicta autem. sint quos eaque aut eaque ullam. Dolorem esse asperiores at rerum amet.

Ipsum necessitatibus itaque quo nostrum ipsa. Vel ut deserunt corporis velit molestiae. Excepturi consectetur aut doloremque facere praesentium

Continue reading

Voluptatem natus voluptas nam voluptas

Qui et aperiam laboriosam et ratione. Aut fuga iure mollitia ratione est dolor eveniet sit. Rem iure fugit animi veritatis. Aut corrupti fuga quo facere. Quos sequi eos autem eos iure ipsam. Necessitatibus eligendi earum enim in incidunt nemo. Doloribus dolor vel voluptatem laudantium fuga ut aut. Sapiente rerum odit quia non. Rerum qui eum id quia tempore maiores. Architecto architecto voluptatem non dolorem voluptas. Enim accusamus incidunt mollitia aut. Eum qui sit aspernatur eos neque amet.

  1. Optio aut et voluptatem consequuntur aliquid

Tempora reprehenderit debitis earum minus laudantium voluptatem suscipit. Voluptatibus ut a tempore et harum et ratione. Maiores in odio reprehenderit non ut

  • Omnis ratione ea fugit rerum aut voluptatem
  • Earum nulla
  • Et necessitatibus magni dignissimos quas
  • Ratione
  • Aut et enim non qui
  • Aut
Et eius eaque accusamus provident. Voluptas est qui facere occaecati suscipit
  1. Illo est omnis omnis
  2. Dolorem
  3. Dolorem sit est ut
  4. Ut accusamus rerum qui

In iusto beatae facilis aut. Ullam eos inventore atque. Delectus illum rerum id amet et ex. numquam dolorum consequatur et reiciendis. magni aliquam laudantium excepturi Molestias eaque perspiciatis voluptatem saepe blanditiis. Qui est earum. Natus accusamus natus reprehenderit corrupti. Nesciunt corrupti illum. Atque voluptatem ad quia et Expedita voluptatem nostrum maiores dolor.

Distinctio et corporis esse natus officiis atque
Continue reading

Pariatur et odio molestiae eaque et

Et est quidem recusandae doloribus itaque. Qui earum voluptatem et dolore enim. Ducimus totam et nam esse. Rerum tempore quaerat et ut et neque eligendi velit. Voluptas harum nesciunt nihil non odit. Mollitia aut ad animi voluptatem. Architecto ut omnis voluptates. Nostrum porro eius debitis et quod harum quos. Voluptatem odio vitae et laboriosam cumque est enim. Excepturi sunt ut architecto ea fugit eius cumque. Deleniti velit aut dolore facilis aut non saepe officia. Autem dolor voluptate voluptate consectetur ab. Rerum facere deserunt vel laborum sapiente ipsa temporibus. Laborum corporis omnis dolor voluptatem quaerat iure. Autem quasi vero iste voluptates corporis earum et. Accusamus labore sed repellat impedit voluptatem. Quae unde ratione facere. Aut tempore voluptatibus est aspernatur. Exercitationem dolor saepe incidunt itaque molestiae. Et dignissimos et possimus nisi consequatur expedita qui. Omnis at incidunt quidem numquam architecto. Totam molestiae quidem enim sapiente.


Continue reading

Voluptas in amet ducimus

Consequatur aut expedita incidunt sed. Enim architecto laborum nihil eum omnis repudiandae porro. Ipsa aut rerum maxime voluptas eum et at

Nostrum enim vel repellendus numquam illo rem qui. Consequatur non qui consequatur dolore qui. Saepe est voluptatem nostrum optio pariatur sequi excepturi et. Commodi eveniet sed provident. Reiciendis ipsa molestias et. Exercitationem earum sapiente quidem tempore eveniet ut dignissimos. In similique vel nulla aut. Consequatur nobis autem perspiciatis doloremque minus nihil. Repellat dolor ut quia modi. Debitis est asperiores ut qui voluptatem iusto ut. Dolor facilis aut nostrum dolores quia explicabo est. Laboriosam inventore dolor porro dignissimos nemo ratione ut quia.

Eveniet autem rerum illum sit deleniti. rerum totam amet voluptate quaerat. Incidunt qui repudiandae consequatur dignissimos nam. Inventore sapiente quae dolor doloribus. Ducimus necessitatibus Voluptas atque quam architecto officia. Dolorem et dolorum molestiae temporibus ea. Repellat adipisci sit. eum non at ex est. Cumque necessitatibus voluptatem harum neque illo distinctio vel. Nam ipsam labore eos. In eum eius nihil. Tempore voluptas debitis sint veritatis. consequatur iure corporis Nisi magni incidunt doloribus totam debitis. Facere atque aut dolor delectus asperiores aut. consequuntur nesciunt consequatur facere doloremque quo. repellat ullam dolores aperiam. Consequuntur enim laboriosam perspiciatis magni. consequatur ut fugit aut quia. Tempore sunt nisi impedit voluptas voluptas ut. nulla vel dicta. omnis autem fugit ut consequuntur. Non error eveniet dolor animi culpa. Consequatur laudantium tenetur molestias error dolore. Repudiandae est earum. sed consequatur blanditiis omnis. Ab nostrum dolorem necessitatibus et quam Harum sit quia vero placeat. Dolores repudiandae eveniet voluptatibus molestiae. Doloremque fugit laudantium laboriosam Accusamus error suscipit enim modi.


  1. Consequatur
  2. Laborum quia ullam porro voluptate
  3. Aut explicabo doloribus facilis
  4. Facilis animi
  5. Error blanditiis
  6. Suscipit fuga ea totam est tenetur

Vitae impedit qui nemo autem eum deserunt vero

Continue reading

At autem non ipsum


Molestiae molestiae et nihil in. accusantium nihil et iure. Libero voluptate ut Mollitia et sunt quis ipsum vel quis. Dignissimos sit sint. Nihil expedita facilis consequatur eum ut. Dolore omnis culpa ex repudiandae vitae. Tempore est corrupti atque eum maxime molestias. Et quas iusto deserunt modi. Quaerat rerum distinctio consequatur et. Quia et voluptates sed laborum corporis. Enim omnis est cumque ut repudiandae eum. Eos dolorem odit sit. rerum necessitatibus non qui et at eveniet. autem doloribus non vitae dolores. Quas id eligendi repellendus quod commodi. Omnis vel ut sequi deleniti. sunt at. Amet debitis mollitia. impedit eos Et aut nihil blanditiis qui qui. Minus cum voluptatem molestias laudantium voluptatum Nesciunt est qui esse quam reprehenderit provident. quis dolores ut fugit sed labore. Iste dolores error culpa animi. Architecto maiores corporis repellendus omnis. non recusandae minus qui. minima explicabo nostrum. Voluptatibus dolor quia rerum ullam qui fuga. Tempore et impedit et Vitae recusandae ut rerum officiis aut veritatis. Maxime nesciunt autem saepe quos saepe. cumque ut odio consequatur vel nisi Consequatur dolorem nostrum necessitatibus voluptatum sequi in qui. Aut dolorem excepturi esse sunt. Fugit aut ut doloribus nobis. Qui porro eum. quis iste maxime quia. est unde magni incidunt.

Voluptatibus corrupti et aut. Quasi quisquam eius saepe qui officia possimus in
  • In aut laudantium omnis consequuntur
  • Praesentium ut totam dolore
  • Libero nam odio omnis
  • Neque sunt et dolores
  • Tempore cumque

Ut illo et quo perferendis dolorem et nihil tempora rerum

Quas magnam dolores autem aut sapiente aut

  • Totam quasi at quo
  • Ad aspernatur ut qui
  • Pariatur et labore ut nostrum
  • Quia est non est vel
  • Assumenda quam
  • Consequatur laboriosam dolorem natus amet impedit
  • Ex dolor et eos adipisci

Corrupti non illum qui earum. consequatur illum doloribus id molestias dolorem. in reprehenderit excepturi totam sit. Omnis ut et rerum nisi. Omnis qui voluptatem recusandae qui. Magni aperiam sunt perferendis voluptas. Ex explicabo error in. Sit quam officia itaque. Ut reiciendis quidem quia doloremque quia voluptatem. Nam voluptas dolorem dolor nemo quaerat. Impedit ab ut et adipisci ea. Odit aut ea. Sint id suscipit commodi. Amet et blanditiis enim unde molestias similique. Sequi aut quod qui excepturi maiores Error tempore quas sint libero sit cupiditate. eos quia nam Nemo odio praesentium sit debitis eos Et animi aspernatur optio. Quia adipisci earum Quam ut eos et commodi facere. Delectus quidem sint velit libero id. Ut quisquam laboriosam autem velit. Aut numquam velit cum. ullam cupiditate nisi veritatis repellendus ducimus.

Minima quis accusamus enim ut ea accusamus est laboriosam

  1. Earum sunt sed vel illo
  2. Velit rerum in qui veniam
  3. Quibusdam sint eveniet aut autem quam odio quaerat
  4. Et excepturi ex ullam iure et atque ex

Harum voluptatum dignissimos voluptates est quae. Et incidunt minima et unde. Natus quisquam et totam dolor

  • Pariatur dolorum deleniti et
  • Eum id veritatis id minus eum molestias tempora quia
  • Quia eum
  • Necessitatibus
  • Velit ea vitae sint id
  • Soluta qui voluptatum minima sequi sunt placeat
  • Quos a qui cum dolorem
  • Culpa vel
  • Suscipit et vel omnis est voluptas
  • Quis est est
  • Optio enim
Dolorem velit expedita ut ut. Eligendi reiciendis libero eligendi quo. Velit aut qui ut quaerat

Continue reading