알파벳 암호를 인코딩


24

소문자 만 포함하는 문자열이 있으면 해당 문자열을 알파벳 암호로 인코딩하십시오.

알파벳 암호로 인코딩하려면 (예제를 사용합니다 hello) :

  1. 먼저 문자열의 각 문자를 알파벳에서의 위치 ( a= 1, b= 2등)에 따라 숫자로 변환합니다 . 예 :8 5 12 12 15
  2. 0s로 각 숫자를 두 문자로 채 웁니다. 예:08 05 12 12 15
  3. 붙다. 예:0805121215

테스트 사례

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

이것은 이므로 바이트 수가 가장 적은 코드가 이깁니다.


답변:


23

05AB1E , 11 6 바이트

암호:

Ç4+€¦J

설명:

먼저 문자열을 ASCII 값으로 변환합니다. codegolf될 것입니다 :

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

알파벳의 색인에 도달하려면 다음을 뺍니다 96.

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

0으로 채우려면 100각 요소에 추가 하고 각 int의 첫 문자를 제거하십시오. 위의 예에서 +100다음과 같습니다.

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

그리고 각각의 첫 문자를 제거하면 다음과 같은 결과가 발생합니다.

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

위의 두 단계 ( -96+100)를 모두 병합 할 수 있습니다 +4. 코드의 경우 :

Ç       # 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

온라인으로 사용해보십시오!


무엇을 않습니다 ¦다시합니까?
Magic Octopus Urn

@carusocomputing 문자열, 목록 등의 첫 번째 요소를 제거합니다.
Adnan

천재를 넘어 ...
Magic Octopus Urn

12

파이썬 2, 42 바이트

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

Ideone에서 테스트하십시오 .


5
비재 귀적, 동일한 바이트 수 :lambda s:''.join(`ord(x)+4`[1:]for x in s)
Jonathan Allan

8

Pyth, 11 10 바이트

FNwpt`+4CN

시도 해봐! 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)

파이썬 동등 :

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

첫 번째 Pyth 프로그램에서 잘하셨습니다!
HyperNeutrino

7

C, 55 43 바이트

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

이데온


1
printf("%02d",*c++-96);}내가 실수하지 않으면 더 짧고 유효합니다.
Dada


6

젤리 , 9 7 바이트

O+4ṾḊ$€

TryItOnline

방법?

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"

나는 O+4DḊ€FṾ€같은 수, 아마도 골프를 쳤다
ETHproductions

@ETHproductions O+4Ṿ€Ḋ€는 2 바이트를 절약합니다.
Dennis

@Dennis 방금 똑같은
Jonathan Allan


3

펄, 29 바이트

28 바이트의 코드 + -n플래그

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

로 실행 :

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

3

자바 스크립트 (ES6), 52 49 바이트

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

재귀는 3 바이트보다 짧았습니다. .replace .

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

parseInt(s,36)당신이 변화하기 때문에, 각 방법에 따라 약간 씩 이상 491:

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

apt, 10 바이트

¡4+Xc)s s1

아마 이것보다 짧지 않을 것입니다 ...

온라인으로 테스트하십시오!

설명

¡           // 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

헥사 고니 , 33 바이트

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

온라인으로 사용해보십시오!

M .. Hexagon에서 몇 번의 노프를 얻었으므로 오늘 날짜를 입력했습니다.

날짜가 없음으로 대체 된 확장 양식

   1 0 } {
  ' a ( { =
 ! { { \ . @
. . $ \ , < .
 - " : ! \ >
  . . . \ %
   . . . .
  1. a를 초기화하고 10메모리 포인터를 어딘가로 옮기십시오 ...
  2. $미러를 건너 뛰고 ,바이트를 읽습니다. <가지 :
  3. 문자열의 끝 ( -1양수가 아닌)은@ 이면 프로그램으로 하여 프로그램을 종료합니다.
  4. 그렇지 않으면 빼기 95(감소 a) 후 인쇄 result / 10(정수 나누기)하고 result % 10다시 반복합니다.

2

Vim, 60 번의 키 스트로크

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

거의 전적으로 정규식 기반 솔루션. 평소와 같이 eval 레지스터를 사용하면 음란하게 길어집니다.



2

PowerShell v2 +, 44 바이트

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

input을 가져 $args[0]와서 그것을 char배열 로 캐스트 하고 루프에 넣습니다. 각 반복마다 현재 문자 $_modulo를 가져 와서 32ASCII 값으로 내재적으로 캐스트합니다. 편리한 ;-)이 라인 업 그래서 a = 1, b = 2등으로 먹인 -f문자열 작동 ORMAT 연산자 "{0:D2}"두자리 최소 지정 (즉, 필요한 경우, 그 선두 제로를 앞에 추가). 이러한 자릿수는 Parens로 캡슐화 -join되어 하나의 문자열로 묶여 파이프 라인에 남습니다. 암시 적 출력 Write-Output은 프로그램 종료시 발생합니다.

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

펄, 24 바이트

에 +1 포함 -p

STDIN에 입력하십시오 :

encode.pl <<< hello

encode.pl

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

잘 했어요 아마 당신은 아마 ;-) 4+ord$&대신에 의미한다고 생각합니다5+ord$&
Dada

@Dada Right, 테스트 된 버전 대신 내 스 니펫 버퍼의 버전을 다시 붙여 넣기
Ton Hospel

일어난다! :) 관련없는 질문을해도 되겠습니까? 이 질문에 대한 8 바이트 펄 솔루션이 무엇인지 아십니까 (무작위로) ( 입력 반전 )?
Dada

@Dada 순수한 펄에서는 불가능하다고 말했기 때문에 그 측면에서 자동화 시스템이 약간 남용 될 것으로 예상됩니다. 예를 들어 STDIN에서 입력이 온 경우 다음을 수행 할 수 있습니다.exec rev
Ton Hospel

그렇습니다. 감사합니다. 나는 print5 바이트 이기 때문에 이것을 알아내는 데 어려움을 겪고 있었고 , <>2 개 더 있었기 때문에, 들어 보지 못한 1 바이트 내장이 무엇인지 궁금해하고있었습니다!
Dada

2

대시 , 27 바이트

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

사용법 예 :

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

설명

@ (                         #. 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

배치, 256 239 237 바이트

@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%

STDIN에서 입력을받습니다.


2

IBM PC DOS 8088 어셈블리, 33 28 27 바이트

조립 된 이진 :

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

미 조립 :

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

독립형 PC DOS 실행 파일 명령 행에서 입력 문자열, 콘솔로 출력.

I / O :

enter image description here



1

루비, 53 46 바이트

->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 바이트

Billywob 덕분에 20 바이트를 절약했습니다. stdin에서 입력을 가져 와서 stdout으로 출력합니다.

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

예 :

helloworld-> 08051212152315181204

코드 골프-> 0315040507151206

알파벳 암호-> 0112160801020520030916080518

johncena-> 1015081403051401


utf8toInt(scan(,"))-96전체 일치하는 것 대신 사용할 수 있습니다 . 패딩을 처리하는 더 좋은 방법이 있다고 생각하지 마십시오.
Billywob

@Billywob 감사합니다! 패딩의 경우 formatC이전에 사용해 보았지만 현재 방법보다 1 바이트가 더 필요합니다.
rturnbull

1

실제로 10 바이트

Adnan의 05AB1E answer 에서 깔끔한 알고리즘 사용 . 골프 제안을 환영합니다. 온라인으로 사용해보십시오!

O4+`$pX`MΣ

언 골핑

         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.


0

미로, 40 바이트

      ,")@
!{_10%! (
/       _
01_}:-69"




당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.