Вызов кардинального кода


24

задача

Вы отвечаете за создание компаса, в некотором роде.

Представьте свой исходный код как «стрелку» компаса, где работа в разных направлениях дает отчетливый результат.

Поддерживаемые ориентации исходного кода: север, восток, юг и запад.

пример

Допустим, у вас есть исходный код:

ABCD
 J K
WXYZ

Мы рассмотрим ориентацию на север, вращение на 90 градусов по часовой стрелке указывает на восток:

W A
XJB
Y C
ZKD

вращение снова указывает на юг:

ZYXW
K J 
DCBA

и наконец, последний поворот на запад:

DKZ
C Y
BJX
A W

При запуске каждый из приведенных выше примеров кода должен выводить один, отдельный печатный символ ASCII по вашему выбору.

Заметки

Ваш код не должен вводить.

Пустые места или новые строки не разрушаются / исчезают при вращении.

Лидирующие / завершающие новые строки в порядке.

Ответы могут быть целыми программами или функциями, поэтому выводятся в STDOUT или возвращают результат функции.

Применяются стандартные правила ; кратчайший ответ в байтах побеждает!


Можем ли мы вывести более 1 символа?
г-н Xcoder

1
Нужно ли дополнять код пробелами, чтобы он был идеальным прямоугольником (и считать эти пробелы в нашем счете)? Например, чтобы код в форме это будет действительным, учитывая первый из них является представление?
Business Cat

2
Помимо выходной спецификации, я думаю, что это дубликат
Digital Trauma

1
@BusinessCat Вам не нужно дополнять свой код, чтобы сделать прямоугольник - этот пример, который вы предоставили, будет верным.
CzarMatt

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
Это окончательный ответ. Отлично сработано.
Эрик Outgolfer

19

Japt , 3 2 байта

gy

Каким-то образом я нашел чрезвычайно хакерское 2-байтовое решение ...


Северные выходы 0:

gy

Поскольку неявного ввода не существует, по умолчанию используется 0. gon число возвращает знак числа независимо от его аргументов ( "y"в данном случае).


Восточные выходы 2:

g
y

В многострочной программе первая строка устанавливает ввод для его результата. Это в основном неоперативный, так как gна 0это 0. Затем yвозвращает GCD для 0и ..., поскольку в нем отсутствует аргумент, по умолчанию используется значение 2(спасибо, @Oliver !). Это дает 2в качестве выхода.


Южные выходы g:

yg

yКак и прежде, это GCD. Так как gcd (0, x) равен x для любого значения, yon 0берет на себя возможность просто вернуть свой аргумент. В этом случае аргумент есть "g", который является результатом.


Западные выводы 1:

y
g

yна 0, как и раньше, возвращает 2. Затем это передается g, который (как уже обсуждалось) является функцией знака на числах. Поэтому результат есть 1.


8

Java (OpenJDK 8) , 7309 4421 855 байт

-2888 байт благодаря Leaky Nun
-3566 байт благодаря 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//

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

Старая версия

Прямой подход с комментариями, обертывающими квадрат кода ^ 2, это можно сделать практически на любом языке.
(более читаемый) пример в Python

##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);}}вместо этого, чтобы сохранить несколько байтов.
Дрянная Монахиня


1
@MagicOctopusUrn это не было сделано вручную c;
Род

1
@MagicOctopusUrn Нет, я сделал этот ответ, чтобы показать этот алгоритм, язык не имеет значения: 3
Rod

7

Brain-Flak , 33 байта

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

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

Brain-Flak , 33 байта

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

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

Brain-Flak , 36 байт

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

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

Brain-Flak , 38 байт

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

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

Brain-Flak , 41 байт

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

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


Святое дерьмо! Я работал над одним, но я не мог получить нигде. Я думал, что потребуется как минимум 30-40 минут работы, чтобы что-то понять. Это потрясающе!
DJMcMayhem

1
Это очень круто!
ЦарМатт

Попытка
Кристофер


5

Befunge, 17 13 байт

Я думал, что Befunge будет весело для геометрической задачи. Здесь есть тривиальное решение 4х4, похожее на другое (мне нужно 3 команды), но мне удалось немного лучше.

Редактировать: забыл о новых строках

Редактировать 2: понял, что я мог бы создать кошку

Редактировать 3: кот мертв

2v3
@.v
.  
1@.

RIP котенок: <

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

5

05AB1E , 5 3 байта

Y'X

Север , восток , юг , запад


Впечатляет, это было быстро!
ЦарМатт

@MagicOctopusUrn Я думаю, что Y'Xбудет работать, но я должен попробовать это все еще.
Райли

@ Райли это делает, также он работает вперед и назад, Y'Xтакже действует. Все еще ищу 2-байтовый хотя; ни одна из «точечных команд» не работает для этого, поэтому я сомневаюсь, что она существует.
Волшебная Урна Осьминога

@MagicOctopusUrn Я не думаю, что есть 2-байтовое решение с тем, как работают переводы строки. Это не было бы трудно грубой Силы все же.
Райли

10сработало бы, если бы им было разрешено выводить несколько символов; P. *
Урна с магическим осьминогом

4

C (gcc) , 283 279 209 байтов

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

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

Тот же старый трюк с комментариями здесь, но, по крайней мере, в С это не так важно ;)

  • -4, благодаря ETHproductions !
  • фиксированное Wнаправление и -70 (!) байтов благодаря комментариям ETHproductions

Вам нужен какой-либо из четырех слешей на правом краю прямо над зазором?
ETHproductions

Эй .. хм ... я думаю, на самом деле ... нет. Хороший улов, спасибо :)
Феликс Пальмен

Я думаю, что вы можете упаковать это немного более плотно, переместив каждую из них );}на строку ниже, вот так (хотя я не проверял повороты)
ETHproductions

О, Wпрограмма в вашей текущей настройке в настоящее время дает сбой, потому что snпосле фактического кода есть дополнительные . По-видимому, вы можете исправить это, изменив косую черту прямо перед pmверхней строкой на точку с запятой.
ETHproductions

э-э ... наверное, пора удалить это и начать все сначала: o (первая версия была квадратной чертой, но я думал, что сделаю " умную " вещь, сэкономив несколько байтов ... черт возьми)
Феликс Палмен

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печатает неявный ноль и @завершает программу.

Начиная со второй программы, нам нужно взглянуть на треугольную сетку, чтобы понять поток управления:

введите описание изображения здесь

)   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#

Злоупотребляет comments ( #) как сумасшедший, и тот факт, что одно число, помещенное в конвейер, получает вывод как есть. Вышеуказанные отпечатки 1. Попробуйте онлайн!

Отсюда вы можете легко увидеть, что каждое вращение дает только одно число, которое находится «слева» от комментариев, и, таким образом, есть только одно число, которое будет выводиться за вращение.

Сохранено 9 байт благодаря Wheat Wizard !


Не знаю PowerShell, но не буду это сработает?
Пшеничный волшебник

@WheatWizard Да, действительно. Благодарность!
AdmBorkBork

3

Звездный , 34 байта

  zz  
  +   
   .  
    + 
      

Или с пробелами, показанными как дефисы, чтобы вы могли их видеть:

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

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

Команды в Starry - это +, .и некоторые другие вещи, и то, что они делают, определяется тем, сколько пробелов перед ними: a +с n пробелами выталкивает n −5 в стек, а .с четным числом пробелов печатает его. В zы и новые строки игнорируются полностью.

Перед первым есть 6 пробелов, +поэтому он нажимает 6−5 = 1 и .печатает его.

И повороты:

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

Попробуйте онлайн! Это печатает "8".

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

Попробуйте онлайн! Это печатает "2".

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

Попробуйте онлайн! И это печатает «3».


Какой аккуратный язык. Кроме того, я никогда не говорил, что вы должны заполнить пробелами, чтобы сформировать прямоугольник. Но если ваш источник опирается на пробелы, то я полагаю, вы должны их посчитать.
ЦарМатт

@CzarMatt, спасибо за разъяснения! Я обновил пост.
Не дерево


2

Пакетный, 90 байтов

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

Пакет не имеет комментария. Для комментариев из всей строки, :работает, так как он вводит метку, но мне все еще нужно что-то, чтобы завершить echoкоманду, будучи неактивным в обратном порядке.&:кажется, что это работает, и это все, что мне нужно здесь, но это действительно сбивает с толку Пакет, выдает ошибку, если я не ставлю :перед @следующей строкой, а также как-то забывает напечатать новую строку.


2

МАТЛАБ, 29 17 5 11 байт

Поняв, что вопрос требует отдельных символов ASCII, а не просто отдельного вывода, вот подход MATLAB, который сделает именно это:

%4%
1%3
%2%

Это будет неявно печатать 1, 2, 3 или 4 в зависимости от поворота.


Если подумать, это будет работать и в MATL. Однако тот же счетчик байтов, что и у меня.
Sanchises



1

JS, 17 B

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

Выходы:
север: 2,
восток: 3,
юг: 4,
запад: 0.33333333333….
(как в: 2, 3/1, 4, 1/3)


Добро пожаловать в PPCG! Я не думаю, что это действительно, так как в среде без REPL номер не будет отображаться. (Я могу ошибаться там)
Захари

(Просто добавьте REPL после JS, тогда я думаю, что это нормально)
Zacharý

1
Вывод должен быть одним печатаемым символом ASCII, поэтому, как и мой MATLAB, он недопустим.
Том Карпентер

1

Извините, я имел в виду:

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

и 28B. И выводит как 0,5, 3, 2, 0.


Добро пожаловать в PPCG! Вы должны поместить название языка и количество байтов в заголовок. И это фрагмент, а не полная программа или функция, которая недопустима. (Я могу ошибаться)
Захари

@ Zacharý Я думаю, что codegolf.meta.stackexchange.com/questions/7842/… говорит, что REPL разрешены
SuperStormer

В любом случае, они должны указать, что это JS REPL.
Захари

2
Вывод должен быть одним печатаемым символом ASCII, поэтому, как и мой MATLAB, он недопустим.
Том Карпентер

1

JavaScript (ES6), 86 байт

Выходы 0 для Севера, 1 для Востока, 2 для Юга и 3 для Запада.

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


1

MATL , 11 байт

HxI
xFx
TxK

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

Давайте начнем это в MATL. Основная проблема заключается в том, что MATL просто не работает, если функция требует ввода, если стек пуст. Может быть что - то умное с модификаторами нравится X, Y, Zи &мог бы сделать что - то более короткое, но я не мог найти подходящую комбинацию.

Объяснение: все символы помещают в стек одно целое число и xудаляют все, кроме последнего.


1

Perl, 49 байт

Код 48 байтов + 1 для -p.

Предполагается пустой ввод, который TIO не поддерживает, поэтому новая строка добавляется на место и не используется. Отпечатки Н , Е , S , W .

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.