Stampa l'alfabeto, l'ALFABETO o solo un personaggio


49

La sfida è semplice:

Scrivi una funzione o un programma che accetta un input xe genera l'alfabeto minuscolo se xfa parte dell'alfabeto minuscolo, emette l'alfabeto maiuscolo se xfa parte dell'alfabeto maiuscolo e emette solo xse non fa parte di nessuno dei due.

Regole:

  • L'input può essere argomento della funzione o da STDIN
  • L'input sarà uno qualsiasi dei caratteri ASCII stampabili da 32 a 126 (dallo spazio alla tilde).
  • L'ingresso può essere virgolette all'interno, 'x'o "x", ma ricordate che 'e "sono input valido e dovrebbe essere sostenuta.
  • L'input può essere una qualsiasi delle lettere dell'alfabeto, ovvero non si può presumere che lo sarà ao A.
  • L'output dovrebbe essere solo uno degli alfabeti o il singolo simbolo, ma le nuove righe finali sono OK.
  • Le lettere dell'alfabeto non devono essere separate da spazi, virgole o altro.

Qualche esempio:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

Il codice più corto in byte vince.


Opzionale ma apprezzato: se la tua lingua ha un interprete online, pubblica anche un link in modo che possa essere facilmente testato da altri.


Classifica

Lo snippet di stack nella parte inferiore di questo post genera il catalogo dalle risposte a) come elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

## Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Ci è permesso importare pacchetti come, ad esempio in Python: import Randome poi usare Random.randint(ovviamente non per questa sfida ma comunque)?
Daniel,

Sì, è possibile importare pacchetti. ma i byte per la scrittura, ad esempio, import stringvengono contati, quindi spesso è meglio fare soluzioni alternative. Si noti che il pacchetto deve esistere prima che la sfida sia pubblicata. Molte sfide hanno qualcosa del tipo: "L'uso di pacchetti che fanno ciò non è permesso", ma non è così in questa sfida.
Stewie Griffin,

Suppongo che per "le virgolette sono input validi e devono essere supportati" intendi che se il tuo metodo di input richiede le virgolette, allora le virgolette come input sarebbero sfuggite
Cyoce,

Possiamo assumere un ambiente REPL?
cat

Risposte:


22

TeaScript , 5 byte

xN(0)

TeaScript ha un (quasi) incorporato per questo: D

Provalo online (nota: l'interprete online è stato aggiornato a TeaScript v3, quindi in cui si trova N0)

Prova tutti i casi di test


TeaScript 3 , 2 byte [non concorrenti]

Utilizzando TeaScript 3, questo può diventare 2 byte. Questo non è competitivo perché TeaScript 3 è stato realizzato dopo questa sfida

N0

Alternativa a 1 byte

Se potessimo emettere 0123456789cifre, questo potrebbe essere:

°

TeaScript 3 è valido. Quindi, puoi usarlo!
user75200

27

Pyth, 10 byte

h/#z[GrG1z

Suite di test

Iniziamo costruendo un elenco con 3 elementi: l'alfabeto minuscolo, l'alfabeto maiuscolo e l'input. ( [GrG1z) Quindi, filtriamo questo elenco sul numero di aspetti dell'input negli elementi che sono diversi da zero. ( /#z) Infine, prendiamo il primo elemento dell'elenco filtrato.


6
Scherzi a parte, c'è qualcosa che non potresti risolvere con pochi byte di Pyth? Ho davvero bisogno di imparare questa lingua ..
Esaolico il

25
Impara quale lingua? ... ne hai citati due per nome. : P
Quintopia,

2
@quintopia Bene, perché non entrambi? :)
Esaolico il

15

LabVIEW, 23 LabVIEW Primitives

Il selettore (il? Sulla struttura cse) è collegato a un vi che si chiama Classe lessicale. Emette numeri da 1 a 6 a seconda dell'ingresso, 5 in minuscolo 4 in maiuscolo.

Il ciclo for va 26 volte per creare un alfabeto o una volta per far passare il simbolo.


4
Come qualcuno che ha avuto il privilegio (sventura? Decidi) di lavorare in LabVIEW molti anni fa, le tue risposte mi fanno sorridere. =)
corsiKa

12

Haskell, 48 byte

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Esempio di utilizzo:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Prendi tutte le liste di ['a' .. 'z'], ['A' .. 'Z'] e la lista singleton con il carattere di input cdove cè l'elemento di. Per le lettere abbiamo sempre due corrispondenze, quindi scegliamo la prima.


11

JavaScript (ES6), 79 byte

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

Spiegazione

JavaScript confronta il codice di ciascun carattere in ordine alfabetico quando si confrontano le stringhe, quindi i codici dei caratteri utilizzati nei confronti sono 1 sotto e sopra l'intervallo richiesto di caratteri.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Test


È davvero il modo più breve per produrre una stringa con l'intero alfabeto in Javascript? Se desideri l'intera gamma ASCII stampabile, dovresti digitare ogni singolo carattere?
Stewie Griffin,

1
@StewieGriffin Purtroppo lo è. L'unico altro modo sarebbe qualcosa di simile: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeè molto inadatto per il golf, ma a volte è l'unico modo!
user81655

4
In questo caso il saldo è tra String.fromCharCodee .toUpperCase(Scemo e più scemo) ma toUpperCaseè il vincitore
edc65

Bello! Ho provato diversi modi per giocare a golf ulteriormente, ma non ne ho trovato uno che funzioni. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")sì, ma è più lungo di un byte. Passare [A-Z]a \wfunziona per tutto tranne _. La tua soluzione sembra essere la più breve possibile.
ETHproductions

Ecco uno dei modi più brevi per generare ABC...abc...?senza un vero forloop: (alcuni padding)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R, 90 75 byte

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Grazie a Giuseppe .

Vecchia versione (90 byte):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Sembra brutto, ma quelli catnon possono essere esternalizzati a funzioni, IMHO.



73 byte : il secondo parametro di scanpuò essere qualsiasi oggetto di tipo carattere, quindi puoi lettersinvece di ''.
Robin Ryder,

7

Python 3, 92 84 82 74 byte

Versione attuale: 74, grazie a isaacg e wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (per alcune definizioni di ungolfed

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Prima versione: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Seconda versione: 82, grazie a isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

Ciao e benvenuto in PPCG! Bella risposta. Ecco un suggerimento sul golf: è possibile utilizzare un'espressione lambda ( lambda c:) anziché una definizione esplicita ( def f(c):print() e salvare alcuni byte. Inoltre, non è necessario lo spazio prima di for.
isaacg,

Ah, ho assunto "uscita" per stampare media, e non solo tornare :) Ordinato, se questo è il caso si è scesi a 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Grazie!
Koneke,

Sì, la definizione standard di output sul sito consente di tornare dalle funzioni, quindi è possibile modificare la nuova versione nella risposta. Un altro campo da golf è che le parentesi non sono necessarie: la funzione funziona esattamente allo stesso modo senza di esse, come una comprensione del generatore anziché una comprensione dell'elenco.
isaacg,

Ah, non ho mai usato la comprensione del generatore prima, imparando cose nuove! Grazie ancora :)
Koneke il

Si noti che quando si immette "nella funzione, è \"invece necessario .
Daniel,

6

Pitone 3, 118 105 98 97 83 byte

Soluzione semplice. EDIT: golfato con grazie al suggerimento del golfista Erik.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Ungolfed:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
Potresti usare un operatore ternario per salvare qualche byte? Qualcosa del genere return a.lower() if s.islower() else a.
David Robertson,

@DavidRobertson Non sono sicuro se stai leggendo la mia soluzione, che è la prima riga di codice, correttamente, ma è esattamente quello che sto facendo.
Sherlock9,

Ah! Stavo leggendo la versione non golfata. Mi dispiace per quello!
David Robertson,

@DavidRobertson Non è un problema
Sherlock9,

Golf:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer,

5

PHP, 62 76 82 byte

PHP sta andando bene ora:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Riceve un input dalla riga di comando, come:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Le modifiche

  • 6 byte salvati sostituendoli 91>ord($x)con Z<$x. Modo pensato per complicato. Grazie a manatwork .
  • Salvato 14 byte rimuovendo strtouppere costruendo direttamente l'intervallo richiesto.

Che ord()sembra male lì. Prova Z<$x?$a:strtoupper($a).
arte

@manatwork Haha, ho pensato che fosse complicato in quella seconda parte. Grazie per averlo sottolineato.
inserireusernamehere il

Prova ' '&$x^Aa rendere maiuscole e minuscole a e z. Cioè, il tuo codice diventa<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel il

@IsmaelMiguel Questo avrà lo stesso conteggio byte esatto.
insertusernamehere

1
Non preoccuparti, ed è ancora un bel modo di offuscare. ;)
insertusernamehere

5

Perl, 46 34 33 byte

include +2 per -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Correre come

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • l'aggiornamento 34 consente di salvare 12 byte omettendo fore utilizzando le password, grazie a @Dom Hastings .
  • aggiornamento 33 salva 1 byte usando -Ee sayinvece di print.

@DomHastings Grazie! Avrei dovuto sapere che erano consentite le password nude - e avrei dovuto vedere che for: - /. Ho provato un sacco di approcci, ( -pcon $"='';$_="@_", anche, $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'ma tutto è più lungo ...
Kenney,

Pensato a questo, se hai impostato $_=invece di printing e usare la -pbandiera invece di -nte puoi salvarne altri due ... Non riesco ancora a pensare ad altri modi per salvare di più finora ...
Dom Hastings

@DomHastings L'ho provato, ma non riesco a impostare $_un elenco (di cui sono a conoscenza). Dovrebbe essere interpolato ( $_="@_") ma che usa lo spazio come separatore, quindi dovrei fare anch'io $"=''(o usare a join'',) che lo rende più lungo. Non c'è molto spazio di manovra su questo!
Kenney,

Ah, certo! Hai anche detto che (quando rileggerò il commento dopo non essere al pub ...) continuerò a pensarci, ma potresti essere il più corto che otterrai senza usare sayinvece di print!
Dom Hastings,

5

Rubino, 41 + 1 = 42

Con interruttore -p, corri

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Questo genera la stringa

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

e controlla ogni blocco contiguo di "caratteri di parole", che sono solo gli alfabeti minuscoli e maiuscoli e il carattere di sottolineatura. Se ci fossero più caratteri consecutivi tra Z e a, questo trucco non funzionerebbe.

Modificato per aggiungere spiegazione, su richiesta:

La -pbandiera lo fa essenzialmente

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?A..?z]è la matrice di caratteri tra A maiuscola e Z minuscola, in ordine ASCII. Quello è l'alfabeto maiuscolo, alcuni caratteri non lettera e l'alfabeto minuscolo. *''unisce l'array in una stringa, in modo che possiamo chiamarlo .scan. scantroverà ogni corrispondenza dell'espressione regolare /\w+/, popolerà la variabile magica $&con essa e chiamerà il blocco. Ogni volta che il blocco viene ripetuto, verifica se la stringa corrispondente contiene $_e imposta l'output su quella stringa in tal caso. Quindi, se $ _ è contenuto in lettere maiuscole o minuscole, viene modificato di conseguenza, altrimenti rimane invariato.

La versione ungolf sarebbe simile a qualcosa

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

Puoi pubblicare una versione non giocata a golf? Non capisco ancora come funziona.
Shelvacu,

Certo, pubblicato uno.
istocratico il

4

CJam, 18 byte

'[,65>_elr:R]{R&}=

'[,65>invia l'alfabeto maiuscolo, _ell'alfabeto minuscolo e r:Runa stringa a carattere singolo che viene letta da STDIN e assegnata alla variabile R. Questi sono racchiusi in un array ( ]) e il primo che ha dei caratteri in comune con Rè selezionato usando {R&}=.


Sto cercando di capire come CJam, ma mi sono perso tra il documento ufficiale e quello che sto leggendo qui. Qualcuno può darmi ad esempio una pagina in cui posso capire perché _ell'alfabeto minuscolo è?
Erdal G.,

Ah, elsignifica "converti in minuscolo". Ho appena inserito l'alfabeto maiuscolo, quindi ora lo duplico _, quindi invoco ella copia risultante.
Lynn,

1
Ho realizzato un bel pdf contenente (quasi) tutti i comandi di CJam.
Lynn,

4

Retina, 62 byte

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Le due linee brevi sono la regex da abbinare. Se l'input è in minuscolo (nell'intervallo [a-z]), sostituisce quel carattere (in questo caso, ovvero l'intero input) con l'alfabeto minuscolo. Il processo è simile per le maiuscole. Se non è una lettera, non vengono apportate sostituzioni e viene emessa intatta.

Provalo online.


4

Python 2.7.10, 95 93 79 byte

Questa è la prima volta che provo persino a giocare a golf, quindi per favore, qualsiasi aiuto o consiglio è estremamente apprezzato!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Grazie a Morgan Thrapp per l'aiuto!


1
@MorganThrapp, non sembra funzionare. Sei sicuro che funzioni in Python 2.7.10?
Daniel,

Funziona in 2.7.8. Cosa non funziona?
Morgan Thrapp,

@MorganThrapp, in realtà, potresti per favore spiegare prima come funziona esattamente? Forse è solo che non capisco, quindi sto facendo qualcosa di sbagliato.
Daniel,

Certo, usa il fatto che False == 0e True == 1per indicizzare in tuple. Quindi, prima controlla se è una lettera con isalpha, se lo è, ritorna 1e quindi controlla se è minuscola e fa lo stesso.
Morgan Thrapp,

1
Nessun problema! Adoro giocare a golf, quindi sono sempre felice di aiutare qualcuno di nuovo!
Morgan Thrapp,

4

Rubino, 46 43 caratteri

(Codice 42 caratteri + opzione riga comandi 1 carattere)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Grazie a:

  • Jordan for the ===magic (-3 personaggi)

Esecuzione di esempio:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@

4

MATL , 22 byte

jtt1Y2XIm~Iw?km?Ik]]1$

Questo utilizza la versione corrente (3.1.0) della lingua.

EDIT (15 set 2017): provalo su MATL Online! (con una versione più recente della lingua).

Esempi

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

Spiegazione

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing

3

Java, 165 caratteri

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

Genera l'output richiesto su stdout (anziché restituirlo). L'input avviene tramite gli argomenti di runtime.

Come funziona.

1) Imposta alcune variabili intere
c = il valore ASCII del primo carattere del primo parametro degli argomenti di runtime.
d = c convertito in valore ASCII minuscolo (ordinandolo con 32)
b = calcolo per vedere se d è una lettera. Sarà <0 se una lettera.
e = Il carattere iniziale per l'output. Se il valore ASCII in d è una lettera (vedi b), allora è impostato su 'A' (o 'a' aggiungendo c AND 32 a 'A' valore ASCII) altrimenti è impostato sul valore originale di c.
f = il numero di caratteri da emettere. Se non è una lettera (vedi b), allora questa è impostata su 1 altrimenti è impostata su 26
2) Ripeti da e a e + f che trasmette ogni carattere a stdout.


2
Sai che per la maggior parte delle sfide la soluzione può essere fornita come programma completo o come funzione? Data l'enorme quantità di codice boilerplate in Java, una funzione può essere più breve.
arte

1
L'applicazione di un paio di piccoli trucchi, senza cambiare la logica, ho ottenuto questo: void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}.
arte

3

Perl, 23 byte

Include +2 per -nE(anziché il normale +1) per essere onesti con l'altra soluzione perl

Esegui con l'input su STDIN senza trascinare newline:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Solo il codice:

say/\pL/?a&$_|A..Z:$_

Un buon uso del fatto che l'input è limitato a caratteri a 7 bit.
msh210,

3

Lua, 98 97 byte

Purtroppo, non ho trovato una soluzione inferiore a 26 byte da impostare acon l'alfabeto. In effetti, non ho trovato meno di 32.

Modifica: salva 1 byte grazie a @ATaco, stava facendo questo errore molto quando è iniziato con Lua: p

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

Puoi provarlo online sul sito ufficiale o su ideone . Se usi il primo, l'input non funzionerà (disabilitato), quindi usa la seguente fonte, dove è racchiusa in una funzione.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))

Non sei l'unico che non ha trovato il modo più breve per generare l'alfabeto in Lua. :(
arte

@manatwork haha, esattamente la stessa cosa, tranne che non dovevo stamparlo, ma concatenarlo ^^. Almeno, ciò significa che non esiste un trucco nascosto che non sapevo fare ^^ '.
Katenkyo,

Puoi salvare un byte con c=io.read()a="abcdefghijklmnopqrstuvwyz"invece di a, c = ...
ATaco

2

Mathematica, 75 byte

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

Punteggio abbastanza buono per un linguaggio non golf ... Qualsiasi soluzione che utilizza l'elaborazione del codice carattere richiederebbe più byte, a causa dei costi di ToCharacterCodee FromCharacterCode.


2

C (funzione), 71 byte

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}

f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}salva un byte.
Kenney,

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}per 62 byte
Gastropner

2

Python, 81 byte

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

Questa è fondamentalmente una traduzione della risposta Pyth. Definisce una funzione fche prende come argomento il carattere e restituisce il risultato.


1
Intendi if z in kvero? Inoltre, f=è facoltativo per impostazione predefinita.
xnor

@xnor Sì. Apparentemente mi mancava un Ctrl-C.
PurkkaKoodari,

2
Rimuovi f=, rendi anonima la funzione. -2
Erik the Outgolfer,

2

Jolf , 17 byte

Provalo qui.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result

2

MATLAB: 71 68 byte

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(grazie a OP per il salvataggio di 3 byte)

Test:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Spiegazione: L'alfabeto maiuscolo occupa 65:90caratteri ASCII. L'alfabeto minuscolo è in 97:122ASCII. Quindi, b=i<65|i>122|(i>90&i<97)controlla se il carattere di input iNON è alfabetico. In tal caso, viene restituito l'input. L'alfabeto maiuscolo viene restituito se b==1e i<97(carattere maiuscolo). Se b==1e i>96, 32 viene aggiunto a 65:90quello corrisponde a 97:122- l'alfabeto minuscolo.


Bella presentazione. Due commenti: è comune utilizzare o i=input('')se l'invio è uno script o come argomento di funzione se è una funzione @(i)i^2. i='a'non è generalmente accettato. Inoltre, puoi salvare 3 byte facendo [1,2,3,'']invece di char([1,2,3]).
Stewie Griffin,

Ok, modificato. Grazie per il suggerimento!
brainkz,

2

SpecBAS, 111 byte

Ho passato diverse versioni di questo, 111 sembra essere il migliore che posso gestire.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

La riga 2 utilizza il ?collegamento per PRINTe IFistruzioni in linea nidificate

Spiegazione del codice pseudo

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF

È difficile far ["a" TO "z","A" TO "Z"]sembrare più uno pseudo codice di quanto non lo sia già. "a".."z","A".."Z"sembra più un "vero codice", almeno ai miei occhi ... Entrambi sono molto facili da capire comunque =)
Stewie Griffin,

2
Spec cosa ????
Bassdrop Cumberwubwubwub,

2

Swift 2, 142 byte

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Ungolfed

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}

2

05AB1E , 19 16 byte

-3 byte grazie a else

DAsåiAëDAusåiAuë

Come funziona

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Provalo online!


Non sono sicuro che ¹(il primo input) esistesse già quando hai pubblicato la tua risposta, ma puoi golf 2 byte con esso: A¹åiAëAu¹åiAuë( Provalo online o test suite ).
Kevin Cruijssen,

2

Java SE 8, 71 69 byte

golfed:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Ungolfed:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

Inizialmente avevo implementato quanto segue

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

È più elegante ma purtroppo ha un byte più grande. Ciò presuppone che il comportamento per i caratteri non alfa non sia definito e che la stringa s sia inizializzata su "" prima dell'esecuzione. Sii gentile, è il mio primo post.

modifica: 2 byte salvati da Stewie Griffin cambiando

a - 91 < 0 to a < 91

2
Benvenuti nel sito! :)
DJMcMayhem

1
Grazie! Sono in agguato da alcuni anni e sono davvero interessato a vedere se riesco a dare risposte Java / C ++ in competizione :)
jfh

1
a<91dovrebbe funzionare, o ...?
Stewie Griffin,

2

Scala, 91 caratteri

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Un-golfed

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

Avere un risultato mutabile iniziale piuttosto che restituire un valore immutabile da 3 blocchi distinti se altrimenti mi ha salvato 2 caratteri, anche se lo odio.

Metodo scala-thonic

Un metodo migliore per scala sarebbe qualcosa del genere:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.