Litera A bez litery A


69

Twoim zadaniem jest wyświetlanie samej litery „A”, bez żadnych innych elementów, z wyjątkiem jakiejkolwiek formy końcowych znaków nowej linii, jeśli nie możesz ich uniknąć, robiąc to w programie i / lub fragmencie. Kod, który zwraca (zamiast drukowania) jest dozwolony.

Dopuszczalne są zarówno małe, jak i wielkie wersje litery „A” (to znaczy Unicode U + 0061 lub Unicode U + 0041. Inne kodowania znaków, które nie są Unicode, są dozwolone, ale tak czy inaczej, wynikowy kod wyjściowy musi być łacińską literą „A”, a nie żadnymi lookalike lub homoglyphami)

Musisz nie użyć dowolnego z poniższych znaków w kodzie, niezależnie od kodowania znaków, który wybrać:

  • A ”, zarówno wielkie, jak i małe litery.

  • U ”, zarówno małe, jak i wielkie litery.

  • X , czy wielkie lub małe litery.

  • +

  • I

  • #

  • 0

  • 1

  • 4

  • 5

  • 6

  • 7

  • 9

Oszukiwanie, luki itp. Są niedozwolone.

Ponieważ jest to , zwycięzcą jest najkrótsze rozwiązanie w bajtach, które spełnia wszystkie zasady.


Sprawdzanie ważności

Ten fragment kodu sprawdza, czy Twój kod nie używa znaków zastrzeżonych. Może nie działać poprawnie w przypadku niektórych kodowań znaków.

var t = prompt("Input your code.");

if (/[AaUuXx+&#0145679]/.test(t)) {
  alert("Contains a disallowed character!");
} else {
  alert("No disallowed characters");
}

Ten fragment kodu, który zapewnia, że ​​nie masz niedozwolonej postaci, jest również dostępny w JSFiddle .

Tabela liderów


7
@ColdGolf Wygląda na to, że mówisz „tak” do funkcji, ale funkcje się nie wyświetlają, zwykle zwracają.
xnor

2
Czy skończy się na zmiennej, która zawiera arównież wystarczającą ilość?
Ton Hospel,

1
Nie to miałam na myśli. Domniemany kod wykonujący przypisanie zmiennej nie zawierałby żadnych zabronionych znaków. Próbuję po prostu zrozumieć, co obejmuje „wyświetlanie za pomocą środków innych niż drukowanie”. Jeśli „powrót z funkcji” jest w porządku, to co z „przypisaniem do zmiennej”?
Ton Hospel,

1
Dlaczego te konkretne postacie?
immibis

7
@immibis Az oczywistych powodów. Udla znaków ucieczki Unicode ( \u0041is A), Xznaków ucieczki heksadecymalnej ( \x41), +ordinals Unicode ( U+0041), &dla encji HTML, #bo tak naprawdę nie wiem, 65jest to dziesiętny porządkowy A, 41jest porządkowy szesnastkowy A, 97jest dziesiętny porządkowy aoraz 0z kilku poprzednich powodów.
Mego

Odpowiedzi:


86

Pluso, 1 bajt

o

Pluso Esolangs Page .

Pluso zawiera pojedynczy akumulator, który zaczyna się od wartości 1. Używa dwóch poleceń, p, które zwiększają akumulator (mod 27), oraz o, które drukuje bieżącą wartość jako duży znak ASCII, AZ lub spację (gdzie 1-26 reprezentuje AZ odpowiednio, a 0 oznacza spację).

Ponieważ akumulator rozpoczyna się w dniu 1, polecenie O bez uprzedniego P wyświetli A .


14
Witamy w PPCG! Zalecam umieszczenie wyjaśnienia w odpowiedzi na wypadek, gdyby link umarł z jakiegokolwiek powodu.
TheBikingViking

Dodano objaśnienie. Oczekiwanie na zatwierdzenie moderatora.
KPM

2
Dzięki za zalecenie (i powitanie) zaktualizowałem swoją odpowiedź, aby zawierała krótkie wyjaśnienie.
cdw

Właśnie zagłosowałem, aby umieścić cię na 666 powtórzeniach. Przepraszam za to.
Aidan F. Pierce

5
Czy to nie zawiedzie testu „jest esolangiem”, ponieważ nie można sprawdzić pierwotności?
Magic Octopus Urn

155

Python 2, 14 bajtów

print`3<3`[~3]

Wyrażenie 3<3podaje wartość logiczną False, a backticks reprezentują ciąg znaków 'False'. Stąd pozostaje wyodrębnić list a. Python ma indeks 0, więc ama indeks 1, który jest zbanowanym znakiem. Można to wyrazić jako 3-2, ale istnieje krótsza droga. Python pozwala na indeksowanie od tyłu, z indeksem -1dla ostatniego wpisu, -2dla poprzedniego przed nim i tak dalej. Chcemy indeksu -4, ale 4jest to także numer zbanowany. Ale możemy wyrazić jako ~3stosując dopełniacz-bitowy ~, co daje -n-1na ~n.


7
To naprawdę fajne rozwiązanie. Czy nie możesz [2]tego zrobić zamiast [~3]?
DJMcMayhem

6
@DJMcMayhem Niestety nie ma indeksowania [1].
xnor

4
... dlaczego są 1i 4„zbanowane” numery?
Chris Cirefice,

4
Reguły wyzwania tak mówią.
xnor

20
Zastanawiam się teraz nad użyciem „~ 0” jako „pierwszego zindeksowanego pierwszego elementu od tyłu”. Zastanawiam się, dlaczego używamy notacji „-1” w Pythonie ....
PascalVKooten 24.08.16


48

PHP, 9 6 bajtów

<?=O^_^Q;

Przez 9 bajtów: Zainspirowany odpowiedź @Ton Hospel użytkownika . Dodatkowo ma tę dodatkową zaletę, że wygląda trochę jak Kaomoji. :-)

Ulepszona wersja 6 bajtów:

<?=~¾;

gdzie ¾ ma kod szesnastkowy 0xBE (ważne jest, aby zapisać plik w kodowaniu Latin-1 , a nie UTF-8!).


Alternatywna wersja to f^E^b.
Ismael Miguel,

Tak, 9-bajtowe rozwiązania są obfite. Zacząłem od y ^ '8' i x ^ '9', niestety liczby muszą być rzutowane na ciąg lub XOR, a wynikowy typ będzie liczbą całkowitą.
YetiCGN,

23
+1 za twarz^_^
Cyoce

Wersja 6-bajtowa nie jest drukowana A. Drukuje =A.
UTF-8

1
Znam teraz odpowiedź na tę zagadkę: w UTF-8 punkt kodowy „ułamek trzy czwarte” jest zakodowany jako dwa bajty: 0xC2 0xBE , 0xBE jest taki sam jak w ISO-8859-1 . Zauważyłem, że kiedy zapisałem to w pliku na moim Linux-ie, do którego mam dostęp przez SSH z UTF-8, oczywiście plik ten ma 7 bajtów . Więc zapisz skrypt z kodowaniem Latin-1, a będzie on miał 6 bajtów i nie wyświetli =znaku.
YetiCGN


32

pieprzenie mózgu, 16 bajtów

-[-[---<]>>-]<-.

Opiera się to na algorytmie Esolanga dla pieprzenia mózgu dla 159 .

Wypróbuj online!


3
To .... to jest magia.
Conor O'Brien,

3
To rozwiązanie wykorzystuje komórkę o indeksie -1, która nie jest obsługiwana we wszystkich interpretatorach pieprzenia mózgu i spowodowałaby awarię. Możesz go uruchomić tutaj, aby zobaczyć fatiherikli.github.io/brainfuck-visualizer/…
Cody

37
@Cody W PPCG języki są definiowane przez ich implementację. Dopóki istnieje jeden tłumacz, który zachowuje się tak, jak jest to pożądane, jest to prawidłowe rozwiązanie.
Dennis

3
Jak ciężko ci było unikać zabronionych postaci?
Hagen von Eitzen

1
@HagenvonEitzen Musiałem trochę wykopać, aby znaleźć algorytm, którego można by uniknąć +. ( byłby najkrótszy sposób na wydrukowanie litery A>+[+[<]>>+<+]>. ), ale dzięki liście stałych w Esolang nie jest to zbyt trudne.
Dennis

30

JavaScript (ES6), 17 16 14 bajtów

Zaoszczędzono dwa bajty dzięki Neilowi!

_=>` ${-_}`[2]

Zwraca drugi znak NaN, którym jest a.

Jest to najkrótszy jaki mogłem wymyślić A, 43 42 bajty:

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

Kto powiedział, że bycie zaciemniaczem nie pomaga w golfie kodowym? Nie ja!

Objaśnienia

Pierwszy w głębi.

_=>` ${-_}`[2]

-_jest NaN, ponieważ _jest niezdefiniowany. Aby uzyskać to jako ciąg, potrzebna byłaby jedna z następujących czynności:

-_+""
`${-_}`
(-_).toString()

Ostatni jest za długi i pierwsze użycia +. Więc używamy drugiego. Teraz ajest na indeksie 1. To nie jest dobre, ponieważ 1jest zabronione. Jednak będąc ciągiem szablonu, możemy wstawić tam spację, aby była ona na indeksie 2, pozostawiając nam to ` ${-_}`.


Drugi, dogłębnie.

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

Ten był doozy.

_=>`                                `[-~8]

Jest to dziewiąty znak wewnętrznego ciągu szablonu, który -~8jest równy 9. W tym przypadku ten ciąg szablonu służy tylko do tworzenia łańcucha. To jest rygorystyczne wewnętrzne równanie, pomiędzy ${...}:

[][`constr${`${!_}`[2]}ctor`]

Rozwińmy to trochę:

(new Array())[`constr${`${!_}`[2]}ctor`]

Spowoduje to pobranie właściwości z pustej tablicy. Ta właściwość jest oczywiście ciągiem szablonu, ale wokół niej jest trochę tekstu. Jest to mniej więcej odpowiednik:`constr${${!""}[2]}ctor`

"constr" + `${!_}`[2] + "ctor"

Z kolei wnętrze odpowiada:

(!_).toString()[2]

!_jest true(ponieważ _jest undefined, i !undefined === true), a łańcuchowe jest "true". Otrzymujemy jego drugą postać u; musimy to zrobić w ten sposób, aby uniknąć jawnego wpisywania unaszego kodu.

Tak więc ten bit wewnętrzny jest równoważny:

"constr" + "u" + "ctor" === "constructor"

Otrzymujemy więc konstruktor tablicy, Arrayfunkcję. Nie mogłem tego jednoznacznie określić, ponieważ zawiera on zabronione A. Teraz stringowanie Arrayfunkcji daje "function Array() { [native code] }".

Powrót do oryginalnego kodu:

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

Jest to równoważne, jak widzieliśmy:

_=>Array.toString()[-~8]

Równoważny:

_=>Array.toString()[9]

Wreszcie równoważny z:

_=>"A"

1
@ColdGolf W porządku.
Conor O'Brien,

2
Czy dodanie wyjaśnienia byłoby sprzeczne z zasadami obfuscatora ...? Jestem ciekawy, jak to działa.
trichoplax

2
@trichoplax Podejrzewam, że ujawnienie moich metod nie zaszkodzi;) Dodałem wyjaśnienie dla obu.
Conor O'Brien,

1
@ OldBunny2800 Nr ajest postacią zabronioną i jest w środku toUpperCase.
Conor O'Brien

3
Na początku myślałem, że to Perl.
Οurous

29

Sześciokąt , 4 bajty

Ayyy Lmao? Całkiem golfowy jak na haha ​​dla golfistów. Kod:

B(;@

Wypróbuj online!

Bardziej czytelna forma:

 B (
; @ .
 . .

To stawia wartość ASCII litery B, która wynosi 66, na bieżącej krawędzi pamięci. Odejmuje to za pomocą jednego (i drukuje za pomocą ;. Następnie program zostaje zakończony przy użyciu @.

Obraz ścieżki obowiązkowej:

wprowadź opis zdjęcia tutaj


8
„bardziej czytelny” + sześciokąt = ???
Nie żeby Charles

18

Galaretka , 3 bajty

ØWḢ

Wypróbuj online!

Jak to działa

ØWḢ  Main link. No arguments.

ØW   Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_".
  Ḣ  Head; extract the first character.

Galaretka, 4 bajty

l-ṾṂ

Wypróbuj online!

Jak to działa

l-ṾṂ  Main link. No arguments.

l-    Take the logarithm of 0 with base -1. Yields (nan+infj).
  Ṿ   Uneval; yield the string representation, i.e., "nanıinf".
   Ṃ  Take the minimum, returning 'a'.

1
Szkoda, że ​​drugie podejście jest dłuższe. ._.
Dennis

6
Dzięki za uwzględnienie drugiego podejścia. To jest piękne
trichoplax

18

Właściwie 2 bajty

úF

Wypróbuj online!

Wyjaśnienie:

úF
ú   lowercase English alphabet
 F  first element

jesteś autorem? Nie widziałem tego języka wcześniej.
loa_in_

Widziałem go teraz kilka razy w wyzwaniach. Myślę, że ma najmądrzejszą nazwę spośród wszystkich języków golfowych na stronie :-) Oglądałem ostatnio garnitury i uważam, że to bardzo Harvey.
corsiKa


12

Bubblegum , 1 bajt

"

lub

B

Wszyscy zdawali się zapominać, że istniał ...


Nigdy wcześniej nie stosowałem Bubblegum, więc może wybacz moją ignorancję, ale gdzie mogę znaleźć dokumenty dotyczące Bubblegum? Próbowałem też bubblegum.tryitonline.net z obiema odpowiedziami, ale wydaje się, że nic nie daje.
Kevin Cruijssen

1
@KevinCruijssen Doc: esolangs.org/wiki/Bubblegum TIO wydawało się akceptować tylko zrzut heksowy kodu źródłowego, więc spróbuj tego w następujący sposób: bubblegum.tryitonline.net/…
jimmy23013

Ach, to mój problem; nie używa zrzutu heksadecymalnego. Dzięki i +1 za bycie najkrótszym z jednobajtową odpowiedzią (powiązane z Pluso).
Kevin Cruijssen

@KevinCruijssen Istnieje 1 bajtowa odpowiedź Pluso. Ma jednak pewne problemy z dziwną regułą witryny.
jimmy23013

10

Perl, 9 8 bajtów

xor jest nadal dozwolony, ale saynie jest. Tak więc dla 9 bajtów:

print$/^K

Jednak użycie danych wyjściowych do STDERR daje 8 bajtów:

die~"\x9e\xf5"

Zamień \x9ei \xf5ich dosłowne wersje. Lub wygeneruj plik wykonywalny za pomocą:

perl -e 'printf q(die~"%s"),~"a\n"' > a.pl

@ColdGolf: Nie jest to dla mnie jasne. Czy masz na myśli, że mogę używać say(zawiera a) do drukowania, o ile konstrukcja argumentu nie używa zabronionych znaków?
Ton Hospel,

„Nie wolno jednak używać w kodzie żadnego z poniższych znaków: * A, zarówno wielkich, jak i małych.” Z tego, ja print "No using the letter with code point 65";.
haykam

@ColdGolf to ma w jakikolwiek sposób odpowiedzieć na pytanie?
hobbs

10

> <> , 6 bajtów

'|;o-$

to tworzy ciąg znaków, odbija się i tworzy go ponownie w odwrotnej kolejności, odwraca 2 górne elementy stosu i odejmuje: „|” (124) minus ”;” (59) to „A” (65)

Wypróbuj online


2
Miły! Mam, '$-o;|co jest prawie takie samo, ale bez podskakiwania. ( |;o-$'również działa.)
randomra

1
@randomra oh true! to zdecydowanie działałoby szybciej, więc niezła robota
torcado

10

Rubin, 15 12 bajtów

$><<to_s[-3]

1
Możesz zapisać 2 bajty zmieniając $><<na p , sprawia, żep to_s[-3]
Ephi

@Ephi pwywołuje inspectna jej argumentów, więc będą notowane wyjście, które go dyskwalifikują.
Jordan

Przegapiłem tę część wyzwania, pozwolę sobie na te komentarze, ponieważ uważam, że to interesująca informacja :)
Ephi

10

Java, 55 bajtów

void f(){System.err.write('c'-2);System.err.println();}

Ponieważ kod musi go wydrukować, wymagany jest jeden z dwóch wbudowanych programów piszących. System.outjest, no cóż, ponieważ zawiera u. System.errdziała jednak.

Kolejną przeszkodą jest obsługa Java przez chari int. Ponieważ nie można go przesyłać, charponieważ zawiera ai ponieważ 'c' - 2awansuje int, wymagany jest inny mechanizm. System.errjest PrintWriter, który ma write(char)metodę, ale nie ma write(int). Umieszczenie 'c' - 2tam zmusza go do charużycia bez obsady.

Wreszcie, za każdym razem, gdy uruchamiam program, bufor dla System.errnie będzie się opróżniał tak, jak powinien, a program nic nie drukował. Musiałem więc spłukać ręcznie. Jednak System.err.flush()nie jest dozwolone, więc zadzwoniłem println(), które niejawnie opróżnia podstawowy strumień.


9

MATL, 5 bajtów

YNVH)

Wypróbuj online

Wyjaśnienie

YN      % Creates a NaN value (not a number)
V       % Convert it to a string
H)      % Grab the second letter ('a')
        % Implicitly display the result

Mój oryginalny odpowiedź była prosta podejście do przodu za pomocą wstępnie zdefiniowane dosłowny lY2, który daje 'A'...'Z'a następnie wybierając pierwszy element, 'A'.

lY2l)

9

JavaScript, 18 bajtów 16 bajtów 12 bajtów 11 bajtów

` ${!2}`[2]

Na podstawie zmodyfikowanych jsfuck podstaw (musieli dowiedzieć się, jak wymienić +z -).

Ungolfed?

Cóż, przynajmniej wersja z komentarzami (pamiętaj, że ta wersja prawdopodobnie nie będzie działać):

` ${      // whitespace to make "a" the third letter
  !2      // returns false
}`        // convert to string "false"
[2]       // index the third letter in " false" (note the whitespace)

Stare rozwiązanie:

`${![]}`[-(-!![])]

Możesz zamienić nawias na spację między znakami minusowymi.
PurkkaKoodari,

@ Pietu1998: Zauważyłem, że 3jest to dozwolone, więc zastąpiłem to wszystko nudnym starym 3-2do zdobycia1
slebetman


1
Bez obrazy, ale to właściwie moja odpowiedź. Tyle że używasz false zamiast NaN i nie używasz funkcji.
Conor O'Brien

8

Vim, 16 13 11 10 klawiszy

Dzięki H Walters za uratowanie dwóch kluczy

Dzięki DJMcMayhem za uratowanie kolejnego!

:h%<cr>jvyZZp
:h%<cr> #open help for percent
jvy     #move down one char (to the letter "a"), visual mode the character, yank
ZZ      #exit help for percent
p       #put yanked character

Bardzo fajne podejście!
YetiCGN,

2
Zaoszczędź 3 bajty; zamiast :h<cr>, spróbuj :h%<cr>. To jedna dodatkowa postać, ale kończysz na pomocy %, gdy kursor znajduje się nad znakiem. Więc tutaj można wymienić 33llz j.
H Walters,

Przepraszamy za oczywistą literówkę (zapisz 2 bajty)
H Walters,

Możesz użyć ZZzamiast :q<cr>zapisać inny.
DJMcMayhem

8

R, 27 12 bajtów

EDYCJA: Nowa wersja, z doskonałego pomysłu @Jarko Dubbeldam

LETTERS[T*T]

Całkiem zabawne wyzwanie!

Zasadniczo bierze to 26thelement wektora odwróconego zawierającego wielkie litery ( LETTERSktóry jest wbudowanym wektorem R )

Poprzednie wersje s (ta sama liczba bajtów) :

L=LETTERS;rev(L)[length(L)]
rev((L=LETTERS))[length(L)]

1
Trochę późno, ale możesz sporo zaoszczędzić LETTERS[T*T]. Tocenia 1podczas wykonywania operacji numerycznych.
JAD


To nie jest technicznie rozwiązanie --- drukuje „[1]„ a ”, a nie tylko„ a ”
JDL

8

> <> , 7 4 bajty

Zaoszczędzono 3 bajty dzięki pelikanowi Teal

"-o.

Wypróbuj online!

Wyjaśnienie

"-o."   # pushes the string "-o."
-       # subtracts the charcode of o from the charcode of . (dot), 111-46=65
o       # prints as character
.       # tries to pop 2 coordinates to jump to, but as nothing is left on the stack
        # the program ends in an error

Zrobiłbym"B"1-o;
DanTheMan

@DanTheMan To powinno być bardziej oczywiste rozwiązanie. Zastanawiam się, dlaczego o tym nie pomyślałem: P
Emigna

@ DanTheMan: - Wychodząc z tego, co napisał Dan, możesz to jeszcze bardziej zmniejszyć; „1-o; B lub nawet lepiej” + o; & w obu przypadkach dozwolone jest tworzenie tych 5 bajtów :) - można nawet zrobić 4 bajty z błędem; „-o.
Pelikan

@Tealpelican: To wspaniale! Używanie ciągów jest często najkrótsze w takich wyzwaniach, ale nawet tego nie brałem pod uwagę :)
Emigna

Kiedy zobaczyłem komentarz Dana, przypominał mi to starsze wyzwanie, więc użyłem tej samej koncepcji :)
Pelikan Teal

7

Vim, 2 naciśnięcia klawiszy

vim -u NONEnastępnie uruchom następujące polecenie ( -u NONEwyłącza dostosowywanie)

i<up>

Kiedy vim jest uruchomiony w trybie zgodnym, klawisze strzałek nie są poprawnie interpretowane. <up>zostanie zinterpretowany, <esc>OAco pozostawia następujące elementy w trybie wstawiania. Który by odszedł (z kilkoma końcowymi znakami nowej linii)

A

iuruchamia tryb wstawiania.
<up>wychodzi z trybu wstawiania, otwiera linię powyżej i wprowadza A do bufora

Przykład ludzi, którzy spotykają się z tym na wolności. https://stackoverflow.com/questions/6987317/while-moving-the-cursor-across-a-vim-process-open-in-a-tmux-session-every-now-a/6988748#6988748


Zaśmiałem się, czytając to. To dobra robota. Świetna broń tego, co wiem, ale nie pomyślałabym.
udioica

6

Brainfuck, 192 19 bajtów

----[>---<----]>--.

Dzięki @NinjaBearMonkey za pomoc w oszczędzaniu bajtów hella

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------------------------.

Nie jestem dobry w Brainfuck, więc jestem pewien, że istnieje krótsze rozwiązanie, ale działa ono poprzez zmniejszenie wartości poniżej 0, przewrócenie bajtu i kontynuowanie, aż spadnie do „A”, a następnie drukuje.


1
nie poważny konkurent. Jeśli faktycznie zagrasz w golfa, downvoter może odwrócić swój głos
Destructible Lemon

Czy nie byłoby znacznie krótsze policzyć do 65, nawet z 65 plusami?
NinjaBearMonkey

2
„+” jest niedozwolone, więc musiałem cofnąć się
Cody

Przepraszam, nie widziałem tego. Wciąż jednak istnieją znacznie krótsze sposoby na uzyskanie 191 .
NinjaBearMonkey

2
To było 192 bajtowe rozwiązanie, po prostu zostawiłem to i przekreśliłem zamiast go usunąć, ponieważ myślałem, że to zabawne przejście z 192 na 19
Cody

6

JavaScript (ES6), 21 bajtów

_=>(8^2).toString(22)

Początkowo próbowałem przekonwertować falsena ciąg, aby to zrobić, ale zajęło mi to 23 bajty. Od tego czasu wymyśliłem krótszą drogę, czyli 14 bajtów:

_=>`!${!2}`[2]

Nie sądzę, że można uzyskać wielkie litery Azgodnie z regułami, ponieważ potrzebujesz jednego String.fromCharCodelub .toUpperCase()obu, które zawierają a.


Wielkie litery można uzyskać za pomocą JSF lub pochodnej za pomocą obliczonych właściwości
Downgoat

1
@Downgoat Conor O'Brien już pokazał, jak to zrobić.
Neil,

6

C, (19?) 24 bajty

Dzięki Dennis:

f(){printf("%c",88-23);}

ta sama długość:

f(){printf("%c",'C'-2);}

co umożliwia także małe litery:

f(){printf("%c",'c'-2);}

Istnieje 19 bajtowe rozwiązanie jako funkcja modyfikująca jego parametr, który ma wadę:

g(int*p){*p='C'-2;}

//Usage:

main(){
  int c; //cannot be char
  g(&c);
  printf("%c\n",c);
}

Jeśli czostał zadeklarowany char, gmodyfikuje całość, intwięc rozbija stos, co powoduje modyfikację innych wartości lub przerwanie programu z komunikatem o błędzie. Jedynym sposobem na obejście jest zadeklarowanie int c;w maini drukować "%c", ale czuje się jak luki.

starsze rozwiązania

f(){printf("%c",'B'-2/2);} //26 bytes
f(i){i='B';printf("%c",--i);} //29 bytes
f(){int*i="B";int j[]={*i-(2/2),2-2};printf("%s",j);} //53 bytes

Po prostu funkcja, ponieważ mainjest zabroniona.


3
88-23powinien zaoszczędzić kilka bajtów.
Dennis

W przypadku małej litery a można użyć (333-33) / 3-3. Nie jest tak krótki jak 'c'-2, ale jest 3er. 33 * 3-2 jest również możliwe.
rici,

Jeśli użyjesz write () zamiast printf, możesz uczynić go programem; określ kroki kompilacji, aby upewnić się, że w ogóle nie łączysz się z żadnym libc; jeśli nie ma _start, pierwszy symbol jest przeskakiwany i _exit jest dozwolony, więc jest bezpieczny. Co najmniej jedna wersja gcc zoptymalizuje write () do bezpośredniego wywołania systemowego bez żadnego wywołania funkcji.
Joshua

W zależności od IDE możesz zrobić coś takiego: printf("%c",~'ɦ');chociaż „A” będzie miał dodany znak akcentu heh
Albert Renshaw

@AlbertRenshaw ɦjest dwubajtową postacią
Karl Napf

6

dc, 4 bajty

833P

UCHAR_MAX przelewowy rolki przez stół sześć trzy razy przed wyładunkiem z 65.


6

Lua, 36 bajtów

Ten mi zajęło, ponieważ wiele standardowych funkcji Lua są zabierane od reguł (wszystkie math, string.char, string.match, pairs, nawet next)

Wykorzystuje to fakt, że Lua ma globalny, _VERSIONktóry zwykle zaczyna się od „Lua” (np. Lua 5.1Lub podobny w przypadku innych wersji), więc jeśli nie zostanie uruchomiony w interpreterie innym niż główny nurt, trzecia postać będzie „a”

print(({_VERSION:find("..(.)")})[3])

Należy {...}[3]zgrupować wyniki, findktórych wyniki obejmują również wskaźniki, w których pasował, a następnie zwrócić trzeci element, który jest dopasowanym znakiem (the a)


1
print(({type{}:find".(.)"})[3]) 31 bajtów
Egor Skriptunoff

6

Haskell, 10 bajtów

Jako funkcja (a raczej instrukcja, ponieważ nie jest wymagane wprowadzanie danych)

f=pred 'B'

Zrób sztuczkę. Wypróbuj na Ideone. Pełny program jest niemożliwy, ponieważ musiałby zawierać main.


Nie sądzę, żeby to było ważne. Zadanie wymaga „wydrukowania” lub „wyświetlenia” A. Twoje funkcje po prostu go zwracają, a połączony program wyświetla je za pomocą, putCharktórych używa u.
nimi

Masz rację, jednak zasady zostały zaktualizowane i teraz powrót z funkcji wydaje się być w porządku.
Laikoni,

Nie, przepisy nadal mówią printi / lub display.
nimi

2
Dennis zapytał wprost, czy powrót z funkcji zamiast drukowania jest w porządku, a OP odpowiedział twierdząco, ale późniejsze sformułowanie pytania wciąż tego nie odzwierciedla. Chyba wciąż musimy czekać na dalsze wyjaśnienia.
Laikoni,

1
PO potwierdził, że Anależy wydrukować / wyświetlić i nie zwrócić.
nimi


5

dc 8 7 bajtów

-1B dzięki Dennisowi

88 23-P

Przesuwa 88, przesuwa 23, odejmuje, pozostawiając 65. Wydrukuj górę stosu (65) jako ciąg ASCII, bez końcowego znaku nowej linii.

Edytować:

Oto kilka innych sposobów, które wymyśliłem. Zasadniczo stała się grą „generowania liczb 65 i 97 przy użyciu tylko [238B-F]i bez dodatku”. Jak na ironię, najdłuższe uważam za najciekawsze.

_Fdd/r-oC 2-n  # involves changing the base
2_2/8d*3*2/-P
Idd2/2/-2*on   # also changes base
2d8r^r_2/-P
8d*2_2/-P
B 3d**2-P
33 3*2-P
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.