Hacker News new | past | comments | ask | show | jobs | submit login
Trolling homework questions - sorting (codegolf.stackexchange.com)
110 points by DanBC on Dec 27, 2013 | hide | past | favorite | 49 comments



Trolling people looking for easy answers is pointless. Folks like this won't use a single source to send in their work. The problem with this approach is you often penalize people who are truly curious and not trolls.

If you were to allow the masses to determine whether a question is a troll question or not, using an OR, allowing anyone to flip the bit, then almost every question would be considered a troll question. You get a lot of false positives.

Providing a thorough, quality answer to a troll question won't help advance that troll's career, they will pay the price later, for sure, when their intellect is on the line.

Providing a trolly answer, and treating the question asker as insincere will inevitably treat a sincere person like shit, and turn them off entirely from entire genres and disciplines.

Treat resources as sincere, and those who wish to abuse them for temporary short term gain will, and I am very confident about this, end up fucking themselves over.

*If you downvote this, please let me know what you disagree with, I'm open to debate.


In terms of responding seriously to someone actually asking for code to sort a list, I completely agree with you. My impression, though, since this is on the Code Golf section of Stack Exchange, is that this is purely hypothetical. It's a challenge to come up with the most evil answer to the question, not as a serious answer to someone asking it but as a puzzle.


I didn't downvote you. Two thoughts:

1. I read the whole thing three times and I still don't really understand what your objective is.... and do you actually know the purpose of the trolling thread or not. The purpose is to have fun and pretend one as a student who is under some stress and is trying to figure out some funny yet creative ways to brain fuck with the TA or professor. Even if it receives F, whatever.

> Treat resources as sincere, and those who wish to abuse them for temporary short term gain will, and I am very confident about this, end up fucking themselves over.

Well, most of the questions we ask on the Internet are really for short-term gain anyway. We hope someone could tell us why the fuck the X.so file is not linked and we move on afterward.

Most of the answers are actually not some quick jerky answers. people actually took time to write them. And in the process of writing an answer, the author learns. Ever heard of "one teaches, two learns?"

2. Why so serious? The Internet is full of shit half of the time. Wasting 100MB in the database for 100 trolling answers isn't going to kill some hungry child in Africa.


I'm probably so serious because it seems like so many other people are so dismissive :)


>Providing a thorough, quality answer to a troll question won't help advance that troll's career, they will pay the price later, for sure, when their intellect is on the line.

This what would happen in an ideal world.

In reality though it's orders of magnitude easier to check credentials than intellect (provided it's even possible to do the later). In many situations, if you go against somebody with credentials without credentials of your own you won't even have a chance to have a battle of wits (like applying for a job that requires a degree).

And cheating will get you credentials most of the time, it's not like universities check every graduate's intellect before issuing them a diploma. Otherwise cheating would not be such a big deal in the academia.

So yes, helping stupid people with their homework will advance their career. Might not to the level of Google's CTO but to the level of the guy who codes healthcare.gov or the DV's "random number generator" or Toyota's ECU or any other example of crappy code that has a good chance to interfere with people's lives. Please don't do that. If you don't want to troll them - just don't reply.


Everything you say is true. Luckily, none of it applies because no one goes to CodeGolf for homework questions.

CodeGolf will look at other SE sites, find homework questions, then take those questions back to codegolf.

Thus, CodeGolf gets an interesting new flavour of challenge (provide the worst solution to a problem) and the person who originally asked the question doesn't have to deal with the codegolfing. They do, however, have to deal with the rest of SE.

I guess downvotes are because you appear to think that codegolfers are answering in the threads where the questions are originally asked.


Yep, this context helps a lot, I don't know enough about codegolf, thanks!


I downvoted because I disagree with asking for explanations of downvotes. I think the practice is bad for HN.


Makes sense. But for folks who are downvoted it can be helpful to know some context, I've noticed that when you ask for feedback you get it and when you don't you end up confused and a bit pissed which is toxic over time.

I was -1 when I edited the comment to include it and +22 now and a lot less confused.


Sigh, don't have an SO account but if I did, I would suggest this code which I call randsort --

   #include <stdint.h>
   #include <stdio.h>
   #include <stdlib.h>

   int
   main(int argc, char *argv[]) {
       int i, ndx;
       double my_numbers[10];
       double sorted_numbers[10];
       uint16_t picked;

       for (i = 1; i < argc; i++) {
           my_numbers[i-1] = atof(argv[i]);
       }

       while (1) {
           picked = 0;
           ndx = 0;
           /* sort the numbers */
           while (picked != 0x3ff) {
               i = (rand() / 100) %  10;
               if ((picked & (1 << i)) == 0) {
                   picked |= (1 << i);
                   sorted_numbers[ndx++] = my_numbers[i];
               }
           }

           /* verify they sorted correctly */
           for (i = 8; i >= 0; i--) {
               if (( i == -1) || (sorted_numbers[i] > sorted_numbers[i+1])) {
                   break;
               }
           }
           if (i == -1) {
               printf(" Sorted: \n");
               for (i = 0; i < 10; i++) {
                   printf(" %d: %f\n", i, sorted_numbers[i]);
               }
               exit(0);
           }
       }
   }


And since `srand(time(NULL))` isn't ever called, it's deterministic, too!


Is that the case for all platforms and C libraries? Also, isn't seeding with the current time a way to guarantee deterministic behavior? An attacker of such an algorithm probably knows what time it is, and users probably don't expect all invocations within a given second to return the same results.


Nice. Is that O(e^n)?

Out of curiosity, why do you divide the rand() by 100 before applying the mod?


No reason on the divide. Just because. That is probably a reasonable guess on the big O value. Clearly O(rand) is cheeky but in accurate. And the PRNG will walk the number space so it will eventually succeed, but computing how long it will take for 'n' numbers eludes my math reasoning skills.


> the PRNG will walk the number space

Are you sure? What if there's an infinite amount of tries to get to a certain number? You can of course reason about the average case, but maybe the worst case (when there's an input number which is never found by the PRNG) does never halt.

> O(rand)

For sorting algorithms we usually compare in the number of input elements. You can reason about the average case where the numbers are found in average time so you can consider the number of iterations to find the correct number a constant (a very large constant but a constant nonetheless).


No one suggested sleep sort? That's the ultimate trolling-but-almost-legitimate sorting algorithm. :)


And it even has the best time bound you can get for a comparison based sort. Most OS schedulers would use a heap/priority queue internally for timers, which makes sleep sort O(n log n).


wouldn't sleep sort be O(k), where k is the largest element to be sorted? (Assuming the clock and scheduler are precise enough to achieve the correct answer the first attempt).


I would't really count time passing as an operation, since other programs are able to run during that time.


You could keep it linear by first going through the list to find the max, then scaling down.


I noticed this myself and decided to write a glorious example in Objective C:

http://codegolf.stackexchange.com/a/16390/11612



I just found my new favorite sorting algorithm.



Not as impressive as this http://www.jsfuck.com/


yeah, that's why i don't code in perl


Claiming that Perl is a bad language because you can obfuscate it just means that you've never looked for "obfuscated <better language>".


I've looked quite hard for obfuscated Python (and there are a couple of other answers to this question using it). It's always been much more readable than that perl.


Your everyday Perl is much nicer:

perl -e 'my $vals = ".003, .002, .005"; my @sorted = sort { $a > $b } map { $_ =~ s/ +//g; $_ } split(",",$vals); print "$_ " foreach @sorted;'

You can alias the topic variable ($_) if you're not a fan.


And, it's one of many reasons I do.


I considered considering this ridiculously over-complicated approximate solution. Train a neural network to sort with a bunch of examples of sorted arrays.


I would be interested if you could expand on how you would alter the NN architecture for different sized lists


You would have to deal with a maximum size limit, or sort only sections of it at a time.

I mean it might technically be possible if you did some kind of recurrent neural network and gave the inputs through time rather than through space. And you would also have to let it interact with some kind of external memory or workspace.

Perhaps you could train it to just perform operations on the list itself (compare two elements, swap two elements, etc.) That would be the simplest way.


A maximum size limit is an obvious troll to get down to O(1) sort!


This is brilliant because it encourages thinking a little differently to come up with the wrong answer (which helps you learn to identify wrong code). Nice work OP


Well, a lot of them aren't wrong answers, just really inefficient or overly-complicated implementations.


The ultimate answer is to ask your young siblings to sort them for you. The price is a little time and some candy. Or since so many people are unemployed, ask them to crowdsource and work for something in return!

Or just ask wolframalpha.


Set up a job through the Amazon mechanical Turk API and that might actually be possible to do programmatically.


That was my first thought - use a call to the MT api to get the sort done, and then "wait for response". Meets the requirements of the competition perfectly.


My favourite way goes like this

https://gist.github.com/anonymous/8158332

Basically, each thread sleeps for the time corresponding to the number


Haha, fantastic! This is an implementation in go: https://gist.github.com/anonymous/8158822


If you don't want to answer the question, don't answer the question.


"trollsort.c:43:3: warning: incompatible implicit declaration of built-in function ‘printf’"

Epic. Epic I say.


1. Generate all permutations of the input. 2. Return the permutation that is in order. 3. Profit!


  1. Output all permutations of the input
  2. There is no step 2.
You've technically outputted the input list in order...somewhere


I love this answer and it's probably worth creating an account for you to post it.


Ooh, that's the best answer I've seen yet. Perfect!


Even help on the internet is cynical now? Honestly, interesting idea though.


This reminds me of learning Git. It was hard. Probably the hardest thing I've ever learned. But it was worth it, because I Did The Work, and now I'm a hacker.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: