Change markup depending on category of an entry
You're currently fetching an array of categories even if there's only one it, I think. You either need to loop through the array or try replacing this:

{% set categories = craft.categories.relatedTo(entry) %}


with this:

{% set category = craft.categories.relatedTo(entry).first %}


Alternatively, you could scrap the category conditional altogether and use entry types, with different entry types set up for different layouts (that's my preferred method). You could also try testing for the presence of images as well (because that seems to be the only difference in the markup):

{% if entry.images | length %}
    &lt;aside class="newsimages col-xs-12 col-md-6"&gt;
        {% for image in entry.images %}
            &lt;img src="{{ image.getUrl('medium') }}" alt="{{ entry.title }}" class="col-xs-12{% if loop.first %}{% else %} col-sm-6{% endif %}" /&gt;
        {% endfor %}
    &lt;/aside&gt;
{% endif %}


Or have I misunderstood and it's the conditional you're having problems with?