Inspiriert von dem unglücklichen Sortieren von Zahlen ohne Verwendung eines Arrays , dachte ich, es wäre ein besserer Code als SO-Frage.
Sortieren Sie bei einer positiven Ganzzahl die Ziffern in dieser Ganzzahl.
Die niedrigste Punktzahl gewinnt!
- Beginnen Sie mit 0 Punkten.
- Fügen Sie einen Punkt pro Zeichen hinzu.
- Fügen Sie für jedes verwendete Array 20 Punkte hinzu.
- Fügen Sie 10 Punkte für jede Zeichenfolge in Ihrem Code hinzu. (Mit Ausnahme der anfänglichen Eingabe, solange diese in eine Ganzzahl konvertiert wird, ohne dass andere Operationen daran vorgenommen werden.)
- Fügen Sie 32 Punkte hinzu, wenn die maximale Anzahl von Stellen, die Ihr Programm verarbeiten kann, durch Ihr Programm begrenzt ist (im Gegensatz zur Maschine).
- Subtrahieren Sie 10 Punkte, wenn Ihr Code die Sortierrichtung mit einem anderen Argument ändern kann (was auch immer Sie wollen, aber zum Beispiel 0 für absteigende Sortierung und 1 für aufsteigende Sortierung.)
Jede Sprache ist anders, aber die Idee ist es, jede Art von Hackerei zu vermeiden, die sich durch Ziffern wiederholen lässt.
Beispiel:
Eingabe : 52146729
Ausgabe : 97654221 oder 12245679
Anmerkungen:
- Verwenden Sie alle integrierten Sortierfunktionen, die Ihre Programmiersprache bietet. Wenn diese Sortierfunktion jedoch Zeichenfolgen oder Arrays umfasst, müssen Sie den Abzug in Kauf nehmen!
- Sie können die Lösung als Funktion schreiben, die direkt eine Ganzzahl annimmt, oder als Programm, das ein Argument aus argv, einer Datei oder einem Stream annimmt und in eine Ganzzahl konvertiert. Solange Sie es sofort in eine Ganzzahl konvertieren und die ursprüngliche char * -Eingabe verwerfen, ohne weitere Vorgänge auszuführen, wird keine Strafe fällig.
- Die Strafen gelten nicht nur für Zeichenfolgenliterale in Ihrem Programmtext, sondern für alle Teile Ihres Programms, die möglicherweise eine Zeichenfolge eingeben oder ausgeben oder iterierbar sind. Zum Beispiel hat JavaScript
String.prototype.split
mindestens einen String als input (this
) und ein Array als output, also +30, um das zu benutzen. - Ich habe versucht, diese Regeln so zu gestalten, dass sie das Prinzip des Algorithmusdesigns leiten, nicht die anfängliche / endgültige E / A (daher Anmerkung 2). Ich denke nicht, dass die Strafe gelten sollte,
int(input())
selbst wenninput
die Signatur besagt, dass eine Zeichenfolge zurückgegeben wird, solange dieser Ausdruck der erste Einstiegspunkt des Programms ist. Wenn die endgültige Ausgabe des Programms eine Zeichenfolge istprint(x)
und seinx
muss, gilt die Strafe ebenfalls nicht für die String-Casting-Operation des letzten Graben. Trotzdem habe ich ausdrücklich nie gesagt, dass dies ein Programm sein muss oder woher die E / A kommen oder gehen müssen. Eine Funktion, die eine annimmtint
und eine zurückgibt,int
würde dienen und unter diesen Mehrdeutigkeiten nicht leiden.
" "
als Mehrfachzeichenfolge ? Ein einzelnes Zeichen würde nicht als "Multi" betrachtet ...