Inspiriert von der Codewars Kata .
Ihr Ziel ist es, eine Eingabezeichenfolge wie diese zu verwenden:
"'Twas a dark and stormy night..."
und geben Sie eine Zeichenfolge zurück, die die Position jedes Zeichens im Alphabet enthält, durch Leerzeichen getrennt ist und nicht alphabetische Zeichen wie folgt ignoriert:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Für eine zusätzliche Herausforderung können Sie alle numerischen Zeichen in der ursprünglichen Zeichenfolge durch sich selbst + 27 ersetzen. Zum Beispiel "25"
würde werden "29, 32"
. Dies ist völlig optional.
Sie müssen 1-Indizierung (verwenden 'a'==1
, 'b'==2
usw.)
Zusätzliche Regeln:
Sie müssen eine Zeichenfolge zurückgeben, kein Array.
Nachgestellte Leerzeichen sind in Ordnung.
Der Gewinner hat die niedrigste Byteanzahl.
Viel Glück!
Antworten:
05AB1E , (5?) 7 Bytes
Ganz rechts zwei Bytes sind Ausgabeformatierungen
Ein Port meiner Jelly-Antwort , aber O5AB1E ist knapper für die Alphabetfilterung.
Probieren Sie es online aus!
Wie?
quelle
ðý
Zeichen hinzugefügt werden. Aber da die Hälfte der Antwortausgabelisten, lasse ich es wohl erst einmal.Java 8,
8278726962 Bytes-13 Bytes dank @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72 Bytes).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 Bytes) Verwenden von achar[]
als Eingabe anstelle von aString
.Python 3 ,
626049 Bytes-5 Bytes dank Jo King .
-8 Bytes dank pLOPeGG .
Nach diesen Verbesserungen ist diese Antwort jetzt ähnlich wie Jonathan Allan ‚s Antwort .
Probieren Sie es online aus!
quelle
%32
funktioniert auchR ,
5550 BytesProbieren Sie es online aus!
Liest Eingaben von stdin,
konvertiert in Großbuchstaben,entfernt nicht inGroßbuchstaben geschriebenealphabetische Buchstaben, konvertiert in Codepunkte,subtrahiert in 64Mods von 32 und druckt in stdout, getrennt durch Leerzeichen.Vielen Dank an Kevin Cruijssen für den Golf!
quelle
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 14,13 Bytes-4 Bytes danke an Zacharý (und Mr. Xcoder)!
-6 Bytes dank Adám!
-1 Byte dank ngn!
Probieren Sie es online aus!
Erläuterung:
Meine anfängliche Lösung:
APL (Dyalog Unicode) ,
24 bis20 ByteProbieren Sie es online aus!
Erläuterung:
Lach mich nicht aus, ich bin neu bei APL :)
quelle
{1(819⌶)⍵}
kann1(819⌶)⊢
. Ansonsten tolle Arbeit! Ich hoffe, Sie genießen APL in der Zukunft!1
in the zusammensetzen,819⌶
und fünf speichern, indem Sie 27s direkt entfernen :27~⍨⎕A⍳819⌶⍨∘1
; oder nehmen Sie die Kreuzung mit dem Alphabet:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 Bytes
11 Bytes hinzugefügt, um die Ausgabe zu formatieren, was dies auch mit Python inkompatibel macht 3)
Ein weiterer Port meiner Jelly-Antwort.
Probieren Sie es online aus!
Nicht formatierte Version (Rückgabe einer Liste von Ganzzahlen):
quelle
JavaScript (Node.js) ,
695554 ByteProbieren Sie es online aus!
Erklärung:
11 Bytes dank @Kevin gespeichert
Noch 1 Byte dank @Neil
Sie können Unterstützung für Zahlen für einige zusätzliche Bytes hinzufügen (dank @neil).
JavaScript (Node.js) , 62 Byte
Probieren Sie es online aus!
quelle
a-z
zuA-Za-z
undi.toLowerCase().charCodeAt()-96
zui.charCodeAt()%32
parseInt(i,36)-9
speichert ein weiteres Byte..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
Sie können Zahlen unterstützen, sind sich aber nicht sicher, ob dies der beste Weg ist.Gelee , (7?) 8 Bytes
Das Byte ganz rechts ist die Ausgabeformatierung
Ein vollständiges Programm, das eine Zeichenfolge im Python-Format akzeptiert, die das Ergebnis an STDOUT druckt
Probieren Sie es online aus!
Wie?
quelle
Japt v2.0a0
-S
,1210 BytesVersuch es
Erläuterung
quelle
x86-Opcode, 35 Byte
Angenommen, das Ergebnis enthält mindestens einen Buchstaben und nein
{|}~
40 Bytes, die alle ASCII-Zeichen zulassen
quelle
Stax ,
9109 BytesFühren Sie es aus und debuggen Sie es
-1 Byte dank @recursive
Erläuterung:
Stax , 7 Bytes
Führen Sie es aus und debuggen Sie es
Dieser gibt Newline-getrennt aus. Ausgepackt :
vmVaI^|c
. Ähnlich, aber mit Map, die implizit mit nachgestellten Zeilenumbrüchen ausgegeben wird.quelle
Leerzeichen ,
152117 Bytes-35 Bytes dank @Lynn .
Buchstaben
S
(Leerzeichen),T
(Tabulator) undN
(neue Zeile) werden nur als Hervorhebung hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und neuen Zeilen).
Erklärung im Pseudocode:
quelle
05AB1E , 8 Bytes
Probieren Sie es online aus!
oder, wenn wir ein Array zurückgeben können:
05AB1E , 6 Bytes
Erläuterung:
Probieren Sie es online aus!
oder wenn Sie möchten, dass es Zahlen zählt:
05AB1E , 13 Bytes
Probieren Sie es online aus!
quelle
05AB1E , 14 Bytes
Behandelt auch Zahlen
Probieren Sie es online aus!
quelle
Holzkohle , 21 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Hängen Sie die Ziffern an die vordefinierte Variable für Kleinbuchstaben an.
Schleife über den unteren Eingang.
Wenn das aktuelle Zeichen ein Buchstabe oder eine Ziffer ist,
Drucken Sie den 1-indizierten Index aus.
und lassen Sie ein Leerzeichen für den nächsten Wert.
quelle
Rot , 93 Bytes
Probieren Sie es online aus!
quelle
#"a"-#"z"
aber sowohl in Klein- als auch in Großbuchstaben geändert werden. und dannlowercase
kann das entfernt werden; und-96 + to-char c
kann Modulo-32 sein? Ich bin mir nicht sicher, ob das überhaupt Bytes in Rot spart.parse
Funktion sammelt Zeichenfolgen, auch wenn die Übereinstimmung ein einzelnes Zeichen ist. Deshalb brauche ich immer dieto-char
. Für die Großbuchstaben müsste ich dem Zeichensatz # "A" - # "Z" hinzufügen, was den Gewinn (falls vorhanden) durch das Eliminieren beeinträchtigtlowercase
.#"A"-#"Z"
im Vergleich zu nicht viel gewinnen könntelowercase
, da es nur 1 Byte kürzer ist. Und ich wusste, dass Sie das brauchen würdento-char
, war mir nur nicht sicher, ob-96 +
und Modulo-32 ähnlich groß sein würde.Perl 5 , 47 Bytes
Mit der zusätzlichen Herausforderung, Ziffern zu analysieren:
Probieren Sie es online aus!
Durch Ignorieren von Ziffern auf 38 Byte reduziert
quelle
PHP , 70 Bytes
Probieren Sie es online aus!
-5 Bytes dank Kevin
quelle
&&
kann sein&
undord(strtolower($c))-96
kann seinord($c)%32
. Ich denke auch, dass Sie das~
vorher entfernen können$c
, aber ich bin nicht sicher. Ich habe in PHP nicht viel programmiert und weiß~
sowieso nicht genau, wofür das hier verwendet wird.Perl 5
-p
, 35 BytesProbieren Sie es online aus!
Enthält den zusätzlichen Teil über die Ziffern.
quelle
/\w/
beinhaltet_
-F/[^0-9\pL]|/
: Probieren Sie es online aus!Japt 2.0
-S
, 9 BytesFühren Sie es online aus
Erläuterung:
quelle
Perl 6 , 32 Bytes (Alpha), 41 Bytes (Alpha + Ziffer)
Probieren Sie es aus (32 Bytes Alpha)
Probieren Sie es aus (41 Bytes Alpha + Ziffer)
Erweitert:
32 Bytes Alpha
41 Bytes Alpha + Ziffer
quelle
Э
, aber ich habe das OP um Klärung gebeten, ob die Eingabe nur ASCII ist oder nicht.Tcl , 93 Bytes
Probieren Sie es online aus!
quelle
PHP
108105 BytesProbieren Sie es online aus (108 Bytes)
Tri it online (105 Bytes)
-3 Bytes, danke an @manassehkatz (Ändere die Stufe von strtolower und entferne AZ aus dem regulären Ausdruck)
Code, versucht, eine Schleife zu vermeiden
Erläuterung
quelle
strtolower($argv)
und KapitalA-Z
aus dem$argv[1]
oder$argn
statt$argv
?join
ist 3 Bytes kürzer alsimplode
.Python 3 , 84 Bytes
Probieren Sie es online aus!
quelle
Python 2,
110 Bytes104 Bytes , mit BenutzereingabeProbieren Sie es online aus!
Python 2,
105 Bytes 104 Bytes96 Bytes , wobeit
vordefiniert ist:Probieren Sie es online aus!
Lassen Sie es uns mit einer besser lesbaren Version aufschlüsseln:
Zunächst definieren wir
alphabet
das Alphabet.Als nächstes verwenden wir das Listenverständnis, um:
t
Schließlich fügen wir alles zusammen und drucken es aus.
Bearbeiten: Geändert in
print
(und verlor die Portabilität), um Bytes zu speichern und es außerhalb einer Funktion funktionieren zu lassenBearbeiten 2: Es wurde eine Version mit
input()
anstelle von vordefinierten Variablen hinzugefügtEdit 3: 8 Bytes in Lösung 1 und 2 dank Jo King entfernt
quelle
+
), wo sind die anderen?if
,for
und" "
[]
injoin
PowerShell , 63 Byte
Probieren Sie es online aus!
(Scheint lang ...)
Nimmt Eingaben auf
$args
, konvertiert sie in.ToUpper
Groß- und Kleinschreibung , wandelt sie in einchar
Array um und führt sie in einefor each
Schleife ein. Innerhalb der Schleife, subtrahieren wir entweder selbst oder 64 von der (ASCII int) Wert, basierend auf , ob der aktuelle Wert ist-in
der Bereich65
an90
(dh es ist ein ASCII - Großbuchstaben). Diese Werte verbleiben in der Pipeline, und wir verwenden ein-n
ot-e
Qual, um die Nicht-Buchstaben-Werte zu entfernen (da sie alle Null sind). Diese Zahlen sind in einer Zeichenfolge gekapselt, da die Standardzeichenfolge eines Arrays darin besteht, es durch Leerzeichen zu trennen, sodass wir das ziemlich billig bekommen. Diese Zeichenfolge verbleibt in der Pipeline und die Ausgabe ist implizit.quelle
MS-SQL, 133 Bytes
Gemäß unseren IO-Regeln erfolgt die Eingabe über eine bereits vorhandene Tabelle t mit varchar-Feldern s .
SQL 2017 oder höher ist erforderlich. Muss auch in der
master
Datenbank ausgeführt werden, da ich eine Systemtabelle namens nutzespt_values
, die (gefiltert nachtype='P'
) Zählzahlen von 0 bis 2047 enthält.Grundsätzlich verbinde ich eine Zahlentabelle mit der Eingabezeichenfolge
SUBSTRING()
, die für jedes einzelne Zeichen eine separate Zeile zurückgibt. Dies wird nur für Buchstaben mit gefiltertLIKE'[a-z]'
, dann erhalten wir ihren ASCII-Wert und subtrahieren 64. Diese Zahlen werden mit der Funktion (neu in SQL 2017) wieder zu einer Zeichenfolge zusammengefügtSTRING_AGG
.quelle
Pyth , 10 Bytes
Ich bin mir ziemlich sicher, dass dies ein bisschen Golf gespielt werden kann ... -2 Bytes, wenn ich als Liste ausgeben kann, scheinen einige Antworten zu sein, aber es ist nicht in der Spezifikation
Probieren Sie es online aus!
quelle
d
(jdfTmhGr0
, 10 Bytes) entfernen .C (gcc) , 67 Bytes
Probieren Sie es online aus!
Konvertiert jedes Zeichen in Kleinbuchstaben, versetzt seinen Code um -96 und druckt den Versatzcode, wenn er in den Bereich des 1-indizierten Alphabets fällt
quelle
jq , 45 Bytes
Probieren Sie es online aus
quelle