나는 소스 코드를 반대로해서 출력을 부정한다!


39

당신의 임무는 당신이 그것을 받아들이고 싶다면 0이 아닌 숫자를 출력하는 프로그램을 작성하는 것입니다 (정수 또는 부동 수 있습니다). 까다로운 부분은 소스 코드를 뒤집 으면 출력이 원래의 정수를 무시해야한다는 것입니다.

규칙

  • 당신은 전체 프로그램을 구축해야합니다 . 즉, 출력을 STDOUT으로 인쇄해야합니다.

  • 두 숫자는 모두 10 진수 여야합니다 (다른베이스 또는 과학적 표기법으로 출력하는 것은 금지됨).

  • 후행 / 선행 공백으로 숫자를 출력 할 수 있습니다.

  • 이것은 코드 골프이므로 각 언어에서 가장 짧은 (원본) 코드가 승리합니다!

  • 기본 허점이 적용됩니다.

소스 코드가 ABC있고 해당 출력이 4입니다. CBA대신 쓰고 작성 하면 출력은이어야합니다 -4.


6
바이트 수준이 아닌 비트 수준에서 역전시킬 수 있다면 1 바이트 -(0x45 = 0b00101101)는 Jelly에서 작동 -합니다. 리터럴은 -1을 정의하므로 -1을 생성하는 반면, (0xB4 = 0b10110100)은 논리를 수행하지 않기 때문에 1을 생성합니다. 암시 적 입력 0. (물론 잘 작동합니다 : p)
Jonathan Allan

@TwilightSparkle "사용되지 않은 빈 입력이 있음"은 EOF에 즉시 도달하는 입력 기능에 의존 할 수 있습니까?
Borka223

1
아니요. 그렇지 않을 수도 있습니다.
방사능

@JoKing 복사. 제거하겠습니다.
HighRadioactive

답변:



28

자바 스크립트 (V8) , 19 바이트

print(1)//)1-(tnirp

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


거의 같은 ...

C # (Visual C # 대화식 컴파일러) , 19 바이트

Print(1)//)1-(tnirP

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

(@someone에게 지적 해 주셔서 감사합니다)


여전히 거의 동일합니다 ...

루아 , 19 바이트

print(1)--)1-(tnirp

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


그러나 더 짧은 ...

파이썬 2 , 15 바이트

print 1#1-tnirp

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


이 마법 인쇄 도구가 있기 때문에 PHP에서 더 짧습니다 : <?=...

PHP , 12 바이트

<?=1;#;1-=?<

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


inspect인쇄하지 않고 루비에서 더 짧습니다.

루비 , 8 바이트

p 1#1- p

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


또한 C # Interactive Print(1)//)-1(tnirP. ( 온라인으로 사용해보십시오! )
누군가

C #의 경우 가장 짧은 프로그램은 사소한 것일 수 있습니다.class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
LegionMammal978

프로그래밍 언어는 아니지만 1<!--!<1-HTML을 사용하여 (9 바이트) 할 수 있습니다 -1<!--!<1. 그것은 당신의 대답과 정확히 동일합니다.
Ismael Miguel

: 루아에서 대부분 동일print(1)--)1-(tnirp



12

/// , 4 바이트

9/9-

출력 9.

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

역전 :

-9/9

출력 -9.

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

/나머지는 무시되는 동안 이전의 모든 것이 인쇄되지만 실제로 사용되는 슬래시는 많이 발생하지 않으므로 정확히 무슨 일인지 알지 못하지만 아무것도 출력하지 않습니다.


2
슬래시 사용시 +1 는 /패턴 - 읽기 프로세스를 시작하고, 따라서, 그 이후 문자가없는 출력 패턴으로 읽혀질 수있다.
HighRadioactive

2
나는 생각해 내고 /\-//1-영리하다고 생각했다. : D
Tanner Swett


10

공백 , 21 바이트

S S S T N
T   N
S T N
N
N
T   S N
T   N
T   T   S S 

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.

출력 1/ -1.

온라인으로 시도 하거나 온라인에서 반대로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만 사용).

설명:

이용 종료 프로그램을 짧은 회문있는 내장 NNN.
정규 프로그램은 :

SSSTN  # Push 1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

리버스 프로그램은 :

SSTTN  # Push -1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

숫자 푸시에 대한 작은 추가 설명 :

  • 첫 번째 S: 스택 조작 사용
  • 둘째 S: 숫자를 스택에 푸시
  • S또는 T: 각각 양 / 음
  • 일부 S/ T뒤에 후행 N: 이진수의 숫자, 어디서 S=0그리고T=1

SSTTSTSN못살게 굴지 -10.


7

T-SQL, 16 바이트

--Forwards:
PRINT 4--4-TNIRP

--Backwards:
PRINT-4--4 TNIRP

1이 과도하게 사용되어 4를 선택했습니다 :)


1
궁금하다면 MySQL의 대답은 select 1#1-tceles(17 바이트)입니다. sqlfiddle.com/#!9/9eecb/107825 에서 결과를 확인할 수 있습니다 .
Ismael Miguel

7

Japt , 2 바이트

단일 자리 정수 >0의 대신에 사용될 수있다 2같은 CAN A-G, H, I, J또는 L( 10-16, 32, 64, -1100, 각각).

n2

그것을 테스트 | 반전

n정수인가 방법은, 감산 인수로부터 정수되는 디폴트에 전달한다는 0. 앞으로 실행될 때, n메소드는 내재 된 첫 번째 입력에서 실행되며 기본값은로 설정됩니다 0.

또는 적용되는 정수에서 인수를 뺀 결과의 부호를 나타내는 g대신 이 메소드를 사용할 수 있습니다 n.


7

주석이없는 Haskell , 41 바이트

인쇄 1+ 개행을 전달합니다 .

main=print$!1
niam=main
"1-"!$rtStup=niam

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

-1줄 바꿈이없는 반전 인쇄 (2 바이트의 비용으로 추가 가능) :

main=putStr$!"-1"
niam=main
1!$tnirp=niam

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

  • 각 프로그램의 첫 줄은 번호를 인쇄합니다.
    • 들어 -1문자열 출력은 괄호를 방지하기 위해 사용된다.
    • 사용 $!반전 된 라인을 대신 공간 (엄격한 응용 프로그램)을 허용하는 것은 운영자의 유효한 정의로 !$(단지 $재정의가 사용을 중단 것이기 때문에하지 않을 것이다).
  • 가운데 줄은 niam마지막 줄에 대해 정의됩니다.
  • 마지막 줄은 operator의 정의이며 !$사용되지는 않지만 올바르게 구문 분석하고 유형을 확인해야합니다.

7

PHP , 15 13 바이트

주석 남용이없는 PHP 버전. ohce정의되지 않은 상수이므로 이름의 문자열 값과 같습니다. 결과적으로 인쇄 +1-'ohce'또는 -1+'ohce'반전 이 시도됩니다 . 이후 'ohce'비 수치가 0이 연산에 대신 만한다 1또는 -1인쇄한다.

;echo+1-ohce;

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

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


영리 해요 좋은!
AdmBorkBork

1
남자, 내가 당신이 3 시간 늦게 :( 내 upvote에 있으로 같은 대답에 도착했습니다 슬픈입니다.
이스마엘 미구엘




6

Cubix , 7 6 5 바이트

@)O(@

여기를보십시오
반전

설명

Cubified :

  @
) O ( @
  .

제어 흐름을 풀면을 실행 )O(@하여 증가, 출력, 감소 및 종료합니다.

역전 및 배양 :

  @
( O ) @
  .

제어 흐름을 풀면을 실행 (O)@하여 감소, 출력, 증가 및 종료합니다.

이전 버전

@O(.)O@

여기를보십시오
반전

짧지는 않지만 심미적으로 즐겁습니다.


크기 1 큐브에 넣는 것이 좋습니다!
주세페

3
@)O(@5 바이트 및 대칭 복원 :)
MickyT

5

룬 마법 , 4 바이트

1@Z1

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

1바이트를 희생하더라도 명령 을 재사용 할 수있는 방법을 찾지 못했습니다 .

1@ɩ 작동하지만 바이트 수는 같습니다.


입력이 왜 필요한가요? 문제는 프로그램이 입력을 가져서는 안된다고 말했습니다.
HighRadioactive

@TwilightSparkle 내가 잘못 읽고 이미 해결
Draco18s

그래 영리한.
방사능


5

스택 고양이 -mn , 4 바이트

:-:_

온라인으로 사용해보십시오! 바닥 글에는 다른 모든 4 바이트 솔루션이 포함되어 있습니다. (스택 고양이는 첫 줄 바꿈 후 모든 것을 무시합니다.)

반대로 시도하십시오!

설명

-n숫자 출력에 플래그 회전 (입력,하지만 우리는 어떤이없는), 그리고 -m플래그는 일반적으로 소스 코드의 중복 부분을 방지 할 수 있습니다 단지 골프 편리합니다. 모든 Stack Cats 프로그램에 미러 대칭이 필요하기 때문입니다. -m깃발을 사용하면 상반기 (중앙 문자 포함) 만 제공합니다. 이렇게 실제 여기 프로그램입니다 :

:-:_:-:

첫 번째 TIO 링크에서 볼 수 있듯이, 4 바이트 솔루션이 많이 있지만 단순성을 위해이 솔루션을 선택했습니다. Stack Cats는 스택 기반이며이 프로그램은 초기 스택 만 사용합니다. 입력이 없기 때문에 -1, 무한정의 제로 위에 단일 (EOF 마커)이 포함됩니다. 프로그램의 세 가지 명령은 다음과 같은 의미를 갖습니다.

:   Swap the top two stack elements.
-   Negate the top stack element (i.e. multiply by -1).
_   Pop a. Peek b. Push b-a.

프로그램이 스택을 수정하는 방법은 다음과 같습니다 (상태와 명령은 각 명령이 스택을 한 상태에서 다음 상태로 변경하는 방법을 나타 내기 위해 스 태거됩니다).

   :   -   :   _   :   -   :

-1   0   0  -1   1   0   0   1
 0  -1  -1   0   0   1   1   0
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

실제로 여기서 실제로 수행하는 유일한 명령은 _EOF 마커를로 변환하는 것 1입니다. 프로그램 끝의 출력은 암시 적이며 EOF 마커는 선택 사항이므로 1우리가 얻는 것을 인쇄합니다 .

이제 암시 적 미러링으로 인해 소스 코드를 되 돌리면 실제 프로그램은 다음과 같습니다.

_:-:-:_

이것은 매우 다른 일을합니다.

   _   :   -   :   -   :   _

-1   1   0   0   1  -1   0  -1
 0   0   1   1   0   0  -1  -1
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

이번에는 스택 맨 아래 여전히 -1EOF 마커 역할을하고 -1맨 위만 인쇄됩니다.

...

이제는 Stack Cats가 반전 코드와 고유 한 관계를 가지므로 사용 -m이 약간의 부정 행위 라고 생각합니다 . 일반적으로 소스 코드의 중복 부분을 생략하여 바이트를 절약하는 것이지만 여기서는 실제로 훨씬 더 쉽고 전체 프로그램을 더 짧게 만듭니다. 전체 프로그램을 취소하면 프로그램에가 포함 된 경우에만 프로그램이 변경되기 때문에 프로그램 <>[]에서 여러 스택을 사용하게됩니다 (스택 고양이에는 실제로 스택 테이프가 있으며 초기 스택을 제외한 모든 스택 만 채워집니다) 0으로 시작). 또한 그것을 뒤집 으면 <>and와 []쌍이 바뀌어 실행 대칭이됩니다. 그 대칭을 깰 수있는 유일한 방법은 사용하는 것입니다 I있는 수행 -]또는-[또는 스택 상단의 부호에 따라 아무것도 없습니다. 그래서...


스택 고양이 -n , 11 바이트

*|]I*:*I[|*

온라인으로 사용해보십시오! 바닥 글은 동일한 바이트 수로 다른 모든 대안을 다시 포함합니다. 출력 1 / -1 중 일부는 출력 후 2 / -2 출력됩니다. 나는 이것을 2를 출력하는 것 중 하나로 무작위로 설명하기 위해 이것을 선택했습니다.

반대로 시도하십시오!

설명

내가 말했듯이, 이것은 조금 더 길다. 우리가 사용했다하더라도 -m이에 대한 표기를 대신 4 위의 6 바이트에서 무게가 나간다 것입니다.

이번에 사용되는 명령 :

*   Toggle the least significant bit of the top of the stack.
|   Reverse the longest non-zero of prefix on this stack.
[]  Move one stack to the left/right and take the top of the current stack with you.
I   If the top of the stack is positive, -], if it's negative, -[, otherwise do nothing.
:   Swap the top two stack elements.

첫 번째 프로그램은 두 개의 스택 만 사용합니다. ASCII 아트에서는 약간 지저분하지만 최선을 다할 것입니다. 대괄호는 테이프 헤드가있는 스택을 나타내며 각 스택 상태 쌍 사이에 명령을 넣습니다.

  [-1]
…   0   0   …
    0   0
    …   …

      *

  [-2]
…   0   0   …
    0   0
    …   …

      | (does nothing)
      ]

      [-2]
…   0   0   …
    0   0
    …   …

      I

   [2]
…   0   0   …
    0   0
    …   …

      *

   [3]
…   0   0   …
    0   0
    …   …

      :

   [0]
…   3   0   …
    0   0
    …   …

      *

   [1]
…   3   0   …
    0   0
    …   …

      I

      [-1]
…   3   0   …
    0   0
    …   …

      [

  [-1]
…   3   0   …
    0   0
    …   …

      |

  [ 3]
…  -1   0   …
    0   0
    …   …

      *

  [ 2]
…  -1   0   …
    0   0
    …   …

이제 -1EOF 마커 역할을하고 2인쇄됩니다.

다른 프로그램은까지 동일합니다 [. 두 번째까지 거의 동일합니다 I. 우리는 기술적으로 다른 스택에 있지만 값이 없으면 구별 할 수 없습니다. 그러나 사이의 차이 I[I]mattering 끝 :

    *|[I*:*I

      [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        ]

          [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        | (does nothing)
        *

          [-2]
…   3   0   0   …
    0   0   0
    …   …   …

그리고 이번에는 EOF 마커가 없지만 프로그램은 여전히을 출력합니다 -2.



4

CJam , 3 바이트

W;1

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

작동 방식

일반 버전 :

W    e# Push -1
;    e# Delete
1    e# Push 1
     e# Implicit display

역 버전 : 당신은 아이디어를 얻습니다.


4

MATL , 3 바이트

Nqv

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

작동 방식

표준:

N   % Push number of elements in the stack: 0
q   % Subtract 1: gives -1
v   % Concatenate stack contents vertically: leaves -1 as is
    % Implicit display stack contents

역전 :

v   % Concatenate stack contents vertically: gives the empty array, []
q   % Subtract 1: leaves [] as is
N   % Push number of elements in the stack: 1
    % Implicit display. [] is not displayed


4

헥사 고니 , 5 바이트

1!@!(

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

유효한 프로그램은 다음과 같아야합니다.

  • 종료 명령이 있습니다 ( @또는 :). 후자는 메모리 포인터 이동 명령이있을 때 전자에 대해서만 다릅니다. 또한이 명령은 첫 번째 또는 마지막 바이트에 있어서는 안됩니다.
  • 출력 명령이 있습니다. ( !, ;또한 가능하지만 아마도 바이트 이상 걸릴 것)
  • 메모리 조작 명령이 있습니다.

따라서 2 바이트 프로그램은 분명히 불가능합니다. 두 번째 바이트는 종료 명령이어야하고 첫 번째 바이트는 미러 / IP 조작 명령이 아니어야하므로 3 바이트 프로그램은 불가능합니다. 따라서 1 바이트 만 실행할 수 있습니다.

4 바이트 프로그램은 불가능하다고 생각합니다. 이러한 프로그램은 a@bc6 각형 그리드 형식이어야합니다.

 Forward:       | Backward:
                | 
  c b           |   a @
 @ a .          |  b c .
  . .           |   . .

따라서 aIP 리디렉션 명령이어야합니다. 그러나 하나의 메모리 조작 명령으로 양수와 음수를 모두 생성하는 것은 불가능합니다.


사소한 답변에서 최적의 증거로 +1
Jo King



3

Java 5 또는 6, 127 67 바이트

enum A{A;{System.out.print(9);}}//}};)9-(tnirp.tuo.metsyS{;A{A mune

출력 9/ -9.

Java 5 또는 6을 사용할 수 없으므로 온라인 컴파일러가 없습니다.

그러나이 127 바이트 Java 8에 해당하는
것을 시도 할 수 있습니다 . 온라인으로 시도 하거나 온라인에서 반대로 시도하십시오 .

설명:

enum A{                              // Create an enum
 A;                                  //  With a mandatory value
 {                                   //  And in a separate instance code-block:
  System.out.print(9);}}             //   Print 9 to STDOUT
//}};)9-(tnirp.tuo.metsyS{;A{A mune  // Comment and thus a no-op

Java 5 및 6에는 프로그램의 필수 주 방법이 누락되었지만 열거 형 내에 코드 블록을 만들어 무언가를 수행 할 수있는 버그가 있습니다. 오류가 발생합니다.

java.lang.NoSuchMethodError :
스레드 "main"의 주요 예외

그러나 여전히 STDOUT에 원하는 것을 출력하므로 무시할 수 있습니다 .


3

Golang , 109 바이트

package main;import "fmt";func main(){fmt.Println(1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

그리고 그 반대 :

package main;import "fmt";func main(){fmt.Println(-1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

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


2
Go를 모르지만 몇 바이트를 제거 할 수있는 것 같습니다. 이 Println될 수 있습니다 Print, 그리고이 import "fmt";공간을 필요로하지 않습니다 import"fmt";. :)
Kevin Cruijssen


3

레티 나 , 6 바이트

-`<
-

인쇄 1합니다.

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



-
<`-

인쇄 -1합니다.

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

설명: 1

-`<
-

이것은 ... 아무것도하지 않습니다. 로 인해 ( `에서 아무것도 수행하지 않는 configuration) 에서 <를 대체 하지만 입력이 비어 있으므로 출력도 비어 있습니다.--


그리고이 두 번째 단계는 빈 정규 표현식을 빈 입력과 일치시키고 일치하는 수를 계산합니다. 정확히 1입니다. 출력은 암시 적입니다.

설명: -1


-

이번에는 빈 정규식을로 바꿉니다 -. 이것은 실제로 빈 입력을 단일로 바꿉니다 -.

<`-

여기서 구성은 실제로 무언가 <를 수행합니다. 스테이지를 실행하기 전에 스테이지의 입력을 인쇄하므로을 인쇄합니다 -. 그런 -암시 출력에 다시 1. 때문이다 단계의 입력에 하이픈을 계산, 이것은을 인쇄 1애프터 -우리를주고, -1필요에 따라.


3

TEX(MathJax), 4bytes

1%1-

CodeResultForward:1%1-1Backward:-1%11


3

brainfuck , 156 바이트

+++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++

온라인으로 사용해보십시오! / 정 / 배쉬에서 뒤로 검증

인쇄 -1앞으로 \n1뒤로.

거의 사소한 일 임에도 불구하고 이것이 특정 고정 출력에 대한 최적의 솔루션이라고 생각합니다.

증명:

  • 프로그램은 [또는을 가질 수 없습니다 ].

    따라서 프로그램 형식이 있어야합니다 <A> . <B> . <C>.

  • 또는 의 수를 늘리지 않고 각각 ,을 충분한 수로 교체 할 수 있습니다 .<+-

  • 각각 +은 정방향 또는 역방향 프로그램에서만 유용하며 둘 다에서는 결코 유용하지 않습니다.

    증명 : +A 부분에서는 분명히 정방향 프로그램 +에서만 유용하고 C 부분에서는 분명히 역방향 프로그램에서만 유용합니다.

    나타내고 shift(P)= 수를 <P에서 - 수 >P. 프로그램을 고려으로는 <B> = <D> + <E>상기 +중간 순방향 프로그램에 유용 shift(E) = 0, 마찬가지로 역방향 프로그램에서 유용합니다 shift(D) = 0. 그러나 shift(D) = shift(E) = 0프로그램 B이 정방향 또는 역방향으로 실행되면 두 번째로 인쇄하기 전에 현재 셀에 고정 값을 추가합니다 ord('1') - ord('\n') != ord('1') - ord('-').

따라서 프로그램에는 ord('-')+ord('1')+ord('\n')+ord('1') = 153 +s, .2s 이상, < >또는 a 이상이 ,필요 shift(B) != 0합니다.

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