Как стать автором
Обновить

Литературный код

You shall not pass

Под впечатлением от статьи о поэзии в коде я решил представить, как бы выглядели шедевры мировой классики на различных языках программирования. После беглого анализа прочитанных мной книг я пришел к выводу, что для некоторых произведений лучше подходит процедурное программирование (многие сказки, такие как “Репка” или “Колобок”), а для других объектно-ориентированное (Библия, всяческие пьесы). Некоторые произведения хорошо ложатся на языки разметки (стихотворения, вроде, у Лукоморья дуб зеленый) и даже на SQL. Представляю вашему вниманию небольшой набор моих пересказов. Жду в комментариях и ваших версий пересказов любимых произведений. Пишу я, в основном, на Java, соответственно, и пересказы будут на Java, в объектно-ориентированной парадигме, то бишь.

Для начала возьмемся за Вильяма нашевсе Шекспира. Для этой пьесы я создал две сущности: кланы и действующие лица. Каждый персонаж может любить, убивать и жениться. С любовью – все сложно из-за запутанных семейных конфликтов. Поэтому если семьи взаимно любимых враждуют, им не суждено быть вместе. Если же все удачно, невеста получает фамилию мужа.

class Person {
    
    String name;
    Family surname;
    Person lover;
    boolean alive;
    boolean sex;
       ...
  
    public void love(Person pers) {
   	 if (this.isAlive() == true) {
   		 this.setLover(pers);
   		 System.out.println(this.name + " loves " + pers.name + ".");
   		 if (pers.getLover() == this) {
   			 if (pers.checkEnemies(this) == true) {
   				 System.out.println(this.name + " and " + pers.getName() 
   				   	   + " love each other. " + "But they can't be together.");    
   			 } else {
   				 if (pers.getLover() == this) {
   					 if (this.sex == true) {
   						 marry(this, pers);
   					 } else {
   						 marry(pers, this);
   					 }
   				 }
   			 }
   		 }
   	 } else {
   		 System.out.println("This person doesn't support this option.");
   	 }
    }
    
    public static void marry (Person husband, Person wife) {
   	 wife.setSurname(husband.getSurname());
   	 System.out.println(husband.getName() + " married " + wife.getName() + ".");
    }
    
    public void kill (Person pers) {
   	 ...
    }
    
    private boolean checkEnemies(Person person) {
   	 boolean feud = false;
   	 List<Family> enemies = this.surname.getEnemies();
   	 for (Family f : enemies) {
   		 if (f == person.getSurname()) {
   			 feud = true;
   		 }
   	 }
   	 return feud;
    }
   ...    
}

Ход пьесы можно изложить следующим образом:
public static void main(String[] args) {
   	 Family capulet = new Family("Capulet", "Verona");
   	 Family montague = new Family("Montague", "Verona");
   	 capulet.addEnemies(montague);
   	 montague.addEnemies(capulet);
   	 Person romeo = new Person("Romeo", montague);
   	 Person juliet = new Person("Juliet", capulet);
        Person tybalt = new Person("Tybalt", capulet);
   	 Family guertio = new Family("Guertio", "Verona");
        guertio.addFriends(montague);
   	 Person mercutio = new Person("Mercutio", capulet);
   	 System.out.println("Paris visits Capulet's house. "
   			 + "Paris made the proposal to Juliet father.");
   	 System.out.println("Capulet host a carnival.");
   	 System.out.println(juliet.getName()  + " and "
   			 + romeo.getName() + " talk to each over.");
   	 romeo.love(juliet);
   	 juliet.love(romeo);
   	 System.out.println("They secretly married by Friar Laurence.");
   	 tybalt.kill(mercutio);
   	 romeo.kill(tybalt);
   	 System.out.println("Romeo runs away from Verona.");
   	 System.out.println("Juliet pretends as dead.");
   	 System.out.println("Romeo finds out that Juliet is dead.");
   	 romeo.kill(romeo);
   	 System.out.println("Juliet sees dead Romeo.");
   	 juliet.kill(juliet);
}

Если кому интересно, то полный вариант здесь.
Класс, реализующий стихотворение из “Властелина колец”, приведу целиком. Сначала оригинал:
“Three Rings for the Elven-kings under the sky,
Seven for the Dwarf-lords in their halls of stone,
Nine for Mortal Men doomed to die,
One for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.
One Ring to rule them all, One Ring to find them,
One Ring to bring them all and in the darkness bind them
In the Land of Mordor where the Shadows lie.”


И, собственно, кодовое представление:
package uk.tolkien.lor;

import java.util.ArrayList;

public class LordOfTheRings {

	public static void main(String[] args) {
		Ring [] elfsRings = new Ring [3];
		for (int i = 0; i < 3; i++) {
			elfsRings[i] = new Ring("Elven-king", "under the sky");
		}
		
		Ring [] dwarfsRings = new Ring [7];
		for (int i = 0; i < 7; i++) {
			dwarfsRings[i] = new Ring("Dwarf-lords", "halls of stone");
		}
		
		Ring [] humansRings = new Ring [9]; 
		for (int i = 0; i < 9; i++) {
			humansRings[i] = new Ring("Mortal Men", "dc");
		}
		
		OneRing lordsRing = OneRing.getInstance();

	}

}

class Ring {
	private String owner;
	private String location;
	
	public Ring(String own, String loc) {
		this.setOwner(own);
		this.setLocation(loc);
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}
	
	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}
}

class OneRing extends Ring { 
	private static OneRing instance;
	ArrayList<Ring> chain = new ArrayList<Ring>();
	
	private OneRing(String own, String loc) {
		super(own, loc);

	}
	
	public static OneRing getInstance() { 
		if (instance == null) { 
			instance = new OneRing("Dark Lord", "Mordor"); 
		} 
		return instance; 
	} 
	
	public void rule(Ring r, String order) {
		System.out.println(r.getOwner() + " executes " + order);
	}
	
	public void find(Ring r) {
		System.out.println("The ring is in " + r.getLocation());
	}
	
	public void bring(Ring r) {
		r.setLocation("Mordor");
	}
	
	public void bind(Ring r) {
		chain.add(r);
	}
}


И в заключении, песня на SQL. Надеюсь, сами догадаетесь какая. Некоторые ответы получены, конечно, от http-сервера, но думаю это не беда.
SELECT my_love
FROM ash
>>Record Count: 0; Execution Time: 1ms

SELECT my_love
FROM poplar
>>autumn foliage

SELECT my_love
FROM autumn
>>driving rain

SELECT my_love
FROM rain
>>408 SERVER TIMEOUT

SELECT my_love
FROM moon
>>307 TEMPORARY REDIRECT

SELECT my_love
FROM cloud
>>400 BAD REQUEST

SELECT my_love
FROM friend
>>best friend’s wife
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.