기수 코드 도전


24

태스크

당신은 나침반을 만드는 일을 맡고 있습니다.

다른 방향으로 달리면 뚜렷한 출력을 생성하는 나침반 "바늘"이라고 소스 코드를 상상해보십시오.

지원되는 소스 코드 방향은 North, East, South 및 West입니다.

소스 코드가 있다고 가정 해 봅시다.

ABCD
 J K
WXYZ

우리는 이것을 북쪽 방향으로 간주하고 시계 방향으로 90도 회전하면 동쪽을 가리 킵니다.

W A
XJB
Y C
ZKD

남쪽을 다시 회전하면

ZYXW
K J 
DCBA

마지막으로 서쪽으로의 마지막 회전 :

DKZ
C Y
BJX
A W

실행될 때, 위의 각 코드 예제는 사용자가 선택한 하나의 고유 한 인쇄 가능한 ASCII 문자를 출력해야 합니다.

노트

귀하의 코드는 입력되지 않습니다.

회전 할 때 빈 공간이나 줄 바꿈이 사라지거나 사라지지 않습니다.

출력에서 선행 / 트레일 링 새 줄은 괜찮습니다.

답은 전체 프로그램 또는 함수일 수 있으므로 STDOUT으로 출력되거나 함수 결과를 리턴합니다.

표준 규칙이 적용됩니다. 바이트 단위의 최단 답변이 승리합니다!


하나 이상의 문자를 출력 할 수 있습니까?
Mr. Xcoder

1
완벽한 사각형이되도록 코드를 공백으로 채워야합니까? 예를 들어, 같은 모양 된 코드 것 첫 번째가 제출 감안할 때, 유효?
비즈니스 고양이

2
출력 사양과 별도로, 나는 이것이 중복
Digital Trauma

1
@BusinessCat 사각형을 만들기 위해 코드를 채울 필요는 없습니다. 제공 한 예제는 유효합니다.
CzarMatt 17

4
@ Mr.Xcoder 음, 어떻게 4 개의 동일한 프로그램이 4 개의 다른 ASCII 문자를 인쇄 할 수 있습니까?
ETHproductions

답변:


20

젤리 , 2 바이트

*2

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

Jelly 프로그램의 주요 항목은 마지막 링크이며, 줄 바꿈 문자는 링크를 분할합니다) 두 줄 프로그램은 실제로 최상위 링크에 액세스하지 않습니다.

암시 적으로 결과를 인쇄하는 네 가지 전체 프로그램은 다음과 같습니다.

북쪽 :

*2   -> (implicit) zero raised to the power of 2 = 0

동쪽 :

*
2    -> literal 2 = 2

남쪽 :

2*   -> two raised to the power of (implicit) 2 = 4

서쪽 :

2
*    -> (implicit) zero raised to the power of (implicit) zero = 1

1
이것이 최종 답변입니다. 잘 했어.
아웃 골퍼 에릭

19

Japt , 3 2 바이트

gy

어떻게 , 나는 매우 해킹 된 2 바이트 솔루션을 발견했습니다 ...


북쪽 출력 0:

gy

암시 적 입력이 없으므로 기본값은 0입니다. g숫자에 대해서는 인수에 관계없이 숫자의 부호를 반환합니다 ( "y"이 경우).


동쪽 출력 2:

g
y

여러 줄 프로그램에서 첫 번째 줄은 입력을 결과로 설정합니다. gon 이기 때문에 이것은 기본적으로 no-op 0입니다 0. 그런 다음 and ... y의 GCD를 반환합니다 0. 인수가 없기 때문에 기본값은 2(감사합니다, @Oliver !). 이것은 2출력으로 제공 됩니다.


남쪽 출력 g:

yg

y이전과 마찬가지로 GCD입니다. 이후 GCD (0, x)를X , 어떤 값 y0단지 인수를 반환 자유 걸린다. 이 경우 인수는 "g"입니다 (결과).


웨스트 출력 1:

y
g

y이전과 마찬가지로 0에서을 반환합니다 2. 그런 다음 g(이미 논의 된 바와 같이) 숫자의 부호 함수 인으로 전달됩니다. 따라서 결과는 1입니다.


8

Java (OpenJDK 8) , 7309 4421 855 바이트

Leaky Nun 덕분에
-2888 바이트, Wheat Wizard 덕분에 -3566 바이트

//i/////////////////////////////////////////////////////////////
//n//////////////////////////////////////////////////////////////////
interface M{static void main(String[]a){System.out.println(0);}}/////
//e//}};)2(nltnirp.tuo.metsyS{)a][gnirtS(niam diov citats{M ecafretni
//r//////////////////////////////////////////////////////////////////
//f}/////////////////////////////////////////////////////////////////
//a}//
//c;//
//e)//
// 3//
//M(//
//{n//
//sl//
//tt//
//an//
//ti//
//ir//
//cp//
// .//
//vt//
//ou//
//io//
//d.//
// m//
//me//
//at//
//is//
//ny//
//(S//
//S{//
//t)//
//ra//
//i]//
//n[//
//gg//
//[n//
//]i//
//ar//
//)t//
//{S//
//S(//
//yn//
//si//
//ta//
//em//
//m //
//.d//
//oi//
//uo//
//tv//
//. //
//pc//
//ri//
//it//
//na//
//tt//
//ls//
//n{//
//(M//
//1 //
//)e//
//;c//
//}a//
//}f//
///r//
///e//
 //t//
 //n//
 //i//

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

구 버전

코드 ^ 2 정사각형을 감싸는 주석이 포함 된 간단한 접근 방식으로 거의 모든 언어로 수행 할 수 있습니다.
파이썬에서 (더 읽기 쉬운) 예제

##p#####
# r  2 #
print 1#
# n  t #
# t  n #
#4 tnirp
# 3  r #
#####p##

훌륭한 일반적인 접근 방식, 이제는 그 방법을 알아야합니다! :)
flawr

interface M{static void main(String[]a){System.out.println(0);}}대신 바이트를 저장하는 데 사용할 수 있습니다 .
Leaky Nun


1
@MagicOctopusUrn 그것은 손으로하지 않았다 c;
Rod

1
@MagicOctopusUrn nah, 나는이 알고리즘을 보여주기 위해이 답변을 만들었습니다. 언어는 관련이 없습니다 : 3
Rod

7

Brain-Flak , 33 바이트

##)(##))()()  ((
((  ))##    ()##

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

Brain-Flak , 33 바이트

##)     ## #
(( ))#)())()
  # ( (

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

Brain-Flak , 36 바이트

#)##     ## #
  (())#)())()
 #   ( (

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

Brain-Flak , 38 바이트

######  (#
(()()())#))((
       #(  ##

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

Brain-Flak , 41 바이트

##(#####(#
(()()())#
##))()((
####((#)#)#

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


이런 세상에! 나는 하나에서 일하고 있었지만 어디서나 갈 수 없었습니다. 나는 무언가를 알아내는 데 적어도 30-40 분이 걸릴 것이라고 생각했습니다. 이것은 놀랍다!
DJMcMayhem

1
이것은 매우 멋지다!
CzarMatt

당신을 골프로하려고 : P 지금까지 3 명 중 1 명
Christopher


5

Befunge, 17 13 바이트

나는 Befunge가 기하학적 문제로 재미있을 것이라고 생각했습니다. 여기 다른 사람들과 비슷한 사소한 4x4 솔루션이 있지만 (3 개의 명령이 필요함) 조금 더 잘 관리했습니다.

편집 : 줄 바꿈을 잊어 버렸습니다.

편집 2 : 고양이를 만들 수 있다는 것을 깨달았습니다.

편집 3 : 고양이는 죽었다

2v3
@.v
.  
1@.

RIP 키티 : <

1.@ 2
^._.^
3 @.4

5

05AB1E , 5 3 바이트

Y'X

북쪽 , 동쪽 , 남쪽 , 서쪽


인상적이었습니다.
CzarMatt

@MagicOctopusUrn 나는 효과가 있다고 생각 Y'X하지만 여전히 시도해야합니다.
Riley

@Riley, 앞뒤로 작동하며 Y'X유효합니다. 그래도 2 바이트를 찾고 있습니다. 어떤 '점 명령'도 작동하지 않으므로 의심의 여지가 있습니다.
Magic Octopus Urn

@MagicOctopusUrn 줄 바꿈이 작동하는 방식으로 2 바이트 솔루션이 있다고 생각하지 않습니다. 그러나 힘을 무차별하게하는 것은 어렵지 않습니다.
Riley

10출력에 여러 문자를 허용하면 효과가 있었을 것입니다
Magic Octopus Urn

4

C (GCC) , 283 279 209 바이트

/////////)pm//
/////////;ua//
main(){//}ti//
puts("N"//sn//
);}///////((//
//////////")//
///"//////W{//
///E//////"///
//)"//////////
//((///////};)
//ns//"S"(stup
//it}//{)(niam
//au;/////////
//mp)/////////

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

여기에 동일한 오래된 주석 트릭이 있지만 적어도 C에서는 huuuge를 얻지 못합니다 .)


틈 바로 위의 오른쪽 가장자리에 4 개의 슬래시가 필요합니까?
ETHproductions

이봐 .. 음 ... 사실은 ... 아니. Good catch, thanks :)
Felix Palmen 23

난 당신이 각각 이동하여 상당히 좀 더 긴밀하게 함께 포장 할 수 있다고 생각 );}, 아래 라인 과 같이 (I는 회전하지만 테스트하지 않았습니다)
ETHproductions

아, 실제 코드 뒤에 W여분이 있기 때문에 현재 설정 의 프로그램이 현재 실패 sn합니다. 분명히 pm상단 줄 바로 앞의 슬래시 를 세미콜론 으로 변경하여이 문제를 해결할 수 있습니다 .
ETHproductions

으음 ... 아마 시간이을 삭제하고 다시 시작하려면 : O (첫 번째 버전은 슬래시의 광장이었다, 그러나 나는 생각 나는 "할 거라고 영리 일부 바이트 ... 젠장 절약"일을)
펠릭스 Palmen을을

4

미로 , 9 바이트

!
2@2
 !)

인쇄 0합니다. 온라인으로 사용해보십시오!

 2)
 @!
!2

인쇄 3합니다. 온라인으로 사용해보십시오!

)!
2@2
  !

인쇄 1합니다. 온라인으로 사용해보십시오!

 2!
!@
)2

인쇄 2합니다. 온라인으로 사용해보십시오!

설명

각 프로그램은 첫 번째 비 공백에서 읽기 순서로 시작합니다 (즉, 왼쪽 상단 또는 상단 중앙 문자). 첫 번째 프로그램의 경우 :

!   Print an implicit zero.
    The IP can't move east, so it moves south instead.
2   Push a 2.
    The IP can't keep going south, so it turns east instead.
@   Terminate the program.

두 번째 프로그램의 경우 :

2   Push a 2.
)   Increment it to 3.
    The IP can't keep going east, so it turns south instead.
!   Print the 3.
    The IP can't keep going south, so it turns west instead.
@   Terminate the program.

세 번째 프로그램의 경우 :

)   Increment an implicit zero to 1.
!   Print the 1.
    The IP can't keep going east, so it turns south instead.
@   Terminate the program.

네 번째 프로그램의 경우 :

2   Push a 2.
!   Print the 2.
    The IP can't keep going east, so it turns back around to move west.
2   Push another 2.
    The IP can't keep going west, so it turns south instead.
@   Terminate the program.

4

Wumpus , 7 바이트

O@$
)))

인쇄 0합니다. 온라인으로 사용해보십시오!

)O
)@
)$

인쇄 1합니다. 온라인으로 사용해보십시오!

)))
$@O

인쇄 3합니다. 온라인으로 사용해보십시오!

$)
@)
O)

인쇄 2합니다. 온라인으로 사용해보십시오!

설명

첫 번째 프로그램은 충분 O합니다. 암시 적 0을 인쇄 @하고 프로그램을 종료합니다.

두 번째 프로그램부터 제어 흐름을 이해하기 위해 삼각형 격자 레이아웃을 살펴 봐야합니다.

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

)   Increment an implicit zero to 1.
O   Print the 1.
))  Two irrelevant increments.
@   Terminate the program.

세 번째 프로그램의 경우 :

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

))) Increment an implicit zero to 3.
O   Print the 3.
@   Terminate the program.

네 번째는 정말 펑키 해지는 곳입니다. 점선은 $다음에 의해 생략되어 실행되지 않은 셀을 나타냅니다 .

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

$   Skip the ).
$   Skip the @.
))  Increment an implicit zero to 2.
O   Print the 2.
))  Two irrelevant increments.
@   Terminate the program.

매우 멋진 멋진 다이어그램도 있습니다.
CzarMatt

3

PowerShell , 20 11 바이트

#4#
1#3
#2#

#미친 것처럼 주석 ( )을 남용 하고 파이프 라인에 배치 된 단일 숫자는 그대로 출력됩니다. 위의 내용이 인쇄 1됩니다. 온라인으로 사용해보십시오!

여기에서 각 회전마다 주석의 "왼쪽"에있는 숫자 하나만 생성되므로 회 전당 하나의 숫자 만 출력됩니다.

Wheat Wizard 덕분에 9 바이트 절약 !


PowerShell을 모르는,하지만 것하지 않습니다 작동합니까?
밀 마법사

@WheatWizard 그렇습니다. 감사!
AdmBorkBork

3

별이 빛나는 , 34 바이트

  zz  
  +   
   .  
    + 
      

또는 공백을 하이픈으로 표시하여 다음과 같이 볼 수 있습니다.

--zz--
--+---
---.--
----+-
------

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

별의 명령은 +, .어떤 다른 것들, 그리고 그들이 할 것은 그들 앞에 얼마나 많은 공간에 의해 결정됩니다하십시오 +n 개의 공간에 밀어 N -5 스택, 그리고 .공간 인쇄 그것의 짝수. z의 줄 바꿈이 완전히 무시됩니다.

첫 번째 앞에 6 개의 공백이 +있으므로 6-5 = 1을 누르고 .인쇄합니다.

그리고 회전 :

-----
-----
---+z
--.-z
-+---
-----

온라인으로 사용해보십시오! "8"이 인쇄됩니다.

------
-+----
--.---
---+--
--zz--

온라인으로 사용해보십시오! "2"를 인쇄합니다.

-----
---+-
z-.--
z+---
-----
-----

온라인으로 사용해보십시오! 그리고 이것은 "3"을 인쇄합니다.


정말 깔끔한 언어입니다. 또한 사각형을 만들기 위해 공백으로 채워야한다고 말한 적이 없습니다. 그러나 소스가 공백에 의존하는 경우 공간을 계산해야한다고 가정합니다.
CzarMatt

@CzarMatt, 설명 주셔서 감사합니다! 게시물을 업데이트했습니다.
나무가 아님


2

배치, 90 바이트

 :: :::@:
:&s ohce@
:e   : c:
      :h:
:o     o:
:h:
:c :   w:
@echo n&:
:@::: ::

배치에는 실제로 주석 문자가 없습니다. 전체 줄 주석의 :경우 레이블을 도입하면서 작동하지만 echo반전 될 때 no-op 인 동안 여전히 명령 을 종료 해야하는 것이 필요합니다 . &:여기에 필요한 모든 것이 작동하는 것 같지만 배치를 혼란스럽게 하여 다음 줄에 :앞에 넣지 않으면 오류가 발생 @하고 줄 바꿈을 인쇄하는 것을 잊어 버립니다.


2

MATLAB, 29 17 5 11 바이트

이 질문은 별개의 출력이 아니라 단일 ASCII 문자가 필요하다는 것을 깨달았으므로 다음과 같은 MATLAB 접근법이 있습니다.

%4%
1%3
%2%

회전에 따라 1, 2, 3 또는 4가 암시 적으로 인쇄됩니다.


생각해 보면 MATL에서도 작동합니다. 그래도 같은 바이트 수는 내 것과 같습니다.
Sanchises



1

JS, 17B

//1//
2///4
//3//

출력 :
북쪽 : 2,
동쪽 : 3,
남쪽 : 4,
서쪽 : 0.33333333333….
(2, 3/1, 4, 1/3과 같이)


PPCG에 오신 것을 환영합니다! REPL이 아닌 환경에서 숫자가 표시되지 않으므로 이것이 유효하지 않다고 생각합니다. (내가 틀렸을 수도있다)
Zacharý

(JS 뒤에 REPL을 추가하면 괜찮다고 생각합니다)
Zacharý

1
출력은 인쇄 가능한 단일 ASCII 문자 여야하므로 MATLAB과 마찬가지로 유효하지 않습니다.
Tom Carpenter

1

죄송합니다.

//0//
////
 1/2
/////
//3//

및 28B. 그리고 0.5, 3, 2, 0으로 출력합니다.


PPCG에 오신 것을 환영합니다! 언어 이름과 바이트 수를 헤더에 넣어야합니다. 그리고 이것은 전체 프로그램이나 기능이 아닌 코드 조각이며 유효하지 않습니다. – 내가 틀렸을 수도있다
Zacharý

@ Zacharý 나는 codegolf.meta.stackexchange.com/questions/7842/… 라고 생각 합니다. REPL이 허용 된다고 말합니다
SuperStormer

어느 쪽이든 JS REPL임을 지정해야합니다.
Zacharý

2
출력은 인쇄 가능한 단일 ASCII 문자 여야하므로 MATLAB과 마찬가지로 유효하지 않습니다.
Tom Carpenter

1

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

북쪽은 0, 동쪽은 1, 남쪽은 2, 서쪽은 3을 출력합니다.

////  _//
////  =//
_=>0//>//
  ////1//
  // //
//3////
//>//2>=_
//=  ////
//_  ////


1

MATL , 11 바이트

HxI
xFx
TxK

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

MATL에서 시작하겠습니다. 주요 과제는 스택이 비어 있으면 함수에 입력이 필요한 경우 MATL이 실패한다는 것입니다. 수정과 영리한 아마도 뭔가 좋아 X, Y, Z그리고 &짧은 뭔가를 만들 수 있습니다,하지만 적절한 조합을 찾을 수 없습니다.

설명 : 모든 문자는 스택에서 단일 정수를 푸시 x하고 마지막 정수를 제외한 모든 정수를 제거합니다.



1

C (gcc) , 120 바이트

나는 변종들 사이에 더 많은 시너지 효과를 기대했다.

//}=)f8 ///
// c{(7 ///
   ;rr; //}
        ;c=
78; /// r{)
f(r /// r(f
){r /// ;38
=c;
}// ;rr;
/// 9({c //
/// 6f)=}//

북쪽

동쪽

남쪽

서쪽

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