Einen String umkehren und invertieren
Herausforderung
In dieser Herausforderung. Sie schreiben ein Programm, das die Eingabe umgekehrt und invertiert ausgibt oder zurückgibt.
Zunächst sollte jedes Zeichen in seinen Zeichencode konvertiert werden. Dann sollte das in Base-2 konvertiert werden. Anschließend sollte diese Zeichenfolge umgekehrt werden. Danach sollte der String invertiert werden (1 -> 0 und 0 -> 1). Zum Schluss sollte dies wieder zur Basis 2 und dann wieder zu einem Charakter konvertiert werden. Wenn sich herausstellt, dass ein Zeichen nicht gedruckt werden kann, können Sie es optional ausgeben, müssen es jedoch nicht entfernen.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Wertung
Kürzester Code in Bytes gewinnt.
-15% Bonus: Wenn Ihr Programm nicht druckbare Dateien aus der Ausgabe entfernt. Dies müssen mindestens alle Zeichen unter 32 sein, mit Ausnahme von Zeilenumbrüchen (Zeichen 10).
GBktnkZs
0010000
, sollte er so behandelt werden, als10000
wäre das Gegenteil der Fall00001
Antworten:
CJam, 14
Probieren Sie es online aus
Erläuterung:
Ziemlich einfach:
"Druckversion", 20 - 15% = 17
quelle
Pyth, 14 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 Zeichen(50 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Probelauf:
quelle
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
ist kürzer alssprintf'%b',ord$&
und dekodiert zusätzlich in umgekehrter Reihenfolge. Leider werden auch nachfolgende 0s erzeugt, die entfernt werden müssen.unpack
ist für mich noch unerforschtes Terrain.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Invertieren Sie den Charakter, keine Notwendigkeit zu transliterieren;)JavaScript (
ES6ES7),119114108 ByteDies stellte sich viel länger als erwartet heraus :(
Vielen Dank an @vihan für 5 Bytes gespeichert! Danke an @ETHProductions für weitere 6 Bytes gespart!
Zum Testen: Führen Sie das folgende Snippet aus, geben Sie input like ein
"Hello, World!"
und klicken Sie auf Test!quelle
parseInt
mit ,+('0b'+<code>)
wie hier und ein anderes unter Verwendungw^1
anstelle von+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107,95) Vielleicht ist das aber nicht legal; es geht nur10 == \n
, nicht13 == \r
. @Vɪʜᴀɴ was ist deine Meinung?Unexpected token '>'
wenn ich versuche, das Snippet auszuführen.JavaScript (ES7), 126 Byte - 15% = 107,1
Ich habe mit dieser Antwort herumgespielt, um zu sehen, ob sich der Bonus gelohnt hat. Anscheinend ist es das. Die Testsuite wurde aus derselben Antwort gestohlen, aber ich habe meinen eigenen Twist hinzugefügt: volle Unterstützung des 15% -Bonus! :)
quelle
getScore()
Funktion hinzugefügt , die den TestfallHello, World!
auf Konformität prüft (sie enthält bequemerweise sowohl Zeilenumbrüche als auch nicht druckbare Zeichen) und die je nach Ergebnis mit 0,85 oder 1 multiplizierte Punktzahl zurückgibt. Und ja, der Zugriff auf das nicht minimierte Snippet wäre großartig. :)PHP -
187182163 BytesÜbergeben Sie den Wert als
GET["s"]
.array_map gibt ein Array mit allen Elementen des zweiten Parameters (eines Arrays) zurück, nachdem die Rückruffunktion (erster Parameter) auf alle angewendet wurde.
Ich bin mir nicht sicher, ob ich die 15%
echo
sparen soll , da keine nicht druckbaren Zeichen ausgegeben werden, aber ich habe sie nicht entfernt.Ich bin nur froh, dass ich fertig bin, da dies die erste Herausforderung ist, an der ich teilnehme.
quelle
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. By the way, brauchen Sie keine Anführungszeichen um Zeichenfolge zu verwenden ("chr"
,"bindec"
, ...) , da wir über Warnungen nicht zu kümmern. Das sollte Ihnen 12 Bytes ersparen.str_split($s)
mitstr_split(fgets(STDIN))
zum Beispiel.K5, 28 Bytes
Dies ist etwas unpraktisch, da der
decode
Operator von K5 eine Basiskonvertierung mit fester Breite ausführt. Um der Problemanweisung zu entsprechen, muss ich führende Nullen kürzen. Das Lambda führt{x@&|\x}
diesen Schritt aus.Abstrich:
Versammeln:
Wählen:
Das ganze Programm in Aktion:
Ich glaube , oK ‚s natürliche Verhalten mit unprintables für -15% dieses qualifizierten macht, ist dies eine Punktzahl von 28 * 0,85 = geben 23,8 .
quelle
Julia, 77 Bytes - 15% = 65,45
Dadurch wird eine unbenannte Funktion erstellt, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Nicht druckbare Zeichen werden entfernt, was dies für den Bonus qualifiziert.
Ungolfed:
quelle
filter(isprint,)
und nur 11,55 Bytes werden durch den Bonus eingespart.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(für 56 Bytes)filter(isprint,)
beiden qualifiziert es für den Bonus und macht es konform mit den Regeln.\x04
und dergleichen angezeigt wird ), dannprint()
kostet sie sieben, was 56 bis 63 bringen würde.PowerShell,
199 175(171 - 15%) = 145,35Verwendet
eine unglückliche Menge an.NET-Aufrufen / -Integrierten , wodurch der Codeerheblichaufgebläht wird.Erklärt:
Nimmt die Eingabe
param(..)
und wandelt sie in eine um,char[]
damit wir sie angemessen verarbeiten können.Das nächste Stück
(..)-join''
sammelt und fügt unsere Ergebnisse zusammen.In diesen Parens iterieren wir
$a|%{..}
als foreach-Schleife.In der Schleife:
$b
, bei der es sich um unseren Eingabe-Buchstaben handelt, der als Basis für Int+$_
und[convert]
Ed verwendet wird2
$c
ist knifflig. Beginnen wir also innen und arbeiten uns nach außen$b
mit(-join$b[$b.length..0])
"$(..)"
[convert]
sToInt32
von der Basis2
, die schließlich gespeichert wird , dass in$c
$c
größer31
oder gleich ist,10
wird es als Zeichen umgewandelt, und dieser Wert verbleibt in der Pipeline für die Ausgabe (was oben gesammelt und-join''
zusammengefasst wird). Andernfalls bleibt bei dieser bestimmten Iteration nichts übrigPuh.
Qualifiziert sich auch für den -15% Bonus.
Beispiel
quelle
C-Funktion, 63
quelle
39 Zeichen / 73 Bytes
Try it here (Firefox only).
quelle
Minkolang 0,11 , 26 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
MATLAB, 60 Bytes
Grundsätzlich wird jedes Zeichen in eine Binärzeichenfolge (ohne führende Nullen) umgewandelt. Das Array wird umgedreht und von 97 ('0' + '1') abgezogen, wodurch das Zeichen invertiert wird. Dies wird zurück in Dezimal umgerechnet. Nachdem alle Zeichen verarbeitet wurden, wird das gesamte Array vor der Rückgabe wieder in Zeichen konvertiert.
quelle
Python 3,
9591Einfache Implementierung.
Ungolfed:
quelle
Ruby, 62 Zeichen
Samply run:
quelle
C #, 156 Bytes - 15% = 132,6
Einrückung und neue Zeilen für Klarheit:
quelle
Javascript 123 Bytes
quelle
Retina ,
1107629 Bytes - 15% = 534,65 (nicht konkurrierend)Verwendet Funktionen, die nach dem Aufforderungsdatum hinzugefügt wurden. (Implizites Verhalten von
$*
,¶
, Sorting)In Retina ist keine Funktion zum Konvertieren eines Zeichens in die ASCII-Ordnungszahl oder zurück integriert. Sehen Sie sich also seine glänzende Länge an. Hiermit werden druckbare ASCII-Zeichen verarbeitet und nicht druckbare Zeichen sowie Zeilenumbrüche entfernt. Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Der Code enthält nicht druckbare Zeichen.
Probieren Sie es online aus
Wenn Sie sich das Retina-Tutorial für unäre Arithmetik ansehen , werden Sie mehrere verschiedene Teile meines Codes als von dort stammend erkennen.
Vielen Dank an Martin für das Golfen mit Hunderten von Bytes
quelle
Java, 205-15% = 174,2
Ungolfed:
Ich denke , diese Lösung ein bisschen interessant in ihrer Nutzung der ist
Integer
MethodenInteger.reverse
undInteger.numberOfLeadingZeros
das tun , was , wie sie klingen, und die Verschiebung von-1 >>> s
wos
die Anzahl der führenden Nullen, um die Maske zu bekommen High - Bits zu maskieren , dass wir nicht wollen. Ich bedaure nur, dass der Name der letzteren Methode so verdammt wörtlich ist, aber das ist, was ich für das Golfen in Java bekomme.Ausgabe:
quelle
Japt, 25 Bytes
Möchten Sie ein Golf-JavaScript-Programm erstellen, bei der kürzesten Methode sind jedoch viele lange Funktionsnamen erforderlich? Dafür wurde Japt gemacht. :)
Probieren Sie es im Online-Dolmetscher aus !
Wie es funktioniert
Mit der aktuellen Version von Japt (ab v1.4.4) kann die Byteanzahl auf 14 reduziert werden:
Online testen!
quelle
Haskell, 167 Bytes
Leider wird Haskell ziemlich wortreich, wenn er in einer anderen Basis lesen / drucken muss…
quelle
Perl 6, 66 Bytes
Wenn ich die nicht druckbaren Steuerzeichen entferne, bekomme ich (83 + 1) -15% = 71,4
Wenn ich den Code entferne, der die Steuerzeichen entfernt, spare ich ziemlich viel 65 + 1 = 66
(Ich habe
»
statt aus>>
Gründen der Klarheit verwendet)quelle
Gelee , 6 Bytes (nicht konkurrierend)
Probieren Sie es online!
Erläuterung:
quelle
Schläger 250 15% Bonus = 212 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
PHP, 80 Bytes
nimmt Eingaben von STDIN entgegen; renn mit
-R
.Bonusversion,
97110 Bytes -> 93,5 Punktedruckt ASCII 10 und 32 bis 126 (Zeilenvorschub und Ausdrucke)
Aufschlüsselung, TiO und wenn möglich etwas Golfen werden folgen; Ich bin jetzt müde.
quelle