Kod golfa dla leniwych

10

Twój cel w tym kodzie golfa ma mieć dwa ciągi, languagea code (jeśli kod golfed napisałeś tego jest multilinii, wtedy zmienna ta będzie wielowierszowego.) , A jedna liczba całkowita, bytes. Reprezentują zmienne dla języka programowania, liczbę pobranych bajtów i sam kod.

Następnie sformatujesz go tak, jak robi to golfista.

Zmienna wyjściowa jest ciągiem wielowierszowym o nazwie answer.

Możesz używać ciągów wielowierszowych na:

Jeśli przeszukujesz Przepełnienie stosu , powinieneś być w stanie znaleźć więcej języków programowania, które go obsługują.

Oto szablon znacznika wyjściowego. codeZmienna jest w bloku kodu, a tam jest nagłówek drugiego poziomu.

## {language}, {bytes} bytes

     {code}

Oto, jak wyglądałoby wyjście po wklejeniu do parsera Markdown.

{język}, {bajty} bajtów

    {code}

Zakłada się, że zmienne są wypełnione już jako język, w którym kodowałeś swój kod golfowy, liczbę bajtów, jakie zajmuje, i rzeczywisty kod dla niego.

Oto kolejny przykład kodu wyjściowego, tym razem z wypełnionymi zmiennymi:

## JavaScript, 1337 bytes

document.getElementById("foo").innerHTML = bar;

Oto wersja jako cytat blokowy:

JavaScript, 1337 bajtów

    document.getElementById("foo").innerHTML = bar;

Bajty można usunąć z kodu, jeśli używasz sposobu ustawiania tekstu <p>elementu w HTML przez identyfikator result, na przykład następujący kod JavaScript:

document.getElementById("result").innerHTML = answer;

Aby to zadziałało , należy również uwzględnić <p id="result"></p>sekcję HTML JSFiddle .

Punktacja

Podobnie jak wszystkie pytania związane z kodowym, kod wykorzystujący najmniej bajtów jest najlepszy.

Haykam
źródło
3
Czy {code}kiedykolwiek będzie kodem wieloliniowym?
Adnan
8
„Zmienne zostaną wypełnione jako język, w którym kodowałeś swój kod golfowy, liczba bajtów, jakie zajmuje, i rzeczywisty kod dla niego”. Czy jestem jedynym, który interpretuje to jako odmianę quine?
primo
2
Ponieważ odpowiedzi rozwiązują dwa całkowicie różne problemy, wstrzymuję to jako niejasne. Proszę wyjaśnić, czy language, bytesa codewprowadzane są lub czy jest to Quine wariant gdzie te rzeczy powinny odpowiadać sam kod problemów. (A jeśli tak, to czy bezpośrednio lub pośrednio przeczytaniu że kod źródłowy jest dozwolone, a czy Quine wbudowanym ins są dozwolone.)
Martin Ender
2
Czy mógłbyś również wyjaśnić pytanie Adnana, czy dane wejściowe codemogą same zawierać źródła?
Martin Ender
2
@Peanut Jestem zdezorientowany. Czy możemy założyć, codeże nie będzie multilinii, czy nie? Wskaż to w tekście wyzwania
Luis Mendo,

Odpowiedzi:

2

05AB1E , 21 bajtów

Kod:

“## ÿ, ÿ¡Ï
“,|v4ð×y«,

Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .

Adnan
źródło
To nie obsługuje ciągów wielowierszowych
James
@DrGreenEggsandIronMan Naprawiono.
Adnan,
I tak bitwa V vs O5AB1E trwa ... Dobra robota!
James
@DrGreenEggsandIronMan Będę czekał na kolejne wyzwanie artystyczne ASCII, aby się zemścić :).
Adnan,
8

Java, 70 bajtów

String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}

Zakłada, że b[0]jest to nazwa języka, b[1]liczba bajtów i b[2]kod.

Kompilacja kosztuje 9 bajtów, co daje 79-bajtowy, niezależny program:

class a{String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}}

Równoważny program monolityczny ma długość 103 bajtów:

interface a{static void main(String[]A){System.out.print("## "+A[0]+", "+A[1]+" bytes\n\n    "+A[2]);}}

Monolityczny działa z argumentami wiersza poleceń, zakładając, że są one takie same, jak program niezależny:

  • Pierwszy argument to nazwa języka
  • Drugi argument to liczba bajtów
  • Trzecim argumentem jest kod

Java (wyrażenie lambda), 56 48 bajtów

(b)->"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];

Jest to java.util.function.Function<String[], String>.


Żaden z tych programów / funkcji nie obsługuje łańcuchów wielowierszowych. Aby to zrobić, po prostu zamień b[2]i za A[2]pomocą b[2].replace("\n","\n ")i A[2].replace("\n","\n ")- robi to 23 bajty.

użytkownik8397947
źródło
Nie jestem teraz w pobliżu komputera, aby to potwierdzić, ale czy nie możesz użyć \tlub zastąpić 4 spacje po dwóch znakach nowej linii?
R. Kap.
@ R.Kap Czasami używanie tabulatorów zamiast spacji powoduje bałagan w SE.
user8397947,
O, rozumiem. Czy liczba bajtów jest brana pod uwagę, \ta nie 4 spacje?
R. Kap.
3
Strać pareny na lambda; za pomocą just możesz zapisać dwa bajty b->.
Brian McCutchon,
2
Co się stanie, jeśli będzie więcej niż jedna linia kodu?
Neil,
5

V , 24 bajty

Zauważ, że na końcu znajduje się spacja.

Program zakłada, że {code}nie będzie na wielu liniach.

Op wyjaśnił, że „kod” może być łańcuchem wielowierszowym. Ta 24-bajtowa wersja działa:

2é#á $á,JA bytes
vGî4é 

Ponieważ zawiera on znak niedrukowalny, oto jego wersja do odczytu:

2é#á $á,JA bytes
<esc>vGî4é<space>

Gdzie <esc>jest dosłowny znak ucieczki, np 0x1B.

James
źródło
1
Zawsze wydaje się to ciągłą walką między Jolfem a V ...: 3
Conor O'Brien
4

Python 3.5, 40 33 bajtów:

( -7 bajtów dzięki wyjaśnieniu Mego )

lambda*f:'## %s, %s bytes\n\n\t%s'%f

Anonimowa funkcja lambda, która przyjmuje dane wejściowe jako argumenty pozycyjne w formacie <function name>(String, Number, String)i generuje ciąg wielowierszowy.

Wypróbuj online! (Ideone)

R. Kap
źródło
2
Możesz ogolić kilka bajtów, jeśli utworzysz listę parametrów *fi porzucisz tuplepołączenie.
Mego
@Mego Niestety, to nie działa, ponieważ dostaję to TypeError: not enough arguments for format stringza każdym razem, gdy go uruchamiam.
R. Kap.
Działa dobrze, gdy próbuję - musisz wziąć argumenty pozycyjne zamiast argumentu listy. Dodatkowo możesz upuścić przestrzeń między #i %.
Mego,
@Mego Wow, to takie dziwne, ponieważ kiedy próbuję w PyCharm z Python 3.5.1, pojawia się błąd. Tak bardzo mnie to zamieszało. #Potrzebna jest też przestrzeń między lambda a lambda, a przynajmniej tak mi się wydaje.
R. Kap.
@Mego Zaktualizowano.
R. Kap.
4

JavaScript (ES6), 56 bajtów

(l,b,c)=>`## ${l}, ${b} bytes

`+c.replace(/^/gm,`    `)

Ponadto, dla śmiechu, oto odpowiedź, która sformatuje się dla mnie:

JavaScript (ES6), 68 bajtów

f=_=>`## JavaScript (ES6), ${`${f}`.length+3} bytes\n\n    f=${f};`;

Wydrukuj wynik f().

Neil
źródło
@PatrickRoberts Ups, właściwie nie sprawdziłem długości, po prostu skopiowałem ją i wkleiłem, a potem dodałem 6 bajtów dla (ES6). (Dlaczego Cᴏɴᴏʀ O'Bʀɪᴇɴ zawracał sobie głowę zmianą długości?)
Neil
4

C #, 40 38 bajtów

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c;

C # lambda, gdzie dane wejściowe i wyjściowe są łańcuchami.


C #, 59 bajtów

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c.Replace("\n","\n\t");

Z obsługą odpowiedzi wieloliniowej.


C #, 71 bajtów

38 bajtowe rozwiązanie, które drukuje się samo

()=>$"## C#, 38 bytes\n\n\t"+@"(a,b,c)=>$""## {a}, {b} bytes

\t""+c;";

Wypróbuj je online

aloisdg przechodzi na codidact.com
źródło
3

Mathematica, 40 bajtów

Print["## ",#,", ",#2,"bytes

    ",#3]&

Funkcja anonimowa. Pobiera język, liczbę bajtów i program jako dane wejściowe i drukuje ciało do STDOUT.

LegionMammal978
źródło
2

Jolf, 24 22 bajtów

"## ¦i, ¦j Ξ/u3

    ¦

Nie wiele tu do wyjaśnienia. ¦oznacza interpolowane wejście.

Wypróbuj tutaj! Dane wejściowe w łączu to:

## Jolf, 24 bytes

    some filler code I think

Dane wejściowe są następujące:

name

number

"code"
Conor O'Brien
źródło
1

MATL , 28 27 bajtów

1 bajt zapisany dzięki sugestii @ NinjaBearMoneky

35tOj', 'j' bytes'10t4Z"j&h

Wypróbuj online!

Blok kodu musi znajdować się w jednym wierszu.

Wyjaśnienie

35t           % Push 35 (ASCII for '#') twice
0             % Push 0. When converted to char, it will be displayed as a space
j             % Input string (language name)
', '          % Push this string
j             % Input string (byte count)
' bytes'      % Push this string
10t           % Push 10 (ASCII for linefeed) twice
4Z"           % Push string containing four spaces
j             % Input string (code)
&h            % Concatenate everything into a string. Implicitly display
Luis Mendo
źródło
0

Common Lisp, 57 bajtów

(lambda(L b c)(format()"## ~A, ~A bytes~%~%    ~A"L b c))

Dla zabawy poniżej znajduje się fragment kodu, który sam drukuje nagłówek.

Common Lisp, 146 bajtów

#1=(PROGN
(SETF *PRINT-CIRCLE* T)
(LET ((S (FORMAT NIL "~S" '#1#)))
  (FORMAT NIL "## Common Lisp, ~A bytes~%~%    ~A" (LENGTH S) S)))
rdzeń rdzeniowy
źródło
0

hashmap , 29 bajtów.

"## "i", "h" bytes.\n\n    "i

(Napisałem ten post z programem, ale musiałem uciec \ n do \\ n)
Objaśnienie:

"## "                         Push string
     i", "                    Push input and string
          h" bytes.\n\n    "i Push input as number and string, then the input.

źródło
0

CJam , 26 23 bajtów

Dzięki @NinjaBearMonkey za usunięcie 3 bajtów!

'#_Sl',Sl" bytes"N_S4*l

Blok kodu musi znajdować się w jednym wierszu.

Wypróbuj online!

Wyjaśnienie

'#_S       e# Push character "#" twice, then a space
l          e# Read line from input
',S        e# Push a comma, then a space
l          e# Read line from input
" bytes"   e# Push this string
N_S4*      e# Push newline twice, then four spaces
l          e# Read line from input. Implicitly display 
Luis Mendo
źródło
23 bajty:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey
@NinjaBearMonkey Thanks! Edytowane. Ten pomysł zapisał bajt także dla mojej innej odpowiedzi
Luis Mendo
0

Pyke, 25 bajtów

"##"Q", "z" bytes"skd4*z+

Wypróbuj tutaj!

Lub

Pyke, 0 bajtów

Wypróbuj tutaj! - kliknij przycisk kopiuj odpowiedź;)

EDYCJA - To tylko funkcja strony internetowej, to oszustwo (a przynajmniej tak bym to uważał), ponieważ nigdy nie analizuje AST, a program internetowy prawdopodobnie nie jest uważany za część języka, ponieważ nie wchodzi w interakcje z tym językiem (mimo że działa interpreter Pyke)

niebieski
źródło
Co powoduje, że wersja 0 bajtów działa?
haykam
Czy możesz to dodać do odpowiedzi? Nie liczę tego, ale wciąż możesz to utrzymać.
haykam
Hej @ muddyfish, czy możesz podzielić je na dwie odpowiedzi?
haykam
@haykam, jeśli ma to na celu zaakceptowanie odpowiedzi, wolałbym nie, ponieważ nie sądzę, że rozwiązanie 0-bajtowe liczy się jako użycie Pyke i wydaje się zbyt chestyczne
Blue
Nie przyjmuję tej odpowiedzi.
haykam
0

Perl 5, 35 bajtów

Pełny program, który pobiera dane wejściowe jako argumenty wiersza poleceń w odwrotnej kolejności. Wymaga -M5.01, co jest bezpłatne.

say pop.', '.pop.' bytes

    '.pop
msh210
źródło
0

Emacs Lisp, 97 bajtów

(lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))

Ponadto, ponieważ czasami trudno jest uciec od cudzysłowów, a co nie, przykład użycia, który kopiuje ciąg do schowka. (Oznacz region i użyj M-:)

Emacs Lisp, 184 bajty

(kill-new ((lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))"Emacs Lisp"(buffer-substring-no-properties(region-beginning)(region-end))))
Lord Yuuma
źródło