시프터 만들기


10

여러 n곳 을 "이동"하려면 다음을 수행하십시오.

  • 마지막 n자리를 제거
  • n숫자의 시작 부분에 첫 번째 숫자의 사본 추가

예를 들어, 31415세 자리를 이동하려면 마지막 세 자리를 가져 와서을 입력 31한 다음 첫 번째 자리의 사본 세 개 3를 끝에 추가하여을 지정하십시오 33331.

숫자가 음수이면 대신 왼쪽에서 숫자를 가져와야하고 첫 번째 숫자는 오른쪽에서 "채워야"합니다. 예를 들어, 문자열 31415이 -3 자리 이상 이동하면가 나타납니다 15555.

숫자가 0이면 변경하지 않아야합니다.

시프트가 프로그램 길이보다 길면 채워진 숫자가 제거되기 시작할 수 있습니다. 즉, 주어진 숫자가 문자열의 길이보다 길면 전체 문자열이 한 자리가 된 후에는 더 이상 변경되지 않습니다.

도전

두 개의 숫자가 주어 n지고 s, 수익률 ns장소 로 이동했습니다 .

테스트 사례

   n,  s -> result
7243,  1 -> 7724
 452, -1 -> 522
  12,  1 -> 11
 153,  4 -> 111

이것은 이므로 가장 짧은 유효한 제출 (바이트 단위로 측정)이 이깁니다.


이기는 기준은 무엇입니까?
Mr. Xcoder

5
나는 "시프 팅"이 무엇을하는지 이해하지 못한다고 생각합니다. 이 태그는 [binary]로되어 있는데, 이진 시프트와 관련이 있다고 생각합니다. 테스트 사례에서 숫자를 이진수로 표시하는 것이 도움이 될 수 있습니까?
Esolanging 과일

2
첫 번째 또는 마지막 숫자를 이동하고 "늘려"냅니다. 불분명합니까?
Luis Mendo

2
그래, 그들은 무엇을 요구하고 있는지 분명하다
wrymug

3
시프트는 잘 정의됩니다 : 정수 곱셈 또는 밑의 거듭 제곱으로 나눕니다. 그러나 테스트 사례 중 어느 것도 작동하지 않으므로이 질문은 특유의 정의를 사용하고 그것이 무엇인지 말하지 않는 것으로 보입니다.
피터 테일러

답변:


2

APL (Dyalog) , 32 바이트

sift를 왼쪽 인수로, 숫자 (문자열)를 오른쪽 인수로 사용하는 익명 함수.

{a←|⍺⋄(≢⍵)↑(a-⍺)↓(a⍴⊃⍵),⍵,a⍴⊃⌽⍵}

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

{ 이 왼쪽 및 오른쪽 인수 인  익명 함수

|⍺ 시프트의 절대 값

a← 에 저장

 그때

⌽⍵ 숫자를 뒤집다

 첫 번째 (즉, 마지막) 숫자를 선택하십시오

a⍴R 길이에 eshape

⍵, 번호를 붙이다

(), 다음을 추가하십시오.

  ⊃⍵ 첫 번째 자리

  a⍴R 길이에 eshape

()↓ 다음 문자 수를 삭제하십시오.

  a-⍺마이너스 전환

()↑ 다음과 같은 문자를 사용하십시오.

  ≢⍵ 원래 숫자의 길이



2

하스켈, 69 바이트

s#n|l<-[1..abs n]=take(length s)$drop(-2*n)$(s!!0<$l)++s++(last s<$l)

숫자를 문자열로 사용합니다. 온라인으로 사용해보십시오!

작동 방식 :

s#n                         -- s: input number as a string
                            -- n: shift amount

(s!!0<$l)++s++(last s<$l)   -- make a string:
                            -- n times the first digit, the whole number, n times the last digit
                            -- e.g. "567" 2 -> 5556777
drop(-2*n)                  -- drop the first (-2 * n) chars, i.e. 0 if n>0
take(length s)              -- take as may chars as there are in s

2

MATL , 12 바이트

tn:i-yn1&Xl)

입력은 다음과 같습니다 : 문자열로 이동 될 숫자; 숫자로 이동하는 양.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

컨시 더 입력 '452'-1'.

t     % Implicitly input string. Duplicate
      % STACK: '452', '452'
n     % Number of elements
      % STACK: '452', 3
:     % Range
      % STACK: '452', [1 2 3]
i     % Input number
      % STACK: '452', [1 2 3], -1
-     % Subtract, element-wise
      % STACK: '452', [2 3 4]
y     % Duplicate from below
      % STACK: '452', [2 3 4], '452'
n     % Number of elements
      % STACK: '452', [2 3 4], 3
1     % Push 1
      % STACK: '452', [2 3 4], 3, 1
&Xl   % Clamp, with three inputs. Applies min function, then max
      % STACK: '452', [2 3 3]
)     % Reference indexing. Implicitly display
      % STACK: '522'

1
이것은 지금까지 가장 적은 양의 바이트입니다.
K Split X

@KSplitX 감사합니다! BTW 방금 설명을 추가했습니다
Luis Mendo

1

J, 37 바이트

이것은 J에서 명시 적 동사가 올바른 (유일한 선택) 선택처럼 보이는 상황 중 하나 였지만, 이것에 대한 암묵적인 재 작성이 있는지 알고 싶습니다.

4 :'(-x)(|.!.((x>0)&{({:,{.)":y))":y'

J에 내장 된 시프트 동사를 사용하면 "채우기"문자를 구성 할 수 있습니다.

|.!.f  NB. f is the fill character

채우기 문자로 첫 번째 문자 또는 마지막 문자를 사용할지 여부를 결정하는 논리

(x>0)&{ ({: , {.)

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


1

J , 23 바이트

(_&(]{.,],{:)~|)}.~_2*]

입력 n 과 출력은 숫자가 포함 된 문자열입니다.

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

설명

(_&(]{.,],{:)~|)}.~_2*]  Input: 'integer n' as a string (LHS), integer s (RHS)
(              )         Extend 'n' by copying its head and tail 's' times
              |            Abs(s)
 _&(]       )~             Nest 'Abs(s)' times on 'n'
          {:                 Tail
        ],                   Append the tail to itself
     {.                      Head
       ,                     Prepend the head to the previous
                   _2*]  Multiply 's' by -2
                }.~      Drop abs(-2*s) from the head if 's' < 0 else from the tail

아름다운. 나는 내 것보다 더 나은 방법이 있다고 의심했다 ...
Jonah

비록 당신이 id를 허용하지 않은 것으로 생각되는 문자열로 n을 취하는 것을 알 수 있습니다. 그것은 단지 4 개의 문자 만 저축했을 것이지만 ...
Jonah


1

05AB1E , 16 바이트

0‹©iR}¹ÄF¨¬ì}®iR

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

설명

0‹                 # input_1 is negative
  ©                # store a copy in register
   iR}             # if true (input_1 is negative), reverse input_2
      ¹ÄF          # abs(input_1) times do
         ¨         # remove the last element
          “       # prepend the head
            }      # end loop
             ®iR   # if input_1 was negative, reverse result

0

파이썬 2 , 87 바이트

f=lambda n,s:s<0and f(n[::-1],-s)[::-1]or n[0]*min(len(n),s)+n[:[0,len(n)-s][len(n)>s]]

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

숫자를 문자열로, 시프트를 정수로 사용합니다. 문자열을 반환합니다.

재귀 호출을하지 않고 함수에 반전을 포함 시키려고했지만 제대로 얻을 수없는 것 같습니다.



0

하스켈 , 108 바이트

글쎄, 이것은 내가 생각했던 것보다 나빴다.

n#s=print$show n&s
r=reverse
n&s|s<0=r$r n&abs s|(a:b,c)<-splitAt s n=take(length n)$(a<$[0..s])++b++c|1>0=n

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

언 골프

n # s = print $ show n & s
n & s
  | s < 0                = reverse (reverse n & abs s)
  | (a:b,c)<-splitAt s n = take (length n) (replicate s a ++ b ++ c)
  | otherwise            = n

0

클로저, 121 바이트

#(let[T(if(pos? %2)reverse vec)](apply str(concat(repeat %2(first %))(T(drop(Math/abs %2)(T %)))(repeat(- %2)(last %)))))

음의 입력을 다루는 것은 불쾌합니다.


0

Pyth, 28 바이트

AQ=Y<+*hJ?K<0H`G_`GHJlJ?KY_Y

온라인으로 시도 하거나 입력을 테스트 하십시오

설명

AQ=Y<+*hJ?K<0H`G_`GHJlJ?KY_Y
AQ                           | Split Q into 2 parts, G and H.
        J?K<0H`G_`G          | If 0 < H, J = str(G). Else, J = reverse(str(G)). Return J
       h                     | Find 1st element
      *            H         | Repeat H times
     +              J        | Concatenate with J
    <                lJ      | Find 1st length(J) elements
  =Y                         | Assign to Y.
                       ?KY_Y | If K, implicit print Y. Else implicit print reverse(Y).


0

자바 스크립트, 80 바이트

(n,s,k=n.length,p=s<=0)=>n.slice(p*-s,p?k:-s)[p?"padEnd":"padStart"](k--,n[p*k])

숫자와 숫자 "shift"의 문자열 표현으로 입력을받습니다. 문자열을 반환합니다.

테스트 스 니펫

let f=
(n,s,k=n.length,p=s<=0)=>n.slice(p*-s,p?k:-s)[p?"padEnd":"padStart"](k--,n[p*k])

I.value="31415";J.value="3";D.oninput()
<div id=D oninput="O.value=I.value.length&J.value.length?f(I.value,+J.value):''">n: <input id=I size=10> s: <input id=J size=2><br><input id=O disabled>

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