나눗셈과 나머지


36

이 문제는 대부분의 "표준"언어에서는 사소한 것이지만이 사이트에서는 거의 볼 수없는 매우 난해하고 수준이 낮거나 사용하기 어려운 언어로 해결됩니다. 흥미로운 문제를 해결해야하므로, 지금까지 읽은 이상한 언어를 시도해보십시오!

작업

두 자연수 가지고 a와 b정수 나눗셈의 결과 : 입력으로하고 출력 두 숫자 a/b와 같은 나눗셈의 나머지를 ( a%b).

이것은 : 각 언어에 대한 최단 답변 (바이트)이 이깁니다!

입출력

  • 0 <= a<= 255, 1 <= b<= 255. 각 입력 (및 출력)도 단일 바이트에 맞습니다.
  • 두 숫자가 명확하게 구분되는 한 입력 및 출력 모두에 대해 원하는 형식을 선택할 수 있습니다 (예 : 구분 기호없이 두 결과를 함께 인쇄하지 않음)

예

a,b->division,remainder
5,7->0,5
5,1->5,0
18,4->4,2
255,25->10,5

참고 : 나눗셈 결과와 나머지를 모두 반환하는 빌트인은 금지되어 있습니다. 적어도 당신의 언어가 두 개의 함수를 동일한 인수에 적용하는 방법을 보여주십시오.

참고 2 : 항상 그렇듯이 코드가 어떻게 작동하는지에 대한 설명은 매우 환영합니다. 코드가 읽기 쉽더라도 다른 사람에게는 그렇지 않을 수도 있습니다!


리더 보드

다음은 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

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

# Language Name, N bytes

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

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

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

# Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들어 리더 보드 스 니펫에 표시 될 수도 있습니다.

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


대신 인수를 제공 a b하는 b a대신 인수를 되돌릴 수 있습니까 ?
— Outgolfer Erik

@EriktheOutgolfer :You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable
— Emigna

@Emigna 그래, 역전이 그들을 구별 할 수 없게 만들지 확실하지 않았다.
— Outgolfer Erik

@EriktheOutgolfer 만약 당신이 그것들을 되돌려 야한다는 것을 알고 있다면 그것들을 구별하는데 아무런 문제가 없습니다 :)
— Leo

안타깝게도 제수가 0이면 BF 알고리즘이 작동하지 않습니다 1.
— mbomb007

답변:


23

BitCycle , 146 79 64 바이트

내 원래 코드의 전체 섹션이 불필요하다는 것을 알았습니다. 대폭 축소!

v  <>!
A\B^^=
? D^>^<
 >\v^~ D@
 >/ C/
  > C ^
A/B v
^   <
?  D^

프로그램은 제수를 먼저 사용하여 명령 행에서 단항으로 입력을받습니다. 몫과 나머지를 단항으로 출력합니다 0. 예를 들어, 여기에 a=11, b=4, a/b=2, a%b=3:

C:\>python bitcycle.py divmod.btc 1111 11111111111
110111

풀리지 않은 행동

여기 내 ungolfed 버전 컴퓨팅이다 a=3, b=5합니다 (glitchiness에 대해 죄송합니다) 켜져 애니메이션 :

Divmod running in BitCycle

설명을 시도

설명은 ungolfed 버전에 적용됩니다. 다루기 전에 언어의 작동 방식에 대한 느낌을 얻으려면 Esolangs 페이지 를 읽는 것이 좋습니다 .

알고리즘은 다음과 같습니다.

  • 프로그램이 종료 될 때까지 외부 루프를 실행하십시오.
    • 제수의 비트에 대해 내부 루프를 실행하여 피제수의 비트와 쌍을 이룹니다.
      • 제수의 모든 비트가 일치하는 배당 비트를 갖는 경우 단일 비트를 출력하십시오.
      • 제수의 모든 비트가 일치하는 배당 비트를 갖지 않는 경우, 구분 기호를 출력 한 0다음 배당 비트가 있던 것을 종료 한 다음 종료하십시오.

코드의 핵심은 수집기 (대문자) 간의 관계입니다. 각 문자로 분리 된 여러 수집가가 있기 때문에,의는로를 참조하자 A1, A2, B1, B2, 등, 위에서 아래로 번호.

  • A1그리고 A2메인 루프의 처음에 각각 제수 배당을 잡아.
  • 내부 루프는 제수와 피제수에서 한 번에 한 비트 씩 벗겨집니다.
    • 제수의 나머지 부분은있는 경우 항상로 들어갑니다 B1.
    • 제수와 배당이 모두 비어 있지 않으면 1 비트는 C11로 들어가고 1은로 들어갑니다 C3. 나머지 배당금은로 들어갑니다 B2.
    • 제수 만 비어 있지 않은 경우, 우리는 배당이 끝났고 나머지를 인쇄 할 차례입니다. 제수의 비트가로 들어갑니다 C2.
    • 배당 자만 비어 있지 않은 경우, 우리는 제수의 끝에 도달했습니다. 이제 비트를 처리 C3하거나 C2출력 할 시간입니다. 나머지 배당금은로 들어갑니다 C4.
  • B콜렉터에 비트가 있으면 컨텐츠를 A콜렉터로 다시 순환시키고 내부 루프를 계속합니다.
  • 한 번 A와 B집 모두 비어의 C수집 열고 우리는 처리 단계를 진행합니다 :
    • C1및 C4그 내용 (제수 및 나머지 배당, 각각)로 덤프 D1와 D3.
    • C2비어 있으면 몫을 계속 인쇄합니다.
      • 내용은 C3오른쪽 상단 =스위치 로 이동합니다 . 첫 번째 1비트는 바로 통과하여 !출력됩니다.
      • 때 1비트가 통과, 상기 보드에서 이후의 모든 비트를 송신 지점 우측에 스위치를 활성화한다.
    • 경우 C2비어 있지 않은, 우리는 나머지를 인쇄하고 있습니다.
      • 의 첫 번째 비트는 C2a로 부정되고 0스위치를 통과합니다. 은 0으로 진행 !하고 출력됩니다.
      • 때 0비트가 통과, 그것은 지점 왼쪽에 스위치를 활성화합니다. 이제 모든 비트 C3가 스위치에서 왼쪽으로 이동하여 주변으로 리디렉션되어 !전체 나머지를 출력합니다.
      • 의 첫 번째 비트 사본 C2도로 전송됩니다 D2.
  • 이제 D수집가가 열립니다.
    • 에 어떤 것이 있으면 D2나머지를 인쇄했음을 의미합니다. 의 비트 D2가 @에 도달하면 프로그램이 종료됩니다.
    • 그렇지 않으면, 내용 D1과 D3에 루프 다시 A1와 A2각각 메인 루프가 시작됩니다.

그게 굉장
— 에반 Carslake

"프로그램은 명령 행에서 단항으로 입력을받습니다": 저에게 바이너리처럼 보입니까?
— therealfarfetch 님이

으악. 출력이 바이너리처럼 보였으므로 입력도 그래야합니다. 그런 다음 텍스트를 읽습니다. 신경 쓰지 마. : P
— therealfarfetch 님이

15

brainfuck , 43 41 바이트

,<,[>->+<[>]>>>>+<<<[<+>-]<<[<]>-]>>.>>>.

이것은 Esolangs 에서 수정 된 버전의 파괴 계수 알고리즘을 사용 합니다.

프로그램은 STDIN에서 두 바이트 ( d 및 n )를 순서대로 읽고 두 바이트 ( n % d 및 n / d )를 STDOUT으로 인쇄합니다. TIO의 테이프와 같이 이중 무한 테이프 나 원형 테이프가있는 brainfuck 인터프리터가 필요합니다.

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

작동 원리

프로그램이 시작되기 전에 모든 셀은 값 0을 보유합니다 . STDIN ( ) 에서 d 를 읽고 ,한 단계 왼쪽 ( <)을 이동 하고 STDIN ( ) 에서 n 을 읽은 ,후 테이프는 다음과 같이 보입니다.

       v
A      B      C      D      E      F      G      H      J
0      n      d      0      0      0      0      0      0

다음으로 n> 0 이라고 가정 하면 while 루프에 들어갑니다.

[>->+<[>]>>>>+<<<[<+>-]<<[<]>-]

테이프를 다음과 같이 변형합니다.

먼저 >->+<셀 C로 이동 하여 감소시킨 다음 셀 D로 이동 하여 증가시킨 다음 셀 C 로 돌아갑니다 . 다음에 일어날 일은 셀 C 의 값 이 0 인지 아닌지에 달려 있습니다.

  • 셀 C 가 양수 값을 보유하면 [>](셀이 0이 아닌 동안 오른쪽으로 이동) 셀 E로 진행합니다 .

    >>>>+<<<셀 J로 이동 하여 증가시킨 다음 셀 F 로 돌아갑니다 .

    셀 F 는 항상 0을 유지 하므로 while 루프 [<+>-]는 완전히 건너 뛰고 <<셀 D 로 돌아갑니다 .

    도 있기 때문에 마지막으로, D 나 C가 개최 0 , [<]세포에 retrocede합니다 (셀 제로가 아닌 상태에서 좌회전) .

  • 셀 C 가 0을 보유 하면 루프 [>]는 완전히 건너 뜁니다. >>>>+<<<셀 G로 이동 하여 증가시킨 다음 셀 D 로 돌아갑니다 .

    이 시점에서 D 는 d 를 보유하고 (실제로 C 와 D 의 값의 합 은 항상 d가 됨 ) [<+>-]( D 가 양수인 동안 C를 증가 시키고 감소시키는 D ) C 를 d로 , D 를 0으로 설정 합니다.

    마지막으로, <<셀에 retrocedes B는 , [<]상기 셀의 왼쪽 (셀이 제로가 아닌 동안 좌회전) .

두 경우 모두 >-셀 B로 이동 하여 감소시키고 루프가 0이되지 않으면 루프가 다시 시작됩니다.

이후 K의 반복 테이프는 다음 보인다.

       v
A      B      C      D      E      F      G      H      J
0      n-k    d-k%d  k%d    0      0      k/d    0      k-k/d

n 번의 반복 후에 B 는 제로화되고 루프에서 빠져 나옵니다. 원하는 값 ( n % d 및 n / d )은 셀 D 및 G에 저장 되므로 >>.>>>.인쇄합니다.


12

Funciton , 224 108 바이트

바이트 수는 BOM을 사용한 UTF-16 인코딩을 가정합니다.

 ┌──┬───┐
┌┴╖╓┴╖ ┌┴╖
│%╟║f╟┐│÷╟┘
╘╤╝╙─╜│╘╤╝
 └────┴─┘

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

위의 함수 f는 두 개의 정수를 가져 와서 나누기와 곱을 모두 반환 하는 함수를 정의합니다 (Funciton의 함수는 입력과 출력의 합이 4를 초과하지 않는 한 여러 출력을 가질 수 있음).

여러 용도로 두 개의 입력 값을 사용하는 것은 실제로 매우 사소한 일입니다. T 분기점을 사용하여 커넥터를 분리하면 두 분기를 따라 복제되므로 분할 및 모듈로를 위해 내장으로 별도로 공급할 수 있습니다.

실제로 솔루션을 구현하는 것보다 결과를 사용자에게 표시하는 방법을 알아내는 데 실제로 두 배가 걸렸습니다.

또한 Funciton에는 divmod가 내장되어 ÷%있으며 재미있는 기능이 내장 ÷되어 %있으며 내 솔루션 사용은로 구현 됩니다 ÷% . 그러나 f위의 기능 은 완전히 동일 하지 않습니다 ÷%. 입력 순서를 바꿔야했지만 변경하기 쉬운 것처럼 보이지만 지금까지 바이트 수를 늘리지 않고는 할 수 없었습니다. .


10

자바 스크립트 (ES6), 17 바이트

1 바이트를 골라 낸 @Arnauld 덕분에

x=>y=>[x/y|0,x%y]

형식 (x) (y)로 입력을받습니다.

비트 단위로 x / y의 플로어를 얻거나
x % y로 나머지를 가져
옵니다. 두 값을 모두 배열에 넣어 둘 다 반환 될 수 있도록합니다.

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


10

APL (Dyalog) , 5 바이트

@ngn 덕분에 -2 바이트

⌊÷,|⍨

이것은 포크 (3 트레인)의 상단 (2 트레인)이며, 상단의 오른쪽 타인은 파생 된 함수 (연산자가 함수에 적용한 결과)입니다.

       result 
         ↑┌──────────┐
         ││    ┌────┐│┌──────┐ (derived function)
         │↓    │    ↓│↓      │╱
       ┌───┐ ┌───┐ ┌───┐ ╔═══╤═══╗
       │ ⌊ │ │ ÷ │ │ , │ ║ | │ ⍨ ║ 
       └───┘ └───┘ └───┘ ╚═══╧═══╝
              ↑ ↑         ↑     ↑ ╲
left argument ┴─────────────────┘  (operator)
                └─────────┴ right argument

⌊ 바닥

÷ 분할

, 에 catenated

|
⍨ 교환 된 인수를 갖는  나눗셈 나머지 (APL 계수는 "뒤로")

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


멋진 다이어그램을 어떻게 만들었습니까?
— emiflake

2
@WolfgangTS Painstakingly. Dyalog APL에는 암묵적 기능의 기본 트리 다이어그램을 만들 수있는 기능이 있습니다. 온라인으로 사용해보십시오! 나는 그것으로 시작했습니다 ...
— Adám

굉장히 어려워 보입니다. 나는 두려운 인내심이 없습니다, 하하
— emiflake

더 짧은 :⌊÷,|⍨
— ngn

@ngn 아야, 당신이 나를 얻었다. 당신이 아직 여기 있다는 것을 알게되어 기쁩니다.
— Adám


7

MATL , 12 10 바이트

Qt:ie=&fhq

입력은 a다음 b. 출력은 나머지이고 몫입니다.

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

설명

이것은 모듈로와 나눗셈을 피합니다. 대신 배열 재구성을 사용합니다 .

  1. a+10이 아닌 요소 의 배열을 만듭니다.
  2. b행 의 2D 배열로 재구성하십시오. 필요한 경우 자동으로 0으로 채워집니다.
  3. 0이 아닌 마지막 항목의 마이너스-행 및 열 인덱스 1는 각각 나머지 및 몫입니다.

예를 들어 고려 a=7, b=3.

Q    % Input a implicitly. Push a+1
     % STACK: 8
t:   % Duplicate. Range from 1 to that
     % STACK: 8, [1 2 3 4 5 6 7 8]
ie   % Input b. Reshape as a matrix with b rows (in column major order)
     % STACK: 8, [1 4 7;
                  2 5 8]
                  3 6 0]
=    % Compare for equality
     % STACK: [0 0 0;
               0 0 1;
               0 0 0]
&f   % Row and column indices (1-based) of nonzero element
     % STACK: 2, 3
hq   % Concatenate. Subtract 1. Implicitly display
     % STACK: [1 2]

2
이것은 측면 사고, 훌륭한 일의 훌륭한 예입니다!
— Leo

6

Mathematica, 20 18 바이트

⌊#/#2⌋@Mod@##&

유연한 출력 규칙의 사소한 악용 : 결과는로 표시되며 div[mod]평가되지 않습니다. 각각의 숫자가 추출 될 수 result[[0]]와 result[[1]].

그리고 어이없는 이름의 built-in보다 1 바이트 만 길었습니다 QuotientRemainder.

Mathematica는 실제로 여러 함수를 동일한 입력에 적용 할 수있는 깔끔한 방법이 있지만 3 바이트가 더 깁니다.

Through@*{Quotient,Mod}

1
당신은 언어가 단순히 빌트인을 결합한 빌트인을 만들 때 나쁘다는 것을 알고 있습니다…
— Fatalize

1
@ 운명입니다? divmod 내장 기능이 매우 유용하다는 것을 알았습니다. Mathematica는 언어를 가진 유일한 언어는 아닙니다.
— Martin Ender

8
@ Fatalize, 나머지를 계산하는 데 필요한 몫을 계산하려면 동일한 작업이 많이 필요합니다. 두 결과를 모두 사용하는 경우 올바르게 설계된 quotRem내장 기능을 통해 통화 시간 quot과 rem개별 시간을 크게 절약 할 수 있습니다 .
— Julian Wolf

6

05AB1E , 5 바이트

÷²¹%‚

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

05AB1E에는 버그가 있으므로 암시 적 입력이 작동하지 않습니다. ( Emigna 는 입력이 종종 반대 방향으로 밀린 다고 언급했습니다.


5 바이트에 대해 ÷ ²¹ %) 를 수행 할 수 있습니다.
— Emigna

@Emigna 나는 그것이 유효하다면 몰라요. 잠깐, 어떻게 작동 했습니까?
— Outgolfer Erik

1
왜 유효하지 않은지 모르겠습니다. 암시 적 입력이 이와 같은 경우에 가정 한 것과 반대 순서로 스택에 푸시되기 때문에 작동합니다.
— Emigna

@Emigna 나는 인수를 되돌릴 수 있는지 OP에게 물었다.
— Outgolfer Erik

2
내가 가지고 You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable당신이 입력은 다음과 같이 촬영 결정할 수 있다는 것을 의미한다 divisor, dividend. divisor, dividend답에 "입력은"으로 지정 하면됩니다. 명확하게 구분됩니다.)
— Emigna

6

해파리 , 14 바이트

p
m
,|S
% i
Ei

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

설명

해파리는 동일한 입력에 여러 기능을 적용 할 때 아름다운 언어입니다. 언어는 2D이며 모든 이진 함수는 한 입력에서는 남쪽으로, 다른 입력에서는 동쪽으로 보입니다. 따라서 서쪽과 북쪽에서 하나의 값에 접근하면 코드에서 값을 복제하지 않고도 두 함수에 값을 공급할 수 있습니다.

두 i프로그램이 시작될 때 프로그램의 두 입력 값으로 대체된다. 이제 %부서입니다. 그것은 동쪽에서 직접 하나의 입력을 취하고 남쪽으로 갈 때 E동쪽으로 검색을 리디렉션합니다. 따라서 두 입력 모두 %인수로 제공됩니다.

| 기본적으로 동일한 기능을 수행하는 모듈로의 내장 기능이지만, 두 가지 모두 풋에서 남쪽을 찾는다.

두 결과를와 쌍으로 연결합니다 ,. 그런 다음 m플로어 함수 ( %부동 소수점 나누기 이므로 필요 )가 마지막으로로 결과를 인쇄합니다 p.


6

Cubix , 12 13 바이트

;W@o,I|\S%;O

다음 큐브에 어떤 맵이

    ; W
    @ o
, I | \ S % ; O
. . . . . . . .
    . .
    . .

여기 사용해보십시오

실행 된 단계에 대한 설명
,I|I,-수퍼 플로어 정수 나누기로 시작하고, 입력에서 첫 번째 정수를 가져오고, 다시 반영하여 입력에서 다음 정수를 가져오고 다시 나눕니다
O;.-정수 나누기의 결과를 출력하고 팝합니다
%. 이 작업은 나중에 수행 할 수 있지만 여기서 끝났습니다
S\o.-스택에 공간 문자 추가, 공간 재 지정 및 출력
W;-왼쪽으로 이동하여 스택에서 공간 팝
O|@-이전에 계산 된 모드를 출력하고 수평 반사기를 통과 한 후 정지합니다.


2 분만 줘 좋은 대답입니다!
— Luke

@Luke 고마워, 내가 또 하나를 얻을 수 있다고 생각했지만 애매한
— MickyT

6

Brain-Flak , 56 54 바이트

({}<>)<>([()]{()<(({})){({}[()])<>}{}>}<><([{}()]{})>)

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

Wheat Wizard 덕분에 -2 바이트

설명

Brain-Flak에서 현재 가장 잘 알려진 정수 나누기 와 모듈로 는 매우 유사합니다 (사실 현재 사용되는 정수 나누기는 내가 feersum 의 모듈로 에서 수정 한 것입니다 ).

모듈로와 정수 나누기의 비교 :
Modulo:   ({}(<>))<>     {   (({})){({}[()])<>}{} }{}<> ([{}()]{})
Division: ({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><  {}   {} >)

편리하게, 정수 나누기 프로그램은 데이터를 저장하기 위해 세 번째 스택 만 사용하고 모듈로 프로그램은 데이터를 저장하기 위해 일반 두 스택 만 사용합니다. 따라서 단순히 두 가지를 동시에 실행하면 서로 충돌하지 않습니다.

모듈로와 정수 나누기의 조합 :
Modulo:   ({}(<>))<>     {   (({})){({}[()])<>}{} }{}<> ([{}()]{})
Division: ({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><  {}   {} >)

Combined: ({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><([{}()]{})>)

마지막으로,이 조합에 사용 된 정수 나누기와 모듈로 프로그램은 스택 정리 (스택에 쓰레기를 남기지 말고 입력 이외의 스택에 존재하지 않는 값에 의존하지 않음)하도록 설계되었지만 반드시 그럴 필요는 없습니다. 이 문제에 대해. 따라서 우리는 메인 루프의 끝에서 0을 채우는 것을 귀찮게하지 않고 시작에서 0을 누르지 않고 다른 2 바이트를 절약 할 수 있으며 대신 스택 맨 아래의 0 패딩에 의존합니다.

이것은 우리에게 최종 프로그램을 제공합니다 :
({}<>)<>([()]{()<(({})){({}[()])<>}{}>}<><([{}()]{})>)

정수 나누기 프로그램에 대한 설명은 feersum 's answer를 참조하십시오.

정수 부서 설명 곧 출시 예정 ...


5

자바 8, 18 바이트

(a,b)->a/b+","+a%b

이것은 유형의 람다 식입니다 BiFunction<Integer, Integer, String>.

놀랍습니다 ... 이것은 실제로 Java에 대해 상당히 간결한 솔루션입니다. 람다 식으로 가십시오!


5

뇌 플랙 , 168 (148) 110 바이트

Wiki를 먼저 확인해야한다고 생각합니다

(({})(<({}(<(({})<>)>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{}<>)

체재:

Input:    Output:
A (18)    remainder (2)
B (4)     division  (4)

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

(({})(<           # Copy A
({}(<             # Pick up A
(({})<>)          # Copy B to the other stack
>))               # Put A on top of a 0 on the second stack
                  # At this point the stacks look like this:   A
                                                               0
                                                             B B
                                                               ^

<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>) # Positive division from the wiki
>))                                          # Put down A on top of a 0
                                             # The stack now: A
                                                              0
                                                            Div B
                                                              ^

<>{(({})){({}[()])<>}{}}{}<>([{}()]{}<>)     # Modulo from the wiki


5

sed, 36 바이트

35 바이트의 코드, -r플래그의 경우 +1

:a;s/^(1+)( 1*)\1/\1\2x/;ta;s/.* //

공백이없는 단항으로 입력을받습니다. 몫은 1s로, 나머지는 xs로 두 번째 로 단항으로 출력 합니다. (이것이 허용되지 않으면 알려주세요 1. 입력과 같이 공백으로 구분하여 변경하겠습니다 .)

설명

:a;                                  Define label a
   s/            /     /;            Perform this substitution:
     ^(1+)                           Match the first unary number...
          ( 1*)                      ... followed by a space and 0 or more 1s...
               \1                    ... followed by the the first group again
                  \1\2x              Keep the first two parts unchanged; replace the third
                                     with an x
                         ta;         If the substitution succeeded, goto a
                            s/.* //  After the loop is over, remove the first number

5

Excel 2013, 31 30 26 바이트

=INT(A1/B1)&","&MOD(A1;B1)

설명

입력이 셀 A1에 B1있습니다. 이것은 단순히 나누기 및 나머지를위한 FLOORand MOD함수 의 반환 값을 반환합니다 . 이 값은 쉼표로 구분됩니다.


A1과 A2가 아닌 A1과 B1 셀을 의미한다고 생각합니다.
— fəˈnɛtɪk

예, 고마워요 수정 됨
— Luke

FLOOR(A1/B1;1)대신에 1 바이트를 절약하십시오QUOTIENT(A1;B1)
— Engineer Toast

입력은 항상 자연수이므로 FLOOR(A1/B1;1)`INT (A1 / B1) '로 대체 하여 4 바이트를 더 절약 할 수 있습니다.
— Wernisch



4

OIL , 134 106 103 102 바이트

개행으로 분리 된 두 숫자 인 stdin에서 입력을 가져옵니다. 정수 나누기의 결과, 줄 바꾸기 및 나머지를 출력합니다.

이것은 OIL이 나누기, 나머지, 덧셈, 뺄셈 등을위한 내장 기능이 없기 때문에 내가 작성한 가장 복잡한 OIL 프로그램 중 하나입니다. 분할을 수행하는 기본 방법 인 반복 중첩 감소와 함께 작동합니다.

스크립트 언어 스타일의 주석과 함께 주석이 달린 형식으로 코드를 제공합니다. 실행하기 전에 주석을 제거해야합니다.

5  # read input into lines 0 and 2

5
2
0  # the zero to compare to (nops)
1  # make a backup of the second input at line 3
2
3
10 # check if the second input is 0. %
4
2
24 # if so, jump to 24 (marked with §)
13 # else, go on
10 # check if the first input is zero &
4

31 # if so, jump to 31 (marked with $)
18 # else, go on
9  # decrement both numbers

9
2
6  # jump to line 8 (marked with %)
8
8  # increment the value in line 1 (initially a zero) §
1
1  # "restore the backup"
3
2
6  # jump to line 13 (marked with &)
13
10 # is the second number zero? $
4
2
42 # if so, jump to 42 (marked with +)
36 # else go on
9  # decrement both the second number and the backup
2
9
3
6  # jump to 31 (marked with $)
31
4  # print the division +
1
11 # a newline
4
3  # and the remainder (from the backup)

편집 : "상수"를 한 자리 위치 (참조 할 바이트가 아닌)로 이동하여 3 바이트를 더 깎은 다음 2 개의 0 위치를 암시합니다 (대신 빈 줄을 사용하여 하나를 수행 할 수 있음) 전에).

편집 : 초기 0을 암시 적으로 만들어 다른 바이트. 실제로 하나의 리터럴 0 만 있으면됩니다.


훌륭한 일! 그게 바로 내가이 도전받을 희망 대답의 종류 : 그냥 참고 : 당신은 당신이 0으로 나누기를 검사 할 필요가 없습니다 제수는 항상 엄격하게 긍정적 인 것이라고 보장)
— 레오

@Leo 나는 제수가 항상 처음에 엄격하게 긍정적임을 보장합니다 . 나눗셈을 0으로 나누면 작동하지 않습니다.이 경우 "실제"분할이 정상적인 경우에도 발생할 수 있습니다. 올바르게 기억하면 나머지가 0 일 때 발생합니다.
— L3viathan

12 행의 점검이 아닌 4 행의 점검에 대해 이야기하고 있습니다 ... 프로그램 시작시 한 번만 실행되지 않습니까?
— Leo

@Leo Done, 거의 30 자 미만, 감사합니다!
— L3viathan

4

레티 나 , 14 바이트

입 / 출력 형식을 남용합시다!

(.*)¶(\1)*
$#2

b\na하나의 비 숫자, 개행 문자가 아닌 단수를 위해 단항 으로 입력을로 받습니다. 입력과 같은 문자를 사용하여 몫을 10 진수로 출력 한 다음 나머지를 단항으로 출력합니다.

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

(.*) ¶(\1)*첫 번째 숫자와 일치하고 개행 (¶은 \ n에 대한 Retina의 축약 형임)과 일치하며 첫 번째 숫자는 다시 여러 번 가능합니다. 두 번째 그룹의 일치 횟수는 나눗셈의 결과이며 일치하지 않은 부분은 나머지입니다.

을 사용 $#2하여 이전 줄에서 일치 한 모든 항목을 두 번째 그룹의 캡처 수로 바꾸고 결과를 얻습니다.


하하, 그렇습니다. 저녁 늦게 프로그램을 작성해서는 안됩니다.
— FryAmTheEggman

4

ArnoldC , 286 283 바이트

HEY CHRISTMAS TREE c
YOU SET US UP 0
HEY CHRISTMAS TREE d
YOU SET US UP 0 
GET TO THE CHOPPER c
HERE IS MY INVITATION a
HE HAD TO SPLIT b
ENOUGH TALK
GET TO THE CHOPPER d
HERE IS MY INVITATION a
I LET HIM GO b
ENOUGH TALK
TALK TO THE HAND c
TALK TO THE HAND d
YOU HAVE BEEN TERMINATED

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

작동 원리

HEY CHRISTMAS TREE c      //DECLARE VARIABLE c = 0
YOU SET US UP 0
HEY CHRISTMAS TREE d      //DECLARE VARIABLE d = 0
YOU SET US UP 0

GET TO THE CHOPPER c      /*
HERE IS MY INVITATION a      SET c = a/b
HE HAD TO SPLIT b         
ENOUGH TALK                */

GET TO THE CHOPPER d      /*
HERE IS MY INVITATION a      SET d = a mod b
I LET HIM GO b
ENOUGH TALK                */

TALK TO THE HAND c        // PRINT c
TALK TO THE HAND d        // PRINT d
YOU HAVE BEEN TERMINATED  //END

출력 형식

a/b
a mod b

3

미로 , 11 바이트

?:?:}/!\{%!

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

설명

?:   Read a and duplicate.
?:   Read b and duplicate.
}    Move a copy of b over to the auxiliary stage.
/    Compute a/b.
!    Print it.
\    Print a linefeed.
{    Get back the other copy of b.
%    Compute a%b.
!    Print it.

그런 다음 IP는 막 다른 골목 %에 부딪쳐서 다시 실행 되면 0으로 나누려고 시도하여 프로그램이 종료 됩니다.



3

> <> , 27 26 16 + 1 = 17 바이트

:r:{%:n','o-$,n;

노트

  • 를 사용하여 입력 -v플래그를 하십시오 (예는 TIO 참조).
  • 나머지를 먼저 출력 한 다음 쉼표와 마지막으로 정수 나누기를 출력합니다.

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

설명

참고 스택으로 시작되는 A, B곳 A과 B의 때문에, 제 1 및 제 2 입력을 나타내는 -v플래그를 사용 하였다.

:r:{%:n','o-$,n; # Explanation
:r:{             # Do some stack modifications to prepare it for
                 #    next part
                 #    (Stack: B, A, A, B)
    %            # Take the modulo of the top two items
                 #    (Stack: B, A, A%B)
     :           # Duplicate it
                 #    (Stack: B, A, A%B, A%B)
      n          # Pop once and output as number
                 #    (Stack: B, A, A%B)
       ','o      # Print separator
                 #    (Stack: B, A, A%B)
           -     # Subtract the modulo from the first input
                 #    (Stack: B, A-A%B)
            $,   # Swap the two inputs so they are back in order
                 #     and divide, so we get an integer
                 #    (Stack: floor(A/B))
              n; # Output that as a number and finish.

최대 255 개의 입력 값을 어떻게 제공 할 수 있습니까?
— Leo

더 높은 ASCII / 유니 코드 값만 사용하십시오. 그렇게 į하면 255가됩니다.
— Luke

Ok, nice :) 그건 그렇고, 명령 줄에서 -v 플래그로 직접 입력 번호를 얻는 것이 더 짧지 않습니까?
— Leo

그것은 TIO에서 작동하도록 할 수 없었 으므로이 솔루션으로 해결했습니다. 8 바이트-1을 저장합니다 ( -v플래그의 경우).
— Luke


3

C, 21 바이트

#define f(a,b)a/b,a%b

f (a, b)를 쉼표로 구분 된 2 개의 용어로 바꾸는 매크로입니다. 함수에 전달하는 것이 더 좋지만 2를 따로 선택할 방법이 없습니다.

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


3

하스켈 , 21 바이트

a#b=(div a b,mod a b)

온라인으로 사용해보십시오!사용법 예 : 13#2returns (6,1). 예, 이것은 꽤 지루하지만 조금 더 재미 있습니다divMod , 동일한 기능을하는 내장 있습니다.

우리가에있는 동안,도있다 quot, rem그리고 quotRem어떤은 자연수에 동일하게 동작 div, mod및 divMod. 그러나 음수 입력의 경우 결과 mod는 제수와 같은 부호를 갖지만 결과 는 피제수 rem와 동일한 부호를 갖습니다. 그것이 넣어대로 또는 서곡 문서 , quot0으로 잘립니다 정수 나누기이며, div음의 무한대를 향해립니다 부문의 정수입니다.


아니오 div또는 mod내장 기능은 어떻습니까?

빌드 인 없음, 36 32 31 바이트

a#b|a<b=(a,0)|m<-a-b=(+1)<$>m#b

온라인으로 사용해보십시오! 사용법 예 : 13#2returns (1,6), 즉 mod결과는 첫 번째이고 결과는 div두 번째입니다. 경우 a작은 b, 다음 a mod b입니다 a및 a div b입니다 0, 그래서 (a,0)반환됩니다. 그렇지 않으면 반복적으로 계산 mod하고 div의 a-b와 b, 추가1 분할 결과에 나머지를 유지한다.

나눗셈 결과에 1을 추가 <$>하는 것은 map목록을 통해 함수를 매핑 하는 데 일반적으로 사용 되지만 튜플에서도 작동하지만을 사용하여 수행되지만 함수는 두 번째 튜플 요소에만 적용됩니다.

편집 : xnor 덕분에 1 바이트를 절약했습니다!


2
두 번째 솔루션은 <$>튜플을 사용하여 두 번째 요소에 작용 하여 바이트를 면도 할 수 있습니다 a#b|a<b=(a,0)|m<-a-b=(+1)<$>m#b.
— xnor

3

SWI 프롤로그, 109 바이트

p(A):-print(A).
d(F,S,0,F):-S>F.
d(F,S,D,R):-G is F-S,d(G,S,E,R),D is E+1.
d(F,S):-d(F,S,D,R),p(D),p(-),p(R).

산출:

?- d(255,25).
10-5
true .
?- d(5,7).
0-5
true .

기술:

내장 분할 또는 모듈로가없는 간단한 재귀 알고리즘. "두 번째 숫자를 첫 번째 숫자에 몇 번 맞추는가?" 나머지 (R)와 결과 (D로 통일)를보고합니다.

// 편집 : 불필요한 공간 제거


PPCG에 오신 것을 환영합니다! 나는 전에 Prolog를 사용한 적이 없지만 :-마지막 줄 에는 공백이 있지만 다른 줄 에는 공백이 없다는 것을 알았습니다 . 그들은 어떤 이유로 거기에 필요합니까? 필요한 공간이 없다고 제안 E + 1하면서도 마찬가지 F-S입니다.
— Laikoni

Laikoni : 당신은 확실히 맞아! 방금 공백을 제거하고 최종 바이트 수를 업데이트했습니다.
— Jan Drozen 2016 년


2

MATL, 5 바이트

/k&G\

MATL Online 에서 사용해보십시오 !

설명

        % Implicitly grab the two inputs as numbers
/       % Divide them
k       % Round down the result
&G      % Grab the two inputs again
\       % Compute the remainder

2

우로 보로스 , 15 바이트

r.r.@/Inao\%n1(

숫자를 역순으로 취합니다 (예 :) 10 42. 여기에서 시도하십시오.

설명

r.r.             Read a number, duplicate, read a number, duplicate
    @            Rotate a copy of the first number to the top of the stack
     /I          Divide and truncate to integer
       n         Output as number
        ao       Push 10 and output as character (newline)
          \%     Swap the remaining two values and take the mod
            n    Output as number
             1(  Push 1 and swallow that many characters from the end of the program,
                 halting execution
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.