PROG0592 - Rorschach test

no tags 

The Rorschach test is a psychological test that was introduced in 1921 by the Swiss psychologist Hermann Rorschach. An inkblot is made on one side of a card, and then mirrored on the other half by folding the card. A subjects' perceptions of the inkblots are recorded and then analyzed using psychological interpretation, complex algorithms, or both. Some psychologists use this test to examine a person's personality characteristics and emotional functioning. It has been employed to detect underlying thought disorder, especially in cases where patients are reluctant to describe their thinking processes openly.

rorschachtest
The first of ten cards used in the Rorschach test. The cards themselves are just one component of the test, whose focus is on the analysis of the perception of the cards.

Assignment

Your task is to write a program that generates cards that can be used in the Rorschach test. This is done by transforming a given text pattern — representing an inkblot — into a pattern that is formed from the original pattern with a mirrored version of the pattern to its right. Click here to switch between a display of the left half of the pattern, and the complete pattern whose the right half is formed as the mirror image of the left half.

++...+..+++.
....++......
.+.#####+###
...#@#@#.#@#
.+.#####.##@
....+.+...##
.....+......
....+.....##
....+..+..#@
......###.##
+...++#@#.+.
....#####...
....#@#....+
++..###.+...
+.....+.....

In order to do so, you have to write a function rorschach that takes the location of a text file as its argument. This file must contain a text pattern, formatted as a sequence of lines that each contain the same number of characters. The function must also have a second optional parameter that takes the location of a second text file. The transformed version of the pattern that result after mirroring the given pattern must be written to the second file. In case the function is called without a second argument, the function must print the mirrored version of the pattern to output.

Example

In the following interactive session we assume that the text file pattern.txt is located in the current directory. Click on the name of the files to see the given pattern and the transformed pattern.

>>> rorschach('pattern.txt')
++...+..+++..+++..+...++
....++............++....
.+.#####+######+#####.+.
...#@#@#.#@##@#.#@#@#...
.+.#####.##@@##.#####.+.
....+.+...####...+.+....
.....+............+.....
....+.....####.....+....
....+..+..#@@#..+..+....
......###.####.###......
+...++#@#.+..+.#@#++...+
....#####......#####....
....#@#....++....#@#....
++..###.+......+.###..++
+.....+..........+.....+
>>> rorschach('pattern.txt', 'rorschach.txt')

De rorschachtest is een psychologische test die in 1921 werd geïntroduceerd door de Zwitserse psycholoog Hermann Rorschach. Bij de test wordt gebruik gemaakt van tien platen die elk bekomen werden door een inktvlek aan te brengen op één bladhelft, en die gespiegeld over te brengen op de andere bladhelft door het blad dubbel te plooien. De test is gebaseerd op de menselijke neiging om interpretaties en gevoelens te projecteren op — in dit geval — inktvlekken. Daartoe proberen speciaal opgeleide psychologen aan de hand van de gegeven interpretaties de diepere persoonlijke karaktertrekken en impulsen van testpersonen te begrijpen.

rorschachtest
De eerste van tien platen die gebruikt worden in de rorschachtest. De platen zelf vormen slechts één onderdeel van de test, die vooral gericht is op de analysis van de perceptie van de platen.

Opgave

Je opdracht bestaat erin een programma te schrijven dat kan gebruikt worden om platen te maken voor de rorschachtest. Hiertoe moet het programma een gegeven tekstpatroon — dat een inktvlek voorstelt — omvormen tot een patroon dat bestaat uit het oorspronkelijke patroon met daarnaast de gespiegelde versie van het patroon. Klik hier om te schakelen tussen een weergave van de linkerhelft van het patroon, en het volledige patroon waarbij de rechterhelft gevormd wordt als spiegelbeeld van de linkerhelft.

++...+..+++.
....++......
.+.#####+###
...#@#@#.#@#
.+.#####.##@
....+.+...##
.....+......
....+.....##
....+..+..#@
......###.##
+...++#@#.+.
....#####...
....#@#....+
++..###.+...
+.....+.....
Gevraagd wordt om een functie rorschach te schrijven waaraan de locatie van een tekstbestand moet doorgegeven worden. Dit bestand moet een tekstpatroon bevatten dat bestaat uit een aantal regels die allemaal evenveel karakters bevatten. De functie moet ook nog een tweede optionele parameter hebben waaraan de locatie van een tweede tekstbestand kan doorgegeven worden. Het omgevormde patroon dat bekomen wordt na spiegeling van het gegeven patroon moet door de functie naar dit tweede bestand weggeschreven worden. Indien aan de functie niet expliciet een tweede argument wordt doorgegeven, dan moet de functie het omgevormde patroon naar de uitvoer schrijven.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand patroon.txt zich in de huidige directory bevindt. Klik op de naam van de bestanden om het gegeven patroon en het omgevormde patroon te bekijken.
>>> rorschach('patroon.txt')
++...+..+++..+++..+...++
....++............++....
.+.#####+######+#####.+.
...#@#@#.#@##@#.#@#@#...
.+.#####.##@@##.#####.+.
....+.+...####...+.+....
.....+............+.....
....+.....####.....+....
....+..+..#@@#..+..+....
......###.####.###......
+...++#@#.+..+.#@#++...+
....#####......#####....
....#@#....++....#@#....
++..###.+......+.###..++
+.....+..........+.....+
>>> rorschach('patroon.txt', 'rorschach.txt')


Added by:Peter Dawyndt
Date:2015-11-12
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC