Codieren Sie die Alphabet-Chiffre


24

Codieren Sie diese Zeichenfolge bei einer Zeichenfolge, die nur Kleinbuchstaben enthält, mit der Alphabet-Chiffre.

So codieren Sie mit der Alphabet-Chiffre (ich verwende das Beispiel hello):

  1. Konvertieren Sie zunächst jeden Buchstaben in der Zeichenfolge in eine Zahl, die von der Position im Alphabet abhängt ( a= 1, b= 2usw.). Beispiel:8 5 12 12 15
  2. Füllen Sie jede Zahl mit 0s auf zwei Zeichen auf . Beispiel:08 05 12 12 15
  3. Beitreten. Beispiel:0805121215

Testfälle

helloworld -> 08051212152315181204
codegolf -> 0315040507151206
alphabetcipher -> 0112160801020520030916080518
johncena -> 1015081403051401

Denken Sie daran, das ist , also gewinnt der Code mit der geringsten Anzahl von Bytes.


Antworten:


23

05AB1E , 11 6 Bytes

Code:

Ç4+€¦J

Erläuterung:

Zuerst konvertieren wir die Zeichenkette in ihre ASCII-Werte. codegolfwürde werden:

[99, 111, 100, 101, 103, 111, 108, 102]

Um zu den Indizes des Alphabets zu gelangen, subtrahieren Sie 96:

[3, 15, 4, 5, 7, 15, 12, 6]

Um mit Nullen aufzufüllen, fügen Sie 100zu jedem Element das erste Zeichen jedes Int hinzu und entfernen Sie es. Für das obige Beispiel +100wäre:

[103, 115, 104, 105, 107, 115, 112, 106]

Und das Entfernen des ersten Zeichens von jedem würde dazu führen, dass:

[03, 15, 04, 05, 07, 15, 12, 06] 

Wir können beide Schritte über (dem -96und dem +100) Teil zu nur zusammenführen +4. Für den Code:

Ç       # Convert to an array of ASCII code points
 4+     # Add four to each element in the array
   €¦   # Remove the first character of each element
     J  # Join to a single string

Probieren Sie es online!


Was macht ¦man nochmal?
Magic Octopus Urn

@carusocomputing Entfernt das erste Element eines Strings, einer Liste usw.
Adnan

Jenseits des Genies ...
Magic Octopus Urn

12

Python 2, 42 Bytes

f=lambda s:s and`ord(s[0])+4`[1:]+f(s[1:])

Teste es auf Ideone .


5
Nicht rekursiv, gleiche Byteanzahl:lambda s:''.join(`ord(x)+4`[1:]for x in s)
Jonathan Allan

8

Pyth, 11 10 Bytes

FNwpt`+4CN

Versuch es! Mein erster Versuch bei Pyth.

FNwpt`+4CN
FNw         # For N in w (w is input, N will be single char)
   p        # Print without newline
        CN  # Int with code point `N`
      +4CN  # Add 4 to int with code point N
     `+4CN  # representation of above (basically to string)
    t`+4CN  # Tail (All but first character)

Python-Äquivalent:

for N in input():
    print(repr(ord(N) + 4)[1:], end='')

Gute Arbeit bei Ihrem ersten Pyth-Programm!
HyperNeutrino

7

C 55 43 Bytes

f(char*c){for(;*c;)printf("%02d",*c++-96);}

ideone


1
printf("%02d",*c++-96);}ist kürzer und gültig, wenn ich mich nicht irre.
Dada


6

Gelee , 9 7 Bytes

O+4ṾḊ$€

TryItOnline

Wie?

O+4ṾḊ$€ - Main link: s                                e.g. hello
O       - cast to ordinals                            e.g. [ 104,  101,  108,  108,  111]
 +4     - add 4                                       e.g. [  108,  109,  112,  112,  115]
     $€ - last two links as a monad for €ach
   Ṿ    -    uneval, effectively converts to strings  e.g. ["108","109","112","112","115"]
    Ḋ   -    dequeue, remove the leading '1'          e.g. [ "08", "09", "12", "12", "15"]
        - implicit print                              e.g. "0809121215"

Ich kam mit O+4DḊ€FṾ€der gleichen Zählung, vielleicht golfable
ETHproductions

@ETHproductions O+4Ṿ€Ḋ€spart 2 Bytes.
Dennis

@ Tennis Ich habe gerade das gleiche getan (ish) ...
Jonathan Allan

4

Haskell, vierundvierzig 30 28 Bytes

(>>=tail.show.(+4).fromEnum)

Durch die Verwendung des +4Ansatzes aus Adnans Antwort werden 14 Byte eingespart.

Probieren Sie es auf Ideone. Verwendung:

> (>>=tail.show.(+4).fromEnum)"codegolf"
"0315040507151206"

Zwei Bytes weniger dank xnor . Alte Version:

f a=['0'|a<'k']++(show$fromEnum a-96)
(f=<<)

Sie brauchen nicht den zweiten Satz von Parens.
Xnor

3

Perl, 29 Bytes

28 Byte Code + -nFlag.

printf"%02s",-96+ord for/./g

Laufen mit:

perl -ne 'printf"%02s",-96+ord for/./g' <<< "helloworld"

3

JavaScript (ES6), 52 49 Bytes

f=s=>s&&(s.charCodeAt()+4+f(s.slice(1))).slice(1)

Die Rekursion war 3 Byte kürzer als .replace:

s=>s.replace(/./g,s=>(s.charCodeAt()+4+"").slice(1))

parseInt(s,36)ist etwas für jeden Ansatz länger, weil Sie ändern müssen , 4um 91:

s=>s.replace(/./g,s=>(parseInt(s,36)+91+"").slice(1))
f=s=>s&&(parseInt(s[0],36)+91+f(s.slice(1))).slice(1)

3

Japt, 10 Bytes

¡4+Xc)s s1

Wird wahrscheinlich nicht kürzer ...

Testen Sie es online!

Erläuterung

¡           // Map each char X in the input by this function:
 4+Xc)      //   Take 4 + the char code of X.
      s s1  //   Convert to a string, then remove the first char.
            // Implicit: output last expression



3

Hexagony , 33 Bytes

10}{'a({=!{{\.@29$\,<.-":!\>Oct\%

Probieren Sie es online!

Mm .. habe ein paar No-Ops im Hexagon, also habe ich das heutige Datum eingetragen.

Erweitertes Formular mit Datum, das durch No-Ops ersetzt wurde

   1 0 } {
  ' a ( { =
 ! { { \ . @
. . $ \ , < .
 - " : ! \ >
  . . . \ %
   . . . .
  1. Initialisiere a 10und verschiebe den Speicherzeiger irgendwohin ...
  2. $Überspringt den Spiegel und ,liest ein Byte. <Geäst:
  3. Wenn das Ende der Zeichenkette ( -1was nicht positiv ist), geht es zum @Programm und beendet es.
  4. Andernfalls wird subtrahiert 95(dekrementiert a), und dann wird gedruckt result / 10(Ganzzahldivision) und result % 10erneut eine Schleife ausgeführt.

2

Vim, 60 Tastenanschläge

:s/./\=char2nr(submatch(0))-96."\r"/g
:%s/\<\d\n/0&
V{gJ

Eine fast vollständig auf Regex basierende Lösung. Wie üblich ist die Verwendung des Eval-Registers zu lang.



2

PowerShell v2 +, 44 Byte

-join([char[]]$args[0]|%{"{0:D2}"-f($_%32)})

Nimmt Eingaben auf $args[0], charwandelt sie als -array um und führt sie in eine Schleife ein. Jede Iteration, nehmen wir den aktuellen Zeichen $_Modulo 32, die implizit als ASCII - Wert wirft. Praktischerweise ;-), a = 1, b = 2das -fstimmt usw. Das wird in den ormat-Operator eingespeist "{0:D2}", der mit einer Zeichenfolge arbeitet , die ein zweistelliges Minimum angibt (dh, wenn erforderlich, wird eine führende Null vorangestellt). Diese Ziffernfolgen werden in Parens eingekapselt, -joinzu einer Zeichenfolge zusammengefasst und in der Pipeline belassen. Die implizite Ausgabe Write-Outputerfolgt beim Programmabschluss.

PS C:\Tools\Scripts\golfing> .\encode-alphabet-cipher.ps1 'hello'
0805121215

PS C:\Tools\Scripts\golfing> .\encode-alphabet-cipher.ps1 'helloworld'
08051212152315181204

PS C:\Tools\Scripts\golfing> .\encode-alphabet-cipher.ps1 'codegolf'
0315040507151206

PS C:\Tools\Scripts\golfing> .\encode-alphabet-cipher.ps1 'johncena'
1015081403051401

2

Perl, 24 Bytes

Beinhaltet +1 für -p

Geben Sie Input auf STDIN:

encode.pl <<< hello

encode.pl

#!/usr/bin/perl -p
s/./substr 4+ord$&,1/eg

Schön gemacht. Ich denke, Sie meinten wahrscheinlich 4+ord$&stattdessen 5+ord$&;-)
Dada

@Dada Richtig, ich habe die Version meines Snippet-Puffers anstelle der getesteten Version erneut eingefügt
Ton Hospel,

Es passiert! :) Darf ich Ihnen eine andere Frage stellen? Haben Sie eine Idee, wie die 8-Byte-Perl-Lösung für diese Frage lautet (Eingabe umkehren) (unter Anarchie)?
Dada

@Dada Ich würde sagen, dass es in reinem Perl unmöglich ist, also gehe ich davon aus, dass es ein Missbrauch des automatisierten Systems auf dieser Seite ist. ZB wenn Input von STDIN käme, könnte man das machenexec rev
Ton

Richtig, das macht Sinn, danke! Es fiel mir schwer, das herauszufinden, da printes 5 Bytes und <>2 weitere Bytes sind. Ich fragte mich, was das 1-Byte-Umkehrbyte ist, von dem ich noch nichts gehört hatte.
Dada

2

DASH , 27 Bytes

@><""(->@rstr["."""]+4#0)#0

Anwendungsbeispiel:

(@><""(->@rstr["."""]+4#0)#0)"helloworld"

Erläuterung

@ (                         #. take input through a lambda
  join "" (                 #. join with newlines the following:
    (map                    #. result of mapping
      @ (                   #. this lambda
        rstr ["." ; ""] (     #. replace first char w/ empty string:
          + 4 #0               #. mapped item's codepoint + 4
        )
      )
    ) #0                    #. over the argument
  )
)

2

Batch, 256 239 237 Bytes

@echo off
set/ps=
set r=
set a=abcdefghijklmnopqrstuvwxyz
:g
set c=%a%
for /l %%i in (101,1,126)do call:l %%i
set s=%s:~1%
if not "%s%"=="" goto g
echo %r%
exit/b
:l
set i=%1
if %c:~,1%==%s:~,1% set r=%r%%i:~1%
set c=%c:~1%

Übernimmt die Eingabe für STDIN.


2

IBM PC DOS 8088 Assembly, 33 28 27 Bytes

Zusammengesetzte Binärdatei:

00000000: be82 00ac 2c60 7812 d40a 0530 3092 86f2  ....,`x....00...
00000010: b402 cd21 86f2 cd21 ebe9 c3              ...!...!...

Zerlegt:

BE 0082     MOV  SI, 82H        ; point SI to command line string 
        CH_LOOP: 
AC          LODSB               ; load next char into AL
2C 60       SUB  AL, 'a'-1      ; convert ASCII to a=1,b=2...z=26 
78 12       JS   DONE           ; if char is terminator or not valid, exit
D4 0A       AAM                 ; convert binary to BCD 
05 3030     ADD  AX, '00'       ; convert BCD to ASCII 
92          XCHG DX, AX         ; save AX to DX for display 
86 F2       XCHG DH, DL         ; reverse bytes 
B4 02       MOV  AH, 2          ; DOS display char function 
CD 21       INT  21H            ; write first digit 
86 F2       XCHG DH, DL         ; reverse bytes back 
CD 21       INT  21H            ; write second digit 
EB E9       JMP  CH_LOOP        ; restart loop 
        DONE: 
C3          RET                 ; return to DOS

Standalone-PC-DOS-Programm. Eingabezeichenfolge von der Befehlszeile, Ausgabe an die Konsole.

I / O:

Bildbeschreibung hier eingeben


1

MATL , 11 Bytes

96-OH&YA!1e

Probieren Sie es online!

         % Implicit input
96-      % Subtract 96. So 'a' becomes 1, 'b' becomes 2 etc
OH&YA    % Convert each number to 2 decimal digits. Gives a 2-column matrix
!1e      % Transpose and linearize into a row
         % Implicit display

1

Ruby, 53 46 Bytes

->s{s.chars.map{|c|(c.ord-96).to_s.rjust(2,?0)}.join}

->s{s.chars.map{|c|(c.ord+4).to_s[1..2]}.join}


1

R 71 51 Bytes

Dank Billywob 20 Bytes gespart. Übernimmt die Eingabe von stdin und die Ausgabe von stdout.

cat(sprintf("%02d",utf8ToInt(scan(,""))-96),sep="")

Beispiele:

helloworld -> 08051212152315181204

codegolf -> 0315040507151206

alphabetcipher -> 0112160801020520030916080518

johncena -> 1015081403051401


Sie können utf8toInt(scan(,"))-96anstelle der gesamten Match-Sache verwenden. Denken Sie nicht, dass es einen besseren Weg gibt, mit der Polsterung umzugehen.
Billywob

@ Billywob Danke! Für das Auffüllen habe ich formatCfrüher versucht, aber es hat sich herausgestellt, dass ein Byte mehr benötigt wird als der aktuelle Ansatz.
Rturnbull

1

Eigentlich 10 Bytes

Verwenden Sie den übersichtlichen Algorithmus in Adnans 05AB1E-Antwort . Golfvorschläge sind willkommen. Probieren Sie es online!

O4+`$pX`MΣ

Ungolfing

         Implicit input s.
O        ord() every char in s.
4+       Add 4 to every ord in s.
`...`M   Map the following function over s. Variable m.
  $        Push str(m).
  pX       Discard the first char of str(m).
           Invariably this is a `1` and we get our ciphered m.
Σ        sum() everything to get one string.
         Implicit return.






Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.