W standardowej bibliotece C nazwy nagłówków kończą się .h
przyrostkiem:
stdio.h
W C ++ te nazwy nagłówków są dostępne w alternatywnej formie z c
prefiksem:
cstdio
Napisz funkcję, która konwertuje pierwszą formę na drugą. Możesz dokonać konwersji w miejscu lub pozostawić oryginalny ciąg nienaruszony i zwrócić nowy ciąg. Cokolwiek wydaje się naturalne w wybranym języku.
Kod musi zostać skompilowany / zinterpretowany bez błędów. Ostrzeżenia kompilatora są dopuszczalne.
Oto twoje podstawowe rozwiązanie C. Ma 70 znaków i generuje ostrzeżenie o strlen
:
void f(char*h){int i=strlen(h);h[--i]=0;while(--i)h[i]=h[i-1];*h='c';}
Najkrótsze rozwiązanie (mierzone liczbą znaków) wygrywa.
Aktualizacja: jeśli wybrany język nie obsługuje funkcji, dopuszczalne są również całe programy.
Aktualizacja: Jak sugeruje FUZxxl, oto pełna lista plików nagłówkowych w standardowej bibliotece C:
assert.h
ctype.h
errno.h
float.h
limits.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
time.h
W szczególności nie ma nazw nagłówków z wieloma kropkami.
źródło
Python: 19 znaków
źródło
CJam, 6 bajtów
Jest to pełny program, który odczytuje ciąg znaków przez STDIN
Objaśnienie :
Wypróbuj online tutaj
źródło
-2
jest tak dobry jakW(
?Java 8–25 znaków
źródło
brainfuck -
2523 bajtówJest to cały program, który pobiera dane wejściowe ze STDIN.
źródło
>
na początku.Haskell - 23 znaków
Haskell - 16 znaków, jak sugerują nimi
źródło
init.init
zamiast zamiast wzięcia wszystkich do pierwszego.
pozwala zaoszczędzić kilka bajtów.C, 38
Zobacz na Ideone
s
jest wskaźnikiem do łańcucha wejściowego io
jest miejscem, w którym należy zapisać dane wyjściowe.Znalazłem sposób na znęcanie się
snprintf
. Ciąg wyjściowy dogodnie jest o jeden znak krótszy niż wejście, a maksymalna długość napisanego ciągusnprintf
jest o 1 mniejsza niżn
argument, więc odcina.h
. Uwaga: ta technika nie będzie działać z implementacją Microsoftu, ponieważ robi coś złego i nie przerywa łańcucha zerowo.źródło
Plik wsadowy Windows 11
Pierwszy przekazany parametr to% 1. Modyfikator ~ n zwraca tylko nazwę pliku bez rozszerzenia.
Jeśli akceptowalne jest także echo rozwiniętego polecenia na ekranie, można usunąć początkowe @.
źródło
Architektura węzła TIS Typ T21 - 85 bajtów
Ta odpowiedź jest dla zabawy; język powstał po napisaniu tego wyzwania i dlatego nie mogę z nim wygrać. (Nie to, że zamierzałem.)
Okej, bawiłem się trochę z tym. Prawdopodobnie powinienem po prostu nazwać język „TIS-100”, ale po co łamać charakter? :RE
TIS-100 to gra o programowaniu komputera o całkowicie unikalnej i dziwnej architekturze. Napisałem niestandardową łamigłówkę do tego wyzwania, która pozwala mi pobierać dane wejściowe i sprawdzać dane wyjściowe względem znanego poprawnego „ciągu”. Niestety nie ma sposobu na obsługę ciągów lub znaków, więc ten program po prostu używa wartości ASCII każdego znaku do wprowadzania i wyprowadzania.
Jeśli chcesz, aby zobaczyć go w akcji, można użyć tego emulatora , albo po prostu obejrzeć mi uruchomić go w rzeczywistej grze tutaj . Zauważ, że w filmie ostatnia linia pierwszego węzła to
D:MOV UP NIL
. Po skończeniu filmu zdałem sobie sprawę, że mogę to pograć w golfaD:ADD UP
. Funkcjonalnie nie ma różnicy, ponieważ i tak wartość ACC jest natychmiast zastępowana.Oto ciąg, którego użyłem do mojej liczby bajtów:
Taki jest tekst każdego niepustego węzła, oddzielony znakami nowej linii (skutecznie dodając 1 bajt dla każdego węzła używanego poza pierwszym, odzwierciedlając naszą regułę dotyczącą kodu w wielu plikach).
źródło
Dyalog APL (8 znaków)
To rozwiązanie jest dokładnie takie samo jak rozwiązanie J, które przesłałem, ale używa o jeden znak mniej, ponieważ
↓
jest o jeden znak mniej niż}.
.źródło
J (9 znaków)
|y
jest wielkością zy
(zwany również wartość bezwzględna)x }. y
upuszcza|x
przedmioty zy
; przedmioty są upuszczane z przodu, jeślix
jest dodatnie, od końca, jeślix
jest ujemne.x , y
dołączax
iy
.'c' , _2 }. y
czy transformacja, którą chcesz; w milczącej notacji można to wyrazić jako'c' , _2 }. ]
.źródło
Struś 0,6 , 8 znaków
)
jest operatorem „właściwych Unons”. Po zastosowaniu do łańcucha zmienia się na przykład`foo`
w`fo` `o`
.;
służy do wyskakiwania dodatkowej postaci i dzieje się to ponownie.Następnie
"c
jest popychany. To po prostu skrót`c`
.\+
zamienia dwa górne elementy stosu i łączy je.źródło
piet (
9x11 = 998X11 = 88)kolejna próba (2x37 = 74)
Trudno go znacznie zmniejszyć, ponieważ musi wygenerować 99 („c”) i 46 („.”), A to zajmuje miejsce w piecie.
źródło
/dev/null
kodu źródłowego.F # -
39373131 - Ponieważ typowanie w skałach F #!
37
39
źródło
gema, 6
( Gema to niejasny język makr.)
źródło
Bash, 18 lat
Wydajność:
źródło
GNU sed -r, 14
sed tak naprawdę nie ma pojęcia o funkcjach, więc zamiast tego jest pełny program sed:
Wydajność
-r
Została ujęta w partyturze jako jednego dodatkowego charakteru.źródło
s/\(.*\)\.h/c\1/
.-r
został przekazany do sed. Jak zwykle w golfa kodowego muszę to liczyć jako dodatkowy punkt.-r
nie jest standardową opcją i nie jest dostępna poza GNU sed. Możesz chcieć zmienić nazwę języka na GNU sed, aby to odzwierciedlić.\.h
można skrócić do..
Preludium , 31 znaków
Ponieważ najwyraźniej dopuszczalne jest przesyłanie pełnego programu, oto program, który odczytuje nagłówek w stylu C ze STDIN i drukuje nagłówek w stylu C ++ do STDOUT:
Wymaga to zgodnego ze standardami interpretera, który drukuje dane wyjściowe jako kody znaków. Jeśli używasz interpretera Python , musisz ustawić
NUMERIC_OUTPUT = False
.Wymaga to również, że nie ma końcowego nowego wiersza na STDIN.
Wyjaśnienie
W Preludium wszystkie wiersze są wykonywane równolegle, jedna kolumna na raz. Każda linia ma swój własny stos, zainicjowany na nieskończoną liczbę
0
s.Jest to najkrótszy czas, jaki mogłem wymyślić, aby dostać się
99
na najwyższy stos (kod znakówc
). Najpierw sumuję18
na górnym stosie i wciskam9
na dolny stos. Dół następnie odlicza do0
pętli, podczas gdy górny stos dodaje więcej9
s. To sumuje się do99
górnego stosu, a dolny stos jest0
ponownie z s. Zauważ, że wszystko+9+
jest częścią pętli, więc w rzeczywistości istnieją dwie operacje dodawania na iterację, ale to nie jest problem, dzięki nieskończonej podaży0
s pod nią.Teraz
(?)
odczytuje STDIN, jedną postać na raz i przesuwa na najwyższy stos. Pętla kończy się na końcu wejścia, gdy?
popycha zero.###
pozbywa się tego zera,h
i.
. Teraz następna pętla wyskakuje liczby z górnego stosu podczas kopiowania ich do dolnego stosu. To zasadniczo odwraca stos. Zauważ, że nawiasy otwierające i zamykające są na różnych liniach - to nie jest problem, ponieważ pionowa pozycja nie)
ma znaczenia w Preludium, ale oszczędza mi bajt w pierwszej linii.Na koniec
(!)
drukuje wszystkie znaki, aż stos będzie pusty.źródło
Pyth, 7 znaków
Wyjaśnienie:
Spróbuj tego:
w internetowym kompilatorze / executorze Pyth
Jeśli dozwolone są pełne programy:
Pyth, 6 znaków
źródło
PPb
zamiast<b_2
C ++ 14, 41 znaków
Zainspirowany tym innej odpowiedzi. Zrobiłem to osobną odpowiedź, ponieważ tutaj używam funkcji, która jest nowa w c ++ 14, ogólna lambda .
Zobacz to w akcji tutaj .
źródło
T-SQL - 58 znaków
Uruchom jako EXEC Q (tutaj Twój ciąg)
źródło
Perl - 20 znaków
Zwróć uwagę, jak
c
to jest słowo-słowo i jako takie wymaga jego brakuuse strict
. To musi być użyte jako wyrażenie, a nie wyrażenie.źródło
Marbelous, 24
Pobiera dane wejściowe przez STDIN, dane wyjściowe do STDOUT.
Działa to poprzez sprawdzenie każdego bajtu za pomocą
.
(0x46
). Ponieważ0x46
nie może zmieścić się w jednej cyfrze bazowej 36, odejmujemy 35 (Z
) przed porównaniem i dodajemy go z powrotem przed wypisaniem.Każdy marmur jest powielany przez
3W
(trójdrożny powielacz, ale lewa strona jest odrzucana z boku planszy). Marmur skierowany w dół pobiera następny bajt ze STDIN. Marmur po prawej stronie jest sprawdzany.
, a następnie albo wysyłany, albo wysyłany do!!
, co kończy program.Program rozpoczyna się od przekazania
c
(0x63
), które zostanie wyprowadzone do STDOUT.Wypróbuj online tutaj. Biblioteki muszą być włączone, płyty cylindryczne muszą być wyłączone.
źródło
C, 64
Nieco krótszy niż odniesienie c:
Prawdopodobnie więcej golfa można z tym zrobić.
C, 48 (hack libc)
Strona
strcpy
man wyraźnie stwierdza „Ciągi nie mogą się nakładać”. Odkryłem jednak, że libc, którego używam, wydaje się być bezpiecznie zakodowany, aby mimo wszystko poprawnie się z tym obchodzić. To jest biblioteka GNU C (Ubuntu EGLIBC 2.19-0ubuntu6.4) na Ubuntu 14.04.źródło
-std=c89
. codegolf.stackexchange.com/a/2204/11259int
.JavaScript (ES6) 20
Nie mogę uwierzyć, że ES6 wciąż brakowało
źródło
Perl, 15 (14 + -p)
źródło
mk, 34 znaki
mk (1) zastępuje markę Plan 9. Dla zabawy ten plik mk konwertuje nazwy nagłówków C na nazwy nagłówków C ++:
Istnieje jedna karta przed
:
iecho
. Użyj w ten sposób:źródło
CoffeeScript - 16
źródło
TI-BASIC 83/84, 15
źródło
R, 33
Ta funkcja używa wyrażeń regularnych.
Przykładowe użycie:
źródło