Nehmen Sie einen String, s
der druckbare ASCII-Zeichen enthält, als Eingabe und geben Sie dessen "binäre Split-Summe" aus. Benötigen Sie eine Erklärung?
Wie erhält man die binäre Split-Summe?
A4
In der folgenden Erläuterung wird der String als Beispiel verwendet.
Konvertieren Sie die Zeichen in Binärzeichen und behandeln Sie jeden Buchstaben als 7-Bit-ASCII-Zeichen
A -> ASCII 65 -> 1000001 4 -> ASCII 52 -> 0110100
Verketten Sie die Binärzahlen zu einer neuen Binärzahl
A4 -> 1000001 & 0110100 -> 10000010110100
Teilen Sie die neue Binärzahl in Teile auf, wobei kein
1
a0
links davon stehen kann. Sie sollten nicht aufeinanderfolgende1
s teilen .10000010110100 -> 100000, 10, 110, 100
Konvertieren Sie diese Binärzahlen in Dezimalzahlen
100000, 10, 110, 100 -> 32, 2, 6, 4
Nimm die Summe dieser Zahlen:
32 + 2 + 6 + 4 = 44
Die Ausgabe für die Zeichenfolge A4
sollte also lauten 44
.
Testfälle:
a
49
A4
44
codegolf
570
Hello, World!
795
code-golf
string
base-conversion
binary
Stewie Griffin
quelle
quelle
8372
eigentlich.Antworten:
Python 2 ,
868176 Bytes-5 Bytes danke Adnan
-5 Bytes danke xnor
Probieren Sie es online!
for c in input():s=s*128+ord(c)
Um die ASCII-Konvertierung numerisch durchzuführen, wobei*128
die Linksverschiebungs
7 Mal (Schritte 1 und 2)eval(('0'+new_bin).replace('01','0+0b1'))
zum Teilen und Summieren (Schritte 3, 4 und 5) verwendet wirdquelle
eval
! Durch die numerische ASCII-Konvertierung werden einige Bytes gespart.Gelee , 13 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
MATL , 14 Bytes
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
'A4'
als Beispiel.quelle
05AB1E , 18 Bytes
Code:
Erläuterung:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
05AB1E , 14 Bytes
Ein Port meiner Gelee-Antwort unter Verwendung des 128-Offsets von Adnans 05ab1e-Antwort (anstelle der 256 in der Gelee-Antwort, die ich geschrieben habe).
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6),
97 bis92 ByteBearbeiten: 5 Bytes mit Hilfe von @ ConorO'Brien gespeichert.
quelle
s=>eval([...s].map(e=>(e.charCodeAt()+128).toString(2).slice(1)).join``.replace(/1+0*/g,'+0b$&'))
Sie können meine Ersetzungsmethode verwenden, um ein Byte zu speichern, denke ichJapt ,
1812 BytesÜbernimmt die Eingabe als einzelne Zeichenfolge.
Ich habe auch die 128- oder 256-Addition ausprobiert, die von anderen Antworten verwendet wurde, aber das Auffüllen mit 0 war kürzer.
Dank ETHproductions und Oliver satte 6 Bytes gespart .
Probieren Sie es hier aus.
quelle
òÈ<YÃ
kannò<
(mit Leerzeichen) undËn2Ãx
kann seinxn2
. Sie können auchT
anstelle von verwenden0
, um das Komma zu speichern. ( Besuchen Sie auch den Japt-Chatroom, wenn Sie Fragen haben oder beim Golfen helfen möchten :-))T
Trick, ich wusste nicht, dass Sie (ab) Variablen dafür verwenden können, das ist sehr praktisch. Die Auto-Funktionxn2
sieht etwas seltsam aus, wenn sie kompiliert wirdx("n", 2)
. Ich denke, es wird noch ein bisschen dauern, bis ich die dahinter stehende Logik vollständig verstanden habe. Mit Ihrer Hilfe ist die Japt-Lösung jetzt an erster Stelle mit der Jelly-Antwort verknüpft .n2
:Í
. Es hat TIO noch nicht getroffen, aber Sie können es hier verwenden: ethproductions.github.io/japt/?v=1.4.5&code=Y1+k+VQ3w/…Jelly ,
1615 Bytes-1 Byte dank Dennis (keine Notwendigkeit, um 1 zu reduzieren, wenn eine vollständige Reduzierung in Ordnung ist - ersetzen
;/
durchF
)Probieren Sie es online!
Wie?
quelle
;/
kann durch ersetzt werdenF
.PHP, 116 Bytes
Online Version
PHP, 117 Bytes
Probieren Sie es online!
PHP, 120 Bytes
Probieren Sie es online!
oder
quelle
Pyth , 21 Bytes
Es ist zu lang...
Testsuite.
quelle
[F #],
249245 BytesProbieren Sie es online!
Hinweis: Die Version auf tio.run hat "open System" im Header. Ich habe die Anzahl zum obigen Code hinzugefügt. Ich bin mir nicht sicher, welche Regeln für Importe gelten.
Ungolfed
quelle
open System
es dasselbe wie C #using System;
ist, müssen Sie es in die Zählung einbeziehen. Wenn du es in F # schaffst, könntest du dich voll qualifizieren, für was auch immer dasSystem
ist. Zum Beispiel in C #System.Console...
anstelle vonusing System;Console...
Perl 6 , 62 Bytes
quelle
.ords
anstelle von.comb».ord
. Präfix[~]
kann oft anstelle von verwendet werden.join
.comb
existiert was dasm:g/…
Ding macht./11*0*/
kann auf gekürzt werden/1+0*/
. Ich kam mit{sum map {:2($_)},comb /1+0*/,[~] .ords».fmt('%07b')}
J , 34 Bytes
Probieren Sie es online!
Erläuterung
quelle
Mathematica 193 Bytes
quelle
f=FromDigits;l=Flatten;
zu Beginn alle Instanzen dieser beiden Funktionen durchf
und ersetzenl
.J , 40 Bytes
Verwendung:
gibt 44 zurück
quelle
Clojure, 150 Bytes
Ich hatte gehofft, dass die Konvertierung von ASCII in Bytes kürzer ist. Der eigentliche Schleifenkörper ist ziemlich kurz,
r
um das aktuelle Ergebnis undR
das Gesamtergebnis zu akkumulieren. Wenn das vorherige Bitp
ist0
und das aktuelle Bitc
ist1
dann teilen wir uns einen neuen Brocken und reichern sich anR
, sonst aktualisieren wir dier
und halten ,R
wie es war.quelle
Python 123 Bytes
Aktualisiert, danke an Martin Ender.
quelle
lambda w:
würde ausreichen, um Ihre Antwort gültig zu machen.lambda w:
.f=
, weil wir unbenannte Funktionen zulassen (es sei denn, Sie geben den Funktionsnamen für rekursive Aufrufe an).K (oK) , 31 Bytes
Lösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Konvertieren Sie in ASCII-Werte, konvertieren Sie in 7-Bit-Binärdateien, reduzieren Sie die Werte, suchen Sie nach Unterschieden und vergleichen Sie die ursprüngliche Liste mit
1
Unterschieden. Schneiden Sie bei diesen Indizes, konvertieren Sie zurück in Dezimalzahl und summieren Sie:Bonus
Verwaltete auch eine 31-Byte- Version in K4 , aber da es keinen TIO dafür gibt, veröffentliche ich meine OK-Lösung.
quelle
APL (Dyalog) , 30 Bytes
Probieren Sie es online!
Wie?
⎕UCS⍵
- Unicodify2⊥⍣¯1¨
- jeweils binär codieren¯7↑¨
- und links mit Nullen auf 7 Stellen auffüllen∊
- ebnen1∘+⊆⊢
- Selbstaufteilung um eins erhöht2⊥¨
- Dekodiere jedes aus dem Binären+/
- Summequelle