Napisz prostokątny program, który wyświetli liczbę obrotów

63

Tytuł mówi wszystko. Twoim celem jest napisanie programu, który utworzy aw × h prostokąta znaków, który można obracać i ponownie uruchomić, aby wygenerować liczbę wykonanych obrotów o 90 ° w kierunku przeciwnym do ruchu wskazówek zegara (CCW).

Na przykład, jeśli program 3 × 2

abc
def

rozwiązany problem, początkowo generowałby 0, a kolejne obroty o 90 ° CCW

cf    fed    da
be    cba    eb
ad           fc

wypisze odpowiednio 1, 2 i 3.

Używanie komentarzy sprawia, że ​​jest to trywialne zadanie w większości języków. Na przykład w Ruby można to zrobić w prostokącie 7 × 7:

###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###

Wyzwanie polega na zrobieniu tego bez żadnych komentarzy.

Punktacja

Twój wynik to w * h, obszar prostokąta. Nowe linie są wykluczone. Innymi słowy, code-golf, nowe linie nie są liczone.

Wynik dla przykładu Rubiego to 49 (choć oczywiście jest on nieprawidłowy, ponieważ zawiera komentarze).

Notatki

  • Twój kod musi być naprawdę prostokątny bez brakujących znaków na końcu wiersza.
  • Jeśli chcesz, możesz wypisać inne legalne wartości „mod 90 °” zamiast 0 1 2 3. Więc 8 jest w porządku zamiast 0, a -1 jest w porządku zamiast 3 itd.
  • Dane wyjściowe mogą przejść do konsoli lub do pliku.
  • Obowiązują standardowe luki.

Mam nadzieję, że moje pierwsze pytanie naprawdę intryguje niektórych ludzi. Cieszyć się!

Hobby Calvina
źródło
1
Mówiąc ściślej o tym, co to jest komentarz, czy komentarz jest nieocenionym kodem? Nieprzetworzony kod?
isaacg
Mam na myśli, że żaden z tradycyjnych „znaków komentarza” w twoim języku nie powinien pojawiać się w żadnej z 4 rotowanych wersji. W przypadku C ++ dwa ukośniki obok siebie nigdy nie powinny się pojawiać, chociaż można użyć jednego osobno. Podobnie z / *. Mam nadzieję, że to wyjaśnia.
Calvin's Hobbies
Co z językami, które nie mają znaków komentarza?
isaacg
Czy kod jak echo 0;exit;ew bash jest dozwolony?
jimmy23013
Jeśli nie ma sposobu na komentarz, nie musisz się martwić. @ user23013 To bash jest w porządku.
Calvin's Hobbies

Odpowiedzi:

43

APL (1x3 = 3)

5!3

To rozwiązanie wykorzystuje dodatkową zasadę, że każde wyjście, które jest poprawne mod 4 działa.

W APL x!yjest liczbą sposobów wybierania xelementów y, zwanych potocznie binom(y,x)lub choose(y,x). Sprawdźmy, czy każdy obrót daje prawidłową odpowiedź.

0 obrotów

5!3

Nie ma możliwości wybrania 5 elementów z 3, więc otrzymujemy 0, które jest automatycznie drukowane.

1 obrót w lewo

3
!
5

APL z radością ocenia każdą linię, uzyskując numer 3, operator !, a następnie numer 5, wypisując tylko ostatnią z nich ( 5), czyli 1 mod 4.

2 obroty w lewo

3!5

To jest binom(5,3), czyli (5*4*3*2*1)/(3*2*1)/(2*1) = 102 mod 4.

3 obroty w lewo

5
!
3

Tak jak poprzednio, tylko ostatnio oceniana wartość 3to drukarka.

Tak naprawdę nie znam APL, więc proszę powiedz mi, jeśli popełniłem błąd. Znalazłem to metodą prób i błędów jako pierwszego języka na tej stronie, który:

  1. Automatycznie drukuje wynik wyrażenia
  2. Biorąc pod uwagę wiele wierszy wyrażeń, wypisuje tylko ostatni
  3. Nie ma problemu z operatorem stojącym samotnie na linii
  4. Poprawiono operatorów
  5. Ma arytmetyczny operator binarny o jednym znaku, który jest asymetryczny (aRb! = BRa) i wystarczająco elastyczny, aby zwracać różne liczby.

Dla (5) przeszedłem listę funkcji dyadycznych APL . Moją pierwszą operacją kandydującą była dzielenie całkowite /C i Python 2, ale podział APL ÷daje liczby zmiennoprzecinkowe . Potęgowanie jest kuszące, ale nie dlatego, że ai a^bmają ten sam parytet ale dostał przez kolejnych obrotów (chyba b=0, ale potem b^a=0). Operatory logiczne, takie jak <dawanie 0i 1odstęp 180 stopni, co nie działa. W końcu znalazłem operator dwumianowy !i wypróbowałem liczby, dopóki nie dostałem takiej pracy.

Dzięki Quincunx za jego pewność, że istnieje rozwiązanie mniejsze niż 2x2.

xnor
źródło
6
Człowieku, miło jest zobaczyć odpowiedź, która używa nie-ezoterycznego języka i wygrywa .
Stuart P. Bentley,
Zaakceptowałem tę odpowiedź, ponieważ jest ona najkrótsza według moich zasad, ale chcę, aby odpowiedź Ventero ( codegolf.stackexchange.com/a/33162/26997 ) była bardzo zaszczytną wzmianką. Wynika z prawdziwej istoty problemu.
Calvin's Hobbies
Działa również w J w dokładnie takiej formie, jaką podałeś.
1ıʇǝɥʇuʎs
Czy APL nie drukuje zarówno 3, jak i 5 przy obrocie o 90 °?
FUZxxl,
@FUZxxl Myślę, że to działa tylko w ngn / apl.
Adám
40

Rubinowy, 7 × 9 (63)

 30;p  
0||p=p 
0|0;p;p
;p;p|p;
p=p ||0
;p   p;
2||p =p
 00;1  
     p 

Trochę dłużej niż inne rozwiązanie, ale przynajmniej to rozwiązanie nie zależy od jakiegokolwiek niejawnego drukowania lub nadużycia reguł. Dla wszystkich czterech obrotów cały kod jest analizowany, a poza zwarciem wszystkie są wykonywane. Co zaskakujące, w kodzie absolutnie nie ma symetrii

To rozwiązanie polega na tym, że nadal można wywołać pfunkcję (która służy do drukowania liczb), nawet jeśli zmienna o tej samej nazwie została już zdefiniowana. Na przykład coś takiego p pwywołuje funkcję pze zmienną pjako argumentem (w ten sposób wypisuje wartość p).

Wyjaśnienie niektórych typowych wyrażeń używanych w kodzie:

  • p: Jak wspomniano powyżej, jest to wywołanie funkcji lub zmienna. Gdy zmienna nie jest zdefiniowana, wywołuje to funkcję pbez argumentów, co nic nie robi i zwraca nil.
  • p p: Drukuje zmienną p.
  • p|x: Kiedy pjest funkcją, jest identyczna z nil|x, która zwraca true / false w zależności od wartości x. Jeśli pjest liczbą całkowitą, jest bitowa lub. Tak czy inaczej, to stwierdzenie nie ma skutków ubocznych.
  • p=p||x: Efektywnie taki sam jak p||=x(przypisanie warunkowe) z tą zaletą, że jest poprawny pod względem składniowym i nie ma możliwości odwrócenia.

Wersja symetryczna (9 × 10 = 90)

    p    

  0 * 0  
  00100  
  0||2* p
p *0||0  
  00300  
  0 * 0  

    p    

Jest to najkrótsze rozwiązanie symetryczne (C 2 przy ignorowaniu liczb do wydrukowania), jakie mogłem wymyślić.

Skrypt testowy

Oto skrypt testowy do weryfikacji powyższego kodu ( #na końcu linii zostały dodane, aby białe znaki nie zostały usunięte i zostały usunięte przed wykonaniem):

rotate=->s{s.split($/).map{|i|i.chars.reverse}.transpose.map(&:join).join($/)}

s=<<EOD.gsub(?#,"")
 30;p  #
0||p=p #
0|0;p;p#
;p;p|p;#
p=p ||0#
;p   p;#
2||p =p#
 00;1  #
     p #
EOD


puts ">>> 0°"
eval s
puts ">>> 90°"
eval rotate[s]
puts ">>> 180°"
eval rotate[rotate[s]]
puts ">>> 270°"
eval rotate[rotate[rotate[s]]]
Ventero
źródło
10
To może nie być najkrótszy, ale właśnie tego rodzaju zaciemnionego blasku szukałem: D
Hobby Calvina
1
@ Calvin'sHobbies Czy spełnia to ograniczenie „Twój kod musi być naprawdę prostokątny bez brakujących znaków na końcu wiersza”?
Joshua Taylor,
@JoshuaTaylor Jest prostokątny, niektóre linie są po prostu wypełnione spacjami (co, o ile mi wiadomo, jest postacią). Gdyby to nie spełniało ograniczeń z jakiegokolwiek powodu, zamiast tego mógłbym również uzupełnić linie średnikami ...
Ventero
@ Ventero Mam nadzieję, że to legalne; Próbuję po prostu zrozumieć, o co chodziło w pytaniu.
Joshua Taylor
1
@Ventero Wypełnienie spacjami (lub naprawdę wszystko oprócz komentarzy i nowych linii) jest w porządku.
Calvin's Hobbies
33

GolfScript, 4 (2x2)

43
12

Drukuje, 4312co jest 0(mod 4). Drukowane są rotacje 3241(1 mod 4), 2134(2 mod 4) i 1423(3 mod 4).

Zainicjowane przez:

Jeśli chcesz, możesz wypisać inne legalne wartości „mod 90 °” zamiast 0 1 2 3. Więc 8 jest w porządku zamiast 0, a -1 jest w porządku zamiast 3 itd.

W rzeczywistości istnieje wiele zestawów liczb, dla których to działa. Znalazłem je w tym programie Python:

def f(a,b,c,d):
    return int("%i%i%i%i"%(a,b,c,d))
for a in range(10):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                candidate = f(a,b,c,d) % 4 == 0
                candidate &= f(b,d,a,c) % 4 == 1
                candidate &= f(d,c,b,a) % 4 == 2
                candidate &= f(c,a,d,b) % 4 == 3
                if candidate:
                    print("%i, %i, %i, %i"%(a,b,c,d))

Chociaż program wypisuje 0s (co prawdopodobnie nie działałoby), prawidłowe rozwiązania mają formę

ab
cd

Gdzie a∈{4,8}, b∈{3,7}, c∈{1,5,9}, d∈{2,6}. IE, (a,b,c,d)∈{4,8}×{3,7}×{1,5,9}×{2,6}czyli 24 rozwiązania.

Justin
źródło
7
Bardzo mądry. Szczerze myślałem, że ta dodatkowa zasada jest nieszkodliwa.
Calvin's Hobbies
4
@ Wszyscy Pamiętaj, że nie jest to najmniejszy możliwy program. Możliwy jest 2x1 i jest on najmniejszy z możliwych. Więc zabierz się do pracy!
Justin
1
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail
2
@Quincunx No to opublikuj!
tomsmeding
1
Zakładając, że język tutaj wypisuje po prostu ostatnią liczbę, którą ocenia, nie sądzę, aby istniało rozwiązanie 1 * n (jedna liczba) n. Jest tak, ponieważ parzystość liczby całkowitej jest równa parzystości jej skrajnej prawej cyfry, ale obroty w odstępie 90 stopni muszą dawać różne parzystości. Tak, 2*2jest minimalna dla tego podejścia.
xnor
30

Python - 23 x 23 = 529

Ok, to pytanie ma już zwycięzcę, ale nie ma jeszcze rozwiązania w języku Python. Więc pomyślałem o tym - ciężko! - i znalazł sposób na sprawienie, by nieporęczne printpolecenie działało w dowolnym kierunku, nie powodując błędów po przeanalizowaniu z jednego z pozostałych kierunków.

Przełomem była następująca linia:

'"\'';forward_code;"';backward_code;""\'"''

Podczas forward_codewykonywania backward_codejest częścią ciągu i dlatego nie jest drukowana. To jest dokładnie na odwrót podczas czytania wstecz.

Tak więc w połączeniu z dwoma dodatkowymi kierunkami i dopracowanymi, aby uzyskać prawidłowe dopasowanie wszystkich cytatów, otrzymuję następujące rozwiązanie:

''"''""''"''"''"'"''""'
"  ""                 "
"  \\                 "
'"\'';print 1;"'""\'"''
'"\''"';3 tnirp;""\'"''
"  ;""                "
"  p'                 "
'  r;                 '
'  i2                 '
"  n                  "
"  tt                 "
'   n                 '
'  4i                 '
"  ;r     .-=<>=-.    "
' \"p    /__----__\   '
"  ';'  |/ (')(') \|  "
"  ""    \   __   /   "
'  ""    .`--__--`.   '
"  \\   /    :|    \  "
'  ''  (_)   :|   (_) '
'  ""    |___:|____|  '
"  ''    |_________|  "
''"''""''"''"''"'"''""'

Edycja: Znalazłem sposób na poradzenie sobie z tą białą spacją. ;)

Falko
źródło
Czy jest jakiś sposób na umieszczenie p=printw pliku, skoro masz obecnie tyle białych znaków? (Python 3, oczywiście)
isaacg
@isaacg: Nie wydaje mi się. Definicja p=printjest również długa. A co ważniejsze: nie możesz użyć ponownie ppo obróceniu kodu!
Falko
Chyba masz rację. Ale są dwa złe.
isaacg
12
Nominowany: Nagroda za najlepsze wykorzystanie białego znaku.
primo
24

BASIC, 64

Nie wygra, ale i tak jest. (Testowany w Chipmunk Basic )

?0:END:?
:::::::1
D:::::::
N::::::E
E::::::N
:::::::D
3:::::::
?:DNE:2?

Uwaga: ?jest skrótem PRINTw różnych dialektach języka BASIC. Chociaż w kodzie jest wiele błędów składniowych, ENDinstrukcja w pierwszym wierszu uniemożliwia ich odczytanie przez interpretera.

piskliwy kostuch
źródło
1
W rzeczywistości twoje wyniki wynoszą odpowiednio 64 i 16. Newlines się nie liczą. A dlaczego nie podzielić odpowiedzi?
Justin
Och, tęskniłem za tym. Rozdzieliłbym odpowiedzi, gdyby nie zajmowali wspólnego ostatniego miejsca. W przeciwnym razie nie ma większego sensu :-)
piskliwy ossifrage
Już nie jesteś ostatni :-)
Justin
Dałbym ci punkty bonusowe za uzyskanie niezłej okrągłej liczby postaci. Rzeczywisty +1 jest jednak do twórczego wykorzystania END:)
CompuChip
21

Pyth , 9 znaków (3x3)

0 1

3 2

W pyth wszystko jest drukowane domyślnie, chyba że jest poprzedzone spacją. Linie po pierwszym wierszu służą do wprowadzania danych przez użytkownika i nie są oceniane w tym programie.

Kolejny sposób na uzyskanie 9 znaków:

"0"
3 1
"2"

Pyth 1.0.5 , 4 znaki

Podczas gdy ostatnie zmiany w Pyth utrudniają generowanie liczb dwucyfrowych (zmiana, którą rozważam cofnąć), starsze wersje Pytha mają łatwe generowanie liczb dwucyfrowych, co w połączeniu z niejawnym drukowaniem i faktem, że wszystkie linie oprócz pierwszej są ignorowane, daje następujące rozwiązanie:

32
41

Drukuje 32,1,14,43.

isaacg
źródło
Cóż, to po prostu zabawa. +1
patrz
Shucks, miałem nadzieję, że to nie takie łatwe. Brakuje 3 znaków w środkowej linii, ale zgaduję, że to z powodu automatycznego formatowania tutaj.
Calvin's Hobbies
@ Calvin'sHobbies Przepraszam, rozumiem. Roztrzaskał moje spacje.
isaacg
@Quincunx Och, tęskniłem za tą częścią punktacji. Dzięki za poprawki.
isaacg
18

Befunge, 16 lat

0.@1
@@@.
.@@@
[email protected]

Objaśnienie: Cyfry od, 0aby 9wypchnąć odpowiednią liczbę na stos, .wyskakuje wartość ze stosu i drukuje ją jako liczbę całkowitą, a następnie @kończy program.

(testowane tutaj )

piskliwy kostuch
źródło
Czy to nie generuje liczby obrotów w kierunku przeciwnym do ruchu wskazówek zegara?
patrz
@ TheRare Tak. To robi. Tak powinno być.
Justin
1
Wydaje mi się, że jestem całkowicie ślepy. Mają +1 z tego powodu.
patrz
Befunge !!! Nadal mój ulubiony język wszechczasów na wieki wieków!
steffen
16

Piet, 49

Program Piet

Postanowiłem tylko użyć żółtych i czerwonych kolorów i postarać się, aby był mniej więcej symetryczny. Po obróceniu drukuje 0, 1, 2 lub 3. Wyjście z programu w Piet jest trudne i niestety zajmuje około połowy miejsca na zdjęciu.

Tryth
źródło
1
Wydaje się, że jest to odpowiednie narzędzie do pracy.
Robert Fraser,
O_o, płakałem, gdy dowiedziałem się o tym języku programowania! Właśnie. Piękny. Na tak wiele sposobów! Dziękuję Ci!
steffen
15

GNU dc , 6 (3x2)

Myślę, że jest to najkrótsza odpowiedź, aby nie wymagać relaksacji reguły „mod 90 °”:

3z1
0p2

Wyjścia 0, 1, 2albo 3na każdy obrót.

Dla 0, 2i 3rotacją po pprostu wyskakuje i drukuje ostatni numer dosłownego zostały zepchnięte na stosie. W celu 1obrotu zwypycha bieżącą głębokość stosu (1) na stos, a następnie pwyskakuje i drukuje go.

Cyfrowa trauma
źródło
1
Więc 311 / 0p2 też by działało?
Neil
@Neil Tak, dobry. Nie wpływa to jednak na wynik golfa :)
Cyfrowa trauma
Wpływa to na wynik golfa, ale negatywnie, ponieważ znaki nowej linii nie są liczone, ale ukośniki są.
M.Herzkamp
@ M.Herzkamp Moje założenie było takie, że Neil miał na myśli 311\n0p2, gdzie \njest postać nowej linii. W przeciwnym razie byłoby to bez znaczenia w kontekście dc.
Cyfrowa trauma
10

GolfScript, 9 (3x3)

0}1
} }
3}2

Coś w rodzaju nadużywania zasad. }Zdarza, aby zakończyć program, jeśli nie ma dopasowania {, a zawartość stosu są drukowane na końcu programu.

Justin
źródło
Nie zapomnij policzyć nowej linii jako znaku.
isaacg
2
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail
Nie wiedziałem, że }można to niezrównoważić. Niezła sztuczka.
Peter Taylor
9

JavaScript, 4

03
12

Po uruchomieniu tego programu (lub rotacji tego programu) w konsoli javaScript, tylko ostatni wiersz jest oceniany i powtarzany w konsoli.

Więc:

12 modulo 4 == 0
01 modulo 4 == 1
30 modulo 4 == 2
23 modulo 4 == 3

Oto wszystkie podobne programy 2x2, które również działają:

03
12

03
16

03
52

03
56

03
92

03
96

07
12

07
16

07
52

07
56

07
92

07
96

43
12

43
16

43
52

43
56

43
92

43
96

47
12

47
16

47
52

47
56

47
92

47
96

83
12

83
16

83
52

83
56

83
92

83
96

87
12

87
16

87
52

87
56

87
92

87
96

Innymi słowy

ab
cd

gdzie a jest w [0,4,8], b jest w [3,7], c jest w [1,5,9], a d jest w [2,6]

Xem
źródło
8

CJam / GolfScript - 3 * 3

2;3
;7;
1;0

Średnik pokazuje poprzedni numer, dlatego drukowany jest tylko prawy dolny róg.

aditsu
źródło
6

Aheui , 8

바몽희뷸
뷷희몽반

Ponieważ Aheui nie ma litery, która wypycha 1 na stos, postanowiłem wydrukować 0, 5, 2 i 3.

Objaśnienie: 바 i 반 wciskają odpowiednio 0 i 2 na stos i przesuwają kursor w prawo o jeden znak. 뷸 i 뷷 pchają odpowiednio 5 i 3 na stos i przesuwają kursor w dół o dwa znaki. 몽 wyskakuje i drukuje liczbę na stosie i przesuwa kursor o jeden znak w górę. 희 kończy program.

fsfd1100
źródło
5

JavaScript

(Wprowadzony do konsoli przeglądarki, powłoki lub innej REPL, więc wynik jest drukowany)

1+2
-3-
4+5

Powinien działać dla każdego innego języka z wyrażeniami, nieistotnymi znakami nowej linii i automatycznym drukowaniem wyniku.

lrn
źródło
2
Podoba mi się pomysł, ale czy nie zawsze drukuje 1 (mod 4)?
zennehoy
2
Prostsza odmiana może być '2,3\n,0,\n1,0'.
Keen
Po obróceniu daje różne wyniki. @Cory, to sprytne! Jestem zbyt przyzwyczajony do pracy w języku bez operatora przecinka.
lrn
@ lrn Tak, daje różne wyniki, ale nie jest to wymóg. Program musi wypisać 0 (mod 4), gdy nie jest obrócony, oraz 1, 2 lub 3 (mod 4), gdy obrócony odpowiednią liczbę razy ...
zennehoy
Druga nuta oryginalnego plakatu dopuszcza dowolne wartości dla obróconych wersji, o ile są one odrębne.
lrn
5

Matlab / Octave - 144 100

Gra w golfa: 10 x 10 = 100

....d.....
....i.....
....s.....
... p2 ...
disp  1...
...3  psid
... 4p ...
.....s....
.....i....
.....d....

Alternatywne rozwiązanie: 15 x 15 = 225

.......d.......
.......i.......
.......s.......
...    p    ...
...         ...
...    4    ...
...    .    ...
disp 1...3 psid
...    .    ...
...    2    ...
...         ...
...    p    ...
.......s.......
.......i.......
.......d.......
Falko
źródło
Czy pierwsze rozwiązanie można zmniejszyć do rozmiaru 8x8, jeśli operatorzy wirtualni i horyzontalni „disp” share letter „p”? ...d.... ...i.... ...s2... disp 1.. ..3 psid ...4s... ....i... ....d...
AMK
@AMK: Niestety powoduje to błąd składniowy w wierszu ..3 psid. Potrzebujesz co najmniej trzech kropek na początku każdej linii, aby wskazać podział linii i zignorować pozostałe znaki.
Falko
5

Perl 5x7 (35)

1+p+t+1
-print+
1+i+i+1
+tnirp+
1+t+p+1

Trochę późno na imprezę. Samotnik -określa, która liczba jest drukowana.

primo
źródło
4

JavaScript, 3

2
1
4

Działa ... w bazie 7.

Wersja Base 9:

2
7
0

Wyjaśnienie

Gdy zostanie uruchomiony interaktywnie, np. Z konsoli debugowania, zostanie wyświetlona wartość ostatniej instrukcji / wyrażenia.

4 7 = 4 100 (mod 4 )
412 7 = 205 101 (mod 4 )
2 7 = 2 102 (mod 4 )
214 7 = 109 103 (mod 4 )

Podobne rozwiązania można znaleźć dla dowolnej nieparzystej bazy.

użytkownik29124
źródło
Oznaczono to, ale nie rozumiem pytania ani odpowiedzi, więc musiałem je pominąć. Byłoby miło, gdyby downvoters zostawił komentarz wyjaśniający ich opinie.
Rainbolt
@Rusher Podejrzewam, że nie zrozumieli 7-bitowej bazy.
primo
3

Befunge, 12 (6x2)

Udało mi się wprowadzić niewielką poprawę w stosunku do istniejącej odpowiedzi Befunge, wykorzystując w pełni dwuwymiarowy charakter Befunge i ustawiając ścieżkę kodu pionowo w dwóch orientacjach.

[email protected]
[email protected]

Wypróbuj online: od 0 , obrót 1 , obrót 2 , obrót 3 .

James Holderness
źródło
2

Cudowny, 7 * 14 = 98

.. \/ \/ .. ..
.. 31 \\ 32 \/
\/ \\ \/ \\ \/
\/ 30 \\ 33 ..
.. .. \/ \/ ..
Blake Thomas
źródło
Czy oczekujesz, że każda komórka pozostanie nienaruszona po obróceniu?
Sparr
2

Argh! / Aargh! (4 * 4 = 16)

O co chodziło z użyciem odpowiedniego narzędzia do pracy? Brak komentarzy (ogólnie w języku).

Cała rodzina programów (wygenerowana w J: ((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph'lub ((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph')

hpqh
q01p
p32q
hqph

obrócony raz:

hpqh
q12p
p03q
hqph

obrócony dwukrotnie:

hpqh
q23p
p10q
hqph

obrócony trzykrotnie:

hpqh
q30p
p21q
hqph

Aby to wyjaśnić, najlepiej sprawdzić wersję „wciętą” (która działa również we wszystkich rotacjach):

hhpq h
  0  h
q   1p
p3   q
h  2  
h qphh

Ta wersja pokazuje, że program składa się z 4 oddzielnych części, po jednej na każdy obrót.

  • h - ustawić przepływ sterowania w lewo

  • p - wydrukuj element w rastrze danych / kodu poniżej

  • q - wyjść z programu

.ıʇǝɥʇuʎs
źródło
2

Pływak - 9 × 5 = 45

wprowadź opis zdjęcia tutaj

Drukuje 4, 1, 2 lub 3 na konsoli.

Zauważ, że „czarny” jest prawidłową instrukcją (NOP) i jest składniowy. Bez tego nie może znaleźć pozycji wyjściowej. Zatem wszystkie pozycje w prostokącie są zajęte.

Mark Jeronimus
źródło
1

Element, 2x3 = 6

1*
`2
3 

Jest to poprawa w stosunku do naiwnego rozwiązania 3x3, które ma `pośrodku z liczbą po każdej stronie. Przypadek 0, pokazany powyżej, jest najbardziej interesujący, ponieważ* służy do pomnożenia 3 przez nic, aby uzyskać 0. Poza tym, nie jest to takie skomplikowane.

Jeśli uważasz, że przestrzeń jest niezręczna, możesz ją zastąpić dowolną inną postacią, z wyłączeniem []{}`_ .

Dla porównania, oto pozostałe trzy obroty:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*
PhiNotPi
źródło
0

Chip, (2x5) 10

b~
+a
~t
e*
 f

*aktywuje wszystkie sąsiadujące elementy: północ, wschód, południe i zachód (źródło),
~jeśli nie jest aktywowane od zachodu, aktywuje wschodniego sąsiada (brama NIE) (nigdy tu nie aktywowana)
tprzerywa wykonywanie po wydrukowaniu bieżących
azestawów bajtów bit zestawów 0x01wyjściowych
bbit 0x02wyjścia
eustawia bit 0x10wyjścia
fustawia bit 0x20wyjścia
+ jeśli jest aktywowany przez dowolnego sąsiada, uaktywnij wszystkich innych sąsiadów (drut)

Chip wymaga -wflagi (aby umożliwić wykonanie bez danych wejściowych) lub danych wejściowych w celu uruchomienia.

Reprodukcje 0, 1, 2, lub 3w kodzie ASCII. Jeśli punkty kodowe 0x00do 0x03są pożądane, usunąć ei f, a następnie przenieść przestrzeń do wypełnienia luki.

Phlarx
źródło
0

Japt , 3 * 1 = 3 bajty

5zB

Wypróbuj online: jak jest , obrócony raz , dwa razy , trzy razy .

Wyjścia odpowiednio 0, 5, 2, 11.

Zmienna Bma wartość 11 i Number.z(other)jest podziałem podłogi (wszyscy wyglądali najwyraźniej: p). W przypadku kodu wieloliniowego ostatni wiersz jest przekazywany do wyjścia, co jest tutaj po prostu stałą.


2 * 2 = 4 bajty

2J
1T

Wypróbuj online: jak jest , obrócony raz , dwa razy , trzy razy .

Wyjścia odpowiednio 0, 21, 2, -1.

Ttrzyma 0 i Jtrzyma -1.

Sztuczka polega na tym, że jeśli dwa literały lub zmienne są umieszczone obok siebie, wstawiany jest przecinek, a wynik jest tylko ostatnim.

2 * 2 Rozwiązanie JS działa również w Japt.

Bubbler
źródło