Inspiriert von dieser Stapelüberlauf-Frage: Sortieren einer Liste: Zahlen in aufsteigender Reihenfolge, Buchstaben in absteigender Reihenfolge . Ihre Aufgabe ist es, das folgende Problem zu lösen, und da dies Codegolf ist , sollten Sie dies in so wenigen Bytes wie möglich tun.
Sie sollten eine Liste von Objekten als Eingabe mit Buchstaben nehmen (jede angemessene Form: string
, char
usw.) und Zahlen. Sie sollten dann die Zahlen in aufsteigender Reihenfolge und die Buchstaben in absteigender Reihenfolge sortieren. Sie sollten jedoch Buchstaben in Buchstabenpositionen und Zahlen in Zahlenpositionen belassen. Zum Beispiel, wenn die Liste ist:
[L, D, L, L, D, L]
Die Ausgabeliste sollte folgende Form haben:
[L, D, L, L, D, L]
Durcharbeiten
Eingang: ['a', 2, 'b', 1, 'c', 3]
- Sortieren Sie die Nummern in aufsteigender Reihenfolge:
[1, 2, 3]
- Sortieren Sie die Buchstaben in absteigender Reihenfolge:
['c', 'b', 'a']
- Schließe dich ihnen wieder an, aber behalte die Reihenfolge bei:
['c', 1', 'b', 2, 'a', 3]
Regeln
- Die Liste enthält nur Buchstaben und Ziffern.
- Die Liste ist möglicherweise leer.
- Die Liste darf nur Buchstaben oder nur Ziffern enthalten.
- Wenn Ihre Sprache keine gemischten Arrays unterstützt, können Sie anstelle von Zahlen auch Ziffern verwenden. Beachten Sie, dass Sie gemischte Typen verwenden müssen, wenn Ihre Sprache dies unterstützt.
- Buchstaben werden nur
[a-z]
oder sein[A-Z]
, Sie können wählen, welche. - Buchstaben werden als
a
niedrigste undz
höchste Buchstaben sortierta = 1, z = 26
. - Standardlücken sind verboten.
- I / O kann auf jede Standardmethode ausgeführt werden, einschließlich als Zeichenfolge.
Testfälle
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Da es sich um Code-Golf die kürzeste Antwort in Bytes gewinnt!
quelle
Antworten:
Retina , 10 Bytes
Probieren Sie es online!
Die
O
Bühne in Retina kann direkt die Art von selektiver Sortierung durchführen, die für diese Herausforderung erforderlich ist.Hier sortiert die erste Zeile die Ziffern, während die zweite Zeile die Nicht-Ziffern in umgekehrter Reihenfolge sortiert.
quelle
Python 2 ,
5352 Bytes-2 Byte dank g.rocket
-1 Byte dank Jonathan Frech
Probieren Sie es online!
Die
sorted
Liste enthält zuerst die Zahlen und dann die Zeichen[3, 5, 6, 'a', 'b', 'x']
, mit denen danne<x
gefiltert wird, was Zahl und was Zeichen sind. In Python ist jede Zahl kleiner als eine Liste (Eingabe) und eine Liste kleiner als eine Zeichenfolge.quelle
IndexError: pop index out of range
. Die frühere Lösung hat funktioniert.1-(e<'`')
sollte sein(e<'`')-1
. Sie haben sie einfach in die falsche Reihenfolge gebracht. Übrigens, Sie haben mich ninja'd: / Ich hatte dase>x
APL (Dyalog) ,
2726 BytesErwartet Großbuchstaben
Probieren Sie es online!
Dies sind nur zwei Anwendungen des Formulars
f@g
. Wenden Sie die Funktionf
auf die mit gekennzeichneten Elemente ang
.Für die erste Anwendung , die wir verwenden:
f
:⍒⊃¨⊂
die absteigenden Typen (⍒
) jeweils Pick (⊃¨
) aus dem gesamten Argumente (⊂
).g
:(e←∊∘⎕A)
Mitglieder (∊
) von (∘
) der A lphabet (⎕A
) und speichern (←
) diese Funktion alse
.Für die zweite Anwendung verwenden wir:
f
:⍋⊃¨⊂
die aufsteigenden Typen (⍋
) jeweils Pick (⊃¨
) aus dem gesamten Argumente (⊂
).g
:(~e)
not (~
) Mitglieder des Alphabets (e
; die zuvor gespeicherte Funktion)quelle
83=⎕DR¨⍵
3=10|⎕DR
für ganze Zahlen?⌊0.1×⎕DR
gibt die Anzahl der Bits an, die zur Darstellung jedes Skalars verwendet werden, mit Ausnahme von Zeigern, die von der Architektur abhängen, aber immer 326 sind2|⎕DR
. Alle Zahlen sind also .JavaScript (ES6),
715147 BytesSparte 20 Bytes mit nur
sort()
, wie von @JustinMariner vorgeschlagen. Spartedank @CraigAyre 4 weitere Bytes
Verwenden Sie einen ähnlichen Ansatz wie Rods Python-Antwort :
Testfälle
Code-Snippet anzeigen
quelle
sort
Funktion nicht entfernen und nursort()
alleine verwenden? Es scheint auf die gleiche Weise ohne Funktion zu sortieren (in Chrome / FF / Edge).sort()
fehlschlagen. Da wir jedoch auf Ziffern beschränkt sind, haben Sie Recht: Das funktioniert. Vielen Dank!a.sort()
jeder Schleife verschieben / Pop , anstatt zuzuweisenx
?:.map(n=>a.sort()[1/n?'shift':'pop']())
+n
dass es stattdessen verwendet werden kann1/n
R ,
8376 Bytes-7 Bytes dank Miff
Dies ist das Gleiche wie das Folgende, aber es ermöglicht die Eingabe eines gemischten Typs
list
anstelle einesatomic
Vektors (der alles als Zeichen mit gemischten Typen typisieren würde).Probieren Sie es online!
R ,
6861 Bytes-7 Bytes dank Miff
Anonyme Funktion. In diesem Fall werden alle Ziffern in Zeichen umgewandelt.
n[-d]
ist das Array ohne die Ziffern. GibtNULL
(leere Liste) bei leerer Eingabe zurück.Probieren Sie es online!
quelle
d=n%in%0:9
Japt ,
1815 BytesVielen Dank an @Shaggy für -3 Bytes und für die Hilfe beim Reparieren von Arrays mit
0
s.Die erste Zeile wurde absichtlich leer gelassen.
Probieren Sie es online! Verwenden Sie
-Q
, um das formatierte Array anzuzeigen.Erläuterung
Die erste Zeile ist leer, um ein Überschreiben des Eingabearrays zu vermeiden.
[5, 'a', 'x', 3, 6, 'b']
Erstellen Sie eine Kopie, indem Sie
c
das Eingabearray reduzieren ( ) und dann sortieren (ñ
), wobei die Zeichenfolgen durch ihren Zeichencode (c
) dargestellt werden. Dies ist in gespeichertV
.[3, 5, 6, 'a', 'b', 'x']
Ordnen Sie dann das Eingabearray mit der Funktion ...
Verwandeln Sie Zahlen in binäre Zeichenfolgen (truthy) oder Zeichenfolgen in
""
(falsy) (¤
). Wenn dies der Fall ist, entferne vom Anfang vonV
(v
), andernfalls entferne vom Ende von (o
).quelle
Vo
undVv
herum. Ich bin überzeugt, dass es einen kürzeren Weg geben muss, ohne den ternären.o
mit negativen Werten oder so etwas von Anfang an entfernen könnte ...JavaScript,
164162158142 BytesBearbeiten Sie 1: 2 Bytes weniger, nachdem Sie eine redundante Zuweisung von v entfernt haben.
2: 4 Bytes weniger bearbeiten dank TheLethalCoder.
3: 16 Bytes weniger bearbeiten dank brillanter Hinweise von Justin Mariner
Es ist mein allererstes Mal im Code-Golf, also kann es sicherlich verbessert werden ... Aber trotzdem einen Versuch wert.
Das Programm führt eine Variante der Auswahlsortierung durch, die nur die Werte desselben Typs wie den aktuellen berücksichtigt (nur eine Zahl und eine Zahl oder einen Buchstaben und einen Buchstaben tauschen).
Lesbare Form:
quelle
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
und entfernen Sie das Inkrement in der äußeren Schleife.j
wie ich vorgeschlagen, ich nicht sehen , benutzen Siei
weiter unten zu ändern , nurx[i]=x[m]
zux[i++]=x[m]
x[i++]=x[m]
... Danke!C ++ 17 (gcc) , 219 Bytes
Probieren Sie es online!
Kaum wettbewerbsfähig. Aber ich muss gemischte Arrays unterstützen? FEIN.
Akzeptiert eine Reihe von Varianten im Bereichsstil und ändert sie an Ort und Stelle. Kopiert die Eingabe in zwei sortierte Sätze und dann zurück in das Eingabe- / Ausgabearray.
quelle
void *
in C verwenden;) Aber ja, interessant zu sehen, wie eine Lösung durch einen solchen Rahmen springt.#include
sMathematica, 203 Bytes
Probieren Sie es online!
quelle
Jelly , 14 Bytes
Probieren Sie es online!
Grundsätzlich eine Portierung von Rods Python-Lösung .
quelle
Pyth ,
1211 BytesProbieren Sie es online! oder Probieren Sie die Test Suite aus.
Erläuterung
quelle
Python,
145139130 Bytes6 Bytes gespart dank @officialaimm
9 Bytes gespart dank @Chris_Rands
Probieren Sie es online!
quelle
type(x)==str
isinstance(...)
Ich denke,05AB1E , 17 Bytes
Probieren Sie es online!
Die Verwendung des Sort-By-Verschlusses war tatsächlich schlechter:
Σ©Ç®ai0<*}}¹SaJsvyay.;
quelle
Python 3, 77 Bytes
Diese Antwort basiert auf dem Kommentar, der besagt, dass Sie "1", "2" usw. verwenden können, wenn Zeichen und Ziffern in der Sprache nicht vergleichbar sind. 'a' und 1 sind in Python 3 nicht vergleichbar.
quelle
q / kdb +,
5453 BytesLösung:
Beispiele:
Erläuterung:
Suchen Sie die Zeichen in der Liste, sortieren Sie sie in absteigender Reihenfolge, suchen Sie die Longs in der Liste, sortieren Sie sie in aufsteigender Reihenfolge, fügen Sie sie hinzu, um eine Liste von z. B. zu erhalten
("x";"b";"a";3;5;6)
, und weisen Sie die sortierten Werte wieder ihren ursprünglichen Positionen in der Liste zu, z0 3 4 1 2 5
.Golf spielen ist nur q keywords Schalt out (
each
,where
undnot
) für ihrek
Äquivalente (die sie erfordert in Klammern zu umwickelnden).Bearbeitungen
desc
quelle
C (GCC) ,
125113110 BytesProbieren Sie es online!
Erklärt:
Buchstaben werden in Großbuchstaben erwartet.
quelle
PHP, 66 Bytes:
Nimmt Eingaben von Befehlszeilenargumenten entgegen und druckt eine Zeichenfolge. Laufen Sie mit
-nr
oder versuchen Sie es online .Gibt eine Warnung in PHP 7.1 aus; ersetzen
a&
mit""<
zu reparieren.quelle
Mathematica, 107 Bytes
quelle
C # (.NET Core) , 171 Byte
Die Byteanzahl umfasst auch:
Probieren Sie es online!
Erläuterung:
quelle
Perl 5 , 107 + 1 (-n) = 108 Bytes
Probieren Sie es online!
quelle
Ruby , 265 Bytes
Probieren Sie es online!
Erster Timer hier, meine Lösung ist definitiv nicht die beste. Aber da dies meine erste Antwort ist, dachte ich, ich poste nur zum Spaß.
Ich freue mich darauf, bessere Ruby-Antworten zu sehen und herauszufinden, was der beste Ansatz ist. Ich hoffe ich verbessere mich in Zukunft =)
Lesbar
quelle
Haskell, 108 Bytes
Es mag kürzere Wege geben, aber ich musste es nur mit der
Lens
Bibliothek versuchen .Ich könnte definieren
f
, dass es sich nur um die Zusammensetzung der beideni
Aufrufe handelt, aber ich müsste mich trotzdem darauf beziehenx
, um einen Typfehler aufgrund der Monomorphismus-Einschränkung zu vermeiden. Beachten Sie, dass die Art derf
ist ,Traversable t => t Char -> t Char
damit es mit verwendet werden kann ,String
s die Listen sindChar
s sowie mit Arrays vonChar
s.Hier sind die Testfälle:
quelle
Python 3, 91 Bytes
quelle
Clojure, 151 Bytes
Beispiel:
Dieser berechnet die kumulative
SummeAnzahl der ganzen Zahlen und Zeichen, und verwendet es , das richtige Element , das aus einer sortierten Liste zum Nachschlagen des Typs der Elemente entsprechen.quelle
APL (Dyalog) , 26 Bytes
(verwendet
⎕IO=1
)Probieren Sie es online!
quelle