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.
code-challenge
sorting
Kojiro
quelle
quelle
" "
als Mehrfachzeichenfolge ? Ein einzelnes Zeichen würde nicht als "Multi" betrachtet ...Antworten:
GolfScript,
114(4 + 10 (Zeichenfolge) - 10 (umgekehrte Option))
Eingang bei STDIN.
Das Eingabeformat lautet wie folgt:
1
normal sortieren,-1
umkehren. 4 Zeichen - 10 für umgekehrte Option = Punktzahl von -6.Die Eingabe ist technisch gesehen eine Zeichenfolge, daher bin ich mir nicht sicher, ob dies für +10 gilt. Ich interpretiere die Regel als "in Ihrem Programm deklarierte Zeichenfolge" (da dort "in Ihrem Code" steht).
Alte Antwort (11 Punkte):
quelle
~
konvertiert sofort in eine Ganzzahl. Aber dann wird es mit wieder in einen String umgewandelt`
. Zählt das Konvertieren in einen String? Da die Zeichenfolge manchmal nicht aus mehreren Zeichen besteht (1-stellige Eingabe)chr
, ist dies in Ordnung.Haskell 106
Beispiel:
Eine Antwort, die der Frage nicht ausweicht.
Eine Erklärung wurde angefordert, hier ist es ungolfed. Es ist eine sehr ineffiziente Blasenart.
In Haskell gibt es kürzere Antworten als in einigen anderen Veröffentlichungen, z.
... 52 + 20 = 72 Punkte oder 45 + 20 = 65 Punkte:
... aber der Sinn der Frage - keine Arrays, Strings oder Zeichen - ist interessanter.
quelle
Integer.MAX_VALUE
-it nimmt eineint
. Meins und einige der anderen akzeptieren Eingaben beliebiger Größe - der Eingabetyps
istInteger
gleichbedeutend mitBigDecimal
in Java. Das ist jedoch nicht das, was ich unter der Frage verstanden habe. Ich dachte, es würde Antworten bestrafen, die nur einstellige Zahlen sortieren.C + x86-Baugruppe, 636
Ich weiß, das wird nicht gewinnen, aber es fühlte sich so unnatürlich und verdreht an, dass ich es teilen musste. Keine Arrays oder Strings (solange Sie die Eingabeargumente nicht zählen). Die Anzahl der Stellen wird durch den 32-Bit-Bereich begrenzt.
Hier ist eine kleine Erklärung, was ich getan habe:
Ich dachte, ich würde dies tun, ohne Arrays oder Zeichenfolgen zu verwenden, und dann kam mir die Rekursion in den Sinn, aber natürlich konnte ich mit der Rekursion keine Werte aus anderen rekursiven Aufrufen austauschen ... und dann wurde mir dies klar Es gab einen Weg. Wenn ich mein C-Programm mit einer Assembly-Funktion verbinde, kann ich in den Stapel springen und einen Zeiger auf den Basiszeiger des gewünschten Aufrufs zurückgeben. Das macht die Funktion "recursionStackAt". Natürlich ist recursionStackAt eine sehr hässliche Funktion, deren Ergebnis nicht nur von der Eingabe oder dem Programmstatus abhängt, sondern auch vom Aufrufer selbst. Beachten Sie, dass ich deshalb die Indizes von 0 auf 1 geändert habe.
Ohne weiteres hier der Code:
Und natürlich den x86-Assemblycode (AT & T sintax, btw) für die recursionStackAt-Funktion:
Einige Beispiele zur Ausgabe: (1 bedeutet Erhöhen und 0 Verringern)
Hier ist die verschleierte Version (die nicht lesbar ist, aber gut funktioniert):
http://pastebin.com/XkYt9DLy (C-Code) http://pastebin.com/h0S0dfeU (x86-Code)
Also, wenn LibreOffice nicht lügt, besteht mein verschleierter Code aus 646 Zeichen (ohne Leerzeichen, sollte ich sie zählen?) Und wenn alle anderen Bedingungen erfüllt sind, erhalte ich eine -10 für die zunehmende / abnehmende Auswahl.
Oh, und um dies zu kompilieren, sollten Sie tun (auf Unix-ähnlichen Systemen)
Beachten Sie, dass das Flag -m32 nur angezeigt wird, wenn Sie sich auf einem 64-Bit-Computer befinden. Sie benötigen auch die 32-Bit-Bibliotheken, um es zu kompilieren.
quelle
Bash (Echo) (0 + 7 + 0 + 0 + 32-10) = 29
Sorta:
Verwendung:
Verwenden Sie "-e", um in umgekehrter Reihenfolge zu sortieren:
BEARBEITEN: "cat" wurde in "echo" geändert, damit es tatsächlich funktioniert. BEARBEITEN 2: "$ *" hinzugefügt und in "sorta" -Skript eingefügt
quelle
-e
als Argument für die umgekehrte Ausgabe verwendet werden.Python3
Mein Skript beinhaltet:
Keine Arrays
Keine Schnüre
Komplexität ist O (n): Ich habe countingsort verwendet (von mir geändert, um keine Arrays zu verwenden, sondern Primzahlen, um Vorkommen zu zählen)
Keine Größenbeschränkungen
Zeichen:
260234quelle
P
kann geschrieben werdenlambda l:((((29-6*l%2,19-2*l%2)[l<9],13-2*l%2)[l<7],2*l-1)[l<5],2)[l==1]
, wobei sich ziemlich viele Zeichen abschneiden. Ich habe es vielleicht ein wenig durcheinander gebracht, aber die Idee ist, eine verschachtelte Version des Python-Ternärs der alten Schule zu verwenden (bevor Python einen Ternär hatte)(false_result, true_result)[boolean]
.Bash + Coreutils, 14 (24 Zeichen - 10 für die Rückseite)
Ich denke, das könnte die Regeln ein wenig biegen, aber jetzt ist es Freitag ...
Ich gehe davon aus, dass die Verwendung von Standardbibliotheken erlaubt ist. Meine Interpretation der Standardbibliothek für
bash
istcoreutils
:Eingabe von stdin. In Benutzung:
quelle
bash
der Idee von ganzen Zahlen (deklariere -i). Bearbeitettr
mag Ihre Syntax nicht, was Sie auf diesen Systemen ein Zeichen kosten würde.) Ich würde jedenfalls argumentieren, dass dies immer noch alles Zeichenkettenoperationen sind.declare -i
macht einen Namen nicht zu einer Ganzzahl, sondern veranlasst die Shell, auf der rechten Seite von Zuweisungsausdrücken einen arithmetischen Kontext zu verwenden.C - 64 Zeichen, 64 Punkte
Sie fragen sich vielleicht, wie ich das ohne Überschriften zum Laufen bringe. Einfach, kompilieren mit:
Nicht golfen:
Ich habe auch beschlossen, die Zeichen zu sortieren, nur weil ich konnte.
Testläufe:
quelle
main(int a,char**b){b++;qsort(*b,strlen(*b),1,strcmp);puts(*b);}
was sowieso kürzer ist.c(*a
, meine Version von gcc bestand darauf, dass wirc(char*a
stattdessen tun mussten .c-Funktion (Little-Endian-Bogen),
131108 ZeichenOhne eine Antwort von sleepsort ist keine Sortieraufgabe vollständig . Die Rückkehr dauert bis zu 10 Sekunden, aber es funktioniert, und ich denke, es liegt voll im Rahmen der Spezifikationen. Diese Funktion nimmt einen einzelnen int-Parameter und gibt ein int mit den sortierten Dezimalstellen zurück:
Zeilenumbrüche und Einrückungen zur besseren Lesbarkeit hinzugefügt
Rufen Sie wie folgt an:
quelle
?:
anstelle von verwendenif-else
.fork()?c++:(sleep(d),exit(d));
(,)
.Java: 262 Punkte
Ja, ja, ich weiß, es ist hoffnungslos, aber immer noch ..
Analyse (Kennzeichnung):
StringBuffer
(Ich habe es verwendet, weil es kürzer ist alsStringBuilder
) (Punktzahl = 262 + 10 = 272)Verwendung:
Wenn Sie versuchen, die
G.java
Datei in der Eingabeaufforderung zu kompilieren, treten eine Menge Probleme (Fehler) auf. Also die Lösung?Dann sollte diese Klasse von einer
main()
Methode einer anderen Klasse (oder sogar dieser Klasse selbst) aufgerufen werden . Ich stelle es in eine andere Klasse, also zähle ich es nicht zu meiner Charakterzahl. Kompilieren Sie die andere Klasse auf ähnliche Weise (ohne zu verwendencmd
). Jetzt sollte diemain()
Methode in der anderen Klasse ungefähr so aussehen:Ohne unnötige Leerzeichen, Kommentare und Zeilenumbrüche sind es weitere 93 Zeichen. Ich füge es meinem Charakter nicht hinzu, da dies nur zur Demonstration über die Konsole dient.
Ausgabe:
NULL dh
0
wird berücksichtigt. Angenommen, die externe Klasse istHelper.java
und wurde erfolgreich kompiliert, sind einige Beispiele über die Konsole:Wenn geändert,
0
dh absteigend ...ANMERKUNGEN:
G.java
. Das ist die Kernklasse .Integer.MAX_VALUE
da dies die maximale Größe ist, die ein Array aufnehmen kann (in Java).quelle
TeX / LaTeX (332)
Wenn der eigentliche Code in einem Paket enthalten ist
s
, sieht die Haupt-LaTeX-Datei gut und einfach aus. Die Zahl wird nur als Mathe angegeben. Wenn die Zahl negativ ist, wird die Sortierreihenfolge umgekehrt. Der Code des Paketss
kann auch mit normalem TeX verwendet werden, Beispiel weiter unten.Das Paket
s
(eine Zeile, Zeilenenden werden nicht benötigt):Ergebnis:
Ergebnis: hoffnungslos
Wenn Sie TeX mit
etex
oder verwendenpdftex
, kann die Datei reduziert werden auf:<contents of s.sty>\rm\shipout\hbox{$<number>$}\bye
Bytes: 318 Bytes (
s.sty
) + 24 Bytes für den Rest ohne die NummerArrays werden nicht verwendet: 0
Ich sehe keine Zeichenfolgen mit mehreren Zeichen: 0
Die Anzahl ist nicht durch den Algorithmus begrenzt. Die größte TeX-Nummer ist 2 31 - 1 = 2147483647. Im Beispiel wird eine 66-stellige Zahl verwendet, die viel größer ist als 0
Wenn ein Minus angegeben wird, wird die Sortierreihenfolge auf absteigend zurückgesetzt: -10
0 + 318 + 24 + 0 + 0 - 10 = 332
Algorithmus:
Die Ziffern werden im Mathematikmodus zu aktiven Zeichen. Jede Ziffer speichert und sammelt die einzelnen Verwendungen in einem Makro. Nach dem Mathe-Modus werden die Makros mit den Ziffern in aufsteigender Reihenfolge ausgegeben.
Die Richtungsänderung erfolgt durch Text von rechts nach links, eine e-TeX-Funktion.
Entgolfte Version des Codes in
s.sty
Fortpflanzung
Es gibt einige Online-LaTeX-Compiler, eine Liste finden Sie hier . Ich habe das erste Element auf der Liste ausprobiert, das LaTeX-Servlet auf sciencesoft.at . Es kann ohne Signatur verwendet werden und es können auch permanente URLs erstellt werden: Quelle und Ergebnis als Bild .
quelle
C - 65
Der aufmerksame Beobachter wird feststellen, dass dieser Sortieralgorithmus in der Zeit 0 (n) für die Anzahl der Ziffern in ausgeführt wird
n
.Der pragmatische Beobachter wird bemerken, dass dieser Sortieralgorithmus zeitproportional zum Bereich der vorzeichenbehafteten ganzen Zahlen auf der Plattform abläuft, dass er den globalen Zustand mutiert, der zwischen den Läufen neu initialisiert werden muss, und dass viele andere Opfer zugunsten der Kürze erbracht wurden.
Die ungolfed-Version ist nicht genau gleichwertig, vermittelt aber besser den tatsächlichen Algorithmus.
Hier ist ein Testgeschirr für die Funktion:
quelle
Haskell - 96
96 Zeichen, keine Arrays, keine Strings, kein Integer-Limit, kann nicht rückgängig gemacht werden
Beispiele:
Dies ist die Einfügesorte, die direkt an den ganzen Zahlen selbst ausgeführt wird. Dies ähnelt dem anderen Haskell-Eintrag, der eine Art Blase ist, obwohl ich schwöre, dass ich daran gearbeitet habe, bevor ich diesen gesehen habe.
Kurzanleitung:
d
teilt eine Zahl in Einheiten und Zehner, dh:d 135
ist das Paar(13,5)
a%x
ist die sortierte Einfügung der Ziffera
in die Nummerx
a&x
sortiertx
durch Einfügen der Einheitenziffer ina
das Ergebnis und den Rests x
sortiert x durch Anstoß des&
Rekursion auf 0 undx
Der Trick ist, dass das zweite Argument von
%
und&
nichtx
direkt ist, sondernx
divMod verwendetd
quelle
Python3.3 61 Punkte
Dieses Programm nimmt die Eingabe als Zeichenfolge auf, die als Zeichenfolge zählt, da sie nicht sofort in eine Ganzzahl geändert wird. +10
Die Zeichenfolge wird in ein Array sortiert +10
Dieses Array wird zu einer Zeichenfolge zusammengefügt +10 zusammengefügt
Hinweis: Die
''
Zeichenfolge, mit der der Inhalt des Arrays verknüpft wird, besteht nicht aus mehreren Zeichen. Daher wird der Punktzahl nicht +10 hinzugefügt.Das Programm besteht aus 31 Zeichen. +31
31 + 10 + 10 + 10 = 61 Punkte
quelle
print(int(''.join(sorted(input()))))
, aber die Umwandlung in eine Ganzzahl fügte nur Punkte hinzu und ließ den Code den Regeln nicht näher folgen. Ich bin der Herausforderung, die ich nehme, nicht wirklich treu geblieben. Er gibt jedoch an, dass die Eingabe eine Zeichenfolge und die Ausgabe eine Zeichenfolge sein kann (für print-Anweisungen), und sagt nichts dazwischen:]J, 10 Zeichen (+ 1 Zeichenfolge) = 20
Verwendung:
Funktioniert für alle 32-Bit-Nummern.
Erläuterung:
/:~
sortiere&.
nach":
Format. Meine Vorgängerversion verwendete ebenfalls ein Array, aber es ist teuer. Jetzt muss ich nur noch eine Zeichenfolge verwenden und die Zeichen alphabetisch sortieren.":
konvertiert die eingegebene Zahl in einen String und/:~
sortiert die Ziffern in aufsteigender Reihenfolge. Da die Sortierung im Unterformat erfolgt, wird die Zeichenfolge nach Abschluss der Sortierung wieder in eine Zahl umgewandelt. Das Hinzufügen der Fähigkeit zum Rückwärtsfahren würde wahrscheinlich mehr kosten als es spart, also habe ich mich nicht darum gekümmert.Man könnte argumentieren, dass J wie APL und K eine Array-basierte Sprache ist und die einzelne Eingabe ein Array mit 1 Element ist, aber ich habe mich dafür entschieden, bei der Berechnung meiner Punktzahl nicht so hart zu denken.
Das 32-Bit-Limit wird von J und nicht von meinem Programm vorgegeben. Je höher und J schaltet die Zahlen in wissenschaftliche Notation. Aus der Frage, ob die 32-Punkte-Strafe in diesem Fall gilt, ist nicht ersichtlich, aber selbst wenn beide vorherigen Strafen gelten (ich glaube nicht, dass sie das sollten), steigt die Punktzahl auf 72 und schlägt die überwiegende Mehrheit der anderen immer noch deutlich Antworten.
quelle
Python 2.7: 174
Es erstellt ein Wörterbuch, das alle 10 Ziffern auf 0 abbildet. Anschließend durchläuft es die Länge der Zahl (
log10(i)
), extrahiert jede Ziffer ((i / (10 ** c)) % 10
) und erhöht den Zähler für diese Ziffer im Wörterbuch. Schließlich wird eine Zeichenfolge erstellt, indem alle 10 Ziffern durchlaufen werden und für jede Ziffer eine Instanz der Ziffer als Zeichenfolge ausgegeben wird.Ich könnte die letzte Zeile ändern,
print"".join(d[n]*str(n)for n in xrange(10))
die 16 Zeichen weniger sein würde, würde aber Zeichenfolgen mit mehreren Zeichen verwenden.quelle
i=int(input())
kann nur sein ,i=input()
wieinput()
die Nummer automatisch evals.C (bis C90)
oder C ++7866 PunkteDie Funktion zum Sortieren einer Ganzzahl wird aufgerufen
s
.Wertung:
int
) (+0)Alte Version (78 Punkte, funktioniert auch mit C ++ und neueren C-Versionen)
quelle
C # - 179
Nicht golfen
Prüfung
Normal:
Rückgängig gemacht:
Punkte: (Ich hoffe, ich habe das Punktesystem richtig verstanden - zögern Sie nicht zu korrigieren)
C # mit LINQPAD - 123
Prüfung
Normal:
Rückgängig gemacht:
Punkte:
quelle
Java 1469
Eine string- und arrayfreie Lösung in Java. 1437 Zeichen + 32, da nur Long.MAX_VALUE als Eingabe benötigt wird. Mit Double könnte ich stattdessen auf über 300 Stellen wechseln, aber das wäre zu mühsam, um es zu implementieren. Für alles, was größer ist, sind BigInteger und AFAIK erforderlich, die intern Arrays verwenden. Wenn Sie weniger als 19 Stellen für die Eingabe verwenden, hat die Ausgabe führende Nullen. Negative Eingabe gibt alle Nullen und alles, was keine Zahl ist, löst eine Ausnahme aus.
Für die Sorte, die ich am einfachsten fand, ist es ziemlich ineffizient. (sollte O (n * n) sein)
Ich weiß, dass dies nicht wirklich mit den Lösungen in anderen Sprachen zu vergleichen ist, aber ich denke, dass dies zumindest die kürzeste ist, die ich in Java bekommen kann. (Wenn jemand weiß, wie man das noch kürzer macht, kann er es gerne bearbeiten / kommentieren)
quelle
AWK - 101
Die 'x'-Datei:
Der Lauf:
Das einzige Array, das verwendet wird, ist ARGV. Dies ist keine Hilfe beim Sortieren, sondern nur der Zugriff auf die Befehlszeilenparameter. Diese Werte befinden sich in Nicht-Array-Variablen, die für Berechnungen tatsächlich benötigt werden. Ich denke, das wird gegen diese Lösung nicht zählen. Die folgende Berechnung berücksichtigt das ARGV-Array nicht:
111 (Zeichen) - 10 (kann umkehren)
quelle
Ich sehe nichts über Sortierfunktionen in der Frage, also ... (Ich werde die Antwort entfernen, wenn sie die Regeln verbiegt oder bricht, lass es mich wissen.)
JavaScript
5696JavaScript
69109 (umschaltbar)Kann mit den EcmaScript 6-Pfeilfunktionen ein wenig runtergolfen werden :
ES6
5090ES6
63103 (umschaltbar) (73-10)quelle
prompt
gibt einen String zurück (den Sie nicht sofort in eine Ganzzahl umwandeln): +10;split
gibt ein Array zurück: +20;sort
führt eine In-Place-Sortierung durch (es ist also immer noch dasselbe Array);join
gibt eine neue Zeichenfolge zurück, +10. Gesamt: 96.SED 67-Zeichen (67 oder 107 Punkte)
Hierbei wird der Kürze halber eine Blasensorte verwendet. Der Wert wäre 107, wenn jedes reguläre Ausdrucksmuster und jede Ersetzung als Zeichenfolge gezählt wird (dh 67 + (10 * 4)).
Anzahl der Stellen, die vom Arbeitsspeicher begrenzt werden (und wahrscheinlich Geduld)
quelle
Python-Lambda-Funktion (reversibel), 69
n
(Eingabe) und''.join(...)
(+20)sorted(...)
(+20)d
(-10)Python-Lambda-Funktion (nicht reversibel), 67
BEARBEITEN: Die Eingabe sollte eine Zeichenfolge sein. Ich denke über die Strafe nach, diese Saite direkt zu benutzen.
quelle
raw_input([prompt]) -> string
, alsosorted(raw_input())
+10. Alsosorted -> new sorted list
auch so +20. DannS.join -> string
also wieder +10. Die Slice-Notation impliziert auch Strings, also +10 (alles andere, was die Slice-Notation unterstützt, wäre wohl +20). Also berechne ich 73 bzw. 108.print
anstelle vonreturn
ing ist?lambda
haben.)print
es kürzer ist und keine Wrapper benötigt. Ich wusste nicht, dass Sie Lambda-Funktionen zulassen würden. Art von facepalmed, wenn ich das lese. Ist es jetzt richtig?''.join(sorted(str(n)))
Könnten Sie mir bitte sagen, warum dies nicht als Antwort angesehen wird? Ich bin ein bisschen neuCommon Lisp - 126
Die ungolfifizierte (sowohl stilistisch als auch lexikalisch, aber funktional identische) Version:
Die Ziffern einer negativen Zahl werden als negativ behandelt, und die Ziffern werden mit der niedrigsten Signifikanz zuerst sortiert (dh Little-Endian). Beispiele:
Die Golfversion enthält 136 Zeichen, einschließlich Leerzeichen. Es verwendet keine Zeichenfolgen und keine Arrays und verarbeitet Ganzzahlen mit beliebiger Genauigkeit, einschließlich negativer Ganzzahlen. Die Sortierung wird anhand eines binären Prädikats parametrisiert, das eine Gesamtreihenfolge für die Ganzzahlen in definiert
[-9, 9]
, einschließlich, aber nicht beschränkt auf<
und>
:Dies ergibt eine Punktzahl von 126.
quelle
JavaScript 416/185
Keine Arrays, keine Strings, keine willkürliche Längenbeschränkung ...
Aber das Sortieren nach oben / unten hätte mehr als 10 Zeichen gekostet ^^ Aber ich fand die Idee, Ziffern zu zählen und auszudrucken, interessant - vielleicht kann jemand diese Idee in GolfScript verwenden und den Preis gewinnen ;-)
Derselbe Code kürzer mit eval: (aber das würde wahrscheinlich mit Strings in Betracht gezogen werden ...)
quelle
C (222)
Punkte:
-10 (wird umgekehrt sortiert, wenn die Zahl (argv [1]) negativ ist)
= 222 Punkte
Flags, die benötigt werden, um die 1000 Compiler-Warnungen loszuwerden:
gcc -Wno-implicit-function-declaration -Wno-return-type -Wno-implicit-int -Wno-char-subscripts -o count2 counta2.c
"Besser" lesbar:
Etwas ungolfed:
quelle
"%""i"
statt verwenden"%i"
? Sie kompilieren nach dem gleichen Prinzip, sodass Sie nur zwei Zeichen verschwenden.Gibt es einen Grund, warum ich diese Lösung nicht schon sehe?
Rubin
Bin mir nicht sicher, wie ich das bewerten soll. Die Aufteilung würde ein Array erzeugen, aber darüber hinaus nicht sicher .. 38 Zeichen + 2x20 für Arrays? Oder sollte es alle Arrays enthalten, die von sort intern erstellt werden?
quelle
VBScript - 76 (96?)
66 Zeichen + 10 für die Verwendung von Zeichenfolge
n
(Weiß nicht, ob die Verwendung der
replace
Funktion undstring
Funktion, die n Zeichen x zurückgibt, als zusätzliche Zeichenfolge gezählt wird).Es zählt die Menge einer bestimmten Ziffer, indem es die Länge der ursprünglichen Zeichenfolge mit derselben Zeichenfolge vergleicht, wobei die bestimmte Ziffer ersetzt wird. Dann hängt es diese Anzahl von Ziffern an n an.
quelle
Python 3 Schlafort (168)
Mit absolut keiner Liste oder Schleife, nur Generatoren.
könnte wahrscheinlich verbessert werden.
quelle
Schläger 97
97 Punkte (87 + 20 für zwei Zeichenfolgen, -10 für das Sortieren, keine Arrays)
Dies verwendet Listen von Zeichen, so dass Sie ihm eine Zeichenvergleichsfunktion wie
char<?
oder geben müssenchar>?
. Ich fühle, dass dies auch als ungolfed gilt, da es nicht viel zu tun gibt, als Leerzeichen hinzuzufügen und Variablennamen zu erhöhen. Meine alte Version ist vielleicht ehrenwerter :)Alte Version ohne Zeichenketten:
110 Punkte (120 Bytes (utf-8) - 10, um die Sortierreihenfolge zu ändern. Es werden keine Zeichenfolgen und keine Arrays verwendet.)
Ungolfed:
Ich habe es mit der 100.000sten Fibonacci-Zahl getestet:
Und das gleiche in umgekehrter Reihenfolge:
quelle