17

# проблема

Учитывая ввод, `a`где a - значение истинности / ложности, выведите точный невозможный куб ниже, если он правдивый, и точный нормальный куб ниже, если ложь.

Вход `truthy`:

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

Вход `falsy`:

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

# правила

• Конечный пробел разрешен.
• Конечные переводы строк разрешены.
• значения truey / falsey можно поменять местами (true для реального куба и false для невозможного куба)
• Стиль ввода должен быть указан
• Самый короткий код в байтах выигрывает

1
Нужно ли выводить этот точный куб или любой невозможный куб?
Дзайма

1
@dzaima точный куб.
LiefdeWen

8
На первый взгляд, я подумал, что вкладом было искусство ASCII. вздох облегчения
Арно

2
@Arnauld, в конечном итоге это будет довольно тривиально, потому что вы можете просто посмотреть на одного персонажа в определенном месте и разделить их на части.

8
@JarkoDubbeldam Правда. То, что я имел в виду, было больше похоже на «взять любой аналогичный ввод любого размера и выяснить, действителен ли куб или нет» .
Arnauld

Ответы:

4

# SOGL V0.12 , 145 байт

``````─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ž
``````

Попробуй здесь!
Эта программа хранит строковые данные в виде 3-х отдельных базовых чисел 36-46 и декодирует каждое и сохраняет `ž`значения в основном массиве.
Из-за оскорбительного способа рисования диагональных линий на выходе есть 27 строк линий с пробелами (что разрешено OP)

ввод:
0 - невозможно
1 - возможно

Объяснение:

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

Как это меняется в зависимости от ввода?
LiefdeWen

0 - невозможно, 1 - возможно
dzaima

`1`Разве ввод результатов не должен быть таким же, как и другие правдивые вводы `"test"`?
Джонатан Аллан

@JonathanAllan это должно? В SOGL ввод истинного числа не является числом 0. Ввод `test`в поле ввода приводит к ошибке. Если это большая проблема, я мог бы просто сделать так, чтобы она брала строковый ввод, где "" было бы ложно, а все остальное правдиво
dzaima

Да, я думаю, что если язык строго типизирован, то обработка любого типа ввода может быть вне области видимости.
Джонатан Аллан

9

# Желе ,  187  166 байт

``````ḣ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
``````

Полная программа.

Попробуйте онлайн!

### Как?

103 байта - это 101-значный номер основания 250, который представляет собой сжатие возможного куба с помощью base-8, с добавленными конечными пробелами для выравнивания длин строк, без новых строк и без 18 символов в середине каждой строки, как это , но без перевода строки:

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

8 цифр от 8 до 8 представляют строки символов:

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

Таким образом, сжатие будет таким, как показано ниже, где `1`s, `6`s, `7`s и `0`s должны быть заменены приведенными выше строками:

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

Программа полностью изменяет процесс и изменяет символы, которые необходимо изменить, если куб должен быть невозможным:

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

...ṃ@“ ... ’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)

...Ç¹⁸?x€15¦€19Y - make "impossible" if need be, add the row middles and output
...              - part 2, above
?         -  if:
⁸          -    chain's left argument = V
-          (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:
⁾|                     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)
``````

Я специально «откармливал» куб, а ты им воспользовался +1.
LiefdeWen

5

## JavaScript (ES6),  352   344  333 байта

Сохранено 2 байта благодаря @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`)``````

### демонстрация

Удаление `a=`и замена одной ссылки на нее `0`(которой она всегда равна при ссылке) экономит два байта.
Яир Рэнд

3

# Древесный уголь , 188 байт

``````__¶____¶_¶↙¹↓↑⁷↗³Ｐ↓⁶↗²↓↓⁷←↙⁴↓↓↓↙↗⁸↑¹²←Ｐ←×_³⁵↓↙⁹↑←×_³⁴Ｐ↗⁹↓↓¹¹↗→×_³⁴↑¹¹↖Ｐ←×_²⁹↗⁷←Ｐ←×_³¹↙←×_²⁹↓↙⁶↑←_Ｐ↗⁷↓↘Ｐ↓⁹←←Ｐ×_³²↓↓⁹↗→×_³⁰Ｐ↑⁹↖←×_²⁷↗⁶←←↙⁵↘→→↗⁵ＵＯ²¹±²_↗↗Ｐ×_¹⁹←↙|←Ｐ↑²←←↑²ＦＮＵＯ⁵±³ |↑↑Ｐ↑⁴Ｆ²«→→Ｐ↑⁶
``````

Попробуйте онлайн! Ссылка на ложную версию; изменить входной сигнал от `0`до `1`для версии truthy. Вот примерный подробный код для вышеуказанной программы:

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

Распечатайте часть спины, видимую через правое «отверстие».

``````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);
``````

Напечатайте правильную «дыру».

``````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);
``````

Напечатайте внешний край куба.

``````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);
``````

Распечатайте верхнюю «дырочку» куба.

``````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));
``````

Распечатайте переднюю «дырочку» куба.

``````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);
``````

Распечатайте часть спины, видимую через переднее «отверстие».

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

Сделать куб невозможным при необходимости.

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

Распечатайте часть спины, видимую через верхнее «отверстие».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.