Hình và mặt đất


32

hình và mặt đất
Nguồn: Wikipedia

Đối với thử thách này, bạn nên viết hai chương trình giống với hình và mặt đất của hình trên, sao cho một trong số chúng được in figurevà các bản in khác ground. Đặc biệt:

  1. Viết chương trình không có đầu vào và in chuỗi figure. Các ký tự khoảng trắng được phép duy nhất trong chương trình của bạn là khoảng trắng (điểm mã 0x20) và dòng mới (trả về vận chuyển, 0x0D, nguồn cấp dữ liệu, 0x0A hoặc kết hợp cả hai).
  2. Bỏ qua các dòng mới, số lượng ký tự khoảng trắng (điểm mã 0x20) và các ký tự không phải dấu cách phải giống nhau. Ví dụ: đây sẽ là một chương trình hợp lệ (bằng ngôn ngữ giả định):

    ab c 
       d
    e f
    

    Lưu ý rằng có một dấu cách trên dòng đầu tiên.

  3. Nếu bạn hoán đổi ký tự không gian thứ n bằng ký tự không phải khoảng trắng thứ n , chương trình sẽ in groundthay thế. Đối với ví dụ trên, chương trình sẽ như thế này:

      a b
    cde 
     f 
    

    Lưu ý rằng có các khoảng trắng ở dòng thứ hai và thứ ba.

Cả hình và giải pháp mặt đất phải là các chương trình đầy đủ trong cùng một ngôn ngữ in ra STDOUT. Bạn có thể in một dòng mới tùy chọn duy nhất trong cả hai trường hợp. Bạn có thể xuất bất cứ thứ gì bạn muốn STDERR, miễn là STDOUT đúng.

Bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào , nhưng lưu ý rằng các lỗ hổng này bị cấm theo mặc định.

Đây là , vì vậy câu trả lời hợp lệ ngắn nhất - được đo bằng byte - thắng.

Tập lệnh trợ giúp

Bạn có thể sử dụng tập lệnh CJam này để chuyển đổi giữa chương trình hìnhmặt đất . Chỉ cần dán một trong hai vào trường Nhập và chạy chương trình. Nó cũng sẽ cho bạn biết nếu có số lượng không gian và không phải không gian không khớp với nhau.

Bảng xếp hạng

Câu trả lời:


20

Thạch , 20 byte

Nhân vật

“¦ĠȮ“©ụd» Ṃ         

Chín dấu vết. Hãy thử trực tuyến!

Đất

         “ ¦ĠȮ“©ụd»Ṃ

Không có dấu cách. Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Đầu tiên, lưu ý rằng không gian không phải là nguyên tử, vì vậy các ký tự khoảng trắng bên ngoài chuỗi ký tự không ảnh hưởng đến chương trình theo bất kỳ cách nào.

Các chuỗi ký tự sử dụng nén chuỗi dựa trên từ điển của Jelly để tạo ra các từ mong muốn. Một chuỗi ký tự nén bắt đầu bằng , kết thúc bằng »và sử dụng nội bộ để tạo ra một chuỗi các chuỗi.

Trong chương trình hình , “¦ĠȮ“©ụd»tạo ra cặp chuỗi (hình con số, kiểu mặt đất) và nguyên tử chọn mức tối thiểu từ vựng, nghĩa là hình con số .

Thay vào đó, trong chương trình mặt đất, “ ¦ĠȮ“©ụd»mang lại cặp chuỗi ( Thay vào đó là logic logic, Thay thế. Tối thiểu từ vựng là bây giờ, mặt đất , được chọn một cách nghiêm túc.

Trong cả hai trường hợp, trình thông dịch sẽ tự động in giá trị trả về cuối cùng - tức là mức tối thiểu được chọn - thành STDOUT.


14

Python 2, 53 byte

Thay thế ·bằng khoảng trắng trong cả hai câu trả lời:

····················
print'······figureground'[6:12]#

In figure.

print'figureground'[
······6:12]#····················

In ground.


14

05AB1E , 15 14 byte

Nhân vật

 'ŠÂ,'í¶      

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

Đất

'       ŠÂ,'í¶

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

Sử dụng mã hóa CP-1252 . Lưu ý các dấu cách. Trong chương trình Hình , đó là một chương trình bình thường không có lỗi. Nó giải nén các từ sau:

'ŠÂ  ->  figure
'í¶  ->  ground

Dấu phẩy in ra và in figuretừ với một dòng mới. Vì một cái gì đó đã được in, đầu ngăn xếp không được in nữa.

Trong chương trình Ground , có một số lỗi thuận tiện trong trường hợp này. Phần sau:

'<space>

đẩy một nhân vật không gian trên đầu ngăn xếp. Các vòng Šquay ngăn xếp, trong đó có một arity 3 . Chỉ có một yếu tố trên ngăn xếp và không có đầu vào, vì vậy điều này đưa ra một ngoại lệ, xóa ngăn xếp. Các Âphân chia đỉnh của ngăn xếp, nhưng điều này có cùng một câu chuyện với toán tử xoay. Vì vậy, về cơ bản ,lệnh in không có gì.

Điều đó có nghĩa là chương trình vẫn sẽ xuất ra đỉnh của ngăn xếp 'í¶. Kết quả thành ground.


9

Võng mạc , 31 byte

Nhân vật:

|       
nhân vật
 | mặt đất
      

Đất:

 | hình

|       
đất

Hìnhmặt đất . Cả hai chương trình đều yêu cầu STDIN để trống để trở thành con số hợp lệ hoặc chương trình mặt đất.


9

Bình thường, 30 byte

Nhân vật

"figure" "ground              

14 dấu cách.

Kiểm tra

Đất

Không có dấu cách

        "       figure""ground

Kiểm tra

Làm thế nào nó hoạt động

Khá hữu ích, một không gian thay thế in ấn trong Pyth, trong khi các chuỗi ký tự không có đóng "được hoàn toàn đóng lại.

Do đó, chương trình đầu tiên bao gồm hai chuỗi "figure""ground ". Chuỗi đầu tiên được in ngầm, và in của chuỗi thứ hai được nén, có nghĩa là chỉ figuređược in.

Chương trình thứ hai bao gồm hai chuỗi, " figure""ground". Việc in ấn lần đầu tiên được ấn định và lần thứ hai được in ngầm, nghĩa là chỉ cần groundđược in.


6

MATL , 37 byte

Chương trình đầu tiên

'figure'         
%x'ground'         

Mỗi dòng có 9 dấu cách.

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

Chương trình thứ hai

    'figure'%
      x'ground'

Không có không gian truy tìm ở đây.

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

Giải trình

Không có gì lạ mắt cả ...

  • Không gian và dòng mới giữa các câu lệnh được MATL bỏ qua.
  • % là biểu tượng nhận xét, bỏ qua phần còn lại của dòng.
  • x xóa đỉnh của ngăn xếp.
  • Ngăn xếp được in ngầm vào cuối chương trình.

6

Java, 180 byte

Thay thế .bằng không gian.

In "hình":

class
A{public
static
void
main(String[]a){System.out.println(
//"ground"
//
.....
........
......
....
...................................
..
........
..........
....
"figure");}}

In "mặt đất":

.....
........
......
....
...................................
..........
..
class
A{public
static
void
main(String[]a){System.out.println(
//
"ground"
//"figure"
);}}
............


4

Toán học, 50 34 byte

Sử dụng môi trường REPL. (Thêm một Print[]trình bao bọc có số lượng khoảng trắng bằng nhau sẽ tăng số byte lên 14.) Hai chương trình là

01figure+0 1ground                

(với 16 dấu cách) và

          0       1figure+01ground

Chìa khóa ở đây là Mathicala coi phép ghép chữ số không có khoảng trắng là một số duy nhất, nhưng các khoảng trắng xen kẽ được hiểu là phép nhân hàng xóm, cũng như phép nối các số và tên biến tùy ý. Vì vậy, biểu thức đầu tiên đánh giá 1*figure+0*1*ground, đó là figure; biểu thức thứ hai ước tính 0*1*figure+1*ground, đó là ground.


4

PHP, 44 42 byte

hình: (16 dấu cách, 5 khoảng cách giữa hình &;)

echo''?ground:figure     ;                 

mặt đất: (20 không gian hàng đầu)

                     echo' '?ground:figure;

Khá đơn giản thực sự, hoạt động vì ''là falsey và ' 'là sự thật. Sử dụng như:

php -r "echo''?ground:figure     ;                "
php -r "                    echo' '?ground:figure;"

chỉnh sửa: 2 byte hồi tưởng rõ ràng được lưu nhờ Martin Ender


3

Haskell, 96 94 88 82 77 byte

Chương trình đầu tiên, in "figure":

main              =          putStr$idid"ground"
idid    _          ="figure"

Chương trình thứ hai, in "ground":

    main=putStr$id id"ground"                   
    idid _="figure"         

Gọi một trong hai hàm hằng có tên khác nhau


3

Haskell, 88 65 byte

main=putStr
...........--
.."figure"..........
--"ground"........

...........
main=putStr..
--........"figure"--
.........."ground"

.chỉ ra một không gian. Chỉ cần một số dòng bình luận (-> --) tung hứng.


3

Python 2, 52 byte

........................
print"figure"
an
d
"ground"

.s chỉ không gian. Ba dòng cuối cùng được phân tách thành lỗi mà không có một SyntaxErrorcái nào sẽ ngăn mã chạy ở vị trí đầu tiên.

Phiên bản mặt đất chỉ sử dụng andđể làm cho chuỗi thứ hai được in.


Các nỗ lực thay thế (dài hơn):

.......
print(#"ground")#
"figure")...................


print"figure"""and"ground"
.............
.............

3

JavaScript (ES6), 56 byte

alert('figure'
                //&&'ground'
           )
              
alert('figure'//            
&&'ground') 

Con số không có dấu cách.


Tôi đếm 56 byte cho mỗi chương trình, trừ khi dòng mới không được tính. Tôi nghi ngờ nó sẽ nhận được bất kỳ ngắn hơn.
Sản phẩm ETH

@ETHproductions Ugh, đó là những gì xảy ra khi bạn đếm byte theo cách thủ công :-(
Neil

2

Đường sắt , 56 byte

Nhân vật

$'main'
 -[figure]o                
-          [ground]o

Có 16 dấu cách trên dòng thứ hai. Chương trình kết thúc với một lỗi.

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

Đất

       
$ 'chính' - [hình] o
 - [mặt đất] o         

Có 7 khoảng trắng trên dòng đầu tiên và 9 khoảng trắng ở dòng cuối cùng. Chương trình này cũng chấm dứt với một lỗi.

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

Giải trình

Rail tìm kiếm một dòng bắt đầu bằng (ký hiệu regex) \$.*'main'để tìm điểm vào. Tàu (con trỏ chỉ dẫn) sau đó bắt đầu từ $phía đông nam di chuyển. Những thứ không thể tiếp cận được bằng tàu có thể bị bỏ qua hoàn toàn cho chương trình. Điều này bao gồm mọi thứ trên cùng một dòng với điểm vào. Vì, -phía đông nam của tàu $lập tức quay về hướng đông, cả hai chương trình chỉ đơn giản là giảm xuống:

 -[figure]o
 -[ground]o

[...]biểu thị một chuỗi ký tự và oin nó. Thông thường, bạn cần #kết thúc đường ray, nhưng nếu bạn bỏ qua nó, chương trình sẽ chấm dứt bằng mọi cách (nhưng phàn nàn với STDERR rằng tàu bị hỏng).


2

> <> , 39 byte

Sử dụng ·để đại diện cho không gian.

Nhân vật

v·
"·dnuo
e·
r·
u·
g··
i··
f···
"·
>·o·

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

Đất

·v
·"····
·d
·n
·u
·oe
·ru
·gif
·"
·>·o

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

Cả hai chương trình chấm dứt với một lỗi.

Giải trình

Bằng cách viết mã theo chiều dọc, tôi có thể sử dụng lại grgiữa cả hai giải pháp, cũng như các trích dẫn và >ocho vòng lặp đầu ra.

Trong cả hai trường hợp, bit duy nhất được thực thi là cột bên dưới v, sẽ đẩy các chữ cái của từ cần thiết lên ngăn xếp theo thứ tự ngược lại. Sau đó >chuyển hướng con trỏ lệnh sang phải, nơi nó lặp qua o, in các ký tự cho đến khi ngăn xếp trống.


Tôi mới bắt đầu làm việc với phiên bản> <> của riêng mình, sau đó tôi tình cờ thấy bạn. Tôi thực sự thích ý tưởng của bạn làm việc theo chiều dọc (của tôi rất 'bình thường').
Teal bồ nông

@Tealpelican Tôi đã không nghĩ ra điều này cho đến khi tìm ra câu trả lời Phân hạch. Trước đó, giải pháp tốt nhất của tôi> <> là 42 byte: !__|"druong">o<"figure"(trong đó _là khoảng trắng và các khoảng trắng còn lại chỉ đơn giản là đi đến cuối dòng).
Martin Ender

Phiên bản ngắn nhất hiện tại của tôi là đây; ## "de nr uu og ri GF"> o! ~ ~! <## Mà đủ buồn cười là 42 byte cũng có! Các phiên bản trước của tôi đã kiểm tra lỗi nhưng chỉ có thể giảm xuống còn 53 byte.
Teal bồ nông

2

Phân hạch , 37 byte

Sử dụng ·để đại diện cho không gian.

Nhân vật

D·
"···
f··
i··
g·
u·
r·
e·ound
"·
;·

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

Đất

·D
·"fi
·gu
·re
·o
·u
·n
·d····
·"
·;

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

Giải trình

Hoạt động cơ bản giống như câu trả lời> <> của tôi (mặc dù tôi thực sự tìm thấy câu trả lời này trước tiên). Sự khác biệt duy nhất là "in các ký tự ngay lập tức trong Phân hạch, đó là lý do tại sao các từ không được viết lộn ngược và tại sao chúng ta chỉ cần chấm dứt chương trình ;ở cuối.


1

mặt lưới, 46 byte

                      "ground""figure"" "?$$o;

Hãy thử trực tuyến! Bản in này ground.

"ground""figure"""?$$o                 ;      

Hãy thử trực tuyến! Bản in này figure.

đất

Mã liên quan:

"ground""figure"" "?$$o;
................          push these two strings
                " "?$     pop " " off (since " " is truthy, `?` executes `$`)
                     $    pop TOS ("figure")
                      o;  output and terminate

nhân vật

Mã liên quan:

"ground""figure"""?$$o;
................         push these two strings
                ""?$     doesn't activate
                    $    pop ""
                     o;  output and terminate

1

Brian & Chuck , 55 53 byte

Nhân vật

erugif?dnuorg             
}<.<.<.<.<.<.             

Có 13 dấu cách trên mỗi dòng.

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

Đất

             erugif?dnuorg
             }<.<.<.<.<.<.

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

Giải trình

À, đã lâu rồi kể từ lần cuối tôi sử dụng Brian & Chuck. Xin nhắc lại, Brian và Chuck là hai trường hợp giống Brainfuck, sử dụng mã nguồn của nhau làm băng từ. Chỉ Chuck có thể sử dụng lệnh in ., ?chuyển đổi giữa hai trường hợp một cách có điều kiện và }giống như [>]trong Brainfuck. Các lệnh chưa biết đơn giản là bị bỏ qua.

Vì các không gian ở đầu chương trình bị bỏ qua, hai chương trình gần như giống hệt nhau. Sự khác biệt duy nhất đến từ thực tế là sau lệnh chuyển đổi ?, con trỏ lệnh di chuyển trước khi thực hiện lệnh tiếp theo. Do đó, lệnh đầu tiên trên băng của Chuck luôn bị bỏ qua. Vì vậy, sự khác biệt thực sự duy nhất là chương trình mặt đất thực thi }trong khi chương trình hình không. Vì vậy, đây là cách mã hoạt động:

?   Switch control to Chuck.
}   GROUND PROGRAM ONLY: Move the tape head on Brian to the end of the tape.
<.  Move the tape head left and print the character there.
... Do the same another five times to print the remainder of the string.

0

WinDbg, 74 byte

Đất

                      ea2000000"      groundfigure";;;da       2000006  L6

Nhân vật

ea2000000"groundfigure          ";;;da                  2000006       L6  

Hình có 2 dấu cách. Tôi cảm thấy như ít nhất 2 hoặc 4 byte nên chơi được ...

Nó hoạt động bằng cách viết một chuỗi vào bộ nhớ và hiển thị 6 ký tự từ nó. Các ký tự trong chuỗi được sắp xếp lại để các ký tự hiển thị thay đổi giữa các chương trình:

* Ground:
ea 2000000 "      groundfigure";     * Write string "      groundfigure" starting at 2000000
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, from 2000006, ie- ground

* Figure:
ea 2000000 "groundfigure          "; * Write string "groundfigure          " to memory
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, ie- figure

Đầu ra:

0:000>                       ea2000000"      groundfigure";;;da       2000006  L6
02000006  "ground"
0:000> ea2000000"groundfigure          ";;;da                  2000006       L6  
02000006  "figure"
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.