문자가 증가하는 동안 숫자가 감소합니다


18

문자가 감소하는 동안 숫자가 증가 함에 따라 무작위로 영감

혼합 된 문자 및 정수 (예를 들어, 목록이 주어지면 ['a', 2, 3, 'b']) 증가 (AT 포장 알파벳 한 위치에서 문자를 za) 및 감소 위의 예를 들어 1 씩 숫자 출력은이어야한다 ['b', 1, 2, 'c'].

  • 입력은 혼합 유형 목록, 구분 문자열, 문자열 목록 등이 될 수 있습니다.
  • z에 랩 a,하지만 1로 이동 0하고 0간다-1 등,
  • 입력은 [a-z]정수일 뿐입니다 . 대문자를 선택할 수 있습니다[A-Z]더 쉬운 경우 를 입력으로 .
  • 입력은 비어 있지 않은 것으로 보장됩니다.
  • 입력은 숫자 또는 문자 만 포함 할 수 있습니다.

예 :

Input
Output

['a', 2, 3, 'b']
['b', 1, 2, 'c']

['a', 'b', 'z']
['b', 'c', 'a']

[-1, 0, 257, 'x']
[-2, -1, 256, 'y']

[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]

규칙 및 설명

  • 편리한 방법으로 입력 및 출력 가능 .
  • 결과를 STDOUT에 인쇄하거나 함수 결과로 리턴 할 수 있습니다.
  • 출력은 입력과 같은 형식 일 필요는 없습니다 (예 : 입력을 문자열로 가져 와서 목록으로 출력 할 수 있음).
  • 전체 프로그램 또는 기능이 허용됩니다.
  • 해당되는 경우 입력 / 출력 정수가 언어의 기본 int범위에 맞는 것으로 가정 할 수 있습니다 .
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

1
숫자가 Integer.MinValue와 같거나 부호가있는 정수의 가장 낮은 값이 내 언어 인 경우 Integer.maxValue로 언더 플로우해야합니까, 아니면 계속 카운트 다운해야합니까?
Nzall

1
@Nzall 정의되지 않은 동작. 규칙 및 설명 아래의 다섯 번째 글 머리 기호는 입력 및 출력 정수가 모두 언어 기본 int범위에 맞도록 지정 하므로 Integer.MinValue입력으로는 절대 얻을 수 없습니다 .
AdmBorkBork

답변:



5

파이썬 3 , 59 바이트

lambda a:[i-1if''!=i*0else chr(97+(ord(i)+8)%26)for i in a]

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

Outgolfer Erik 덕분에 -1 바이트



@EriktheOutgolfer 정수 대 문자열 비교가 솔루션에서 작동하지 않는 것 같습니다.
Jitse

아 맞다. 파이썬 2가 필요하다.
Outgolfer Erik

아 네, 그럼 작동하는 것 같습니다. 그래도 -96with을 +8바꾸면 바이트 가 절약됩니다.
Jitse

''!=i*0나의 str(i)>'9'좋은 직업 보다 3 바이트 더 짧습니다
Black Owl Kai


5

루비 , 34 바이트

각 요소에 대해 요소 -1을 반환하십시오. 문자열은이 작업을 수행 할 수 없으므로 오류가 발생하고 rescuesucc에서 선택되어 알파벳 대신 다음 문자를 반환합니다. succ"롤오버" z하고 리턴 aa하므로 리턴 된 문자열에서 첫 번째 문자를 가져옵니다.

->a{a.map{|e|e-1rescue e.succ[0]}}

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



3

파이썬 (3) , 182 (130) 118 바이트

-51 대체하여 @AdmBorkBork 및 @Black 올빼미 카이 덕분 -1 @Black 올빼미 카이 바이트에 대비 -12 바이트 바이트 .append()+=[]하고 대신 n+1에를-~n

def a(x):
 b='abcdefghijklmnopqrstuvwxyz';c=[]
 for d in x:
  try:c+=[d-1]
  except:c+=[b[(-~b.find(d)%26)]]
 return c

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

질문이 샌드 박스에있는 동안 이것을했지만 지금까지 게시 된 것을 보지 못했습니다. :피

언 골프

def a(x):
    b = 'abcdefghijklmnopqrstuvwxyz'
    c = []
    for d in x:
        try:
            c.append(d - 1)
        except:
            c.append(b[((b.find(d) + 1) % 26)])
    return c

설명

입력 된 목록의 각 요소에 대해 x1을 빼고 최종 반환 목록에 추가하려고합니다. 요소가 문자열이기 때문에 오류가 발생하면 알파벳의 문자 색인에 1이 더 해지고 mod 26이 사용됩니다. mod 26은 26의 인덱스를 다시 0으로 랩핑합니다.


CodeGolf SE에 오신 것을 환영합니다! 필자는 Python 전문가가 아니지만 탭을 4 개의 공백으로 바꿔서 많은 바이트를 절약 할 수 있다고 생각합니다.
AdmBorkBork

공백을 제거 하여 131 바이트 를 얻었습니다 . 하나 더 바이트 실현에 의해 golfed 할 수 (x+27)%26와 같은 결과가(x+1)%26
블랙 올빼미 카이

@AdmBorkBork BlackOwlKai 도와 주셔서 감사합니다! 게시물을 수정했습니다.
asdf60367134

str(d)==dtry / except를 사용하는 대신 삼항을 사용하여 문자열인지 여부를 확인할 수 있습니다 . 그러면 더 이상 시도 / 제외가 필요하지 않으므로 목록 이해로 모든 작업을 수행 할 수 있습니다! 좀 더 생각해 보 겠지만이 방법으로 100 바이트 미만으로 쉽게 얻을 수 있습니다.)
Value Ink



2

Gema , 55 자

<N>=@sub{$1;1}
z=a
<L>=@int-char{@add{@char-int{$1};1}}

더러운 용액. 글자 증분을 감싸는 것은 고통스럽게 길기 때문에 별도의 규칙이 있습니다.

입력은 무엇이든 될 수 있으며 일부 구분 기호를 사용하십시오. (숫자와 문자 사이의 구분 기호를 생략 할 수도 있습니다. 1 문자의 가격으로 변경 <L1>하면 문자 사이의 구분 기호도 생략 할 수 있습니다.)

샘플 실행 :

bash-5.0$ gema '<N>=@sub{$1;1};z=a;<L>=@int-char{@add{@char-int{$1};1}}' <<< "['a', 2, 3, 'b']"
['b', 1, 2, 'c']

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

66 자

<N>=@sub{$1;1}
<L>=@cmpi{$1;z;@int-char{@add{@char-int{$1};1}};a;}

깨끗한 용액. 절반은 상대적으로 효율적이고 절반은 순수한 통증입니다.

샘플 실행 :

bash-5.0$ gema '<N>=@sub{$1;1};<L>=@cmpi{$1;z;@int-char{@add{@char-int{$1};1}};a;}' <<< "['a', 2, 3, 'b']"
['b', 1, 2, 'c']

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


2

R , 77 85 바이트

무려 8 바이트의 @Giuseppe에게 감사드립니다.

function(l)Map(function(x)"if"(i<-match(x,L<-c(letters,"a"),0),L[i+1],x-1),l)

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

입력을 목록으로 가져옵니다. @Giuseppe가 크게 변경 한 후에는 Map함수를 목록에 적용하는 데 사용 합니다. 그것은 사용하게 match문자를 테스트합니다. 테스트 중에 확장 문자 목록과 색인이 반환을 위해 저장됩니다.


나는 가정 character의 그들이 캐스팅되기 때문에 유한 없습니다 numeric에 의해 is.finite따라서있다 NA?
주세페

@Giuseppe는 그것이 그 라인을 따라 뭔가있을 것이라고 생각했습니다. 비록 그것이 같은 바이트입니다. 더블 나는 그것을 사용해야했습니다 :)
MickyT


당신을 제거해서 죄송합니다 is.finite, 내가 직접 균열을 생각
주세페

1
아주 좋은 @Giuseppe,겠습니까는 생각하지 Map하고 match. 매일 무언가를 배우는 것이 좋습니다 :)
MickyT

2

MathGolf , 14 바이트

▄\╧¿ò'z=¿Å'a)(

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

문자를 소문자로 사용합니다.

설명

▄\╧              Is the element in the lowercase alphabet?
   ¿ò            If so:
     'z=           Is it equal to z?
        ¿Å         If so:
          'a         Push 'a'
            )      Else: Increment the string
             (   Else: Decrement the number

2

망막 , 52 50 48 58 41 37 바이트

T`zl`l
\b0
-
\d+
*
-_*
-$.0
_(_*)
$.1

@FryAmTheEggman 덕분에 -4 바이트 (그리고 버그가 있다고 언급 한 1 → -1대신 : 대신 1 → 0). 와 ..
버그를 수정하기 위해 +10 바이트 .. 꽤 귀찮게 한 그런 성가신 가장자리 케이스 .. 그러나 지금 41 바이트로 골프. (지금은 <40 바이트 버전에 대한 궁금 @Neil@CowsQuack가 .. 감사 의견에 언급 @Neil 변환의 끝을 위해 에 , 먼저 음의 값을 처리. 정수 단항에서 그 바로 다시 변환 많은 도움이되었습니다.)100-
분명히 분명히이 시점에서 경계가 필요하지 않으므로 -4 바이트 ..>.>

I / O는 쉼표로 구분됩니다.

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

설명:

모든 음역 "zabcdefghijklmnopqrstuvwxy(z)"합니다 "abcdefghijklmnopqrstuvwxyz":

T`zl`l

모든 독립 교체 0A를들 -:

\b0
-

해당 숫자를 밑줄로 바꾸어 모든 숫자를 단항으로 변환하십시오.

\d+
*

뒤에 0 개 이상의 단항 행이있는 모든 음수 값의 경우 : 빼기 부호를 유지하고이 일치의 전체 길이 (을 포함하여 -)를 정수로 다시 변환하십시오.

-_*
-$.0

양의 정수의 경우 : 단일 단항 행을 일치시킨 다음 0 개 이상의 단항 행을 일치시켜 양의 정수를 일치시킵니다. 그런 다음 캡처 그룹의 길이로 바꾸어 단일 단항 줄을 제거하고 동시에 정수로 다시 변환하십시오.

_(_*)
$.1


1

PHP , 50 바이트

for(;''<$a=$argv[++$i];)echo$a<a?--$a:(++$a)[0],_;

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

테스트

문자 / 정수를 구분하여 출력 _후행 구분 기호로 구분 .

PHP에서는 문자를 직접 증가시킬 수 있으므로 활용했습니다. 그러나는 z로 증가 aa그것으로 변환하기 위해 a, (가) (++$a)[0]만을 증분 값의 첫 번째 문자를 출력하는 데 사용된다.


1

Japt -m , 13 12 바이트

Shaggy 덕분에 -1 바이트

;¤?UÉ:Cg8+Uc

시도 해봐

설명:

;o ?UÉ:Cg8+Uc
-m              // Map U through the input:
 o              // Try to create a range [1...U]
   ?            //   If that creates a range (number):
    UÉ          //     Return U-1
      :         //   Else, return:
;      C        //     alphabet (a...z)
        g       //     Index:
         8+Uc   //       8 + char-code of U

참고 : 소문자 알파벳 ;으로 바뀝니다C


그것은에서이 랩처럼 보이지 않는 za.
얽히고 설킨

@Shaggy Whoops, 나는 그것을 놓쳤다. +2 바이트에 대한 임시 수정 사항을 추가했습니다
Oliver

삼항이없는 내 (아직)를 고칠 수있는 방법을 찾지 못했습니다. 좋아하는 것과 너무 비슷하므로 지금 삭제하고 있습니다. o-> ¤여기에 바이트를 저장합니다.
얽히고 설킨

1
+2그리고 -1Shaggy 덕분에 더 정확할 것입니다! : D
얽히고 설킨

1
@Shaggy +2올리버 덕분에 : P
올리버

1

하스켈, 52 51 바이트

map q
q"z"="a"
q x|x>"`"=succ<$>x|1<2=show$read x-1

Haskell은 혼합 유형 목록을 허용하지 않으므로 문자와 숫자를 문자열로 가져 와서 반환합니다.

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

모든 목록 요소를 확인하십시오. 문자열이 "z"인 경우"a" ; 문자열의 첫 문자가>'`' (즉, 숫자가 아닌 문자) 인 경우 문자열에서 문자의 후속 문자를 반환합니다. 그렇지 않으면 숫자 여야하므로 정수로 변환하고 1을 빼고 다시 문자열로 바꿉니다.

편집 : @cole 덕분에 -1 바이트.


이 작업 은 51 바이트입니까?

@cole : 네 그렇습니다. 감사!
니미

1

젤리 , 13 바이트

®i‘ị®µ’e?€Øa©

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

에 의해 영리한 수정 Jonathan Allan의 .

참고 :이 프로그램은 전체 프로그램이 아니며 TIO 기반 바닥 글을 사용하면 명령 줄 인수를 사용하여 함수를 테스트 할 수 있습니다.


입력의 음수 (또는 chr 범위 이상)에서는 작동하지 않습니다. ®i‘ị®µ’e?€Øa©내가 믿는 제로에 대한 수정입니다.
Jonathan Allan

@JonathanAllan Hah, 그 경우 정확히 작동하지 않는 것을 잊었습니다 . 아이러니, 내가 입력 ~-1s 를 설명하는 조건으로 사용하지 않기 때문에 ... 또한, 어떻게 단축거야 ®i‘ị®...
에릭 아웃 골퍼

1

C ++ 17 (gcc) , 120 바이트

#define O int operator()
struct V{O(char&c){c++-90?:c=65;}O(int&i){--i;}};int f(auto&l){for(auto&x:l)std::visit(V{},x);}

f필요한 기능은 다음과 같습니다 . l는 입력 및 출력 매개 변수이며 둘 다 호환 가능 std::variant<char, int>하거나 그 반대로 호환되는 개체의 컨테이너 일 것으로 예상됩니다 .

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



1

K (oK) , 27 바이트

{$[9+@x;`c$97+26!8+x;x-1]}'

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

ngn과 dzaima 덕분에 -8 :)


1
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'특수 케이스를 인라인하고 대문자를 사용하는 31 바이트 (및 '입력은 목록으로 계산되어야 함)
dzaima

@ scrawl 나는 dzaima가 옳다고 생각합니다- '계산해야합니다. 다음 '은 "z"-> "a"를 필요로하지 않으며 약간 더 긴 표현입니다 .{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
ngn

또는 더 나은-투영 목록을 만들고 다음과 같이 적용 @'하십시오 {(`c$97+26!-96+;-1+)[x~'0+x]@'x}. 여기 -96로 대체 할 수있다 (+1 마이너스 "A"의 ASCII 코드 이는) 8는 모드 26 걸렸다로
NGN

대문자를 선택하여 다른 -1 바이트 :{(`c$65+26!14+;-1+)[x=_x]@'x}
ngn

@dzaima 당신을 통해 단축 할 수 있습니다 -9=@x->x=_x
ngn

0

룬 마법 , 36 바이트

\$ka'~?*3({':+1\
R';$ >i::0Sqn=?/1-$

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

일반적인 프로세스는 입력을 읽고 0 앞에 추가하고 (강제로 문자열) 숫자로 다시 변환합니다 (단일 문자는 항상 -1을 반환 함). 입력과 비교합니다. 동일하면 숫자 값이어야하며 1을 빼고 인쇄하십시오. 동일하지 않으면, 문자를 빼고 1을 빼고와 비교하십시오 {. 미만인 경우 인쇄하고, 그렇지 않은 경우 교체 a하고 인쇄하십시오.

프로그램이 스택 언더 플로우를 수행 할 때까지 반복하십시오.

출력은 1 바이트;저장 하기 위해 분리되며 끝에 1 바이트 가 있습니다. 입력은 공백으로 구분됩니다.


0

Stax , 17 바이트

àºÇ╝'♫d▬♣ΩÜEƒ6╩╬ó

실행 및 디버깅

이것은 더 짧은 것이 가능해야한다고 생각하지만 마지막 릴리스에서 새로운 스탁스 기능을 사용할 기회를 막을 수는 없습니다.

전체 입력을 문자열로 취급 :

  1. 정규식은 숫자로 된 숫자를로 바꿉니다 eval(match) - 1. 정규식 블록 교체는 문자열이 아니라 정수이므로 새로운 기능입니다.
  2. 정규식은 소문자 알파벳 주위를 링으로 번역하여 문자를 대체합니다.

0

파이썬 3, 66 바이트

lambda X:[x-1if type(x)==int else chr(97+(ord(x)+8)%26)for x in X]

편집하다:

지금까지 Jitse의 솔루션을 보지 못했습니다. if ''! = i * 0의 속임수는 대단합니다!


0

C #, 148 바이트

(object[] o)=>{var l=new List<object>();foreach(var h in o){try{l.Add((int)h-1);}catch{var c=((char)h+1);if(c>122){c=97;}l.Add((char)c);}}return l;}

반복 링크

언 골프 드 :

var inputList = new object[] {'a', 2, 'z', 6};
var outputList = new List<object>();
foreach (var currentItem in inputList)
{
    try
    {
        outputList.Add((int)currentItem-1);
    }
    catch
    {
        var currentItemPlusOne = ((char)currentItem + 1);
        if (currentItemPlusOne > 122)
        {
            currentItemPlusOne = 97;
        }
        outputList.Add((char)currentItemPlusOne);
    }
}

0

, 16 바이트

WS⟦⎇№βι§β⊕⌕βιI⊖ι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. STDIN에서 입력을 취합니다. 각 행은 단일 소문자 또는 정수이며 STDOUT에서 별도의 행으로 출력됩니다. 설명:

WS

빈 줄에 도달 할 때까지 STDIN에서 반복적으로 입력하십시오.

이 표현식을 자체 행에 출력하십시오.

⎇№βι

사전 정의 된 소문자 알파벳의 하위 문자열입니까?

§β⊕⌕βι

그렇다면 주기적으로 색인 된 다음 문자를 인쇄하십시오.

I⊖ι

그렇지 않으면 값을 줄이고 암시 적 인쇄를 위해 문자열로 다시 캐스팅하십시오.


0

Zsh , 47 바이트

a=({a..z} a)
for i
<<<${a[$a[(i)$i]+1]:-$[--i]}

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

a=({a..z} a)                  # append extra 'a' to the end to handle 'z' case
for i                         # for i in "$@" arguments
<<<${a[$a[(i)$i]+1]:-$[--i]}
       $a[(i)$i]              # first (i)ndex of $i in list (if not found, set to after last index)
      [         +1]           # increment
   ${a[           ]        }  # value in array at index. if lookup fails, empty string
   ${              :-$[--i]}  # if empty, decrement $i and substitute instead
<<<                           # print to stdout




0

SimpleTemplate, 80 바이트

이것은 내가 만든 언어로 작성되었습니다.

컴파일러의 제한으로 인해 더 이상 줄일 수 없습니다.

{@eachargv}{@if_ is matches"@\d+@"}{@incby-1_}{@echol_}{@else}{@inc_}{@echol_.0}

그리고 지금, 골퍼가 아닙니다 :

{@each argv as value}
    {@if value is matches "@\d+@"}
        {@inc by -1 value}
    {@else}
        {@inc by 1 value}
    {@/}
    {@echo value, "\n"}
{@/}

그리고 설명 :

  • {@each argv as value}-의 모든 값을 반복합니다 argv. ( argv전달 된 모든 인수를 포함합니다).
    이 없으면 as <var>기본 _변수로 가정됩니다.
  • {@if value is matches "@\d+@"}- value정규식과 일치 하는지 확인합니다 "@\d+@".
  • {@inc by -1 value} -값을 -1 씩 증가시킵니다 (기본적으로 감소).
  • {@echo value, "\n"}{@echol_}- echol전달 된 값을 출력하고, 마지막 라인을 추가한다.
  • {@else} -자기 설명
  • {@inc by 1 value}-값을 1 씩 증가시킵니다. by <value>가 없으면 1로 가정합니다.
  • {@echo value.0, "\n"}{@echol_.0}- echol전달 된 값을 출력하고, 마지막 라인을 추가한다.
    챌린지 규칙으로 인해 필요합니다 z wraps to a..
    이 때 @inc문자열에 사용되는, 그것은 명중하면, 문자를 증가시키고 z, 그것을가 랩 aa.
    첫 번째 문자를 출력하면 7 바이트의 비용으로 문제를 충족시킬 수 있습니다.
  • {@/}- {@else}위를 닫습니다 (선택 사항).
  • {@/}- {@each}위를 닫습니다 (선택 사항).

http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f 에서 시도해보십시오 .

전달 된 각 인수 render()는 새로운 값으로 간주됩니다.


-1

펄, 64 바이트

foreach (@ARGV){$_=~m/[a-zA-Z]/?++$_:--$_;print substr $_,0,1;}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.