Кардинальний виклик кодексу


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
Чи потрібно прошивати код пробілами, щоб він був ідеальним прямокутником (і рахувати ці пробіли в нашому рахунку)? Наприклад, чи дійсний такий код у формі , враховуючи, що перше - це подання?
Ділова кішка

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
Це остаточна відповідь. Молодці.
Erik the Outgolfer

19

Japt , 3 2 байти

gy

Якось якось я знайшов надзвичайно хакітне 2-байтове рішення ...


Вихід на північ0 :

gy

Оскільки немає неявного введення, він за замовчуванням 0. gна число повертає знак числа незалежно від його аргументів ( "y"в даному випадку).


Вихід на схід2 :

g
y

У багаторядковій програмі перший рядок задає вхід до його результату. Це в основному не-оп, оскільки gна 0є 0. Потім yповертає GCD 0та ... оскільки він не має аргументу, він за замовчуванням 2(спасибі, @Oliver !). Це дає 2як вихід.


Вихід на південьg :

yg

y, як і раніше, є GCD. Оскільки gcd (0, x) є x для будь-якого значення, він бере yна 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);}}замість цього, щоб зберегти кілька байт.
Leaky Nun


1
@MagicOctopusUrn це не було зроблено вручну c;
Прут

1
@MagicOctopusUrn так, я зробив цю відповідь, щоб показати цей алгоритм, мова не має значення: 3
пн

7

Мозок-Флак , 33 байти

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

Спробуйте в Інтернеті!

Мозок-Флак , 33 байти

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

Спробуйте в Інтернеті!

Мозок-Флак , 36 байт

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

Спробуйте в Інтернеті!

Мозок-Флак , 38 байт

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

Спробуйте в Інтернеті!

Мозок-Флак , 41 байт

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

Спробуйте в Інтернеті!


О ні! Я працював над одним, але нікуди не міг потрапити. Я думав, що знадобиться принаймні 30-40 хвилин роботи, щоб щось розібратися. Це дивно!
DJMcMayhem

1
Це дуже круто!
CzarMatt

Намагаючись у вас у гольф: P поки що 3 з них працюють
Крістофер


5

Befunge, 17 13 байт

Я думав, що Befunge буде цікавим для геометричної проблеми. Тут є тривіальне рішення 4х4, подібне до інших (мені потрібні 3 команди), але мені вдалося трохи краще.

Редагувати: забув про нові рядки

Правка 2: зрозуміла, що можу створити кота

Правка 3: кішка мертва

2v3
@.v
.  
1@.

RIP кошеня: <

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

5

Вражаюче, це було швидко!
CzarMatt

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

@ Riley це робить, також воно працює вперед і назад, Y'Xтакож є дійсним. Ще шукаю 2-байт; жодна з «точкових команд» для цього не працює, тому я сумніваюся, що вона існує.
Magic Octopus Urn

@MagicOctopusUrn Я не думаю, що існує 2-байтове рішення з тим, як працюють нові рядки. Силу жорстоко пограбувати не важко.
Райлі

10працювали б, якби вони дозволили отримати кілька символів для виходу; P. *
Magic Octopus Urn

4

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

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

Спробуйте в Інтернеті!

Той же самий старий коментар Хитрість тут, але , по крайней мере, в C це не отримує huuuge ;)

  • -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друкує неявний нуль і @припиняє програму.

Починаючи з другої програми, нам потрібно подивитися трикутну структуру сітки, щоб зрозуміти потік управління:

enter image description here

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

Для третьої програми:

enter image description here

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

Четверте - це, де це стає справді фанкі. Штрихові лінії вказують клітинки, які не виконуються, оскільки вони пропускаються $:

enter image description here

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

Зловживання коментарями ( #), як божевільні, і той факт, що одне число, розміщене на трубопроводі, отримує як є. Наведені вище відбитки1 . Спробуйте в Інтернеті!

Звідси ви легко бачите, що кожне обертання дає лише одне число, яке знаходиться зліва від коментарів, і тому є лише одне число, яке виводиться за обертання.

Збережено 9 байт завдяки пшеничному майстру !


Не знаю, що працює з оболонками, але хіба це не спрацювало?
Пшеничний майстер

@WheatWizard Так, справді. Спасибі!
AdmBorkBork

3

Зоряний , 34 байти

  zz  
  +   
   .  
    + 
      

Або з пробілами, показаними як дефіси, щоб ви могли їх бачити:

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

Спробуйте в Інтернеті!

Команди в зірці є +, .і деякі інші речі, і те, що вони роблять, визначається тим, скільки пробілів перед ними є: a +з n пробілами висуває n −5 до стеку і .з парним числом пробілів друкує його. Thez и і нові рядки ігноруються повністю.

Перед першим є 6 пробілів, +тому він натискає 6−5 = 1, і. друкує його.

І обертання:

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

Спробуйте в Інтернеті! Це друкує "8".

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

Спробуйте в Інтернеті! Це друкує "2".

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

Спробуйте в Інтернеті! І це друкує "3".


Яка акуратна мова. Крім того, я ніколи не говорив, що вам доведеться прокладати пробіл, щоб утворився прямокутник. Але якщо ваш джерело покладається на пробіли, то, я думаю, вам доведеться їх порахувати.
CzarMatt

@CzarMatt, дякую за роз’яснення! Я оновив публікацію.
Не дерево


2

Пакет, 90 байт

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

Партія насправді не має характеру коментарів. Що стосується коментарів на весь рядок, це :працює, оскільки він вводить мітку, але мені все одно потрібно щось скасувати echoкоманду, не будучи опцією, коли вона перевернута. &:Здається, працює, що тут все, що мені потрібно, але це дійсно бентежить Batch, помиляючись, якщо я не ставлю а :перед @наступним рядком, а також якось забуваючи надрукувати новий рядок.


2

MATLAB, 29 17 5 11 байт

Зрозумівши, що питання вимагає, щоб окремі символи ASCII були не просто окремим результатом, ось такий підхід MATLAB, який зробить саме це:

%4%
1%3
%2%

Це буде неявно друкувати 1, 2, 3 або 4 залежно від обертання.


Подумайте, це також спрацює в MATL. Хоча той самий байт вважається мій.
Санчіз

2

Кардинал , 20 17 12 11 байт

.$
Z%"
+$v

Спробуйте в Інтернеті!

Весь цей час і ніхто не відповідав кардиналам? Цей перший вихідний 0.

Схід

 +Z.
 $%$
 v"

Спробуйте в Інтернеті!

Виходи 1.

Південь


v$+
"%Z
 $.

Спробуйте в Інтернеті!

Виводить пробіл.

Захід

 "v
$%$
.Z+

Спробуйте в Інтернеті!

Виходи v.



1

JS, 17 Б

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

Виходи:
Північ: 2,
Схід: 3,
Південь: 4,
Захід: 0,33333333333….
(як у: 2, 3/1, 4, 1/3)


Ласкаво просимо до PPCG! Я не думаю, що це дійсно, оскільки в середовищі, що не відповідає REPL, номер не відображатиметься. (Я можу помилятися там)
Zacharý

(Просто додайте REPL після JS, тоді я думаю, що це добре)
Zacharý

1
Вихід повинен бути одним символом для друку ASCII, тому як і мій MATLAB, це недійсно.
Том Карпентер

1

Вибачте, я мав на увазі:

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

і 28Б. І виводи як 0,5, 3, 2, 0.


Ласкаво просимо до PPCG! Ви повинні помістити ім'я мови та кількість байтів у заголовку. І це фрагмент, а не повна програма чи функція, яка недійсна. (Я можу помилятися)
Zacharý

@ Zacharý Я думаю, що codegolf.meta.stackexchange.com/questions/7842/… каже, що дозволені
файли

У будь-якому випадку вони повинні вказати, що це відповідь JS.
Zacharý

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видаляють усі, крім останнього.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.