Twoim zadaniem jest napisanie programu (lub funkcji), który pobierze ciąg znaków jako dane wejściowe i doda tekst na początku każdego wiersza spełniającego następujące reguły:
- Dołączony tekst musi zawierać numer wiersza. Możesz użyć indeksowania opartego na 0 lub 1.
- Tekst musi być komentarzem w Twoim języku. Komentarz jest zdefiniowany jako poprawny składniowo kod, który nie wprowadza żadnych zmian w stanie programu. Usunięcie komentarza nie powinno powodować zmian w programie.
- Komentarz może zawierać tylko znaki nowej linii na końcu.
- Nie musisz wstawiać numerów linii dla linii, które zawierają tylko białe znaki i komentarze.
Dane techniczne
- Możesz założyć, że dane wejściowe będą prawidłowym programem w Twoim języku.
- W językach wrażliwych na wcięcia, takich jak Python, można wstawić komentarz do numeru wiersza po wszystkich wcięciach. Możesz wybrać tabulatory lub spacje, aby być postacią wcięcia, ale musisz podać to w swoim poście.
- Możesz założyć, że każda instrukcja w kodzie zajmuje maksymalnie 1 linię; tzn. brak ciągów wieloliniowych lub kontynuacji odwrotnego ukośnika.
Przypadki testowe
Pyton:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Szczerze, dziwię się, że to się kompiluje)
/*0 */#include <stdio.h>
/*1 */int main()
/*2 */{
/*3 */ char c;
/*4 */ c = getchar();
/*5 */ do
/*6 */ {
/*7 */ putchar(c);
/*8 */ }
/*9 */ while (c);
/*10*/}
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź (w bajtach).
code-golf
code-generation
comment
Esolanging Fruit
źródło
źródło
AssertionError
chyba że ślad stosu zawierał frazęfoo.py
, która miała pochodzić od nazwy pliku, ale może również pojawiać się jako komentarz liniowy w kontekście.Odpowiedzi:
Pyke, 7 bajtów
Wypróbuj tutaj!
Deklaruję, że komentarze liczb całkowitych są liczbami całkowitymi, po których następuje znak,
K
a następnie wiersz. Dodatkowy bajt służy do zatrzymania nowego kodu operacyjnego linii i drukowania dodatkowej rzeczy.źródło
Perl, 8 + 1 = 9 bajtów
Uruchom z
-p
(1 bajtowa kara). (Uwaga dla osób niezaznajomionych z zasadami PPCG; musisz także określić nowoczesną wersję składni Perla-M5.010
, ale zdecydowaliśmy, że opcje wyboru wersji językowych są bezpłatne i nie wiążą się z karą bajtową, więc nie wspomniałem o tym w oryginalna wersja tego postu).-p
umieszcza program w niejawnej pętli; w zasadzie powoduje, że program staje się filtrem, który przetwarza każdą linię osobno (tzn. cały program jest uruchamiany w pierwszym wierszu, potem w drugim, potem w trzecim itd.). Perl śledzi także numer linii, zwanej$.
, która rejestruje, ile linii wejściowych zostało odczytanych. Więc wszystko, co program robi, polega na-p
czytaniu wiersza wprowadzania; wypisz a#
, bieżący numer wiersza ($.
) i nowy wiersz (say
domyślnie dodaje nowy wiersz, który jest pomocny w tym przypadku i jest również krótszy niż częściej spotykanyprint
); a następnie pozwalając na-p
wydrukowanie oryginalnego wiersza kodu, który odczytał (zwykle używa programu-p
wykonałby jakieś przetwarzanie danych wejściowych, ale ponieważ tego nie zrobiliśmy, dane wyjściowe pozostały niezmienione). Komentarze w Perlu biegną od#
do nowego wiersza (#
sam program nie uruchamia komentarza, ponieważ znajduje się w literale ciągu), więc w zasadzie robimy okazję, aby napisać wiersze komentarza do pliku podczas przetwarzania , bez zakłócania „naturalnego” cyklu odczytu i zapisu-p
.źródło
-p
pętla lub automatycznie aktualizowany numer linii.say"$.;"
to też zadziała, ponieważ w pytaniu było napisane: „Możesz założyć, że każda instrukcja w kodzie zajmie najwyżej całą 1 linię”.JavaScript,
4339 bajtówDzięki ETH i Conorowi za oszczędność 4 bajtów.
źródło
/*${++b}*/
)) (użyj ciągu formatującego)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 bajtów
Wypróbuj online!
źródło
Partia, 91 bajtów
Batch nie ma możliwości odczytu STDIN do EOF, więc zamiast tego nazwa pliku musi zostać przekazana jako parametr wiersza polecenia.
źródło
Lua,
8075 bajtówZapisano kilka bajtów, nadużywając langauge.
Dość prosta odpowiedź dla początkujących.
Niegolfowany +
źródło
--[[10]]
1 znak dłuższy niż,--[[9]]
chyba że poprawnie wypełnisz go spacjami.Gema,
1615 znakówW Gema są tylko komentarze liniowe, zaczynające się od
!
.Przykładowy przebieg:
Aby odpowiedzieć na pytanie Adáma , czy możliwe jest dodanie numeru wiersza w rodzaju zignorowanego kodu.
Kod Gema jest w istocie zbiorem z = do reguł transformacji lub szablonu = działania w zakresie Gema. Nie widzę sposobu, aby zdefiniować szablon , który nigdy nie będzie pasował do niczego, samo to nie wydaje się być właściwą drogą.
Gema, 18 znaków
Przekształca się
e=3
wc:=1;:e=3
.Na szczęście w Gema istnieją domeny , rodzaj przestrzeni nazw. Powyższy kod definiuje fikcyjne reguły w przestrzeni nazw c, których nigdy nie używamy. Niestety wspomniana domena obowiązuje do końca linii, więc musimy jawnie przełączyć się z powrotem na domenę domyślną.
Gema, 18 znaków
Przekształca się
e=3
w1=$0;e=3
.Mniej skomplikowaną alternatywą jest użycie kodu bezskutecznego zamiast zignorowanego. Chcę odłożyć dokładnie to, co zostało dopasowane.
źródło
e=3
przekształconyif (false) { 1 }; e=3
zamiast prądu!1e=3
? Tak, obejście obejmie 19 znaków.Qbasic,
9189 bajtówWejście:
Wynik:
źródło
BASH (+ GNU sed) 27 bajtów
Pierwsza część (
i#
\n
=
) prawie działa w GNU sed (dla 4 bajtów), ale wstawia nową linię po#
.źródło
awk (
1913 bajtów)19 bajtów : wstaw „#” + numer wiersza powyżej każdego wiersza kodu
13 bajtów : Kredyt i podziękowania dla @manatwork za dwa 13-bajtowe rozwiązanie
Jako
1
domyślne działania doprint $0
:Lub zastępując
$0
treśćźródło
{print"#"NR}1
czy$0="#"NR RS$0
?Funkcja rozszerzenia Kotlin,
6960 bajtówfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Przykładowe użycie:
Wynik:
źródło
CJam, 21 bajtów
W ogóle nie jestem dobrze zaznajomiony z CJam, ale wiedziałem, że ma komentarze :)
Wyjaśnienie już wkrótce.
źródło
oNo
można zastąpićn
w TIO.Mathematica, 58 bajtów
źródło
jq, 31 znaków
(27-znakowy kod + 4-znakowe opcje wiersza poleceń.)
W jq są tylko komentarze liniowe, zaczynające się od
#
.Przykładowy przebieg:
źródło
input_line_number
. Jako Święto Dziękczynienia, jakieś szczególne uczucie do wyrażenia$.
?GolfScript, 23 bajty
Są tylko komentarze liniowe zaczynające się od „#”.
Niegolfowane i wyjaśnione:
Jestem pewien, że można to jeszcze bardziej uprościć, zwłaszcza że
i
prawdopodobnie można je pominąć.Możesz to przetestować tutaj: https://golfscript.apphb.com/ Ponieważ ta strona nie obsługuje dodawania danych wejściowych, będziesz musiał umieścić ciąg otoczony podwójnymi cudzysłowami przed kodem.
'\n'
będzie nowa linia. Pamiętaj, że istnieją również inne sekwencje ucieczki. Użytkownik,'\\'
jeśli nie jesteś pewien.źródło
C # 6,
6661 bajtówDzięki CSharpie
(666, kod diabła ^^) jużnie ...Działa to we wszystkich językach przy użyciu „komentarzy w stylu C” (C, C ++, C #, Java, ....)
Po prostu dzieli ciąg na linie, poprzedza każdą linię indeksem i ponownie łączy edytowane linie z nowymi znakami linii.
stara wersja:
źródło
Python 2, 82 bajty
Działa dla wcięć tylko w przestrzeni
Wersja bez wcięć dla 56 bajtów
źródło