Advertisement
lewapkon

example code

Jun 23rd, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.30 KB | None | 0 0
  1. ### Elixir:
  2.  
  3. defmodule RunLengthEncoder do
  4.   @doc """
  5.  Generates a string where consecutive elements are represented as a data value and count.
  6.  "HORSE" => "1H1O1R1S1E"
  7.  For this example, assume all input are strings, that are all uppercase letters.
  8.  It should also be able to reconstruct the data into its original form.
  9.  "1H1O1R1S1E" => "HORSE"
  10.  """
  11.   @spec encode(String.t) :: String.t
  12.   def encode(string) do
  13.     string
  14.     |> String.codepoints
  15.     |> chunk_by_letter
  16.     |> count_letters
  17.     |> generate_encoded_string
  18.   end
  19.  
  20.   @spec chunk_by_letter(String.t) :: [[String.t]]
  21.   defp chunk_by_letter(string_list) do
  22.     Enum.chunk_by(string_list, &(&1))
  23.   end
  24.  
  25.   @spec count_letters([[String.t]]) :: [{number, String.t}]
  26.   defp count_letters(list) do
  27.     Enum.map(list, fn letters -> {length(letters), hd(letters)} end)
  28.   end
  29.  
  30.   @spec generate_encoded_string([{number, String.t}]) :: String.t
  31.   defp generate_encoded_string(pairs) do
  32.     Enum.reduce(pairs, "", fn {n, char}, acc -> acc <> Integer.to_string(n) <> char end)
  33.   end
  34.  
  35.   @spec decode(String.t) :: String.t
  36.   def decode(string) do
  37.     string
  38.     |> chunk_by_number_and_letter
  39.     |> get_heads
  40.     |> split_into_pairs_of_number_and_letter
  41.     |> generate_decoded_string
  42.   end
  43.  
  44.   @spec chunk_by_number_and_letter(String.t) :: [String.t]
  45.   defp chunk_by_number_and_letter(string) do
  46.     Regex.scan(~r/\d+\p{L}+/, string)
  47.   end
  48.  
  49.   @spec get_heads([[]]) :: []
  50.   defp get_heads(list_of_lists) do
  51.     Enum.map(list_of_lists, &hd/1)
  52.   end
  53.  
  54.   @spec split_into_pairs_of_number_and_letter([String.t]) :: [{number, String.t}]
  55.   defp split_into_pairs_of_number_and_letter(elements) do
  56.     Enum.map(elements, &Integer.parse/1)
  57.   end
  58.  
  59.   @spec generate_decoded_string([{number, String.t}]) :: String.t
  60.   defp generate_decoded_string(pairs) do
  61.     Enum.reduce(pairs, "", fn {n, char}, acc -> acc <> String.duplicate(char, n) end)
  62.   end
  63. end
  64.  
  65.  
  66.  
  67.  
  68. ### Java:
  69. import javafx.geometry.Point3D;
  70.  
  71. import java.util.ArrayList;
  72. import java.util.List;
  73.  
  74. import static comets.Gravity.calculateForce;
  75.  
  76. public class World {
  77.     private List<SpaceObject> spaceObjects = new ArrayList<>();
  78.     private double time = 0;
  79.  
  80.     public List<SpaceObject> getSpaceObjects() {
  81.         return spaceObjects;
  82.     }
  83.  
  84.     public void addSpaceObject(SpaceObject object) {
  85.         spaceObjects.add(object);
  86.     }
  87.  
  88.     public void addSpaceObjects(List<SpaceObject> objects) {
  89.         spaceObjects.addAll(objects);
  90.     }
  91.  
  92.     public double getTime() {
  93.         return time;
  94.     }
  95.  
  96.     public void increaseTime(double timeStep) {
  97.         time += timeStep;
  98.     }
  99.  
  100.     public double getEnergy() {
  101.         double kineticEnergy = 0;
  102.         double potentialEnergy = 0;
  103.  
  104.         for (int i = 0; i < spaceObjects.size(); i++) {
  105.             kineticEnergy += getKineticEnergy(spaceObjects.get(i));
  106.  
  107.             for (int j = i+1; j < spaceObjects.size(); j++) {
  108.                 potentialEnergy += getPotentialEnergy(spaceObjects.get(i), spaceObjects.get(j));
  109.             }
  110.         }
  111.         potentialEnergy *= Gravity.GRAVITATIONAL_CONSTANT;
  112.         return kineticEnergy + potentialEnergy;
  113.     }
  114.  
  115.     private double getKineticEnergy(SpaceObject object) {
  116.         double velocity = object.getVelocity().magnitude();
  117.         return object.getMass() * velocity * velocity * 0.5;
  118.     }
  119.  
  120.     private double getPotentialEnergy(SpaceObject firstObject, SpaceObject secondObject) {
  121.         return -firstObject.getMass() * secondObject.getMass() / firstObject.getPosition().distance(secondObject.getPosition());
  122.     }
  123.  
  124.     public void calculateForces() {
  125.         spaceObjects.forEach((object) -> object.setForce(Point3D.ZERO));
  126.  
  127.         for (int i = 0; i < spaceObjects.size(); i++) {
  128.             for (int j = i+1; j < spaceObjects.size(); j++) {
  129.                 setForcesBetweenTwoObjects(spaceObjects.get(i), spaceObjects.get(j));
  130.             }
  131.         }
  132.  
  133.         spaceObjects.forEach(SpaceObject::multiplyForceByGravitationalConstant);
  134.         spaceObjects.forEach(SpaceObject::divideForceByMass);
  135.     }
  136.  
  137.     private void setForcesBetweenTwoObjects(SpaceObject first, SpaceObject second) {
  138.         Point3D force = calculateForce(first, second);
  139.  
  140.         first.setForce(first.getForce().add(force));
  141.         second.setForce(second.getForce().subtract(force));
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement