Wir definieren den ASCII Odd / Even Cipher über den folgenden Pseudocode:
Define 'neighbor' as the characters adjacent to the current letter in the string
If the one of the neighbors is out of bounds of the string, treat it as \0 or null
Take an input string
For each letter in the string, do
If the 0-based index of the current letter is even, then
Use the binary-or of the ASCII codes of both its neighbors
Else
If the ASCII code of the current letter is odd, then
Use the binary-or of itself plus the left neighbor
Else
Use the binary-or of itself plus the right neighbor
In all cases,
Convert the result back to ASCII and return it
If this would result in a code point 127 or greater to be converted, then
Instead return a space
Join the results of the For loop back into one string and output it
Beispielsweise ist für die Eingabe Hello
die Ausgabe emmol
da
- Der
H
dreht sich um\0 | 'e'
was zue
- Das
e
dreht sich um'e' | 'l'
, oder101 | 108
, was ist109
oderm
- Der erste
l
wendet sich auch an101 | 108
oderm
- Die Sekunde
l
dreht sich um108 | 111
, welche111
oder isto
- Der
o
wendet sich an108 | \0
, oderl
Eingang
- Ein Satz, der ausschließlich aus druckbaren ASCII-Zeichen in einem geeigneten Format besteht .
- Der Satz kann Punkte, Leerzeichen und andere Satzzeichen enthalten, besteht jedoch immer nur aus einer Zeile.
- Der Satz besteht aus mindestens drei Zeichen.
Ausgabe
- Die resultierende Chiffre, die auf den oben beschriebenen Regeln basiert, wird als Zeichenfolge oder Ausgabe zurückgegeben.
Die Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
Eingabe in einer Zeile, Ausgabe in der folgenden Zeile. Leerzeilen trennen Beispiele.
Hello
emmol
Hello, World!
emmol, ww~ved
PPCG
PSWG
Programming Puzzles and Code Golf
r wogsmmoonpuu ~ meannncoooeggonl
abcdefghijklmnopqrstuvwxyz
bcfefgnijknmno~qrsvuvw~yzz
!abcdefghijklmnopqrstuvwxyz
aaccgeggoikkomoo qsswuww yy
Test 123 with odd characters. R@*SKA0z8d862
euutu133www|todddchizsscguwssr`jS{SK{z~|v66
o
Änderungenl
im ersten Beispiel bin ich mir ziemlich sicher, dass Ihre Spezifikationen sicherstellen, dass sich im zweiten Beispiel die ersteo
nicht ändertl
. Es sollte sich ändern zu'l' | ','
, was auch immer das ist, oder?'l' | ','
, was ist108 | 44 --> 1101111 | 0101100
, was wird108
, was istl
. Das,
stimmt mit deml
überein, es ändert sich also nichts, wenn das Binary-or stattfindet.Antworten:
Jelly ,
3331 BytesEin unkomplizierter Ansatz, der sicherlich verkürzt werden kann.
Probieren Sie es online!
quelle
Perl,
6362 BytesBeinhaltet +4 für
-lp
Geben Sie eine Eingabe für STDIN ein
oddeven.pl
:Dies funktioniert wie gezeigt, aber um die beanspruchte Punktzahl zu erhalten, muss diese in eine Datei ohne End-
;
und Zeilenumbruch eingefügt werden und die Escapezeichen\xhh
müssen durch ihre Literalwerte ersetzt werden. Sie können dies tun, indem Sie den obigen Code in die Datei einfügen und ausführen:quelle
Python 2,
138131 BytesOnline testen (enthält alle Testfälle)
Weniger golfen:
Probieren Sie es online (ungolfed)
Ich füge
\x00
beide Seiten des Strings hinzu, damit ich mich beim bitweisen Or-ing nicht darum kümmern muss. Ich durchlaufe die ursprünglichen Zeichen der Zeichenfolge, führe bitweise Operationen durch und füge sie dem Ergebnis hinzu, wobei ich die Regeln für die Parität befolge.quelle
|=
... Äquivalent in PowerShell wäre$a=$a-bor$b
a?b:c
wie JS hätte.C - 101 Bytes
Wir müssen nicht einmal prüfen, ob es sich um das letzte Element in der Zeichenfolge handelt, da die Zeichenfolgen in C mit Nullen abgeschlossen sind.
Erläuterung
Ziemlich einfach:
Verwenden Sie & 1, um nach ungeraden / geraden und ternären Ausdrücken zu suchen, die if / elses ersetzen sollen. Erhöhen Sie das Zeichen * p, um die Anzahl der erforderlichen Klammern zu verringern.
quelle
Mathematica, 152 Bytes
Erläuterung
Konvertiert Zeichenfolgen in ASCII-Codes
Partitioniert die ASCII-Codes auf Länge 3, versetzt 1 Partitionen mit aufgefüllten Nullen.
Wendet eine Funktion für jede Partition an.
If...else if... else
in Mathematica .Überprüft, ob der Index (# 2) ungerade ist. (
Max
dient zum Abflachen); Da der Mathematica- Index bei 1 beginnt, habe ichOddQ
hier nicht verwendetEvenQ
Übernimmt die ASCII-Codes der linken und rechten Nachbarn.
Überprüft, ob der ASCII-Code des entsprechenden Zeichens ungerade ist.
Übernimmt die ASCII-Codes des Zeichens und des linken Nachbarn.
Übernimmt die ASCII-Codes des Zeichens und des rechten Nachbarn.
Wendet or-operation an.
Ersetzt alle Zahlen größer als 126 durch 32 (Leerzeichen).
Konvertiert den ASCII-Code zurück in Zeichen und fügt sie hinzu.
quelle
From/ToCharacterCode
Funktionen. Dann sieht es aus wie IhreDrop
Dose Verwendung Infixschreibweise:#~Drop~{2}
. Und es scheint, dass Sie sich bewerbenBitOr
auf jede mögliche Ausgabe vonWhich
anwenden, warum also nicht danach und nur einmal anwenden?Ruby
133128108106 BytesJordan hat mir geholfen, 20 Bytes zu sparen und cia_rana hat mir geholfen, 2 Bytes zu sparen :)
s
wird als Eingabezeichenfolge verwendet.Beispielausgabe mit
s="Test 123 with odd characters. R@*SKA0z8d862"
:Erläuterung
Der obige Code ist sehr unlesbar, daher hier eine Erklärung. Der Code ist irgendwie hacky, ich bin ganz neu in Ruby, also gibt es bestimmt einen kürzeren Weg, dies zu tun :)
quelle
print
stattp
: p->s{p s[-i=-1]+s.bytes.each_cons(3).map{|x,y,z|i+=1;a=i%2>0?x|z :y%2>0?y|x :y|z;a>126?' ':a.chr}*""+s[-2]}
J, 42 Bytes
Verwendet die Eigenschaft, dass Verben in J alternierend mit einem Gerund angewendet werden können
`
für bestimmte Adverbien wie Infix\
.Verwendung
Erläuterung
quelle
JavaScript (ES6),
125118114 BytePeinlich lang, aber
charCodeAt
undString.fromCharCode
sind allein 29 Byte. : - /Wie es funktioniert
Jedes Zeichen an der Position
i
wird mit der folgenden Formel übersetzt, die alle Regeln gleichzeitig abdeckt:Dabei wird
C(n)
der ASCII-Code des n-ten Zeichens der Eingabezeichenfolge zurückgegeben.Demo
quelle
PHP,
10797 Byteswahrscheinlich golfen.
quelle
145 Bytes
Volles Programm mit ungolfed Methode und Testfällen:
Es stellte sich heraus, dass dies länger war als ich dachte ...
quelle