Twoim zadaniem jest wydrukowanie tekstu Good morning, Green orb!
, przy czym każdy znak powtarza się w miejscu tyle razy, ile najczęściej występuje bajt w twoim źródle (tryb). Końcowy znak nowej linii jest dozwolony i nie trzeba go powtarzać.
Na przykład jeśli źródłem było
print p
Ponieważ p
pojawia się dwa razy i co drugi bajt pojawia się raz, gdy trzeba będzie wydrukować
GGoooodd mmoorrnniinngg,, GGrreeeenn oorrbb!!
Odpowiedzi zostaną ocenione według iloczynu liczby bajtów i liczby powtórzeń wyniku. Na przykład powyższy kod (jeśli zadziałał) uzyska 7 * 2 = 14 . Celem powinno być zminimalizowanie własnego wyniku.
Twój kod musi zawierać co najmniej 1 bajt.
Użyj tego programu, aby sprawdzić, czy kod i dane wyjściowe są zgodne
code-challenge
kolmogorov-complexity
hello-world
self-referential
Kreator pszenicy
źródło
źródło
Odpowiedzi:
Brain-Flak ,
384 * 106366 * 100 = 36.600Wypróbuj online!
Wyjaśnienie
Pierwszą rzeczą, którą robię, jest pchanie sznurka
do stosu przy użyciu dość standardowych taktyk złożoności Kołmogorowa.
Następnie przesuwamy licznik do stosu off, aby powiedzieć nam, ile razy powielamy każdą postać. Jednak nie mogłem ustalić, co to był licznik, dopóki nie skończyłem pisać programu.
Następnie w górę jednocześnie odwracamy ciąg znaków i duplikujemy każdy znak w odpowiedniej liczbie razy. W szczególności licznik + 1.
Te dwie części programu mają tryb 99 otwartych nawiasów. Ponieważ jednak z pewnością będziemy potrzebować co najmniej 1 nawiasu. Tutaj zauważyłem, że ostatni znak, który wypchnęliśmy,
!
ma kod 33, co oznacza, że możemy go użyć do utworzenia 99, dokładnie takiej liczby, jakiej chcemy, używając tylko jednego dodatkowego nawiasu. To całkiem zbieg okoliczności, ale działa.źródło
Haskell , 37 bajtów × 3 = 111
-20 dzięki H.PWiz. -25 dzięki nim.
Wypróbuj online!
Operatorzy Haskell FTW.
Samo przypomnienie, aby nigdy nie grać w golfa na telefonie komórkowym. Popełniam głupie błędy. Mogę zrzucić co najmniej połowę winy na telefony komórkowe. : P
źródło
<*
do zapisywania bajtów (Uwaga: nie sprawdziłem poprawności)brainfuck , 235 x 77 = 18,095 punktów
Edycja: -2 bajty dzięki @Dennis
Wypróbuj online!
Test TIO
Czekaj, to nie jest kręgle kodu? \ s
Tylko 8 użytecznych znaków sprawia, że pieprzenie mózgu jest jednym z najgorszych języków, w którym można zadać to pytanie. Musiałem zacząć minimalizując która charakter nieuchronnie pojawiają się najczęściej, zwykle albo
+
albo-
. Po napisaniu pierwszej iteracji kodu okazało się, że jest okropnie niezrównoważona na korzyść+
s. Przestawiłem części kodu, takie jak generowanie większych liczb, aby użyć więcej-
. Wreszcie, skończyło się naw równej ilości z dwóch znaków na 77jeden mniej-
niż+
. Z pewnością można to jeszcze bardziej zmniejszyć, o czym jutro pójdę.Ale hej, przynajmniej pokonałem odpowiedź Brainflak
źródło
;#
języku (͡ ° ͜ʖ ͡ °)Galaretka , 13 bajtów * 1 = 13
Wypróbuj online!
źródło
Alice , 49 bajtów * 2 = 98
144Wypróbuj online!
Wyjaśnienie
Jest to zwykła struktura dla programów liniowych, które działają całkowicie w trybie porządkowym. Po rozwinięciu zygzakowatego przepływu sterowania otrzymujemy:
Podstawową ideą jest unikanie znaków, które powtarzają się więcej niż dwa razy za pomocą transliteracji. Transliteracja, którą będziemy wykonywać, jest następująca:
Sposób transliteracji w Alicji polega na tym, że ciągi
from
ito
są najpierw powtarzane do LCM ich długości, chociaż w tym przypadku wszystkie sprawy są długościąfrom
ciągu, więc otrzymujemy:W ten sposób otrzymujemy cztery różne znaki do reprezentowania
o
s, a trzy dla każdegon
,r
a przestrzeń. Możemy wygenerowaćfrom
ciąg za pomocą rozszerzenia zakresu w następujący sposób:Jedynym problemem jest to, że teraz będziemy potrzebowali czterech
"
zarówno dlainput
i nato
sznurku. Aby tego uniknąć, umieściliśmy je w jednym ciągu i podzielimy na=
używany jako separator.Reszta to po prostu:
źródło
Python 2 , 62 × 3 = 186
Wypróbuj online!
źródło
C (gcc) ,
74 × 6 = 444przekreślony 444 jest nadal regularny 44477 × 5 = 38581 × 4 = 324Wypróbuj online!
źródło
C (gcc) , 68 × 3 = 204
Dzięki @MDXF za uratowanie 9 punktów i utorowanie drogi dla 6 kolejnych!
Wypróbuj online!
Alternatywna wersja, do wydruku ASCII, 69 × 3 = 207
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 46 bajtów × 2 = 92
(Zawiera niedrukowalne)
Wypróbuj online!
+ Dużo bajtów dzięki stronie kodowej Dyalog, dzięki @ Adám za zwrócenie na to uwagi.
źródło
~⎕AV∊⍨⎕UCS 18
.Vim,
4241 naciśnięć klawiszy × 3 = 123Wyjaśnienie:
iGod morning, Green orb!<Esc>
Napisz ciąg
God morning, Green orb!
(o
brak jednego ).2|
Przejdź do pierwszego
o
.qsyl2pl@sq
Utwórz makro rekurencyjne
s
. Jako efekt uboczny potrójny prądo
.X0
Usuń jeden
o
i przeskocz na początek.@s
Uruchom makro
s
, które powtórzy każdy znak dwukrotnie.źródło
C, 78 × 4 = 312
Wypróbuj online!
356332źródło
Japt , 24 bajty * 2 = 48
Zawiera niedrukowalne. Przetestuj online!
Większość programu to tylko skompresowany ciąg, który dekompresuje się do
a
m²
następniem
aps każdy znak, powtarzając to²
wice porządku, to było trochę odcinku . Spacja jest jedynym znakiem, który pojawia się 3 razy w skompresowanym ciągu; aby zapisać jedną instancję, zastępujemy ją nową linią, a następnie używamy·¸
do podziału na nowych linii i natychmiastowego łączenia w spacje. Dłuższy o 2 bajty, znacznie zmniejsza wynik (z 66 do 48).Teraz, gdyby był na to krótki sposób bez użycia postaci dwa razy ...
źródło
*salute*
A teraz, kiedy patrzę na twoją odpowiedź, widzę, że ma ², a link miał ³ :)SNOBOL4 (CSNOBOL4) , 97 bajtów * 10 = 970
Wypróbuj online!
tak ........ SNOBOL wymaga oddzielenia operatorów białymi spacjami, a wymagania dotyczące białych spacji są dość niezręczne. W kodzie jest 9
'\t'
i 10' '
, więc wszelkie ulepszenia będą wymagały dość znaczącej zmiany podejścia.źródło
R ,
65 bajtów * 5 = 32559 bajtów * 5 = 29562 bajtów * 4 = 248Wypróbuj online!
Istnieją 4
(or,')
znaki.źródło
strrep
, to powinno się przydać.Rubin , 52 bajty × 3 = 156
Wypróbuj online!
źródło
Perl 5 , 59 × 2 = 118 punktów
Wypróbuj online!
Perl 5 , 51 × 3 = 153
156zwrotnicaWypróbuj online!
Perl 5 , 43 × 4 = 172 punkty
Wypróbuj online!
Zaoszczędź 2 bajty w każdym rozwiązaniu dzięki @Xcali (kilka zmian temu). Dla wszystkich optymalizacji spójrz na zmiany.
źródło
-M5.010
, która również się liczyV , 35 bajtów * 2 = 70
Wypróbuj online!
Hexdump:
źródło
SOGL V0.12 , 16 bajtów * 1 = 16
Wypróbuj tutaj!
Kompresja!
Chociaż, jeśli
Green
nie jest tak wielkie, może to być 3 bajty krótsze: /źródło
Python 2 , 62 * 4 = 248
Dzięki @ovs i @Giuseppe!
Wypróbuj online!
Python 2 , 51 * 6 = 306
Wypróbuj online!
Python 2 , 70 * 5 = 350
Wypróbuj online!
Dzięki @Mr. Xcoder do zapisywania bajtu z obu wersji!
źródło
6
ifor
.\x6f
s, które są nadal dobre dla 244Ohm v2 , 20 bajtów * 1 = 20
Wypróbuj online!
Uwielbiam kompresję, chociaż niestety nie jest tak dobra jak SOGL.
źródło
Czysty , 77 bajtów * 3 = 231
Wypróbuj online!
źródło
CJam , 32 bajty × 2 = 64
Wypróbuj online!
Przesuwa ciąg, następnie XOR zapisuje pierwsze 20 znaków
[0, 1, …, 19]
, a następnie powiela każdy znak.źródło
05AB1E , wynik: 22 (22 bajtów * 1)
Wypróbuj online.
Wyjaśnienie:
UWAGA 1: Stos zawijania do wbudowanej listy
)
jest używany zamiast wbudowanej pary‚
, ponieważ‚
jest już częścią słowa słownikagood
.UWAGA 2: dwa przecinki w kodzie
‚
i,
może wyglądać tak samo, ale mają różne znaki Unicode . Pierwszy jest zwykle używany dla wbudowanej pary , a drugi dla wbudowanego wydruku do STDOUT z końcowym znakiem nowej linii . W tym przypadku są one używane jako słowo słownikowegood
i oczekiwany przecinek na wyjściu.Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego
…‚¿•´,
jest"good morning,"
i„ˆ¨èã
jest"green orbit"
.źródło
PowerShell , 46 bajtów * 4 = 184 punkty
Wypróbuj online!
źródło
$0
PowerShell ,
49 * 558 bajtów * 4 = 232 pkt-13 pkt dzięki tylko ASCII
Wypróbuj online!
Używa formatowania, aby przejść od 5
o
s do 4, aby wydzielić niektóre liczbyźródło
Galaretka , 31 bajtów × 2 = 62 punkty
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 61 bajtów * 3 = 183
Pokaż fragment kodu
JavaScript (ES6), 51 bajtów * 4 = 204
Odpowiedź sugerowana przez @ETHproductions .
Pokaż fragment kodu
JavaScript (ES6), 73 bajty * 4 = 292
Pokaż fragment kodu
JavaScript (ES6), 58 bajtów * 6 = 348
Pokaż fragment kodu
źródło
_=>_
na'$&'
'$&$&$&$&$&$&'
zamianę, co, jak sądzę, pozwala usunąć dwa wystąpienia i przejść do powiązania kilku postaci na 4, drastycznie zmniejszając wynik ...Siatkówka , 36 × 4 = 144
Wypróbuj online! Istnieją trzy nowe linie i cztery
o
s, więc nie ma nic więcej do zrobienia.źródło
Rubinowy, 55x4 = 220 punktów
Jestem dość zirytowany, że użycie each_char powoduje, że liczba r's 5 ..
źródło
Pushy , 36 * 2 = 72
Wypróbuj online!
Główną zasadą tej odpowiedzi jest to, że każdy znak
n
jest przechowywany takn + index - 29
, aby uniknąć powtórzenia w oryginalnym ciągu. To odwzorowanie utworzyło łańcuch w backticks. Reszta programu po prostu dekoduje to i wypisuje każdy znak dwukrotnie:Użyte bajty dwukrotnie:
`'W
Dziennik zmian
źródło