Is this a half-sort?

J, 20 18 15 14 bytes

-1 thanks to Jonah.

Goes the other way around: sorts the string ('node' -> 'deno'), rotates it back ('deno' -> 'node') and checks if this equals the input. Fits better J trains.


Try it online!

How it works

           /:~  sort input
  <.@-:@#       length of input, halved and floored
         |.     rotate sorted input by that amount
-:              input equal to that?

Python 3, 45 42 bytes

-3 bytes thanks to @dingledooper

lambda s:sorted(s)==s+[s.pop(0)for c in s]

Try it online!

Takes input as a list of characters. Returns True if the list is half-sorted, False otherwise.


[s.pop(0)for c in s] gets the first half of the list. After this is evaluated, s only has the later half left.

Thus s+[s.pop(0)for c in s] is the list with the 2 halves swapped. Note that this works because Python evaluates anything inside square brackets first.

I then check if the swapped list is sorted, aka compare it with sorted(s).

Pyth, 8 bytes


Try it online!

Luckily, Pyth offers most of what we need out of the box, so we just need to call the operations necessary.

 Sz       # Sort the input
     c2z  # Chop the input into two equal pieces (first longer if needed)
    _     # Reverse the chopped elements
   s      # Join them back together
q         # Check for equality