Napisz program, który generuje dane wyjściowe takie, że:
- Pojawiają się co najmniej trzy różne znaki.
- Liczba wystąpień każdej postaci jest wielokrotnością 3.
Na przykład A TEA AT TEE
jest ważne, ponieważ produkcja każdego z 4 odrębnych postaci, A
, E
, T
i (space)
, odbywa się 3 razy.
Oczywiście wyzwanie dotyczące liczby 3 musi mieć trzeci wymóg. Więc:
- Sam program musi również spełniać dwa pierwsze wymagania. (Oznacza to, że twój program będzie miał co najmniej 9 bajtów.)
Musisz napisać pełny program, a nie funkcję. Pamiętaj, aby pokazać odpowiedź swojego programu w odpowiedzi.
Zachęcamy również do ciekawości:
- nie używać komentarzy, aby spełnić wymaganie 3, jeśli możesz mu pomóc
- aby uzyskać wynik, który nie jest ciągiem powtarzanym 3 razy
- aby odróżnić dane wyjściowe od samego programu (w przypadku języków, które mogą automatycznie wyświetlać zawartość własnego programu, możesz przyczynić się do tej wiki społeczności ).
To jest golf golfowy . Najkrótszy kod w bajtach wygrywa.
code-golf
restricted-source
darrylyeo
źródło
źródło
123123123
będzie działać, jak obecnie napisano.)abcabcabc
Z końcowym znakiem nowej linii?Odpowiedzi:
Brain-Flak , Flakcats , Brain-Flueue , Brain-Flak Classic , Miniflak i Fλak 18 bajtów
Sprawdzony optymalny!
Wypróbuj online!
Wyjaśnienie
Brain-Flak, Brain-Flueue, Miniflak i Fλak
To drukuje:
(Kończy się nowa linia)
Brain-Flak Classic
Brain-Flak Classic to oryginalna wersja Brain-Flak i ma kilka ważnych różnic od współczesnego Brain-Flak. W BFC
[...]
drukuje zawartość zamiast ją negować.Pod koniec wykonywania
3 3 3
drukowana jest zawartość stosu ( ).To drukuje:
(Kończy się nowa linia)
Flakcats
Flakcats różni się od pozostałych 4 flaków i jestem zaskoczony, że działa to w Flakcats. Trzej operatorzy tutaj są prawie tacy sami jak ci, których używa Brain-Flak.
Główną różnicą w tym konkretnym programie między Flakcats jest
(...)
operator, który w Flakcats jest równoważny([{}]...)
w Brain-Flak. Nie ma to jednak dla nas znaczenia, ponieważ zbiera zera, a zatem działa podobnie jak Brain-Flak.Oto ten program skompilowany w Brian-Flak:
To drukuje:
(Kończy się nowa linia)
Dowód optymalności w Brain-Flak i Miniflak
Nie jest to formalny dowód, ale raczej nieformalny dowód, który należałoby rozszerzyć, aby był bardziej rygorystyczny
Z powodu ograniczeń, że programy Brain-Flak muszą być łańcuchem zrównoważonym, a długość programu musi być wielokrotnością 3, każde prawidłowe przesłanie musi być wielokrotnością długości 6. Oznacza to, że każde rozwiązanie mniejsze niż 18 musi mieć długość 12.
Ze względu na to, że końcowe znaki wyjściowe kończą się na nowej linii, ostateczna wysokość stosu musi być wielokrotnością trzech, w przeciwnym razie złamiemy ograniczenia dotyczące wyjścia.
Każde prawidłowe zgłoszenie o długości 12 musi mieć 2 typy nawiasów klamrowych (posiadanie mniejszej liczby łamałoby ograniczenia dotyczące liczby różnych znaków, a więcej oznaczałoby więcej niż 12 znaków). Ponieważ program generuje dane wyjściowe, musi mieć push.
To pozwala nam wybrać inny zestaw aparatów ortodontycznych. Dostępne są następujące opcje:
<...>/<>
To się nie udaje, ponieważ musimy wygenerować „wartość”, aby utworzyć dowolną liczbę inną niż zero, musimy zrezygnować z, aby utworzyć liczbę,
()
która uniemożliwia przesuwanie więcej niż dwa razy.[...]/[]
To się nie udaje z tego samego powodu, co ostatni nieudany. Kwadratowe nawiasy klamrowe są naprawdę złe w tworzeniu wartości.
[]
Monada może tworzyć wartość, ale musimy naciskać numery pierwszej i my wtedy nie ma wystarczającej ilości nawiasy pozostały wcisnąć trzy razy.{...}/{}
Ten jest obiecujący, możemy stworzyć pętlę i użyć jednego
()
do wielokrotnego wypychania, ale niestety nie jest to możliwe.Aby pętla się zakończyła, w stosie musi znajdować się zero w pewnym momencie, a żeby mieć poprawne wyjście, musimy mieć coś innego niż zero na stosie na końcu programu. Ponieważ nie mamy
[]
ani<>
zera na końcu pętli, musi to być niejawne zero z dołu stosu. Oznacza to, że pętla nie może dodawać żadnych nowych liczb do stosu, co czyni go bezużytecznym.Ponieważ żadna z opcji nawiasu klamrowego nie może utworzyć programu o długości 12, żaden nie może istnieć.
Ponieważ Miniflak jest podzbiorem Brain-Flak, każdy krótszy program Miniflak byłby również krótszym programem Brain-Flak, a zatem nie istnieje.
Dowód optymalności w kanale dymowym
Brain-Flueue to język żartów oparty na Brain-Flak. Obaj są tak podobni, że ich tłumacze są identyczni wszędzie oprócz dwóch linii. Różnica między nimi polega na tym, jak sugerują ich nazwy, Brain-Flueue przechowuje swoje dane w kolejkach, podczas gdy Brain-Flak przechowuje swoje dane w stosach.
Na początek mamy te same ograniczenia dotyczące rozmiaru programu utworzone przez Brain-Flak, dlatego szukamy programu o rozmiarze 12. Ponadto będziemy potrzebować
(...)
, aby utworzyć dane wyjściowe i inną parę.<>
i[]
pary nie działają w Brain-Flueue do dokładnie tego samego powodu nie działają w Brain-Flak.Teraz wiemy, że nasz program musi składać się ze znaków
((())){{{}}}
.Za pomocą tych samych metod, które zastosowano w poprzednim dowodzie, możemy wykazać, że w końcowym programie musi być pętla.
Teraz są różne dowody, ponieważ Brain-Flueue działa w kolejkach, a nie w stosach, program może wyjść z pętli z wartościami w kolejce.
Aby wyjść z pętli, będziemy potrzebować zera w kolejce (lub pustej kolejce, ale jeśli kolejka będzie pusta, otrzymamy ten sam problem co Brain-Flak), będzie to oznaczać, że będziemy musieli otworzyć nasz program,
({})
aby utworzyć zero. Będziemy potrzebować push wewnątrz pętli, aby wypchnąć niezbędną liczbę elementów do kolejki. Będziemy także musieli nacisnąć liczbę niezerową przed pętlą, abyśmy mogli w ogóle wejść do pętli; będzie nas to kosztować absolutnie minimum(())
. Użyliśmy teraz więcej parenów niż my.Zatem nie ma programu Brain-Flueue wykonującego zadanie o długości 12 bajtów, a ponadto nasz program jest optymalny.
Optymalne rozwiązanie w Flakcats i Brain-Flak Classic
Poniższe rozwiązanie jest optymalne dla Flakcats i Brain-Flak Classic.
Wyjaśnienie
Alternatywne 24-bajtowe rozwiązania Brain-Flak
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
źródło
Galaretka , 9 bajtów
Pełny program, który drukuje 700227072 , który ma 888 kostki.
TryItOnline!
W jaki sposób?
źródło
888^3
jest700227072
? To bardzo sprytne, być może inne języki mogą skorzystać z tej sztuczki.Poliglot czysto dosłownych odpowiedzi, 9 bajtów
To jest post społeczności wiki służący do zbierania odpowiedzi, które są dosłowne, że dany język jest drukowany automatycznie. Ponieważ jest to wiki społeczności, możesz je edytować, aby dodać więcej języków, w których działa.
Ten program działa w:
3
drukuje dane, reszta programu to bezużyteczne manipulowanie stosami)2\n2\n2\n1\n1\n1\n3\n3\n3\n
)Ignorując ostatnią nową linię, jest to ważne w kilku innych językach:
Większość linków znajduje się w Try It Online!
źródło
2\n2\n2\n1\n1\n1\n3\n3\n3\n
w rzeczywistości, co jest całkowicie poprawne. Czy należy to dodać do postu?echo '333111222';
(w PHP), ale działa.C #,
114111118102 bajtówJeśli nie zależy nam na użyciu właściwych słów: (102 bajty)
Jeśli zależy nam na odpowiednich słowach: (120 bajtów)
Moje oryginalne zgłoszenie - bez rozróżniania wielkości liter: (113 bajtów)
Wiem, że komentarz nie jest tak naprawdę zgodny z duchem CG, ale to wszystko, co mogłem wymyślić w ograniczonym czasie, zobaczę, czy mogę to poprawić w ciągu dnia. Na pewno muszę zdobyć co najmniej kilka punktów bonusowych, aby skinąć głową na awanturę.
Edycja: Dziękuję roberto06 za złapanie brakujących liter!
źródło
V
z komentarza i dodaćvyt
, ponieważV
jest tam obecny tylko wtedy, gdyv
jest obecny dwukrotnie (literówka, jak sądzę),y
jest również obecny dwukrotnie it
jest obecny 5 razy. Zobacz tutaj . Niemniej świetna robota!JavaScript,
3633 bajtówAlarmy
333111222
. Działa to, ponieważ|
konwertuje oba operandy na 32-bitowe liczby całkowite, a każda wartość, która nie wygląda jak liczba całkowita (np. Funkcjaalert
), jest konwertowana na0
.0|0
jest0
, więc||
operator zwraca właściwy operand, lub333111222
Kilka bardziej interesujących wersji:
Wyjścia
(trelalert)\"(trelalert)\"(trelalert)\"
.Zastosowanie rozwiązania
.repeat
byłoby tej samej długości, dzięki wspólnemuaert
:które wyjścia
(trpp.all)\"(trpp.all)\"(trpp.all)\"
.Korzystając z dodatkowych ukośników, aby się pozbyć
l
ip
prawie działa:Ten wychodzi
(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"
.źródło
CJam , 9 bajtów
Wyjścia
012345678901234567890123456789
Wypróbuj online!
Wyjaśnienie
źródło
99,99,99,
, bo dlaczego nie?pieprzenie mózgu , 12 bajtów
Nikt nie powiedział, że wynik musi być krótki. Spowoduje to wyświetlenie 3 kopii każdego znaku ascii z wyjątkiem pierwszych 2.
Możesz udowodnić, że jest tak krótki, jak to możliwe. Musisz generować, dlatego potrzebujesz 3 '. muszą być różne dane wyjściowe, dlatego potrzebujesz 3 [+ -] teraz mamy maksymalnie 6. 9 znaków musi zostać wydrukowanych, co oznacza albo dodanie 6 kolejnych „.” lub dodanie pętli, która doda kolejne 6 znaków.
Wypróbuj online!
źródło
Python 2,
3630 bajtówPonieważ końcowy znak nowej linii jest niedozwolony, jest on prawdopodobnie tak krótki, jak to możliwe:
Wypróbuj online
Wydaje
\"
trzy razy, a następnie trzy nowe wiersze.Poniższe programy nie liczą końcowego znaku nowej linii, więc nie są prawidłowe.
27 bajtów :
Drukuje 54 każdego znaku w
print
.Wypróbuj online
Ta sama długość, krótszy wydruk:
Wyjścia
printprint*3*3printprint*3*3printprint*3*3
24 bajty:
źródło
print"""printprint*3*3"""*3
dla znacznie krótszego wyjścia ;-)print 123;print 123;print 123;
dla naiwnego rozwiązania?print~9;print~9;print~9;
Perl 6 , 15 bajtów
Drukuje sześć różnych znaków, trzy razy każdy:
Wypróbuj online!
Jak to działa
$_
.$_
zaczyna się jako obiekt typuAny
, który jestsay
drukowany jako(Any)
.źródło
C, 66 bajtów
Wynik
Stara wersja 72 bajtów
źródło
JavaScript (ES6), 30 bajtów
Wyjścia
[object Object][object Object][object Object]
.Działa, tworząc trzy obiekty:
pierwsze dwa są w formie
{ "alert" : alert }
za pomocą notacji ES6{alert}
trzeci to prosty pusty obiekt
Następnie używa
+
się do łączenia ich ze sobą, a wszystkie trzy mają identyczny wyraz jako ciąg,[object Object]
.Prowadzenie
+
jest bezużyteczne, występuje tylko w celu wypełnienia liczby+
znaków, ale jest nieszkodliwe dla wyniku programu.źródło
(ES6)
do tytułu.PKod , 9 bajtów
Wyjścia: 111222333
Wyjaśnienie:
o ma kod ascii char „111” w systemie dziesiętnym. Zatem s dodaje 111 do zmiennej, a następnie drukuje liczbę. Pierwszy „syn” robi to 111 i drukuje 111. Następnie robi 222 i drukuje 222, wreszcie czyni 333 i drukuje 333
źródło
Ruby , 12 bajtów
wyjścia
Wypróbuj online!
Aby spełnić drugie kryterium „zachęty”, potrzebuję 15 znaków:
produkuje
Wypróbuj też online!
źródło
Microscript II, 9 bajtów
Objaśnienie: Tworzy blok kodu, ale go nie wywołuje. Po zakończeniu wykonywania zawartość rejestru głównego (IE ten blok kodu) jest domyślnie drukowana.
źródło
{}
technicznie byłby quine, ale nie sądzę, aby spełniał naszą definicję „właściwego quine”. Jednak program"q"q
(który poddałem quine Challenge) tak.Sześciokąt , 9 bajtów
Wypróbuj online!
Wydrukować
120120120
.x
można zastąpićf-m
(102-109)Wyjaśnienie
Jest
xx@@
to tylko wypełniacz zgodny z zasadami. Główny przepływ jest zapisywanyx
w pamięci (o wartości ASCII 120), a następnie drukowany jako liczba 3 razy.źródło
C, 111 bajtów
(Zwróć uwagę, że liczba bajtów to również trzy takie same liczby. Wow. Nie możesz zrobić więcej meta niż to.)
Wydruki:
źródło
PHP , 33 bajty
Wybrałem coś ciekawszego niż program 9-bajtowy bez tagu PHP.
Wyjścia
<?;<?=;'"<?;<?=;'"<?;<?=;'"
Wypróbuj online!
źródło
99 , 15 bajtów
To jest dziewięć dziewiątek, trzy spacje i trzy wiersze, wynik to -1110-1110-1110 .
Wypróbuj online!
W jaki sposób?
Dwie spacje są traktowane jako jedna, ta trzecia spacja może być spacją również w dowolnej linii.
źródło
Bash + coreutils,
159 bajtówWypróbuj online!
Przykładowe dane wyjściowe:
(Jeśli to wypróbujesz, wydrukuje Twój identyfikator UID, GID itp. 3 razy.)
Jeśli chcesz uniknąć powtarzania tego samego ciągu 3 razy (a także mieć takie same wyniki dla wszystkich, w przeciwieństwie do mojej pierwszej odpowiedzi), najlepsze, jakie znalazłem dla narzędzi bash + Unix, ma 15 bajtów:
Wypróbuj drugą wersję online!
Wynik:
(Brak nowych linii w programie, 12 nowych linii na wyjściu.)
Objaśnienie programu DC w tej odpowiedzi:
źródło
LOLCODE ,
273240 (360286) bajtówZwróć uwagę na nową linię i wypróbuj ją online . Druga linia była mniej więcej dowolna i może być zastąpiona krótszym poleceniem, ale właśnie nauczyłem się LOLCODE dla tej układanki. Ponieważ numer wersji jest wymagany w pierwszym wierszu, użyłem liczb, aby dodać pętle o długości 1, 2 i 0 mod 3, aby zapewnić wydrukowanie odpowiedniej liczby znaków. Z tego po prostu policzyłem każdą postać (za pomocą tego narzędzia ). Jeśli pojawił się 0 mod 3 razy, nie było wymagane żadne działanie. Gdyby pojawił się 1 mod 3 razy, został dodany do pętli 1- i 2, aby pojawił się trzy razy na wyjściu. Jeśli pojawił się 2 mod 3 razy, postać została dodana do pętli 12. EDYCJA: Zastępując pierwszy
VISIBLE
z zadaniem (wciąż bezużytecznym, ale wymagającym 12 zamiast 11 nowych linii) udało mi się odciąć 33 bajty.Wyjście (60 bajtów):
Zwróć uwagę na nową linię.
Zaletą tego rozwiązania w porównaniu z innymi odpowiedziami jest to, że wyjściem można łatwo manipulować, aby uzyskać dość znaczący tekst. Przykład (286 bajtów z końcową nową linią):
Wypróbuj online. Wyjście (222 bajty z końcowym nowym wierszem):
Niestety, nie jestem tak dobry z anagramami, jak myślałem:)
źródło
MUSZLA
żartować :) ( 9 bajtów )
lub poważniej ( 24 bajty )
Wynik:
źródło
PHP, 24 bajty
źródło
<?
wraz z natychmiastowąecho
instrukcją,<?=
aby wyświetlić wynik 123 3 razy.<= ?>
znaki nie pojawiają się wielokrotność 3 razy.Partia,
3621 bajtówWyjścia
Edycja: Zapisano 15 bajtów dzięki @ P.Ktinos.
źródło
Japt, 9 bajtów
Wydruki
undefinedundefinedundefined
. Przetestuj online!Wyjaśnienie
Ten kod jest transpilowany do następującego JavaScript:
O.o
jest funkcją, która generuje coś bez końcowego znaku nowej linii. Gdy nie podano argumentu, drukujeundefined
, co można uznać za błąd, ale przydaje się tutaj. Zwraca równieżundefined
, więc wszystkie trzy połączenia są drukowaneundefined
.Jestem pewien, że istnieje wiele innych sposobów, aby to zrobić ...
źródło
05AB1E , 9 bajtów (myślę, że można powiedzieć, że to był fragment PI)
-0 bajtów dzięki Emigna / ETHProductions, poprawiło rozwiązanie.
Alternatywne wersje:
[g-Q]
- Można tu umieścić dowolną literę aQ, o ile wszystkie się zgadzają (patrz poniżej).Wypróbuj online!
Wyjaśniono:
PI,PI,PI,SORT,JOIN,SORT,JOIN,SORT,JOIN.
Wynik:
...111111222333333333444555555555666777888999999999
Powodem jest to, że ma tylko 9 bajtów, ponieważ nie potrzebujesz tego rodzaju, po prostu wstawiłem je, aby pomóc w zilustrowaniu.
Wynik bez
{
kodu:3.1415926535897933.1415926535897933.141592653589793
Alternatywne wersje:
Zamiast PI można użyć następujących poleceń:
źródło
žv
,žw
lubžx
są ważne, ponieważ każdy z nich ma tylko 2 różne cyfry.at least 3
, na początku było tylko PI, kiedy to napisałem. Co rozumiesz przez klasę znaków wstecz?JJJ
go???
jednak.Cubix , 12 bajtów
Naprawdę nudna odpowiedź. Trzy wyjścia
10
a następnie nowej liniiWypróbuj online! Mapy do kostki
N
Pcha 10 do stosuOo
x3 Wyjścia 10 i nowa linia@
zatrzymuje programInicjał
N@N@
nie został trafiony.źródło
N@N@NOoOoOo@
i nie zawiera spacji.Pepe , 24 bajty
Wypróbuj online!
Program zawiera 6 r, 6 e i 12 e.
Wyjaśnienie:
Wynik:
źródło
V , 9 bajtów
Wypróbuj online!
Wysyła
12i
24 razy:Vim, 12 bajtów
Wysyła to samo co odpowiedź V.
źródło
ułożone w stos , 24 bajty
Wypróbuj online! Wysyła
54
każdy zp
u
it
.źródło
Befunge 93 , 9 bajtów
TIO
Wydruki
0 0 0
(końcowe spacje, a następnie 3 bajty puste)Ponieważ stos Befunge jest wypełniony
0
s, możemy wydrukować zarówno znak ASCII z tą wartością, jak i samą liczbę całkowitą. Ponieważ Befunge automatycznie drukuje spację po liczbie całkowitej, pozostały nam 3 różne znaki..
wypisuje0
(końcowe miejsce),,
wypisuje bajt zerowy i@
kończy programźródło