Wyzwanie dla Kardynała

24

Zadanie

Jesteś odpowiedzialny za tworzenie kompasu.

Wyobraź sobie swój kod źródłowy jako „igłę” kompasu, gdzie bieganie w różnych orientacjach daje wyraźne wyniki.

Obsługiwane orientacje kodu źródłowego to Północ, Wschód, Południe i Zachód.

Przykład

Powiedzmy, że masz kod źródłowy:

ABCD
 J K
WXYZ

Rozważymy to jako orientację północną, obrót o 90 stopni zgodnie z ruchem wskazówek zegara skieruje nas na wschód:

W A
XJB
Y C
ZKD

obracanie ponownie wskazuje południe:

ZYXW
K J 
DCBA

i wreszcie ostatnia rotacja na Zachód:

DKZ
C Y
BJX
A W

Po uruchomieniu, każdy z powyższych przykładów kodu powinien wypisać jeden, wyraźny znak ASCII do wydrukowania, który wybierzesz.

Notatki

Twój kod nie przyjmuje żadnych danych wejściowych.

Puste spacje lub nowe linie nie zapadają się / nie znikają podczas obracania.

Wiodące / końcowe nowe linie są w porządku.

Odpowiedzi mogą być całymi programami lub funkcjami, dlatego są wysyłane do STDOUT lub zwracają wynik funkcji.

Obowiązują standardowe zasady ; najkrótsza odpowiedź w bajtach wygrywa!

CzarMatt
źródło
Czy możemy wydać więcej niż 1 znak?
Pan Xcoder,
1
Czy musimy wypełnić kod spacjami, aby był to idealny prostokąt (i policzyć te spacje w naszym wyniku)? Na przykład, by kształt Kod ten jest ważny, ponieważ pierwszy z nich jest złożenie?
Business Cat
2
Oprócz specyfikacji wyjściowej, myślę, że jest to duplikat
Digital Trauma
1
@BusinessCat Nie musisz wprowadzać kodu w celu utworzenia prostokąta - podany przykład będzie poprawny.
CzarMatt
4
@ Mr.Xcoder Um, jak 4 identyczne programy mogą wydrukować 4 różne znaki ASCII?
ETHprodukcje

Odpowiedzi:

20

Galaretka , 2 bajty

*2

Wypróbuj online!

Zauważ, że głównym wpisem dla programu Jelly jest jego ostatni link, w którym dowolny znak nowej linii podzieli linki), żaden z programów dwuwierszowych nie ma dostępu do swojego górnego linku.

Cztery pełne programy, z których wszystkie pośrednio wypisują swój wynik, to:

Północ :

*2   -> (implicit) zero raised to the power of 2 = 0

Wschód :

*
2    -> literal 2 = 2

Południe :

2*   -> two raised to the power of (implicit) 2 = 4

Zachód :

2
*    -> (implicit) zero raised to the power of (implicit) zero = 1
Jonathan Allan
źródło
1
To jest ostateczna odpowiedź. Dobra robota.
Erik the Outgolfer
19

Japt , 3 2 bajty

gy

W jakiś sposób znalazłem bardzo zhackowane 2-bajtowe rozwiązanie ...


Wyjścia północne0 :

gy

Ponieważ nie ma żadnych niejawnych danych wejściowych, domyślnie jest to 0. gna liczbę zwraca znak liczby niezależnie od jej argumentów ( "y"w tym przypadku).


Wyjścia wschodnie2 :

g
y

W programie wieloliniowym pierwszy wiersz ustawia dane wejściowe na wynik. Jest to w zasadzie brak możliwości, ponieważ gon 0jest 0. Następnie yzwraca GCD 0i ... ponieważ brakuje argumentu, domyślnie jest to 2(dzięki, @Oliver !). Daje to 2jako wynik.


Wyjścia południoweg :

yg

y, jak poprzednio, jest GCD. Ponieważ gcd (0, x) jest x dla dowolnej wartości, yon może 0swobodnie zwrócić swój argument. W tym przypadku argumentem jest "g"wynik.


Wyjścia zachodnie1 :

y
g

yna 0, jak poprzednio, zwraca 2. Jest to następnie przekazywane do g, która (jak już omówiono) jest funkcją znaku na liczbach. Dlatego wynik jest 1.

ETHprodukcje
źródło
8

Java (OpenJDK 8) , 7309 4421 855 bajtów

-2888 bajtów dzięki Leaky Nun
-3566 bajtów dzięki 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//

Wypróbuj online!

Stara wersja

Proste podejście z komentarzami owijającymi kod ^ 2, można to zrobić w prawie każdym języku.
(bardziej czytelny) przykład w pythonie

##p#####
# r  2 #
print 1#
# n  t #
# t  n #
#4 tnirp
# 3  r #
#####p##
Pręt
źródło
Świetna ogólna ocena, teraz muszę tylko wymyślić, jak to zrobić! :)
flawr
Zamiast tego możesz użyć interface M{static void main(String[]a){System.out.println(0);}}do zapisania niektórych bajtów.
Leaky Nun
1
@MagicOctopusUrn nie zostało to zrobione ręcznie c;
Rod
1
@MagicOctopusUrn nie, zrobiłem tę odpowiedź, aby pokazać ten algorytm, język jest nieistotny: 3
Rod
7

Brain-Flak , 33 bajty

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

Wypróbuj online!

Brain-Flak , 33 bajty

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

Wypróbuj online!

Brain-Flak , 36 bajtów

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

Wypróbuj online!

Brain-Flak , 38 bajtów

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

Wypróbuj online!

Brain-Flak , 41 bajtów

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

Wypróbuj online!

Kreator pszenicy
źródło
O kurczę! Pracowałem nad jednym, ale nigdzie nie mogłem się dostać. Pomyślałem, że zajmie to co najmniej 30-40 minut pracy, aby coś wymyślić. To jest niesamowite!
DJMcMayhem
1
To jest bardzo fajne!
CzarMatt
Próbuję zagrać w golfa: P ma jak dotąd 3 pracujących
Christopher
5

Befunge, 17 13 bajtów

Myślałem, że Befunge będzie świetną zabawą dla problemu geometrycznego. Istnieje trywialne rozwiązanie 4x4 podobne do innych tutaj (potrzebuję 3 poleceń), ale udało mi się trochę lepiej.

Edycja: zapomniałem o nowych liniach

Edycja 2: zdałem sobie sprawę, że mogę stworzyć kota

Edycja 3: kot nie żyje

2v3
@.v
.  
1@.

Kitty RIP: <

1.@ 2
^._.^
3 @.4
algmyr
źródło
5

05AB1E , 5 3 bajty

Y'X

Północ , Wschód , Południe , Zachód

Riley
źródło
Imponujące, to było szybkie!
CzarMatt
@MagicOctopusUrn Myślę, że Y'Xzadziała, ale wciąż muszę go wypróbować.
Riley,
@ Riley działa, działa również do przodu i do tyłu, Y'Xjest również poprawny. Wciąż szukam 2-bajtowego; żadna z „komend kropkowych” nie działa, więc wątpię, by istniała.
Magic Octopus Urn
@MagicOctopusUrn Nie sądzę, że istnieje rozwiązanie 2-bajtowe z działaniem linii nowej linii. Jednak nie byłoby trudno zranić Moc.
Riley,
10działałyby, gdyby zezwalały na tworzenie wielu znaków; P. *
Magic Octopus Urn
4

C (gcc) , 283 279 209 bajtów

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

Wypróbuj online!

Ta sama stara sztuczka z komentarzem tutaj, ale przynajmniej w C nie robi się to huuuge ;)

Felix Palmen
źródło
Czy potrzebujesz któregokolwiek z czterech ukośników na prawej krawędzi tuż nad odstępem?
ETHproductions
Hej ... uhm ... Chyba właściwie ... nie. Dobry chwyt, dzięki :)
Felix Palmen
Myślę, że możesz spakować je trochę ściślej, przesuwając każdy );}do poniższej linii, tak (chociaż nie testowałem rotacji)
ETHproductions
Och, Wprogram w twojej bieżącej konfiguracji obecnie kończy się niepowodzeniem, ponieważ snpo rzeczywistym kodzie jest dodatkowy . Najwyraźniej możesz to naprawić, zmieniając ukośnik tuż przed pmgórną linią na średnik.
ETHprodukcje
uhh ... chyba czas, aby usunąć ten i zacząć od nowa: o (pierwsza wersja była kwadratem ukośniki, ale pomyślałem , że zrobię to „ sprytny oszczędność kilka bajtów ... Cholera” rzecz)
Felix palmen
4

Labirynt , 9 bajtów

!
2@2
 !)

Wydruki 0.Wypróbuj online!

 2)
 @!
!2

Wydruki 3.Wypróbuj online!

)!
2@2
  !

Wydruki 1.Wypróbuj online!

 2!
!@
)2

Wydruki 2 . Wypróbuj online!

Wyjaśnienie

Każdy program rozpoczyna się od pierwszej spacji w kolejności odczytywania (tj. Albo w lewym górnym rogu, albo w górnym środkowym znaku), przesuwając się na wschód. Dla pierwszego programu:

!   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.

W przypadku drugiego programu:

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.

W przypadku trzeciego programu:

)   Increment an implicit zero to 1.
!   Print the 1.
    The IP can't keep going east, so it turns south instead.
@   Terminate the program.

W przypadku czwartego programu:

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.
Martin Ender
źródło
4

Wumpus , 7 bajtów

O@$
)))

Wydruki0 . Wypróbuj online!

)O
)@
)$

Wydruki1 . Wypróbuj online!

)))
$@O

Wydruki3 . Wypróbuj online!

$)
@)
O)

Wydruki 2.Wypróbuj online!

Wyjaśnienie

Pierwszy program jest dość prosty: Owypisuje ukryte zero i@ kończy program.

Począwszy od drugiego programu, musimy spojrzeć na trójkątny układ siatki, aby zrozumieć przepływ sterowania:

wprowadź opis zdjęcia tutaj

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

W przypadku trzeciego programu:

wprowadź opis zdjęcia tutaj

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

Czwarty z nich jest naprawdę funky. Linie przerywane wskazują komórki, które nie są wykonywane, ponieważ są pomijane przez $:

wprowadź opis zdjęcia tutaj

$   Skip the ).
$   Skip the @.
))  Increment an implicit zero to 2.
O   Print the 2.
))  Two irrelevant increments.
@   Terminate the program.
Martin Ender
źródło
Super fajne, świetne diagramy.
CzarMatt
3

PowerShell , 20 11 bajtów

#4#
1#3
#2#

Nadużywa komentarzy ( #) jak wariactwo, a fakt, że pojedyncza liczba umieszczona w potoku jest wyświetlana w niezmienionej postaci. Powyższe wydruki 1. Wypróbuj online!

Stąd możesz łatwo zobaczyć, że każdy obrót daje tylko jedną liczbę, która znajduje się po „lewej” stronie komentarza, a więc jest tylko jedna liczba, która będzie wyprowadzana na obrót.

Oszczędność 9 bajtów dzięki Kreatorowi pszenicy !

AdmBorkBork
źródło
Nie znasz PowerShell, ale czy to nie zadziała?
Wheat Wizard
@WheatWizard Tak, rzeczywiście. Dzięki!
AdmBorkBork
3

Gwiaździsta , 34 bajty

  zz  
  +   
   .  
    + 
      

Lub ze spacjami pokazanymi jako łączniki, abyś mógł je zobaczyć:

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

Wypróbuj online!

Komendy w Starry to + , .i kilka innych rzeczy, i to, co robią jest określana przez ile przestrzenie są przed nimi: a +z n obowiązuje popycha n -5 do stosu oraz .o liczbie miejsc odbitek nawet nim. Thez s i nowe linie są ignorowane w całości.

Przed pierwszym jest 6 spacji, +więc wypycha 6-5 = 1 i .drukuje.

I obroty:

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

Wypróbuj online! To wyświetla „8”.

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

Wypróbuj online! To wyświetla „2”.

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

Wypróbuj online! I to wyświetla „3”.

Nie drzewo
źródło
Co za fajny język. Nigdy też nie powiedziałem, że musisz wypełnić białe znaki, aby utworzyć prostokąt. Ale jeśli twoje źródło opiera się na spacjach, to przypuszczam, że musisz je policzyć.
CzarMatt,
@CzarMatt, dzięki za wyjaśnienie! Zaktualizowałem post.
Nie drzewo,
2

Partia, 90 bajtów

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

Batch tak naprawdę nie ma znaku komentarza. W przypadku komentarzy obejmujących całą linię :działa, ponieważ wprowadza etykietę, ale nadal potrzebuję czegoś, aby zakończyć echopolecenie, będąc odwróconym opcją. &:wydaje się działać, co jest wszystkim, czego potrzebuję tutaj, ale naprawdę wprowadza w błąd Batch, popełniając błąd, jeśli nie wstawię znaku :przed @następnym wierszem, a także w jakiś sposób zapominam o wydrukowaniu nowego wiersza.

Neil
źródło
2

MATLAB, 29 17 5 11 bajtów

Po zrozumieniu, że pytanie wymaga pojedynczych znaków ASCII, a nie tylko wyraźnego wyniku, oto podejście MATLAB, które zrobi to:

%4%
1%3
%2%

Spowoduje to niejawne wydrukowanie 1, 2, 3 lub 4 w zależności od obrotu.

Tom Carpenter
źródło
Pomyśl o tym, działałoby to również w MATL. Jednak te same bajty liczą się jak moje.
Sanchises,
1

JS, 17 B.

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

Wyjścia:
północ: 2,
wschód: 3,
południe: 4,
zachód: 0,333333333333….
(jak w: 2, 3/1, 4, 1/3)

gfdfgdds
źródło
Witamy w PPCG! Nie sądzę, że jest to poprawne, ponieważ w środowisku bez REPL liczba nie będzie wyświetlana. (Mogę się mylić)
Zacharý
(Wystarczy dodać REPL po JS, więc myślę, że jest w porządku)
Zacharý
1
Wyjście powinno być pojedynczym drukowalnym znakiem ASCII, więc podobnie jak mój MATLAB, jest to nieprawidłowe.
Tom Carpenter,
1

Przepraszam, miałem na myśli:

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

i 28B. I wyniki jako 0,5, 3, 2, 0.

gdsgsgsgsgsgsgdsg
źródło
Witamy w PPCG! W nagłówku należy umieścić nazwę języka i liczbę bajtów. I to jest fragment kodu, a nie pełny program lub funkcja, która nie jest poprawna. (Mogę się mylić)
Zacharý
@ Zacharý Myślę, że codegolf.meta.stackexchange.com/questions/7842/… mówi, że REPL są dozwolone
SuperStormer
Tak czy inaczej, powinni określić, że jest to JS REPL.
Zacharý
2
Wyjście powinno być pojedynczym drukowalnym znakiem ASCII, więc podobnie jak mój MATLAB, jest to nieprawidłowe.
Tom Carpenter,
1

JavaScript (ES6), 86 bajtów

Wyjścia 0 dla Północy, 1 dla Wschodu, 2 dla Południa i 3 dla Zachodu.

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

kamoroso94
źródło
1

MATL , 11 bajtów

HxI
xFx
TxK

Wypróbuj online!

Zacznijmy od MATL. Głównym wyzwaniem jest to, że MATL po prostu zawodzi, jeśli funkcja wymaga danych wejściowych, jeśli stos jest pusty. Może coś z modyfikatorów, jak mądry X, Y,Z i& mógłby zrobić coś krótszego, ale nie mogłem znaleźć odpowiednią kombinację.

Objaśnienie: wszystkie postacie wypychają na stos pojedynczą liczbę całkowitą i xusuwają wszystkie oprócz ostatniej.

Sanchises
źródło
1

Perl, 49 bajtów

Kod 48 bajtów + 1 dla -p.

Zakłada puste dane wejściowe, których TIO nie obsługuje, więc nowa linia jest dodawana i nie jest używana. Wydruki N , E , S , W .

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

Wypróbuj online!

Dom Hastings
źródło
1

C (gcc) , 120 bajtów

Miałem nadzieję na większą synergię między wariantami.

//}=)f8 ///
// c{(7 ///
   ;rr; //}
        ;c=
78; /// r{)
f(r /// r(f
){r /// ;38
=c;
}// ;rr;
/// 9({c //
/// 6f)=}//

Północ

Wschód

południe

Zachód

gastropner
źródło