Thử thách mã Hồng y


24

Bài tập

Bạn chịu trách nhiệm chế tạo một chiếc la bàn.

Hãy tưởng tượng mã nguồn của bạn là "kim" la bàn nơi chạy ở các hướng khác nhau tạo ra đầu ra riêng biệt.

Định hướng mã nguồn được hỗ trợ là Bắc, Đông, Nam và Tây.

Thí dụ

Giả sử bạn có mã nguồn:

ABCD
 J K
WXYZ

Chúng tôi sẽ xem xét hướng Bắc này, xoay 90 độ theo chiều kim đồng hồ hướng chúng ta về phía Đông:

W A
XJB
Y C
ZKD

quay lại điểm Nam:

ZYXW
K J 
DCBA

và cuối cùng, vòng quay cuối cùng về phía Tây:

DKZ
C Y
BJX
A W

Khi được chạy, mỗi ví dụ mã ở trên sẽ xuất ra một ký tự ASCII có thể in riêng biệt mà bạn chọn.

Ghi chú

Mã của bạn sẽ không có đầu vào.

Không gian trống hoặc dòng mới không sụp đổ / biến mất khi xoay.

Hàng đầu / theo dõi dòng mới là ổn trong đầu ra.

Câu trả lời có thể là toàn bộ chương trình hoặc hàm, do đó xuất ra STDOUT hoặc trả về kết quả hàm.

Luật tiêu chuẩn được áp dụng; câu trả lời ngắn nhất trong byte chiến thắng!


Chúng tôi có thể xuất nhiều hơn 1 ký tự không?
Ông Xcoder

1
Chúng ta có phải đệm mã với khoảng trắng để nó là một hình chữ nhật hoàn hảo (và đếm những khoảng trống đó trong điểm số của chúng ta) không? Ví dụ, mã có hình như thế này có hợp lệ không, được đưa ra đầu tiên là mã?
Mèo kinh doanh

2
Ngoài thông số kỹ thuật đầu ra, tôi nghĩ đây là bản sao
Chấn thương kỹ thuật số

1
@BusinessCat Bạn không cần phải điền mã của mình để tạo hình chữ nhật - ví dụ mà bạn cung cấp sẽ hợp lệ.
CzarMatt

4
@ Mr.Xcoder Um, làm thế nào 4 chương trình giống hệt nhau có thể in 4 ký tự ASCII khác nhau?
Sản phẩm ETH

Câu trả lời:


20

Thạch , 2 byte

*2

Hãy thử trực tuyến!

Lưu ý rằng mục chính cho chương trình Jelly là liên kết cuối cùng của nó, trong đó bất kỳ ký tự dòng mới nào cũng sẽ chia liên kết), cả hai chương trình hai dòng này đều không truy cập vào liên kết hàng đầu của chúng.

Bốn chương trình đầy đủ, tất cả đều in kết quả của họ, là:

Bắc :

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

Đông :

*
2    -> literal 2 = 2

Nam :

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

Tây :

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

1
Đây là câu trả lời cuối cùng. Làm tốt.
Erik the Outgolfer

19

Japt , 3 2 byte

gy

Bằng cách nào đó, bằng cách nào đó , tôi tìm thấy một giải pháp 2 byte cực kỳ khó tin ...


Đầu ra phía Bắc0 :

gy

Vì không có đầu vào ngầm định, nó mặc định là 0. gtrên một số trả về dấu của số bất kể đối số của nó ( "y"trong trường hợp này).


Đầu ra phía đông2 :

g
y

Trong một chương trình nhiều dòng, dòng đầu tiên đặt đầu vào thành kết quả của nó. Điều này về cơ bản là không có, vì gtrên 00. Sau đóy trả về GCD của 0và ... vì nó thiếu một đối số, nó mặc định là 2(cảm ơn, @Oliver !). Điều này cho 2là đầu ra.


Đầu ra phía Namg :

yg

y, như trước đây, là GCD. Vì gcd (0, x) x đối với bất kỳ giá trị, yvề 0mất sự tự do của chỉ trở về đối số của nó. Trong trường hợp này, đối số là "g", đó là kết quả.


hướng TâyĐầu ra1 :

y
g

yvào 0, như trước, trả về 2. Điều này sau đó được chuyển đến g, mà (như đã thảo luận) là hàm ký hiệu trên các số. Do đó, kết quả là1 .


8

Java (OpenJDK 8) , 7309 4421 855 byte

-2888 byte nhờ Leaky Nun
-3566 byte nhờ Wheat Wizard

//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//

Hãy thử trực tuyến!

Phiên bản cũ

Aproach đơn giản với các bình luận gói mã ^ 2 hình vuông, điều này có thể được thực hiện bằng hầu hết mọi ngôn ngữ.
một ví dụ (dễ đọc hơn) trong python

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

Thẩm định chung tuyệt vời, bây giờ tôi chỉ cần tìm ra cách để làm điều đó! :)
flawr

Bạn có thể sử dụng interface M{static void main(String[]a){System.out.println(0);}}thay thế để lưu một số byte.
Leaky Nun


1
@MagicOctopusUrn nó không được thực hiện bằng tay c;
Rod

1
@MagicOctopusUrn nah, tôi đã thực hiện câu trả lời này để hiển thị thuật toán này, ngôn ngữ không liên quan: 3
Rod

7

Brain-Flak , 33 byte

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

Hãy thử trực tuyến!

Brain-Flak , 33 byte

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

Hãy thử trực tuyến!

Brain-Flak , 36 byte

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

Hãy thử trực tuyến!

Brain-Flak , 38 byte

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

Hãy thử trực tuyến!

Brain-Flak , 41 byte

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

Hãy thử trực tuyến!


Chúa ơi! Tôi đã làm việc trên một, nhưng tôi không thể đi bất cứ nơi nào. Tôi nghĩ rằng sẽ mất ít nhất 30 - 40 phút làm việc để tìm ra điều gì đó. Thật đáng kinh ngạc!
DJMcMayhem

1
Điều này rất tuyệt!
CzarMatt

Đang cố gắng chơi gôn: P cho đến nay có 3 người trong số họ làm việc
Christopher


5

Befunge, 17 13 byte

Tôi nghĩ Befunge sẽ rất vui cho một vấn đề hình học. Có một giải pháp 4x4 tầm thường gần giống với những người khác ở đây (tôi cần 3 lệnh) nhưng tôi đã quản lý tốt hơn một chút.

Chỉnh sửa: quên về dòng mới

Chỉnh sửa 2: nhận ra tôi có thể tạo ra một con mèo

Chỉnh sửa 3: con mèo đã chết

2v3
@.v
.  
1@.

Mèo RIP: <

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

5

05AB1E , 5 3 byte

Y'X

Bắc , Đông , Nam , Tây


Thật ấn tượng, thật nhanh!
CzarMatt

@MagicOctopusUrn Tôi nghĩ Y'Xsẽ hoạt động, nhưng tôi vẫn phải thử.
Riley

@Riley nó làm, nó cũng hoạt động tiến và lùi, Y'Xcũng hợp lệ. Vẫn đang tìm kiếm 2 byte mặc dù; không có 'lệnh dot' nào hoạt động cho nó, vì vậy tôi nghi ngờ nó tồn tại.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Tôi không nghĩ có một giải pháp 2 byte với cách thức hoạt động của các dòng mới. Mặc dù vậy, sẽ không khó để vũ phu.
Riley

10sẽ hoạt động nếu họ cho phép nhiều nhân vật cho một đầu ra; P. *
Bạch tuộc ma thuật Urn

4

C (gcc) , 283 279 209 byte

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

Hãy thử trực tuyến!

Cùng một mẹo nhận xét cũ ở đây, nhưng ít nhất, trong C điều này không nhận được huuuge ;)


Bạn có cần bất kỳ một trong bốn dấu gạch chéo ở cạnh phải ngay phía trên khoảng trống không?
Sản phẩm ETH

Này .. uhm ... tôi đoán, thực ra ... không. Bắt tốt, cảm ơn :)
Felix Palmen

Tôi nghĩ rằng bạn có thể gói nó lại với nhau chặt chẽ hơn một chút bằng cách di chuyển từng );}dòng bên dưới, như vậy (tôi vẫn chưa kiểm tra các phép quay)
ETHproductions

Ồ, Wchương trình trong thiết lập hiện tại của bạn hiện không thành công vì có thêm snsau mã thực tế. Rõ ràng bạn có thể khắc phục điều này bằng cách thay đổi dấu gạch chéo ngay trước dòng pmtrên cùng thành dấu chấm phẩy.
Sản phẩm ETH

uhh ... có lẽ đã đến lúc xóa cái này và bắt đầu lại: o (phiên bản đầu tiên là một hình vuông của dấu gạch chéo, nhưng tôi nghĩ tôi đã làm một việc " thông minh " để tiết kiệm một số byte ... chết tiệt)
Felix Palmen

4

Mê cung , 9 byte

!
2@2
 !)

In 0. Hãy thử trực tuyến!

 2)
 @!
!2

In 3. Hãy thử trực tuyến!

)!
2@2
  !

In 1. Hãy thử trực tuyến!

 2!
!@
)2

In 2. Hãy thử trực tuyến!

Giải trình

Mỗi chương trình bắt đầu ở phi không gian đầu tiên theo thứ tự đọc (nghĩa là ký tự trung tâm trên cùng bên trái hoặc trên cùng), di chuyển về phía đông. Đối với chương trình đầu tiên:

!   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.

Đối với chương trình thứ hai:

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.

Đối với chương trình thứ ba:

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

Đối với chương trình thứ tư:

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 byte

O@$
)))

In 0. Hãy thử trực tuyến!

)O
)@
)$

In 1. Hãy thử trực tuyến!

)))
$@O

In 3. Hãy thử trực tuyến!

$)
@)
O)

In 2. Hãy thử trực tuyến!

Giải trình

Chương trình đầu tiên đủ dễ dàng: Oin số 0 ẩn và @chấm dứt chương trình.

Bắt đầu từ chương trình thứ hai, chúng ta cần nhìn vào bố cục lưới hình tam giác để hiểu luồng điều khiển:

nhập mô tả hình ảnh ở đây

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

Đối với chương trình thứ ba:

nhập mô tả hình ảnh ở đây

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

Cái thứ tư là nơi nó trở nên thực sự sôi nổi. Các đường đứt nét chỉ ra các ô không được thực thi vì chúng bị bỏ qua bởi $:

nhập mô tả hình ảnh ở đây

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

Siêu mát mẻ, sơ đồ tuyệt vời, quá.
CzarMatt

3

PowerShell , 20 11 byte

#4#
1#3
#2#

Lạm dụng các bình luận ( #) như điên, và thực tế là một số duy nhất được đặt trên đường ống sẽ có đầu ra như hiện tại. Các bản in trên1 . Hãy thử trực tuyến!

Từ đây, bạn có thể dễ dàng thấy rằng mỗi vòng quay chỉ mang lại một số nằm ở "bên trái" của các bình luận, và do đó, chỉ có một số sẽ là đầu ra trên mỗi vòng quay.

Đã lưu 9 byte nhờ Wheat Wizard !


Không biết powershell, nhưng điều này sẽ không hoạt động?
Phù thủy lúa mì

@WheatWizard Vâng, thực sự. Cảm ơn!
admBorkBork

3

Starry , 34 byte

  zz  
  +   
   .  
    + 
      

Hoặc với các khoảng trắng được hiển thị dưới dạng dấu gạch nối để bạn có thể thấy chúng:

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

Hãy thử trực tuyến!

Các lệnh trong Starry là +, .và một số thứ khác, và những gì chúng làm được xác định bởi có bao nhiêu khoảng trắng phía trước chúng: a +với n dấu cách đẩy n −5 đến ngăn xếp và .với số lượng khoảng trắng chẵn in nó. Các zs và dòng mới được bỏ qua hoàn toàn.

Có 6 khoảng trắng trước dấu đầu tiên +để nó đẩy 6−5 = 1 và. in nó.

Và các vòng quay:

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

Hãy thử trực tuyến! Điều này in "8".

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

Hãy thử trực tuyến! Điều này in "2".

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

Hãy thử trực tuyến! Và điều này in "3".


Thật là một ngôn ngữ gọn gàng. Ngoài ra, tôi không bao giờ nói bạn phải đệm với khoảng trắng để tạo thành một hình chữ nhật. Nhưng nếu nguồn của bạn dựa vào khoảng trắng thì tôi cho rằng bạn phải đếm chúng.
CzarMatt

@CzarMatt, cảm ơn đã làm rõ! Tôi đã cập nhật bài viết.
Không phải là một cái cây


2

Mẻ, 90 byte

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

Batch không thực sự có một nhân vật bình luận. Đối với các bình luận toàn dòng, :hoạt động, vì nó giới thiệu một nhãn, nhưng tôi vẫn cần một cái gì đó để chấm dứt echolệnh trong khi không có lệnh khi đảo ngược. &:dường như hoạt động, đó là tất cả những gì tôi cần ở đây, nhưng nó thực sự gây nhầm lẫn cho Batch, lỗi nếu tôi không đặt :trước @dòng tiếp theo và bằng cách nào đó quên không in một dòng mới.


2

MATLAB, 29 17 5 11 byte

Nhận ra rằng câu hỏi yêu cầu các ký tự ASCII đơn lẻ không chỉ là một đầu ra riêng biệt, đây là một cách tiếp cận MATLAB sẽ làm điều đó:

%4%
1%3
%2%

Điều này sẽ ngầm in 1, 2, 3 hoặc 4 tùy theo vòng quay.


Hãy nghĩ về nó, điều này cũng sẽ hoạt động trong MATL. Số byte tương tự như của tôi, mặc dù.
Sanchise



1

Mã số, 17 B

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

Đầu ra:
Bắc: 2,
Đông: 3,
Nam: 4,
Tây: 0.33333333333.
(như trong: 2, 3/1, 4, 1/3)


Chào mừng đến với PPCG! Tôi không nghĩ rằng điều này là hợp lệ, vì trong môi trường không phải REPL, số sẽ không được hiển thị. (Tôi có thể sai ở đó)
Zacharý

(Chỉ cần thêm REPL sau JS, sau đó tôi nghĩ nó ổn)
Zacharý

1
Đầu ra phải là một ký tự ASCII có thể in được, do đó, giống như MATLAB của tôi, điều này không hợp lệ.
Tom Carpenter

1

Xin lỗi, ý mình là:

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

và 28B. Và đầu ra là 0,5, 3, 2, 0.


Chào mừng đến với PPCG! Bạn nên đặt tên ngôn ngữ và số byte trong một tiêu đề. Và đây là một đoạn mã, không phải là một chương trình đầy đủ hoặc một chức năng, không hợp lệ. (Tôi có thể sai)
Zacharý

@ Zacharý Tôi nghĩ rằng codegolf.meta.stackexchange.com/questions/7842/ cảm nói rằng REPLs được cho phép
SuperStormer

Dù bằng cách nào, họ nên xác định rằng đó là một REPL.
Zacharý

2
Đầu ra phải là một ký tự ASCII có thể in được, do đó, giống như MATLAB của tôi, điều này không hợp lệ.
Tom Carpenter

1

JavaScript (ES6), 86 byte

Đầu ra 0 cho Bắc, 1 cho Đông, 2 cho Nam và 3 cho Tây.

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


1

MATL , 11 byte

HxI
xFx
TxK

Hãy thử trực tuyến!

Hãy bắt đầu điều này trong MATL. Thách thức chính là MATL chỉ thất bại nếu một hàm yêu cầu đầu vào nếu ngăn xếp trống. Có lẽ một cái gì đó thông minh với các hiệu ứng như X, Y, Z& có thể làm cho một cái gì đó ngắn hơn, nhưng tôi không thể tìm thấy một sự kết hợp phù hợp.

Giải thích: tất cả các ký tự đẩy một số nguyên duy nhất trên ngăn xếp và xloại bỏ tất cả chúng nhưng cuối cùng.


1

Perl, 49 byte

Mã 48 byte + 1 cho -p.

Giả sử đầu vào trống mà TIO không hỗ trợ, do đó, một dòng mới được thêm vào vị trí của nó và không được sử dụng. In N , E , S , W .

# ####
#S= _$
#; W#
 $_=N#
#_ _#
#= $#
#E#
 ## #

Hãy thử trực tuyến!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.