Khối không thể có thể


17

Vấn đề

Đưa ra một đầu vào atrong đó a là giá trị trung thực / sai lệch đầu ra khối chính xác không thể bên dưới nếu trung thực và khối chính xác bình thường bên dưới nếu falsey.

Đầu vào truthy:

         ___________________________________
        / _______________________________  /|
       / / _____________________________/ / |
      / / /| |                         / /  |
     / / / | |                        / /   |
    / / /| | |                       / / /| |
   / / / | | |                      / / / | |
  / / /  | | |                     / / /| | |
 / /_/___| | |____________________/ / / | | |
/________| | |_____________________/ /  | | |
| _______| | |____________________ | |  | | |
| | |    | | |___________________| | |__| | |
| | |    | |_____________________| | |____| |
| | |   / / _____________________| | |_  / /
| | |  / / /                     | | |/ / /
| | | / / /                      | | | / /
| | |/ / /                       | | |/ /
| | | / /                        | |   /
| | |/_/_________________________| |  /
| |______________________________| | /
|__________________________________|/

Đầu vào falsy:

         ___________________________________
        / _______________________________  /|
       / / _____________________________/ / |
      / / /| |                         / /  |
     / / / | |                        / /   |
    / / /| | |                       / / /| |
   / / / | | |                      / / / | |
  / / /  | | |                     / / /| | |
 / /_/___|_|_|____________________/ / / | | |
/__________________________________/ /  | | |
| ________________________________ | |  | | |
| | |    | | |___________________| | |__| | |
| | |    | |_____________________| | |____| |
| | |   / / _____________________| | |_  / /
| | |  / / /                     | | |/ / /
| | | / / /                      | | | / /
| | |/ / /                       | | |/ /
| | | / /                        | |   /
| | |/_/_________________________| |  /
| |______________________________| | /
|__________________________________|/

Quy tắc

  • Trailing khoảng trắng cho phép.
  • Trailing newlines cho phép.
  • giá trị trung thực / falsey có thể được hoán đổi (trung thực cho khối thực và falsey cho khối không thể)
  • Kiểu đầu vào phải được chỉ định
  • Mã ngắn nhất tính bằng byte

1
Chúng ta có cần xuất ra khối chính xác đó hoặc bất kỳ khối không thể nào không?
dzaima

1
@dzaima khối chính xác.
LiefdeWen

8
Thoạt nhìn, tôi nghĩ đầu vào là nghệ thuật ASCII. thở phào nhẹ nhõm
Arnauld

2
@Arnauld cuối cùng sẽ khá tầm thường, bởi vì bạn chỉ cần nhìn vào một nhân vật tại một địa điểm cụ thể và phân biệt hai người.
JAD

8
@JarkoDubbeldam Đúng. Những gì tôi có trong tâm trí giống như "lấy bất kỳ đầu vào tương tự có kích thước bất kỳ và tìm hiểu xem khối này có hợp lệ hay không" .
Arnauld

Câu trả lời:


4

SOGL V0.12 , 145 byte

─3n{_⁰
ā"¹K╚=+ƨψ≡tšÆA%εW#žt─M^_ξ0“6²⁰ _*ž}"⁵æκLνbΡ°■=μθΝv╝xxΛTγ►℮ΞyF“'№⁰┐∙ž}"⁸Βλμž╚⅔\Ρ═⁴-θ=╚_>◄4℮`ε║t“'¦⁰ā;∫0 /ž}╬5}'Æ6«@┐2Ο3∙:Aža.?X"≥YΤ%‘5n}L9ž

Hãy thử nó ở đây!
Chương trình này lưu trữ dữ liệu dòng dưới dạng 3 số 36-46 cơ sở riêng biệt và giải mã từng žgiá trị trong mảng chính.
Do cách lạm dụng cách tôi vẽ các đường chéo, đầu ra có 27 dòng đường có khoảng trắng (được OP cho phép)

đầu vào:
0 - không thể
1 - có thể

Giải trình:

The first line is basically a substitute ⁰ with ─3n{_

ā                   push an empty array (the canvas for the whole cube)
 "...“              pushes 29714643711764388252557994982458231735529743027583646902
      6²─           base-36 decodes it
         3n{     }  for each group of 3 numbers do (where the numbers are X, Y, length)
            _         put all the contents on the stack (in the order X, Y, length)
              _*      get POP amount of underscores
                ž     in the canvas at the positions x;y (the position of the 1st char, 1-indexed) put the underscores

"...“             pushes 19564601770087915522037775830252836261712294966673526596188
     '№─          base-46 decodes it
        3n{    }  for each group of 3 numbers do
           _        put all the contents on the stack
            ┐∙      get an array of "|"s with the length of POP
              ž     in the canvas at the position x;y (position of the top char, 1-indexed) put the vertical bar

"...“                    pushes 124633728256573776407884156928319785312464662536125755768
     '¦─                 base-40 decodes it
        3n{           }  for each group of 3 numbers do
           _               put all the contents on the stack
            ā;             one below the stack put an empty array (canvas for the diagonal line)
              ∫    }       for range(length) do
               0             TMP
                 /           push "/"
                  ž          at the position (iter; 0), 1-indexed put a "/". This extends the array one line upward and causes the extra spaces.
                    ╬5     in the canvas at the position x;y(1-indexed, the top position) put the diagonal line canvas without overriding with spaces

'Æ             push 36
  6«           push 12
    @┐2Ο       push two spaces, encased in vertical bars - "| | |"
        3∙     get an array of 3 of those
          :A   save on variable A
            ž  in the canvas, at the positions 36; 12 put the array

a                 push the variable A
 .?         }     if the input is non-0, then
   X                remove the variable A off of the stack
    "≥YΤ%‘          push "|_|_|__________"
          5n        chop that into an array of strings of length 5
             L9ž  at positions 10;9 insert the top of stack (either the ["| | |","| | |","| | |"] or ["|_|_|","_____","","_____"]) in the canvas

Làm thế nào để nó thay đổi dựa trên đầu vào?
LiefdeWen

0 - không thể, 1 - có thể
dzaima

Không phải đầu vào của 1kết quả trong cùng một đầu ra như các đầu vào trung thực khác như thế "test"nào?
Jonathan Allan

@Jonathan Allan có nên không? Trong SOGL, đầu vào số trung thực là số không 0. Gõ testvào hộp đầu vào dẫn đến một lỗi. Nếu vấn đề lớn đến mức tôi có thể khiến nó mất đầu vào chuỗi trong đó "" sẽ là giả và mọi thứ khác là sự thật
dzaima

Ồ đúng rồi, tôi đoán nếu ngôn ngữ được gõ mạnh thì xử lý bất kỳ loại đầu vào nào có thể nằm ngoài phạm vi.
Jonathan Allan

9

Thạch ,  187  166 byte

ḣ9;⁾| ṁ5¤oµ€“µ½¿‘¦
“ _/ |/|”;€⁶;”_ṁ"“¡ẇḞ6’D¤ṃ@“Ė⁸ġṾṗ¢œƝṇRK⁹ṄẸŒÐ¤ɓḂı)ḥṆqƓị¹÷ḄƝṁPʠVW1JĊTc;[¤ÆWŒṠṬ#ʋÆ6ẉ⁷ZḷƊḤƑẹẠGḊ|qi×Ƭ®ÐėƁ1(⁸ṪU¹Bgoƭ<Gḋ×c:ȦṚƇĊ¬e*⁽%ḷݰU’Fs27ǹ⁸?x€15¦€19Y

Một chương trình đầy đủ.

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

Làm sao?

103 byte là một số cơ sở 250 chữ số gồm 250 chữ số, là số nén cơ sở 8 của một khối có thể, với các khoảng trắng được thêm vào để cân bằng độ dài hàng, không có dòng mới và không có 18 ký tự ở giữa mỗi hàng, như thế này , nhưng không có dòng mới:

         _________________ 
        / _____________  /|
       / / ___________/ / |
      / / /| |       / /  |
     / / / | |      / /   |
    / / /| | |     / / /| |
   / / / | | |    / / / | |
  / / /  | | |   / / /| | |
 / /_/___|_|_|__/ / / | | |
/________________/ /  | | |
| ______________ | |  | | |
| | |    | | |_| | |__| | |
| | |    | |___| | |____| |
| | |   / / ___| | |_  / / 
| | |  / / /   | | |/ / /  
| | | / / /    | | | / /   
| | |/ / /     | | |/ /    
| | | / /      | |   /     
| | |/_/_______| |  /      
| |____________| | /       
|________________|/        

8 chữ số cơ sở 8 đại diện cho các chuỗi ký tự:

1      2    3    4    5    6        7        0
"   ", "_", "/", " ", "|", "/ / /", "| | |", "_____"

Vì vậy, việc nén giống như bên dưới trong đó 1s, 6s, 7s và 0s sẽ được thay thế bằng các chuỗi được hiển thị ở trên:

111000__111/ 00___  /|11 / / 00_/ / |116| |11 / /  |1  6 | |11/ /1|1 671  6| |16 71 6 | |  6  7167 6___|_|_|__6 7/000_/ /  7| 00____ | |  771 7_7__771 | |___7____| |71/ / ___7_  / / 7  6176  7 61 7 / /1761  7/ /1 7 / /11| |1/1  7/_/0__| |  /11| |00__| | /11 |000_|/11  

Chương trình đảo ngược quá trình và thay đổi các ký tự cần thay đổi nếu khối lập phương là một điều không thể:

“ _/ |/|”;€⁶;”_ṁ"“¡ẇḞ6’D¤ṃ@“ ... ’Fs27ǹ⁸?x€15¦€19Y  Main link: V
                                                     ...splitting this up...
                                                     ...Main link part 1:
“ _/ |/|”;€⁶;”_ṁ"“¡ẇḞ6’D¤ - make the list of strings of characters
“ _/ |/|”                 - list of characters = " _/ |/|"
           ⁶              - literal space character
         ;€               - concatenate €ach -> ["  ","_ ","/ ","  ","| ","/ ","| "]
             ”_           - literal = '_'
            ;             - concatenate -> ["  ","_ ","/ ","  ","| ","/ ","| ", '_']
                        ¤ - nilad followed by link(s) as a nilad:
                 “¡ẇḞ6’   -   base 250 literal = 31111555
                       D  -   convert to decimal list -> [3,1,1,1,1,5,5,5]
                "         - zip with:
               ṁ          -   mould like
                          -   -> ["   ","_","/"," ","|","/ / /","| | |","_____"]

                                                     ...Main link, part 2:
...ṃ@“ ... ’Fs27 - make the rows of a possible cube without the middle repetitions:
...              - part 1, above
     “ ... ’     - the 101 digit base 250 number
   ṃ@            - base decompression with swapped @rguments
            F    - flatten (because the digit values we are using are actually lists)
             s27 - split into chunks of length 27 (into the rows)

                                                     ...Main link part 3:
...ǹ⁸?x€15¦€19Y - make "impossible" if need be, add the row middles and output
...              - part 2, above
       ?         -  if:
      ⁸          -    chain's left argument = V
   Ç             - ...then: call last link (1) as a monad
                 -          (make it an impossible cube - see link 1, below)
    ¹            - ...else: identity (do nothing)
            €    - for €ach
         ¦       - apply sparsely:
       15        - ...to index: 15
     x€    19    - ...this: repeat €ach nineteen times
               Y - join with newlines
                 - implicit print

ḣ9;⁾| ṁ5¤oµ€“µ½¿‘¦  Link 1, replace characters to make impossible: rows
                 ¦  apply sparsely:
            “µ½¿‘   ...to indexes: code-page indexes = [9,10,11]
                    ...this:
          µ€          for €ach:
ḣ9                      head to index 9
        ¤               nilad followed by link(s) as a nilad:
   ⁾|                     list of characters = ['|',' ']
      ṁ5                  mould like 5 = ['|',' ','|',' ','|']
  ;                     concatenate
         o              logical or (vectorises) with the row
                          (which has the effect of appending the rest of the row)

Tôi "vỗ béo" khối lập phương trên mục đích và bạn đã tận dụng lợi thế của nó +1.
LiefdeWen

5

JavaScript (ES6),  352   344  333 byte

Đã lưu 2 byte nhờ @YairRand

x=>[...'mnopqrstuvwxyz01~'].reduce((p,c)=>(l=p.split(c)).join(l.pop()),`1yup
1z uux z|
1/z uu_/z |
yqswtqvy|
yys wtyvq|
qs0t sw
ys 0ts w
 snt/v0
v_/x${x?0:'|_|_|'}m/v 0
/~_${b=x?0:'o_'}p/zn
| ~${b}m wnrynuo_0__0ryywp0owryv p0_ vr st0/vrst 0vr/vtn/zrvtqwyzr/_/pow z
wuu__wz
|um|/~xo1yyq0w |z /q o__w| |szp~t111svzr
0qy pu~ox_ny0muxx`)

Bản giới thiệu


Loại bỏ a=và thay thế một tham chiếu đến nó bằng 0(nó luôn luôn bằng khi được tham chiếu) sẽ tiết kiệm hai byte.
Yair Rand

3

Than , 188 byte

__¶____¶_¶↙¹↓↑⁷↗³P↓⁶↗²↓↓⁷←↙⁴↓↓↓↙↗⁸↑¹²←P←×_³⁵↓↙⁹↑←×_³⁴P↗⁹↓↓¹¹↗→×_³⁴↑¹¹↖P←×_²⁹↗⁷←P←×_³¹↙←×_²⁹↓↙⁶↑←_P↗⁷↓↘P↓⁹←←P×_³²↓↓⁹↗→×_³⁰P↑⁹↖←×_²⁷↗⁶←←↙⁵↘→→↗⁵UO²¹±²_↗↗P×_¹⁹←↙|←P↑²←←↑²FNUO⁵±³ |↑↑P↑⁴F²«→→P↑⁶

Hãy thử trực tuyến! Liên kết là phiên bản giả mạo; thay đổi đầu vào từ 0thành 1phiên bản trung thực. Đây là mã verbose gần đúng cho chương trình trên:

Print("__\n____\n_\n");

In phần mặt sau có thể nhìn thấy qua "lỗ" bên phải.

Print(:DownLeft, 1);
Move(:Down);
Print(:Up, 7);
Print(:UpRight, 3);
Multiprint(:Down, 6);
Print(:UpRight, 2);
Move(:Down);
Print(:Down, 7);
Move(:Left);
Print(:DownLeft, 4);

In đúng "lỗ".

Move(3, :Down);
Move(:DownLeft);
Print(:UpRight, 8);
Print(:Up, 12);
Move(:Left);
Multiprint(:Left, Times("_", 35));
Move(:Down);
Print(:DownLeft, 9);
Move(:Up);
Print(:Left, Times("_", 34));
Multiprint(:UpRight, 9);
Move(:Down);
Print(:Down, 11);
Move(:UpRight);
Print(Times("_", 34));
Print(:Up, 11);

In cạnh ngoài của khối lập phương.

Move(:UpLeft);
Multiprint(:Left, Times("_", 29));
Print(:UpRight, 7);
Move(:Left);
Multiprint(:Left, Times("_", 31));
Move(:DownLeft);
Print(:Left, Times("_", 29));
Move(:Down);
Print(:DownLeft, 6);
Move(:Up);
Print(:Left, "_");
Multiprint(:UpRight, 7);

In "lỗ" trên cùng của khối lập phương.

Jump(1, 2);
Multiprint(:Down, 9);
Move(2, :Left);
Multiprint(Times("_", 32));
Move(:Down);
Print(:Down, 9);
Move(:UpRight);
Print(Times("_", 30));
Multiprint(:Up, 9);
Move(:UpLeft);
Print(:Left, Times("_", 27));

In "lỗ" phía trước của khối lập phương.

Print(:UpRight, 6);
Move(2, :Left);
Print(:DownLeft, 5);
Jump(3, 1);
Print(:UpRight, 5);
Oblong(21, Negate(2), "_");
Move(2, :UpRight);
Multiprint(Times("_", 19));
Move(:Left);
Print(:DownLeft, "|");
Move(:Left);
Multiprint(:Up, 2);
Move(2, :Left);
Print(:Up, 2);

In phần mặt sau có thể nhìn thấy qua "lỗ" phía trước.

for (InputNumber()) Oblong(5, Negate(3), " |");

Làm cho khối lập phương không thể nếu cần thiết.

Move(2, :Up);
Multiprint(:Up, 4);
for (2) {
    Move(2, :Right);
    Multiprint(:Up, 6);
}

In phần mặt sau có thể nhìn thấy qua "lỗ" trên cùng.

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.