The solution you linked uses jQuery to select the divs whereas in your case cards, being the result of a native querySelector call, doesn't have the eq and before methods.
Could this be solved with a dom-repeat?
Yes: you could store the data model behind the divs in a property and shuffle it before rendering the divs:
<dom-module id="my-view">
  <template>
    <!-- Render the divs using dom-repeat -->
    <template is="dom-repeat" items="[[divs]]">
      <div>{{item.name}}</div>
    </template>
  </template>
  <script>
    class MyView extends Polymer.Element {
      static get is() { return 'my-view'; }
      static get properties() {
          return {
              divs: {
                  type: Array,
                  value: [],
              }
          };
      }
      // In connectedCallback you can initialise the divs property
      // by shuffling the initial ordered array using the Fisher-Yates algorithm
      // https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
      connectedCallback() {
          super.connectedCallback();
          let array = [ // The ordered model behind the divs
              { name: 'Div #1' },
              { name: 'Div #2' },
              { name: 'Div #3' },
              { name: 'Div #4' },
              { name: 'Div #5' },
          ];
          let currentIndex = array.length, temporaryValue, randomIndex;
          while (0 !== currentIndex) {
              randomIndex = Math.floor(Math.random() * currentIndex);
              currentIndex -= 1;
              temporaryValue = array[currentIndex];
              array[currentIndex] = array[randomIndex];
              array[randomIndex] = temporaryValue;
          }
          this.divs = array;
      }
    }
    window.customElements.define(MyView.is, MyView);
  </script>
</dom-module>