숫자를 해당 문자로 대체


23

숫자를 입력으로받는 함수 또는 프로그램을 작성하고 소문자 및 대문자 알파벳의 ASCII 코드 포인트가 해당 문자로 대체되는 문자열을 출력합니다.

  • 대문자 알파벳은 코드 포인트를 사용합니다. 65-90
  • 소문자 알파벳은 코드 포인트를 사용합니다. 97-122

입력의 인접한 숫자가 문자의 코드 포인트와 같은 경우 해당 문자는 출력 문자열의 숫자를 대체합니다.

규칙 :

  • 입력은 1에서 99 자리 사이의 양의 정수입니다.
  • 유효한 입력 만 제공한다고 가정 할 수 있습니다
  • 정수의 시작 부분에서 대체를 시작합니다 ( 976-가 a6아닌 9L).
  • 입력은 적절한 형식 일 수 있습니다 (문자열 표시는 정상입니다)
  • 출력은 적절한 형식으로 될 수 있습니다
  • 표준 규칙이 적용됩니다

예 :

1234567
12345C

3456789
345CY

9865432
bA432

6566676869707172737475767778798081828384858687888990
ABCDEFGHIJKLMNOPQRSTUVWXYZ

6711110010100071111108102
Code000Golf

바이트 단위의 최단 코드가 승리합니다!


리더 보드

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes


2
"입력은 1에서 99 자리 사이의 양의 정수가 될 것입니다." 내가 아는 거의 모든 프로그래밍 언어에서, 1에서 99 자리 사이 의 문자열 이 될 것입니다. 자리 ...
TJ Crowder

3
@ TJCrowder 필자는 데이터 유형이 아니라 수학적 의미에서 정수를 의미한다고 가정합니다.
Dennis

1
@TJCrowder valid point :-) 비록 내가 실수하지 않더라도, 1e99는 기술적으로 여전히 정수입니다. long int충분하지 않습니다 super long int.
Stewie Griffin

1
@StewieGriffin : 아! :-) 나는 그런 곳에 어딘가에 있다고 확신합니다.
TJ Crowder

답변:


2

줄프, 18 16 바이트

여기 사용해보십시오! 나는 upperLower 함수가 언젠가 유용 할 것이라는 것을 알고있었습니다! 교체 ó΢, 아니면 그냥 인터프리터 링크를 사용합니다. ISO 8859-7로 인코딩되어 있습니다.

ρiLaΜGpwpuEdóH΅A
      pw           upper and lower
        pu         of the uppercase alphabet
     G    E        split by nothing (E = "")
    Μ      dóH     map each char to its numeric counterpart
  La               regex alternate array (e.g. La[1,2,3] => "1|2|3")
ρi            ΅A   replace input with the character code of the match (΅ is string lambda)

17

펄, 39 38 바이트

( -p플래그에 1 바이트 추가됨 )

$"="|";s/@{[65..90,97..122]}/chr$&/ge
s/                           /          replace...
  @{[                      ]}           this string, treated as a regex:
     join"|",65..90,97..122             65|66|67|68|...|121|122
                                   /ge  ...with this string, eval()'d:
                                 $&     the entirety of the last match
                              chr       convert to char from ASCII code

Job ™을위한 올바른 도구.

하나의 작은 최적화 ( dev-null 덕분에) 덕분에 설명이 오래 되어 단일 바이트를 짧게하지만 조금 우아하지는 않습니다. $"변수는 join배열을 문자열로 보간 할 때 수행 해야 할 사항 을 나타내 므로 설정 $"="|"하면 join.

데모:

llama@llama:~$ perl -pe '$"="|";s/@{[65..90,97..122]}/chr$&/ge' 
1234567
12345C
3456789 
345CY
9865432
bA432
6566676869707172737475767778798081828384858687888990
ABCDEFGHIJKLMNOPQRSTUVWXYZ
6711110010100071111108102
Code000Golf

$"="|"조인 대신 설정하여 단일 바이트를 저장할 수 있다고 생각 합니까?
andlrc

예. $"="|";s/@{[65..90,97..122]}/chr$&/ge
andlrc

@ dev-null 감사합니다!
Doorknob

11

자바 스크립트, 80 바이트

s=>s.replace(/6[5-9]|[78]\d|9[0789]|1[01]\d|12[012]/g,x=>String.fromCharCode(x))

https://regex101.com/r/iX8bJ2/1 에서 실제 정규식을 참조하십시오.

호기심을 위해서, 여기서 배운 것은 :

나는 변경할 수 없습니다 x=>String.fromCharCode(x)String.fromCharCode 있기 때문에 ...


6

CJam, 22 바이트

q{+'[,_el^{_is@\/*}/}*

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

배경

모든 자릿수 그룹을 해당 문자로 바꾸면 (우리가 원하는 순서대로) 왼쪽에서 오른쪽 규칙을 따르지 않습니다.

대신 입력 문자열의 모든 접두사를 생성하고 생성하는 동안 가능한 모든 대체를 시도 할 수 있습니다. 다른 코드 포인트에는 코드 포인트가 포함되어 있지 않으므로 이러한 시도의 순서는 중요하지 않습니다.

예를 들면 다음과 같습니다.

67466

6     -> 6
67    -> C
 C4   -> C4
 C46  -> C46
 C467 -> C4B

C4B

작동 원리

q                       Read all input from STDIN.
 {                  }*  Fold; push the first character, and for each subsequent
                        character, push it and do the following:
  +                       Append the character to the string on the stack.
   '[,_el^                Push the string of all ASCII letters.
                          See: http://codegolf.stackexchange.com/a/54348
          {       }/      For each ASCII letter:
           _                Push a copy of the letter.
            i               Convert to integer, i.e., compute its code point.
             s              Cast to string.
              @\            Rotate and swap.
                /           Split the modified input characters at occurrences (at
                            most one) of the string repr. of the code point.
                 *          Join, separating by the corresponding letter.

4

PHP, 110 (102) 101 68 67 바이트

어려운 도전입니다. 이것이 내가 생각해 낼 수있는 최선입니다. 이것은 완전히 새로운 버전입니다.

for($i=64;123>$i+=$i-90?1:7;)$t[$i]=chr($i)?><?=strtr($argv[1],$t);

다음과 같이 실행하십시오.

php -r 'for($i=64;123>$i+=$i-90?1:7;)$t[$i]=chr($i)?><?=strtr($argv[1],$t);' 6711110010100071111108102;echo
> Code000Golf
  • ctype_alpha대신 하여 preg_matchthx를 사용하여 8 바이트 를 절약했습니다.
  • 0비어 있지 않은 문자열을 확인하는 대신 문자열 앞에 추가 하여 1 바이트를 절약 했습니다. 입력의 마지막 문자가 0 인 경우, 내가 가져 오는 하위 문자열은 "0"이되며 거짓은 "00"입니다. 따라서 마지막 0 인쇄를 건너 뛰지 않습니다.
  • strtr변환 쌍으로 배열을 작성한 후 사용하여 대량 33 바이트를 절약했습니다.
  • 짧은 인쇄 태그를 사용하여 바이트 저장

1
#[A-Z]#i현재 식이 "\"에서 "92"를 행복하게 변환 할 수 있도록 정규식을 변경해야합니다 . 또는 ctype_alpha()대신 사용해보십시오 preg_match(). 지금까지 작동하는 것 같습니다.
manatwork

"0", which is falsy, whereas "00" is truthy잘가요, PHP.
고양이

3

Python 3, 211 189 188 바이트

def f(c,i=0,n=""):
 while i<len(c):a=1;x=int(c[i:i+2]);a=2 if 64<x<91 or 96<x<100 else a;x=int(c[i:i+3]) if a<2 else x;a=3 if 99<x<123 else a;x=chr(x) if a>1 else c[i];n+=x;i+=a
 return n
  • \ n을;로 바꾸어 23 바이트를 절약했습니다. 데니스 덕분에

테스트

여기에 이미지 설명을 입력하십시오


1
;줄 바꿈 대신 사용 하면 전체 while 루프를 한 줄에 넣을 수 있습니다. 또한 첫 번째 줄이 될 수 있습니다 def f(c,i=0,n=""):.
Dennis

1
a=1;a=2 if 64<x<91 or 96<x<100 else a-> a=1+(64<x<91or 96<x<100)etc
seequ

2

Pyth, 20 18 바이트

.Uu:G`CHHsrBG1+bZz

@Dennis와 동일한 알고리즘. Jelly보다 휴대 전화에서 Pyth로 코딩하는 것이 훨씬 쉽습니다.

                implicit: z=input
.U              Reduce the following lambda b, Z over z
                b is the string being built; z is the next char
   u                Reduce the following lambda G,H over +bZ
                    G is the string, H is the next letter to match
     :                  Replace
       G                in G
       ` C H            the char code of H
       H                with H
     s rB            where H takes on values:
          G              the lowercase alphabet (that's the global value of G)
          1              concatenated to its uppercased self.
     +          
       b
       Z
   z

감사합니다 @isaacg

여기에서 시도 하십시오 .


휴대 전화에서이 사이트를 유지할 수 없습니다.
코너 오브라이언

1
특히 인쇄 가능한 모든 ASCII : D
lirtosiast

1
사실, 아마도 모든 젤리에서 휴식을 취하는 것이 좋을 것입니다 ... 균형 잡힌 식단;)
Conor O'Brien

0

05AB1E , 12 바이트

õsvy«žnvyÇy:

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오. .

설명:

õ             # Push an empty string ""
 sv           # Swap to get the (implicit) input-string, and loop over its characters:
   y«         #  Append the current character to the string
     žn       #  Push builtin "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
       v      #  Inner loop over each of these letters:
           :  #   Replace in the string all occurrences (should be either 0 or 1 occurrence)
        yÇ    #   of the ordinal value of the current letter
          y   #   by this letter
              # (after the loops, implicitly output the top of the stack as result)

reduce-by를 사용하는 12 바이트 대안 :

Å»«žnvyÇy:]θ

온라인으로 시도 하거나 모든 테스트 사례를 확인 하거나 처음 10 바이트만으로 단계별 축소를보십시오 .

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