Alfabeyi, alfabeyi veya yalnızca bir karakteri çıkar


49

Zorluk basit:

Girdi alan bir işlev veya program yazın xve küçük harfli alfabenin xbir parçasıysa küçük harfli alfabeyi çıkarır, büyük harfli alfabenin xbir parçasıysa büyük harfli alfabeyi çıkarır ve xher ikisinin de bir parçası değilse çıkarır.

Kurallar:

  • Giriş, fonksiyon argümanı veya STDIN'den olabilir.
  • Giriş, 32 ile 126 arasında (ASL'den tilde boş) yazdırılabilir ASCII karakterlerinden herhangi biri olacaktır.
  • Giriş tırnak içinde olmak, olabilir 'x'ya "x"ama unutmayın 've "geçerli girdi ve desteklenmelidir.
  • Giriş, alfabedeki harflerden herhangi biri olabilir, yani aveya olacağını varsayamazsınız A.
  • Çıktı, alfabe harflerinden veya tek simgeden yalnızca biri olmalı, ancak izleyen satırsonları tamam.
  • Alfabedeki harfler boşluk, virgül veya başka herhangi bir şeyle ayrılmamalıdır.

Bazı örnekler:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

Bayt cinsinden en kısa kod kazanır.


İsteğe bağlı ancak takdir edilir: Dilinizde çevrimiçi bir tercüman varsa, lütfen başkaları tarafından kolayca test edilebilmesi için bir bağlantı gönderin.


Liderler Sıralaması

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


Örneğin Python'daki gibi paketleri ithal etmemize import Randomve sonra kullanmamıza izin veriyor mu Random.randint(açıkçası bu zorluk için değil ama yine de)?
Daniel,

Evet, paketleri alabilirsiniz. ancak örneğin yazma için bayt import stringsayılır, bu yüzden geçici çözümler yapmak daha iyidir. Paket gönderilmeden önce var olması gerektiğini unutmayın. Birçok zorluğun şöyle bir şeyleri vardır: "Bunu yapan paketleri kullanmak yasaktır", ancak bu zorlamada durum böyle değildir.
Stewie Griffin,

"Teklifler geçerli bir girdidir ve desteklenmelidir"
derken

Bir REPL ortamı olduğunu varsayabilir miyiz?
kedi

Yanıtlar:


22

TeaScript , 5 bayt

xN(0)

TeaScript bunun için yerleşik bir (neredeyse) var: D

Çevrimiçi deneyin (not: çevrimiçi tercüman TeaScript v3'te güncellendi N0)

Tüm test durumlarını deneyin


TeaScript 3 , 2 bayt [rekabet etmeyen]

TeaScript 3 kullanarak, bu 2 bayt olabilir. Bu rekabet edici değil çünkü TeaScript 3 bu mücadeleden sonra yapıldı

N0

1 bayt alternatif

0123456789Rakamlar için çıktı verebilirsek , bu olabilir:

°

TeaScript 3 olduğunu geçerlidir. Yani, kullanabilirsiniz!
user75200

27

Pyth, 10 bayt

h/#z[GrG1z

Test odası

3 elementli bir liste oluşturarak başlıyoruz: küçük harfli alfabe, büyük harfli alfabe ve giriş. ( [GrG1z) Ardından, bu listeyi sıfır olmayan elemanlardaki girdilerin görüntülenme sayısına göre filtreleriz. ( /#z) Son olarak, filtrelenmiş listenin ilk öğesini alırız.


6
Cidden, birkaç byte'lık Pyth ile çözemediğiniz bir şey var mı? Bu dili gerçekten öğrenmem gerekiyor ..
Hexaholic

25
Hangi dili öğrenelim? ... iki isimden bahsettiniz. : P
kintopya

2
@quintopia Peki, neden ikisi de değil? :)
Hexaholic

15

LabVIEW, 23 LabVIEW İlkelleri

Seçici (cse yapısındaki?) Lexical Class denilen bir vi'ye bağlanır. Girdiye bağlı olarak sayıları 1-6 arasında çıkarır, 5 küçük harf 4 büyük harf olur.

For döngüsü bir alfabe oluşturmak için 26 kez veya sembolü geçmek için bir kez gider.


4
LabVIEW'da yıllar önce çalışma (ayrıcalık? Talihsizlik? Kararını vermiş olan) biri olarak, cevaplarınız günüme bir gülümseme getirdi. =)
corsiKa

12

Haskell, 48 bayt

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

Kullanım örneği:

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

['A' .. 'z'], ['A' .. 'Z'] 'nin tüm listelerini ve elementin colduğu giriş char ile tekil listeler c. Harfler için her zaman iki eşleşme olur, bu yüzden ilkini seçeriz.


11

JavaScript (ES6), 79 bayt

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

açıklama

JavaScript, dizeleri karşılaştırırken her karakterin kodunu alfabetik olarak karşılaştırır, böylece karşılaştırmalarda kullanılan karakterlerin kodları, istenen karakter aralığının 1 altında ve üstündedir.

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
)

Ölçek


Javascript’te alfabenin tamamı ile bir dize üretmenin en kısa yolu bu mu? Tüm yazdırılabilir ASCII serisini görmek isteseydiniz, her bir karakteri yazmanız gerekir mi?
Stewie Griffin,

1
@StewieGriffin Ne yazık ki öyle. Diğer tek yolu gibi bir şey olacaktır: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodegolf oynamak için uygun değil, ama bazen tek yol bu!
user81655 22:15

4
Bu durumda denge String.fromCharCodeve .toUpperCase(Dumb ve Dumber) arasındadır ancak toUpperCasekazanandır
edc65

Güzel! Bunu daha da golfle oynamanın birkaç yolunu denedim, ama işe yarayan birini bulamadım. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")yapar, ancak bir bayt daha uzundur. Dışındaki her şey [A-Z]için \wişe yarar _. Çözümünüz mümkün olan en kısa gibi görünüyor.
ETHProductions,

İşte ABC...abc...?gerçek bir fordöngü olmadan üretmenin en kısa yollarından biri : (bazı dolgu maddeleri)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R, 90 75 bayt

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

Giuseppe'ye teşekkürler .

Eski versiyon (90 bayt):

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

Çirkin görünüyor, ancak catbunlar işlevlerden dışlanamıyor, IMHO.



73 byte : 2. parametre scantipi karakterinin herhangi bir nesne olabilir, bu nedenle olabildiğince lettersyerine ''.
Robin Ryder

7

Python 3, 92 84 82 74 bayt

Geçerli sürüm: 74, isaacg ve wnnmaw sayesinde!

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

Ungolfed: (unungolfed'un bazı tanımları için)

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

İlk versiyon: 92

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

İkinci versiyon: 82, isaacg sayesinde! :)

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

Merhaba ve PPCG'ye hoş geldiniz! Güzel cevap İşte bir golf önerisi: lambda c:Açık bir tanım ( def f(c):print() yerine bir lambda ifadesi ( ) kullanabilir ve bazı baytları kaydedebilirsiniz. Ayrıca, önce boşluğa ihtiyacınız yok for.
isaacg

Ah, "çıktı" nın baskı anlamına geldiğini varsaydım, ve sadece geri dönmek için değil :) Düzgün, eğer durum buysa 84'e düştü lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Teşekkürler!
Koneke,

Evet, sitedeki standart çıktı tanımı, işlevlerden geri dönülmesini sağlar, böylece yeni sürümü cevabınıza göre düzenleyebilirsiniz. Diğer bir golf ise parantezlerin gerekli olmadığına işaret ediyor - fonksiyon liste anlamayı yerine jeneratör anlayışıyla aynı şekilde çalışıyor.
isaacg

Ah, daha önce jeneratör anlamalarını hiç kullanmamış, yeni şeyler öğrenmiş! Tekrar teşekkürler :)
Koneke

İnputing zaman unutmayın "işlevine ihtiyacınız \"yerine.
Daniel,

6

Python 3, 118 105 98 97 83 bayt

Basit çözüm EDIT: Erik Golfçü önerisi sayesinde golf oynadı.

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
Birkaç bayttan tasarruf etmek için üçlü bir operatör kullanabilir misiniz? Gibi bir şey return a.lower() if s.islower() else a.
David Robertson

@DavidRobertson Kodumun en üst satırı olan çözümümü okuyup okumadığınızdan emin değilim, ancak tam olarak ne yapıyorum.
Sherlock 9

Ah! Doğmamış versiyonunu okuyordum. Bunun için üzgünüm!
David Robertson,

@DavidRobertson Sorun değil
Sherlock9

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

5

PHP, 62 76 82 bayt

PHP şimdi tamam yapıyor:

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

Komut satırından bir girdi alır:

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

Düzenlemeler

  • Kaydedilen 6 bayt yerine 91>ord($x)ile Z<$x. Karmaşık bir yol düşündüm. İnsan işi için teşekkürler .
  • İstenilen aralığı doğrudan kaldırarak ve oluşturarak 14 bayt kurtarıldıstrtoupper .

Bu ord()orada kötü görünüyor. Dene Z<$x?$a:strtoupper($a).
Manatwork

@manworkwork Haha, bu ikinci bölümde karmaşıklaşmanın bir yolunu düşündüm. Gösterdiğiniz için teşekkürler.
insertusernamehere

' '&$x^ABüyük ve küçük harf a ve z yapmaya çalışın . Yani, kodunuz olur<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel

@ IsmaelMiguel Bu, aynı byte sayısına sahip olacaktır.
insertusername

1
Endişelenmeyin - bu hala şaşırtmak için güzel bir yol. ;)
adınız

5

Perl, 46 34 33 bayt

için +2 içerir -nE

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

Olarak çalıştırmak

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

  • güncelleme 34 @Dom Hastingsfor sayesinde korkaklıkları atlayarak ve kullanarak 12 bayt tasarruf et .
  • güncelleme 33 yerine 1 bayt kullanarak -Eve kaydedin .sayprint

@DomHastings Teşekkürler! Orda korkaklara izin verilmiş olmalıydı - ve şunu görmeliydim for: -. Yaklaşımların bir demet, (çalıştı -pile $"='';$_="@_", hatta $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'ama her şey ... uzundur
Kenney

Bunu düşündüğünüzde , bayrağı koymak $_=yerine printkullanmak -pyerine bayrak basarsanız, -nbaşka bir tane daha kaydedebilirsiniz ... Şimdiye dek daha fazla tasarruf etmenin başka yollarını düşünemiyorum ...
Dom Hastings

@DomHastings Bunu denedim, ancak $_bir listeye koyamadım (bildiğim). Enterpolasyon yapılması gerekirdi ( $_="@_") ama bu boşlukları ayırıcı olarak kullanır, bu yüzden de daha fazla yapmak zorunda kalacağım $"=''(veya a join'',) kullanabilirsiniz . Bu konuda çok kıkırdama odası!
Kenney,

Hah, elbette! Hatta (barda olmadıktan sonra yorumu okuduğumda ...) bile bunu düşünmeye devam edeceğimi söylemiştin, ama kullanmak sayyerine alacağın en kısa sen olabilirsin print!
Dom Hastings

5

Ruby, 41 + 1 = 42

Şalter -pile çalıştır

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

Bu dize üretir

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

ve sadece küçük harf ve büyük harf alfabe ve alt çizgi olan "bitişik" sözcük karakterleri "bloğunu kontrol eder. Z ile a arasında arka arkaya birden fazla kelime karakteri olsaydı, bu numara işe yaramazdı.

İsteğe göre açıklama eklemek için düzenlenmiş:

-pBayrak esasen yapar

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

[*?A..?z]ASCII sırasına göre büyük A harfi ile küçük Z harfi arasındaki karakter dizisidir. Bu, büyük harf alfabe, bazı harf olmayan karakterler ve küçük harf alfabedir. *''diziyi bir dizgiye bağlar, böylece onu çağırabiliriz .scan. scanDüzenli ifadenin her eşleşmesini bulur /\w+/, sihirli değişkenini $&onunla doldurur ve bloğu çağırır. Blok her yinelendiğinde, eşleşen dizenin içeride olup olmadığını kontrol eder $_ve çıktıyı bu dizeye ayarlar. Eğer $ _, büyük veya küçük harfli bir alfabenin içerisinde bulunuyorsa, buna göre değiştirilir, aksi takdirde değişmez.

Ungolfed versiyonu gibi bir şey olurdu

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

Golf yapmamış bir versiyonunu gönderir misiniz? Hala bunun nasıl çalıştığını tam olarak anlamadım.
Shelvacu

Elbette, bir tane gönderdi.
histocrat

4

CJam, 18 bayt

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

'[,65>büyük harfli alfabeyi, _elküçük harfli alfabeyi ve r:RSTDIN'den okunan ve değişkene atanan tek karakterli bir dizgeyi iter R. Bunlar bir diziye ( ]) sarılır ve ortak karakterleri olan ilki Rkullanarak seçilir {R&}=.


CJam'ı anlamaya çalışıyorum ama resmi doktorla burada okuduklarım arasında kayboldum. Birisi bana örneğin _elküçük harfli alfabenin neden olduğunu anlayabildiğim bir sayfa verebilir mi?
Erdal G.

Ah, el"küçük harfe dönüştür" anlamına gelir. Sadece büyük harfli alfabeyi ittim, bu yüzden şimdi onu çoğalttım _, sonra elortaya çıkan kopyayı çağırdım.
Lynn,

1
Neredeyse tüm CJam komutlarını içeren hoş bir pdf yaptım .
Lynn,

4

Retina, 62 bayt

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

İki kısa çizgi eşleşecek regex'tir. Giriş küçük harf (aralık içinde [a-z]) ise, bu karakteri (bu durumda, girişin tamamı) küçük harfli alfabe ile değiştirir. İşlem büyük harf için benzer. Eğer bir harf değilse, hiçbir değişiklik yapılmaz ve el değmeden çıkarılır.

Çevrimiçi deneyin.


4

Python 2.7.10, 95 93 79 bayt

Bu benim ilk kez golf oynamaya bile çalıştığım için lütfen yardım ya da tavsiyelere son derece değer verilir!

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

Morgan Thrapp'a yardım için teşekkürler!


1
@ MorganThrapp, bu işe görünmüyor. Python 2.7.10'da çalıştığından emin misiniz?
Daniel,

2.7.8'de çalışıyor. Ne işe yaramıyor?
Morgan Thrapp

@MorganThrapp, aslında, ilk önce tam olarak nasıl çalıştığını açıklayabilir misiniz? Belki de sadece anlamadığım için yanlış bir şey yapıyorum.
Daniel,

Elbette, bu gerçeği kullanır False == 0ve True == 1tuplelere endekslemek için kullanılır. Bu nedenle, önce bir harf olup olmadığını kontrol eder isalpha, eğer öyleyse, geri döner 1ve sonra küçük harf olup olmadığını kontrol eder.
Morgan Thrapp

1
Sorun değil! Golf oynamayı seviyorum, bu yüzden yeni birine yardım etmekten her zaman mutlu oluyorum!
Morgan Thrapp

4

Ruby, 46 43 karakter

(42 karakter kodu + 1 karakter komut satırı seçeneği)

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

Sayesinde:

  • ===Sihir için Ürdün (-3 karakter)

Örnek çalışma:

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 bayt

jtt1Y2XIm~Iw?km?Ik]]1$

Bu , dilin geçerli sürümünü (3.1.0) kullanır .

EDIT (15 Eyl 2017): MATL Online'da deneyin ! (dilin daha yeni bir sürümü ile).

Örnekler

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

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

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

açıklama

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 karakter

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);}}}

İstenilen çıktıyı stdout'a (geri döndürmek yerine) oluşturur. Giriş, çalışma zamanı argümanları üzerinden yapılır.

Nasıl çalışır.

1) Bazı tam sayı değişkenlerini ayarlayın
c = çalışma zamanı argümanlarının ilk parametresinin ilk karakterinin ASCII değeri.
d = c, küçük harf ASCII değerine dönüştürülür (32 ile ORing)
b = d'nin bir harf olup olmadığını görmek için hesaplama. Bir mektup varsa <0 olacaktır.
e = Çıktı için başlangıç ​​karakteri. Eğer d'deki ASCII değeri bir harftir (b'ye bakınız), o zaman 'A' (veya 'a' a VE 32'yi ekleyerek 'a' ASCII değerine eklenir) 'e ayarlanır, aksi takdirde c orijinal değerine ayarlanır.
f = çıktısı alınacak karakter sayısı. Eğer bir harf değilse (b'ye bakınız) o zaman bu 1'e ayarlanır, 26
2) Her karakterin stdout'a çıktısını alır.


2
Çoğu zorluk için çözümün eksiksiz bir program veya bir işlev olarak sağlanabileceğini biliyorsunuz? Java’daki çok büyük boyler koduna bakıldığında, bir işlev daha kısa olabilir.
Manat çalışması

1
Mantığı değiştirmeden, küçük numaraları bir çift uygulayarak, ben hallederim: 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++);}.
Manat çalışması

3

Perl, 23 bayt

-nEDiğer perl çözümüne adil olmak için (normal + 1 yerine) için +2'yi içerir

STDIN'deki giriş ile newline izlemeden çalıştırın:

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

Sadece kod:

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

Girdilerin 7 bit karakterlerle sınırlı olmasının hoş kullanımı.
msh210

3

Lua, 98 97 bayt

Ne yazık ki, aalfabe ile ayarlamak için 26 bayttan daha kısa bir çözüm bulamadım . Aslında, 32'den kısa bulamadım.

Düzenleme: kaydet 1 Byte @ ATaco sayesinde, Lua: p ile başladığında bu hatayı çok yapıyordu

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

Resmi sitede veya ideone çevrimiçi olarak test edebilirsiniz . Birincisini kullanırsanız, giriş çalışmaz (devre dışı), bu nedenle bir fonksiyona sarıldığı aşağıdaki kaynağı kullanın.

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"))

Lua'da alfabeyi oluşturmak için daha kısa bir yol bulamayan tek kişi siz değilsiniz . :(
manatwork

@manatwork haha, tam olarak aynı şey, ancak onu basmak zorunda kalmamıştım, ama birleştirmek için ^^. En azından bu, yapmayı bilmediğim gizli bir numara olmadığı anlamına geliyor.
Katenkyo

Bir bayt c=io.read()a="abcdefghijklmnopqrstuvwyz", a = c = ... yerine
ATaco

2

Mathematica, 75 bayt

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

Oldukça olmayan bir golf dil için iyi bir skor ... karakter kodu işlemeyi kullanan herhangi çözümler nedeniyle maliyetleri, daha bayt alacağını ToCharacterCodeve FromCharacterCode.


2

C (işlev), 71 bayt

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++);}bir bayt kaydeder.
Kenney

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}62 bayt için
gastropner

2

Python, 81 bayt

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

Bu temelde Pyth cevabının bir çevirisidir. fKarakteri argüman olarak alan ve sonucu veren bir fonksiyon tanımlar .


1
Yani demek if z in kistiyorsun? Ayrıca, f=varsayılan olarak isteğe bağlıdır.
XNOR

@xnor Evet. Görünüşe göre bir Ctrl-C özledim.
PurkkaKoodari

2
Kaldır f=, işlevi isimsiz yap. -2
Outgolfer Erik,

2

Jolf , 17 bayt

Burada dene.

? 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 bayt

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

(3 bayt kaydettiği için OP sayesinde)

Ölçek:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Açıklama: Büyük harfli alfabe 65:90ASCII karakterlerini kaplar . Küçük harfli alfabe 97:122ASCII'dedir. Bu nedenle, b=i<65|i>122|(i>90&i<97)giriş karakterinin ialfabetik OLMADIĞINI kontrol eder . Eğer öyleyse, giriş döndürülür. Büyük harf alfabe eğer b==1ve i<97(büyük harf karakter) ile döndürülür . Eğer b==1ve i>96, 32 eklenirse 65:90buna karşılık gelir 97:122- küçük harfli alfabe.


Güzel sunum. İki yorum: i=input('')Gönderim bir komut dosyasıysa ya da bir işlevse işlev argümanı olarak kullanılır @(i)i^2. i='a'genel olarak kabul edilmez. Ayrıca, [1,2,3,'']yerine 3 bayt kaydedebilirsiniz char([1,2,3]).
Stewie Griffin,

Tamam, düzenlendi. Öneriniz için teşekkürler!
brainkz

2

SpecBAS, 111 bayt

Bunun birkaç versiyonundan geçtim, 111 yönetebileceğim en iyi gibi görünüyor.

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

Satır 2, ?kısayol kullanır PRINTve satır içi IFifadeler içine yerleştirir.

Sahte kod açıklaması

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

Bu yapmak zordur ["a" TO "z","A" TO "Z"]zaten yaptığından daha sözde kod benziyorsun. "a".."z","A".."Z"En azından gözlerimde "gerçek kod" gibi görünüyor ... Her ikisi de anlaşılması çok kolay =)
Stewie Griffin

2
Spec ne ????
Bassdrop Cumberwubwubwub

2

Swift 2, 142 Bayt

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 bayt

-3 bayt sayesinde else

DAsåiAëDAusåiAuë

Nasıl çalışır

                   # 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

Çevrimiçi deneyin!


¹Cevabınızı gönderdiğinizde (ilk giriş) zaten var olup olmadığından emin değilsiniz, ancak 2 baytlık onunla golf oynayabilirsiniz: A¹åiAëAu¹åiAuë( Çevrimiçi veya test paketi deneyin ).
Kevin Cruijssen

2

Java SE 8, 71 69 bayt

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

Aslen aşağıdakileri uygulamıştım

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

Daha zarif ama ne yazık ki bir bayt daha büyük. Bu, alfa olmayan karakterler için davranışın tanımsız olduğunu ve yürütmeden önce s dizesinin "" olarak başlatıldığını varsayar. Nazik ol, bu benim ilk görevim.

düzenleme: Stewie Griffin tarafından kaydedilen 2 bayt değiştirerek

a - 91 < 0 to a < 91

2
Siteye Hoşgeldiniz! :)
DJMcMayhem

1
Teşekkürler! Birkaç yıldan beri gizleniyor ve rakip Java / C ++ cevapları verebiliyor muyum gerçekten
görmekle ilgileniyorum

1
a<91çalışmalı mı ya da ...?
Stewie Griffin

2

Scala, 91 karakter

(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
}

Başka bir blok, eğer kendimden nefret etmeme rağmen, 2 karakter kurtardıysa, 3 farklıdan sabit bir değer döndürmek yerine, ilk değişken sonucu elde etmek.

Scala-thonic yöntemi

Scala için daha iyi bir yöntem şöyle olurdu:

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
    }
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.