Unterschreib das Wort 2!
Vor nicht allzu langer Zeit habe ich eine Challenge namens Sign that word! . In der Herausforderung müssen Sie die Signatur des Wortes finden, dh die Buchstaben, die in Reihenfolge gebracht wurden (z. B. Die Signatur von this
ist hist
). Nun, diese Herausforderung hat sich sehr gut bewährt , aber es gab ein zentrales Problem: Es war viel zu einfach (siehe die GolfScript-Antwort ). Also habe ich eine ähnliche Herausforderung gepostet, aber mit mehr Regeln, von denen die meisten von PPCG-Benutzern in den Kommentaren zum vorherigen Puzzle vorgeschlagen wurden. Auf geht's!
Regeln
- Ihr Programm muss eine Eingabe vornehmen und dann die Signatur an STDOUT oder eine gleichwertige Sprache ausgeben.
- Sie dürfen keine eingebauten Sortierfunktionen verwenden, daher sind
$
Inhalte wie in GolfScript nicht zulässig. - Multicase muss unterstützt werden - Ihr Programm muss Groß- und Kleinbuchstaben zusammenfassen. Die Signatur von
Hello
ist alsoeHllo
nicht so,Hello
wie Sie es von der GolfScript-Antwort auf die erste Version erhalten. - Es muss einen kostenlosen Interpreter / Compiler für Ihr Programm geben, auf den Sie verlinken sollten.
Wertung
Ihre Punktzahl ist Ihre Byteanzahl. Die niedrigste Byteanzahl gewinnt.
Bestenliste
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
wir zum Beispiel ausgebenhHhist
oder müssen wir ausgebenhhHist
oderHhhist
?Antworten:
Pyth, 10 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Haskell, 51
Das
zip
erzeugt eine Liste von Zeichenpaaren[('a','A'), ...('z','Z')]
. Aufgrund von Kürzungen muss der zweite Endpunkt nicht angegeben werden. Für jedes Paar in der Liste nehmen wir die Buchstaben in der Eingabezeichenfolges
, die eines der beiden Zeichen im Paar sind.quelle
Python 3,
72-70BytesAngenommen, die Eingabe besteht nur aus
[a-zA-Z]
.(-2 Bytes dank @xnor)
quelle
"".join(c*b ...)
für"".join(c ... if b)
die gleiche Art und Weisesum(n ... if b)
sein kannsum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 Bytes
GOTO ++ Projektseite
Hier ist eine etwas besser lesbare und kommentierte Version des Codes (Anmerkung,
GOTO
die einen Kommentar in GOTO ++ startet):quelle
function(arg)
undfunction() arg
sind beide gültig. Auch Prioritätsklammern sind} {
und nicht die langweiligen( )
Pyth,
15 bis14 BytesVielen Dank für Isaacg für das Entfernen von 1 Byte.
Ich weiß noch nicht viel über Pyth, daher kann es sein, dass hier nicht gut gespielt wird.
Probieren Sie es hier aus.
quelle
s
ist dasselbe wiejk
auf einer Saitenliste.JavaScript (ES6), 71
74Beschränkt auf A-Za-z (siehe Kommentar von @Matthieu M)
Bearbeiten Wird auch verwendet, um einen einzelnen Ausdruck mit Kommas zu erstellen, um ein 'Zurückgeben' zu vermeiden. Hier ist eine Ausgabe erforderlich, damit ich ein einfaches
for
Komma verwenden und vergessen kann.Bei Verwendung des Array-Verständnisses beträgt die Byteanzahl 73, dies ist jedoch kein gültiges EcmaScript 6 mehrÜblicher Hinweis: Testen Sie die Ausführung des Snippets in jedem EcmaScript 6-kompatiblen Browser (insbesondere nicht in Chrome und nicht in MSIE. Ich habe es in Firefox getestet, Safari 9 könnte funktionieren).
quelle
Javascript,
112194 BytesDies ist weit weg von "Golf", aber ich bin gerade ein bisschen beschäftigt, nur bearbeitet, um Sortierung zu entfernen.
quelle
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Eine kleine Verbesserung gegenüber der Antwort von Sp3000 , bei der die Idee verwendet wird, die Zeichenindizes zu iterieren und für jeden einzelnen Index die Eingabe zu durchlaufen, um Zeichen zu ermitteln, die der Groß- und Kleinschreibung entsprechen.
Dies verwendet eine einzelne Schleife, die den Eingang 26 Mal durchläuft. Das Trennzeichen
~
wird verwendet, um zu wissen, wann zum nächsten Zeichenindex übergegangen werden sollc
. Um festzustellen, ob ein Zeichend
mit einem Wertc
bis zu Groß- / Kleinschreibung übereinstimmt , werden die letzten fünf Bits desd
Bitwerts mit xoderiertc
, wobei eine 0 eine Übereinstimmung angibt.Dann wird das Zeichen
d
genau dann gedruckt, wenn das Ergebnis ist0
, ansonsten mit einer leeren Zeichenfolge.quelle
Python 2.7,
114106 BytesProtokolliert das Vorhandensein eines Zeichens in einem 123-Längen-Array (um sowohl AZ- als auch az-Bereiche einzuschließen) und durchläuft es dann, um die Nicht-Null-Einträge zu erhalten.
Ineffizient, aber effizienter als brachiales Erzwingen (aber länger :().
Testen Sie es-
quelle
HelloWorldhi
, bekomme ich['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
.join
ed). -8 Bytes. Danke :)PHP,
275270 BytesErläuterung:
Der Code generiert mit jedem Buchstaben im Alphabet ein Array, dessen ASCII-Wert als Array-Schlüssel vorliegt. Anschließend generiert der Code ein neues Array, das die ASCII-Werte der Eingabe enthält. Dann wird der niedrigste Wert ausgedruckt und entfernt.
Verwendung:
Rufe das Skript mit einem Argument auf:
php -d error_reporting=0 script.php Hello
Ungolfed Version:
Alle Ratschläge sind sehr dankbar.
quelle
Haskell,
8353 BytesVerwendung:
f "HelloWorldhi"
->"deHhillloorW"
.So funktioniert es: Sei
y
die EingabezeichenfolgeEdit: 30 Bytes gespeichert, stell dir das vor! Vielen Dank @ Mauris.
quelle
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 Bytes)? (Dies wird einige Zeit in Anspruch nehmen, dalength [' '..] == 1114080
- aber es ist endlich.)Python 3, 61 Bytes
Eine neue Antwort für eine andere Technik!
Dies
ord('a')&31==ord('A')&31
und das beachtend,ord('z')&31==ord('Z')&31
können wir einfach ein Array von leeren Strings erstellen und für jedes Zeichen zum Array-Index seines ASCII-Werts hinzufügen&31
. Wenn Sie es drucken, wird es sortiert.Beschränkt auf Eingabe
a-zA-Z
.quelle
Python 3,
97-92BytesDie beste Art zu sortieren ist, alle Permutationen zu generieren und dann das Minimum auszuwählen, das gerade sortiert wird :)
Die Zeichenfolgen werden vor dem Vergleich in Kleinbuchstaben gesetzt, um die Regeln für die Berücksichtigung der Groß- und Kleinschreibung einzuhalten.
Warnung: Kann mit großen Saiten sehr langsam sein .
Ein Dolmetscher befindet sich hier .
quelle
Python 3, 118 Bytes
Könnte viel kürzer golfen sein, ich weiß
quelle
if q not in i:
mitif~-(q in i):
..remove()
Funktion darauf aufrufe.Powershell, 164 Bytes
Ich bin mir sicher, dass es einen saubereren Weg gibt, aber ich konnte mir nichts anderes einfallen lassen. Nimmt einfach die Eingabe als Zeichenarray, führt eine Einfügesortierung durch und spuckt die Ausgabe aus. Verliert schrecklich, auch zu anderen nicht Golf spielenden Sprachen.
Code:
Verwendung:
Erweitert und erklärt:
quelle
Julia, 61 Bytes
Julia zeigt es als String-Ausgabe an, wenn Sie es in der REPL aufrufen. Wenn es hat zu STDOUT auszudrucken, dann braucht es 78 Bytes:
Einen Dolmetscher für Julia finden Sie hier . Eine andere, in die ich bereits Code eingefügt habe, ist hier . Beachten Sie, dass Sie bei der zweiten das Terminal (unten) sichtbar machen müssen, indem Sie die Grenze nach oben ziehen. Wenn Sie auf "Ausführen" klicken, wird es in der normalen Befehlszeile im Terminal ausgeführt (und zeigt daher die Ausgabe nicht an, wenn es ohne println aufgerufen wird). Alternativ können Sie einfach
julia
in das Terminal selbst tippen und dann alles in der REPL erledigen, was auftaucht.Und für ein bisschen mehr Spaß sind hier einige andere Implementierungen
Gnome-Sortierung (83 Bytes):
Mein eigener Sortieralgorithmus (84 Bytes):
quelle
Scala, 82 Bytes
von der Kommandozeile:
wahrscheinlich kann ein bisschen weiter golfen werden ... einfach das Einfügen mit fold sortieren.
quelle
x86-Maschinencode,
51-42ByteBlasensortierung mit einigen Tricks zur Wiederverwendung von Registern, um hier und da Bytes zu rasieren; Die COM-Datei wird in DosBox ausgeführt, empfängt die Eingabe von der Befehlszeile und druckt die Ausgabe auf die Standardausgabe.
Kommentierte Versammlung:
quelle
Java (JDK 10) , 125 Byte
Probieren Sie es online!
Mit einer naiven Art.
quelle
Perl, 88 Bytes
Nur eine einfache Blasensorte. Rufen Sie mit der Option -n auf, um den Text zu übergeben.
z.B:
Ausgabe:
quelle
PHP, 106 Bytes
Der Code:
Der Code enthält nichts Besonderes.
count_chars()
Erzeugt ein durch ASCII-Codes indiziertes Array, das die Anzahl der Vorkommen für jedes ASCII-Zeichen enthält. Der Rest ist eine langweilige Iteration über dieses Array.Beispiel für die Ausführung:
Ein zusätzliches Byte kann mit PHP 7 gespeichert werden: Ersetzen
$c[$i]
durch($c=count_chars($argv[1]))[$i]
und entfernen Sie die Zuweisung$c
von am Anfang des Programms.quelle
Haskell, 74 Bytes
Ganz anders als meine andere Antwort . Diesmal ist es eine einfache Einfügesorte.
quelle
Pip,
1814 BytesGitHub-Repository für Pip
Es scheint, als gäbe es keine Konkurrenz zu Pyth, aber das ist ziemlich respektabel.
Funktioniert nur mit Strings mit
a-zA-Z
. Verwendet für jeden Buchstaben des Alphabets eine Filteroperation, um die Buchstaben aus der Eingabezeichenfolge zu ermitteln, bei denen die Groß- / Kleinschreibung nicht berücksichtigt wird:Zwei Notizen:
AZO
würde die SequenzA ZO
anstelle von scannenAZ O
;x
Code an das Ende des Codes (und drucken Sie dabei eine leere Zeichenfolge, nachdem die Schleife beendet ist).Probelauf (mit der
x
Variante):quelle
Perl 5
-a
, 31 BytesProbieren Sie es online!
quelle