Her ünlü harfini kullanmadan alfabeyi yazdırma


72

İlham : 1939'da Ernest Vincent Wright adlı bir adam 'e' harfini kullanmadan Gadsby adlı bir roman yazdı .

Göreviniz, alfabenin 26 harfinin tamamını sıralamak için herhangi bir dilde (bir metin tabanlı sözdizimi * olan) herhangi bir dilde (en fazla 5) program yazmaktır. Ancak, her ünlü aeiou için, programlardan en az birinin ünlü harfinin herhangi bir oluşumunu içermemesi gerekir.

Yani olmalı

  • programın sözdiziminde hiçbir yerde ' a ' veya ' A ' kullanmayan bir program.
  • programın sözdiziminde hiçbir yerde ' e ' veya ' E ' kullanmayan bir program.
  • Programın sözdiziminde hiçbir yerde ' i ' veya ' I ' kullanmayan bir program.
  • Programın sözdiziminde hiçbir yerde ' o ' veya ' O ' kullanmayan bir program.
  • Programın sözdiziminde hiçbir yerde ' u ' veya ' U ' kullanmayan bir program.

Hepsi çıktı vermeli abcdefghijklmnopqrstuvwxyz.

Kazanan, tüm programların uzunluğunun en kısa olduğu çözüm olacaktır.

* Çünkü kısıtlama, Piet veya Whitespace’de zor olmaz


Güncel sıralamalar (06 Mar 2014):


4
@ w0lf: Hayır, "sadece bir program olabilir ve bu durumda uzunluğu sayılır" olarak okuduğum "5 programa kadar" ve "tüm programların uzunluğu" yazıyor.
schnaader

9
@PeterTaylor: Sözdiziminizdeki ünlü harfleri kullanmaktan kaçınmak zorunda kalmanın benzersiz bir zorluk olduğunu mu düşünüyorsunuz? Bir JS programcısı olarak, özellikle ilginç :)
mellamokb

2
Yeni satırlar çıktıda kabul edilebilir mi (yani karakter başına bir tane)? Bu durumda
kodumun bir

2
Büyük harf çıktısına izin veriliyor mu?
Outgolfer Erik

2
OP benim. Büyük harfe izin verilmez.
shamp00

Yanıtlar:


48

Golfscript - 8 karakter

123,97>+

8
kahretsin, özlülük açısından golf komut dosyasını yenemezsin ...
Patrick Oscity

18
Olduğu söyleniyor, okunabilirlik deli gibi kokuyor.
Andrew Gray

5
O kadar da kötü değil;) 123 sayılardan oluşan bir liste oluşturur, 97'den büyük olmayanları siler, onu bir dizeye zorlar (sayılar dizisi).
McKay

3
Yerine 91,65>+kullanın.
Outgolfer Erik,

31

Brainfuck, 38 karakter

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

Elbette, beyin hilesi sözdiziminde hiçbir ünlü (veya başka bir harf yoktur) yoktur .


2
Oradaki geçerli nokta! ;)
WallyWest

3
30 bayt:++[[<+++>->++++<]>]<<<<++[->+.<]
primo

23

PHP, 31 Bayt

Hayır a, e, ben, o:

<?=~žœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…;

Tilde sonra ikili dize aşağıdaki onaltılık gösterime sahiptir:

\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85

Bir dil puan tahtası olduğundan, bunu da gönderebilirim:

Yakut (v1.8) 18 bayt

$><<[*97.chr..'z']

Bunun nasıl çalıştığını anladığımdan emin değilim. Bir açıklama alabilir miyim?
Bay Llama,

Bir dizgeye uygulandığında, ~ operatörü tüm bitleri ters çevirir. Burada abc ... xyz'yi ters çevirdim. İkili dizede hiçbir sembol karakteri (veya boşluk) olmadığından, tırnaklara da gerek yoktur.
primo

1
Sahip olduklarınız için bir kodlama belirtmek isteyebilirsiniz.
Joey

1
iso-8859-1. Üç 'yazdırılamayan' karakter yayınlandığında kaldırıldı, bu yüzden hex'i dahil ettim.
primo

2
Güzel ve muhtemelen mümkün olan en kısa PHP sürümü. Bir komut dosyası oluşturmak için: php -r 'echo("<?=~\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85;");' > script.php. Komut Çalıştırmak için: php -d error_reporting=0 script.php; echo.
axiac

16

Yakut ( 24 22)

Düzenleme: parantezler atlanabilir, 2 karakter daha az:

$><<'%c'*26%[*97..122]

Ruby'de 24 karakter:

$><<('%c'*26)%[*97..122]

Nasıl çalışır

$>$stdoutveya bir takma addır STDOUT. <<Operatörü kullanarak yazabilirsiniz . Terim '%c'*26dizgiyi '%c'26 kez tekrar eder . %Operatör için bir takma ad olarak String tanımlanır sprintf, böylece str % valyazma eşdeğerdir sprintf(str,val). Format karakteri %cbir char değerini bir char'a dönüştürmek için kullanılır. Bu değerler [*97..122], 97'den 122'ye kadar olan değerleri içeren bir dizi oluşturur. Et voilá!


Çok hoş. Kullanmak için bir yol arıyordum <<ama unutmuştum $>.
Mark Reed,

1
Daha $>önce haberim bile yoktu , ama $stdoutkimsenin hatırlayamayacağı bir dolar değişken takma ad olması gerektiğini tahmin ettim :)
Patrick Oscity

21 karakter: $><<[*"`".."z"][1,26](not: bu sadece Ruby 1.8'de çalışır)
Ventero

@Ventero sadece Ruby 1.8'de değil, Ruby 1.9.2'de de çalışır. Ama p [*"".." z "] [1,26]` kullanmak daha da kısa.
Hauleth

@Hauleth: Hayır, 1.9 ile çalıştırmak, 1.9 Array#to_sile aynı olduğu gibi Array#inspect, 1.9 ile aynı olduğu gibi doğru çıkışı üretmiyor Array#join- 1.9'da çıkış ["a", "b", "c", "d", "e", ...]yerine bunun yerine abcdef.... Aynı sebepten dolayı pkullanılamaz ( inspectyerine onun argümanlarını çağırır to_s).
12'de

16

Pyth , 1 Karakter

G

Pyth bazı değişkenleri önceden tanımlıyor. G küçük harf alfabe olarak önceden tanımlanmıştır. Pyth ayrıca her satırı makul bir geri dönüş değeriyle yazdırır.


3
Beni 3 yıl boyunca Ninja'd ...
Stan Strum

15

JavaScript (100)

Hayır 'aeou':

this['\x61l\x65rt']('\x61bcd\x65fghijklmn\x6fpqrst\x75vwxyz')

Hayır, ben:

alert('abcdefgh\x69jklmnopqrstuvwxyz')

+1 Cevabımda güzel bir gelişme :) \x##Kodları kullanmayı düşündüm ancak JavaScript’te geçerli olup olmadığından emin değildim.
mellamokb

neden tüm uyarılar? Bir js terminalinde nesneler otomatik olarak yankılanır. ('\ x61bcd \ x65fghijklmn \ x6fpqrst \ x75vwxyz') @ 42 karakter.
antony.trupe

3
@ antony.trupe, kod golf için, IO genellikle dilin yerleşik IO mekanizmaları (veya ortak eklentiler) aracılığıyla yapılır. JS için bu genellikle alert, confirm, prompt, console.log, ve document.write. Basitçe bir string değişmezini bildirmek, çalıştırıldığında çıktı olarak üretmez. Aksi takdirde haklıydın, ben de kullanırdım.
zzzzBov

google chrome konsolunda çıktı (yine de kullandığım tanımıyla) üretir, ancak sorunu kabul ediyorum; başlamak için isteğe bağlı bir kısıtlama var.
antony.trupe

@ antony.trupe, PHP gibi bir dilde birebir kullanmaktan kurtulacaktınız, çünkü bu IO'yu gerçekleştiriyor.
zzzzBov

15

K 9

_26#.Q.b6

K, 10

"c"$97+!26

K, 14

.:".Q.","c"$97

2
ve hiç harfsiz yapmanın aptalca bir yolu (12 karakter):(@$`)$97+!26
Aaron Davies

1
K5 yolu neredeyse sizin ikinci çözümünüzdür, ancak $dönüştürülen türü kontrol etmek için dizeler yerine semboller alır: `c $ 97 +! 26
JohnE

15

J, 26 23 17 16 karakter

Bir saat kadar J'nin çamaşır çekmecesinde dolanmaya başladıktan sonra sonunda a.ve u:fiilleri ortadan kaldırmanın bir yolunu buldum .

2(3!:4)96+#\26$1

Önceden:

a.{~96++/\26$1
u:97+i.26

Hile için randomra sayesinde #\.


Güzel çözüm! 1 Char kullanarak kısaltmak için Yönetilen #\ yerine +/\ .
randomra

5
Joe

14

R, 17 + 19 = 36 karakter

ae yok (17):

intToUtf8(97:122)

no iou (19):

cat(letters,sep="")

12

Bash (38)

Hiç ünlü yok.

/*/*/*ntf "/*/?ch? {\x61..z}"|/*/b?sh

Bu program sistemimde başarısız oluyor, çünkü / * / b? Sh mevcut değil. Ben / usr / yerel / bin / bash, / bin / bash yok.
kernigh

2
Shell globbing'in güzel kullanımı!
Mekanik salyangoz,

@kernigh[[ ! -d "/bin" ]] && mkdir "/bin"; sudo cp "/usr/local/bin/bash" "/bin/bash"
Stan Strum

/bin/shBash ise daha iyi olurdu . Ardından kod /*/sh(36 bayt) ile bitebilir. Fakat bunun çalıştığı bir sistem bulamadım. Debian'da / bin / sh bash değildir. Eski Mac'imde / bin / sh bash 2.05b0. (1), ancak bu sürüm çok eski ve genişlemiyor {a..z}.
saat

11

C, 90 88 84 karakter

Kullanarak derleyin gcc -nostartfiles

b;_exit(){for(;b<26;)printf("%c",b+++97);}    // 42 chars, works for a, u
b;_start(){putchar(b+++97)>121?:_start();}    // 42 chars, works for e, i, o

_startve _exitdolaşmanın güzel bir yolu main. Ancak standart olmayan bir derleme satırı tamamsa, neden olmasın -DX=main?
ugoren

4
Her nasılsa, benden -DX=maindaha kötü hissediyor -nostartfiles(benim için). Kaynak kodun bir bölümünü derleme satırına taşımanın bir yoludur ve kaynak koduna yazmanın #define X mainaçıkça geçersiz olacak şekilde yazılması ile aynıdır . Oysa -nostartfiles, yeniden adlandırmanın bir yolu değildir main, ancak bir mainişlev olması gereken kısıtlamasını (adı verilen _start) kaldırır . Öte yandan, kullanmak -nostartfilesbiraz hile yapmak gibi hissediyor, özellikle 5 "kötü" harfin
4'ünü

Bu kaygan bir eğim var ... arasındaki mesafe -nostartfileskadar -DX=mainküçüktür ve o zaman neden bazı karakter kaydetmez -DX=main()ve benzeri. Ancak balık içeren bir şey bulamıyorum.
ugoren

Mesela ana işlevi "mn" olarak tanımlamanın bir yolu yok mu?
Neil

@Neil, sadece böyle bir şey yaparak -Dmn=main. AC işlevi, mainstandart olmayan bir seçenek -nostartfileskullanılmadıkça bir işleve sahip olmalıdır .
Matthew Flaschen


9

Yakut, 20 karakter

$><<[*97.chr..?z]*''
  • 97.chr 'a' demenin ayrıntılı bir yoludur
  • .. Aralık belirtir
  • ?z "z" demenin daha kısa bir yolu
  • [*range]nedenleri aralığı, bir dizi değerleri Al uyarıyla
  • *''aynıdır join(''); Tüm dizi değerlerini birbirine yapıştırır.
  • $><< Perlicism: stdout'a yazdır.

Bu kod işe yaramadı. ?ziçin steno değil 'z', aksine 122. Bununla birlikte, bu, 18 bayt için işe $><<[*97.chr..'z']
yarar

Bu çalışır Ruby 1.9 içinde.
steenslag

1
1.9.3'ü indirdim ... ve haklısın. Neden böyle bir şeyi değiştirdiler? Anarşi golfünün neden hala 1.8.7 sürdüğünü anlayabiliyorum. Neyse, 18 baytlık çözüm v1.8.7- için çalışıyor
primo

2
(4 yıl sonra ...) -1 bayt 97.chrile değiştirebilirsiniz ?\x61.
Ürdün

9

dc: 18 17 karakter

97[dP1+dBD>m]dsmx

Ve orada cesur bir karakter öldü.


Bundan şüpheliyim. Kafasını etrafa sarıyorum ve onu kısaltmanın bir yolunu göremiyorum. xMaden çözümünü daha fazla karışık yapan kayıt için kullanmam dışında tamamen aynı çözümle bitirdim.
Hynek -Pichi- Vychodil 21.01.2013

3
97[dP1+dBD>m]dsmx, 17 karakter. Anlaşılan DC'ye her zaman onaltılık karakterleri girebilirsiniz, ancak giriş tabanı on olduğunda, değer B*10+D=11*10+13=123='{'0xBD değil.
Fors

Oh, güzel glich ;-)
Hynek -Pichi- Vychodil

9

Powershell, 75 62 karakter

Düzenleme: Kod uzunluğunu önemli ölçüde azaltmak için -f (String.Format) ve dizi dizini kullanılır.

'{0}bcd{1}fgh{2}jklmn{3}pqrst{4}vwxyz'-f"$(1|gm)"[8,10,0,5,31]

Nasıl çalışır

gmiçin bir takma ad get-members, böylece 1|gmdeğer üyeleri döner 1ait, System.Int32tip:

PS C:\> 1|gm
   TypeName: System.Int32
Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value)
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj)
GetHashCode Method     int GetHashCode()
...

"$(1|gm)"alfabeyi tamamlamamız için gereken tüm sesli harfleri içeren yukarıdaki listenin bir dize gösterimini döndürür: " int C omp ar eTo (System.Object val ue) ..."


2
MS, System.Int32 üye eklerse Gerçi :-) istikrarlı değil
Joey

Bunun ($x=''+$(gv))[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz"da 75 karakter olması gerektiğini düşünüyorum :)
Danko Durbić

Argh, doğru. Tarihimdeki yanlış maddeyi avladım. Üzgünüm.
Joey

Aslında, sen değiştirirseniz ''+$(gv)ile "$(gv)"sizin olsun ($x="$(gv)")[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz"74 karakter olan. Güzel!
Danko Durbić

2
Kod uzunluğunu önemli ölçüde azaltmak için -f (String.Format) ve dizi indekslemeyi kullandım.
Tim Lewis,

8

BASH: 40 karakter

  • Hiçbir aeioukullandı.
  • Hiçbir joker karakter kullanıldı.
`tr c-y '\141-w'<<<'rtkpvh %s c'` {b..z}

8

Haskell, 12

['\97'..'z']

Yoksa bu hile yapmak mı? :)


Kuşkusuz Haskell hakkında fazla bir şey bilmiyorum ama bana şu hatayı veriyor:Parse error: naked expression at top level
primo

1
Tercümandan çalıştırın
RobAu 20:12

7

MATLAB, 12 + 20 = 32 karakter

Eiou yok (12):

char(97:122)

Aeou yok (20)

fprintf('%s',97:122)

7

Perl'de

ünlü olmadan da mümkündür

ama Ruby'de olduğundan daha zor. Bu toplam 101 karakter kullanıyor ancak cmd satır (perl -e) çağrısı gerektirmiyor.

`\160\145\162\154\40\55\145\40\42\160\162\151\156\164\40\123\124\104\105\122\122\40\141\56\56\172\42`

=> Sonuç: abcdefghijklmnopqrstuvwxyz

'Benzer görünen' PHP Çözümünün aksine , bu gerçek bir programdır . Program kodu çözülmüş okur:

perl -e "print STDERR a..z"

Sekizlik değerlerin kodlanmasından sonra, çalıştırma sırasında `` (backticks) tarafından başka bir perl yorumlayıcısı aranır. Geri tepmeler çıkışı tüketir, bu nedenle STDERR'ye basılır.

Kodlama sprintf tarafından yapılır:

my $s = q{perl -e "print STDERR a..z"};
my $cmd = eval(
       '"' . join('', map sprintf("\\%o",ord $_), split //, $s) . '"'
       );

ve eval'd kodlayan olan (ters tırnakların içinde) yayınlanan programı:

"\160\145\162\154\40\55\145\40\42\160\162"
"\151\156\164\40\123\124\104\105\122\122"
"\40\141\56\56\172\42"

Saygılarımızla

rbo


8
Bunu yalnızca ünlü harfleri kodlayarak 44 karaktere kadar kısaltabilirsiniz :)
marinus

7

Perl 5, 22 karakter

(1) sadece ave e10 karakter içerir (5.10+ gerektirir, komut satırından çalıştırın):

-Esay+a..z

(2) sadece 'i', 12 karakter:

print v97..z

Komut satırından kaçmasına izin verilmiyorsa use 5.01;say a..z, ilkini 7 karakter ve bir tane daha sesli harfle kullanmanız gerekir, ancak yine de 'i' işareti yoktur, bu nedenle toplam 29 karakter.


'-E' seçeneği tamam bence, ancak genellikle '-E' karakterleri toplam karakter uzunluğuna eklenir.
Gareth

@gareth - -E bir-liner'ı çalıştırmak için -e'nin yerini alır. Bir dosyayı bir dosyadan çalıştırıyorsanız use, onu komut satırı seçeneğiyle değiştirip -M5.01iki karakter daha tıraş edebilmenize rağmen, sıkışıp kalırsınız .
Mark Reed

-pSayıya 2 karakter eklenmesi seçeneği ile kuralı düşünüyordum . Bu meta soruya bakıldığında, -M5.010eğer bu seçenek kodunuzu kısaltmanıza yardımcı olursa, ücretsiz kullanabilmelisiniz .
Gareth,

Eğer yerini alabilecek printbeyanına die2 karakter traş etmek
ardnew

chr 97..zv97..z3 bayt ile değiştirilebilir .
primo

7

APL (Dyalog) ( 11 13)

Bir APL yazı tipine ihtiyacınız olabilir. Bunun Unicode olması gerekiyor ama önizleme yok ...

Sadece U(ve belki de Yunanca sayılar varsa):

⎕UCS 96+⍳26

(Budur: [quad]UCS 96+[iota]26)

Sadece A:

⎕A

2
Uünlüdür ...
Tobia

@Tobia: Birisinin bunu görmesi bir yıl sürdü (ben dahil). Sanırım, iota da şimdi düşündüğüm bir ünlü. Onu düzeltti.
marinus

APL işlevsel sembolü iota (U + 2373) Unicode'da bir harf sayılmaz ve bu nedenle sesli harf olamaz. Yunanca küçük iota harfinden (U + 03B9) farklı olduğunu unutmayın.
ngn

7

Python 2, 83

Hayır a , ben , o veya u ; 47 :

x=97;s='';exec"s+=chr(x);x+=1;"*26+"pr\x69nt s"

Hayır e ; 36 :

print"abcd\x65fghijklmnopqrstuvwxyz"

6

Python 2, 175 karakter

Not: daha önceki python yanıtından farklı olarak çıktı almak için yazdırır .

'E' kullanır, ancak hayır, i, o, u - 63 61 59 65 ( iküçük harfe yanlış hareketi düzelt ) 115 karakter (boşluklardan kurtulun).

exec('fr%cm sys %cmp%crt*\nf%cr x %cn r%cnge(97,123):std%c%ct.wr%cte(chr(x)),'%(111,105,111,111,105,97,111,117,105))

(Başlangıçta, boşluk ekleyen virgülle baskı kullandı; ayrıca büyük harflerle de basıldı. Şimdi çıktı olarak 'abcdefghijklmnopqrstuvwxyz' için katı gereksinimler görüldü; böylece import ifadesi eklendi).

'E' kullanmaz (a, i, o, u; küçük uzantı için önemsizden a, u'dan kurtulabilir) - 61 60 karakter

import string
print string.__dict__['low%crcas%c'%(101,101)]

1
İlk çözümünüz mektubu kullanıyor i, öyleyse şöyle olmalı: exec('f%cr x %cn r%cnge(65,91):pr%cnt chr(x),'%(111,105,97,105))64 karaktere geri döndük.
BioGeek

1
exec('fr%cm sys ben mp%crt*\nf%cr ...
Gareth

BioGeek & @Gareth - benim manuel ünlü harf algılama becerileri emmek. Gösterdiğiniz için teşekkürler; fakat sonunda '% c' olarak yazılan fazladan bir e vardı, bu yüzden sonunda düzeldi.
dr jimbob

Parantez içerisindeki parantezleri kaldırabilirsinizexec('...')
mbomb007

5

JavaScript (154)

(1) Sadece i(99 karakter) içerir :

t=this;s=-t+t+t.b;z=s[1]+'bcd'+s[7]+'fghijklmn'+s[4]+'pqrst'+s[21]+'vwxyz';t[s[1]+'l'+s[7]+'rt'](z)

(2) Sadece aeou(55 karakter) içerir :

t=0;s=''+t.b;alert('abcdefgh'+s[5]+'jklmnopqrstuvwxyz')

Gösteri: http://jsfiddle.net/SvN5n/


$("h\x65\x61d")[0]["\x6fwn\x65rD\x6fc\x75m\x65nt"]["l\x6fc\x61t\x69\x6fn"]="j\x61v\x61scr\x69pt:\x65v\x61l(`f\x6fr(s='',l=65;l<90;l++){s=s+Str\x69ng.fr\x6fmCh\x61rC\x6fd\x65(l);};c\x6fns\x6fl\x65.l\x6fg(s)`)"208chars, aeouikodda kullanılmaz. Krom tarayıcıda çalışıyor.
Esc Điệp

5

piton 159 117

Diğer python post'unda belirtildiği gibi, en zor kısım, çıktı almanın tek yolunun kullanmak printveya sys.stdout.writeher ikisini de içeren i olduğu gerçeğiyle ilgilidir . 2 programla yapmalısınız (bağımsızdır ve çıktıyı oluşturmak için python interaktif kabuğunu kullanmayın):

Bu sadece 55 karakter için i kullanır:

print"%cbcd%cfghijklmn%cpqrst%cvwxyz"%(97,101,111,117)

Bu, i'yi 104 karakter için kullanmaktan kaçınır:

eval("sys.stdout.wr%cte"%105,{'sys':eval("__%cmport__('sys')"%105)})("%c"*26%tuple(range(97,123))+"\n")

EDIT: Büyük atılım !!! Eval (veya hatta exec) kullanımının biraz hile olduğunu ve gerçekten rekabet ruhunda olmadığını düşünüyordum. Her neyse, yerleşiklerin arasında dolaşırken i kullanmadan yazdırma işlevini elde etmenin bir yolunu buldum. Öyleyse 68 karakter için önlenecek bir program:

vars(vars().values()[0])['pr%cnt'%105]("%c"*26%tuple(range(97,123)))

Ancak bu, o da önlediğinden, bu, 49 karakter için yalnızca a, e, u'dan kaçınanla eşleştirilebilir:

print"%cbcd%cfghijklmnopqrst%cvwxyz"%(97,101,117)

Uyumluluğu ortadan kaldırabilir ve bir karakter kazanabilirsiniz -vars(vars().values()[0]).values()[47]
ugoren

5

Ruby 196 164 44 47

$><<"\x61bcd\x65fgh\x69jklmn\x6Fpqrst\x75vwxyz"

pAlfabenin etrafında tırnak işaretleri bulunduğundan bu geçerli bir cevap mı?
Mark Reed

Ben çevreleyen tırnak işaretleri ile sonuçlanan p xarama eşdeğerdir katılıyorum puts str.inspect.
Patrick Oscity

@padde ikiniz de haklısınız; değişti.
Cristian Lupascu

1
@padde Ben kullandım $><<, bunun için +1 ve tebrikler; sürümünüz çok daha iyi
Cristian Lupascu


5

VBA: 76 kaba kuvvet, 116 'hile yapmadan' (çıktıda newlines kabul edilebilirse 98)

Standart İşlevler

VBA'nın ayrıntılı olması sayesinde, bunun standart bir kod modülünde 'E' veya 'U' olmadan yapılabileceğine inanmıyorum ...

  • " E "
  • "F u nction"
  • "S u b",

Acil Fonksiyonlar

Mellamokb'un varsayımına dayanarak, işte işlev bildirgesi (dışlama SUBve FUNCTION) ( işte satırsonu çıktıda kabul edilebilirse , 116 karakter , 98 ):

Aşağıdakiler ne 'e' ne 'a' kullanmaz ( hemen pencerede çalıştırılacak şekilde biçimlendirilmiş 43 karakter ):

b=65:Do:z=z+Chr(b):b=b+1:Loop Until b=91:?z

Aşağıdakiler ne 'ben' ne 'a' ne 'u' kullanmaz ( hemen pencerede çalışmak üzere biçimlendirilmiş 33 karakter ):

For b=65 To 90:z=z+Chr(b):Next:?z

Aşağıdakiler ne 'a' ne 'o' ne 'u' kullanmaz ( hemen pencerede çalıştırılacak şekilde biçimlendirilmiş 40 karakter ):

b=65:While b<91:z=z+Chr(b):b=b+1:Wend:?z

Çıktıda yeni satır karakterlerine izin verilirse, yukarıdaki örnekler daha kısa olabilir:

( 37 karakter )

b=65:Do:?Chr(b):b=b+1:Loop Until b=91

( 27 karakter )

For b=65 To 90:?Chr(b):Next

( 34 karakter )

b=65:While b<91:?Chr(b):b=b+1:Wend

Kaba kuvvet

İle Running w0lf Ruby cevap

( Hemen pencerede çalışmak üzere biçimlendirilmiş 76 karakter ):

?Chr(65)&"BCD"&Chr(69)&"FGH"&Chr(73)&"JKLMN"&Chr(79)&"PQRST"&Chr(85)&"VWXYZ"

1
Sub..End SubDiğer programların çoğunda işlev tanımı bulunmadığından, dışlamanın adil olacağını düşünüyorum .
mellamokb

@ mellamokb Bu beni daha iyi hissettiriyor. Buna eklemek için bazı örnekler hazırlayacağım.
Gaffi

2
"Hemen pencerede çalıştırdığınız kod" olarak düşünün :) :)
mellamokb

2
Şüpheniz varsa, sadece bir dosyaya dahil edilemeyen VBScript'i arayın. Sub:)
Joey

Gereksiz boşluklar bir demet Sabit değişti printiçin ?o anlık pencerede çalıştığı için.
Gaffi

5

Rebmu : 15 karakter

Ctc'`L26[pn++C]

Rebmu okumak, başlamak için her zaman biraz tedirgin olmayı gerektirir :

c: tc '` l 26 [pn ++ c]

Sonra kısaltmaları genişletmeye yardımcı olur:

c: to-char-mu '`
loop 26 [
    prin ++ c
]

Küçük harf a'nın selefi için bir karakter değişmezi kullanmak daha açık olurdu:

c: #"`"
loop 26 [
    prin ++ c
]

Ama bu "lapa" değil, bu yüzden kelimenin tam anlamıyla bir kelimeyi karaktere dönüştürmek aynı amaç için geçiyor. En sevdiğim gibi, çoğu Rebmu'da olduğu gibi, sıkıştırmaya rağmen mantıklı bir programın ruhuna sahip olması. (Golfscript'in yanıtı daha kısadır, ancak bir programcının kodlama sırasında genellikle düşüneceği şekilde eşleşmez.)


5

<> <(Balık) - 22 karakter

<> <'O' karakter basmak için kullandığından, bu zorluğun yapması imkansız görünüyor. Neyse ki, balık çalışma zamanında kendi kodunu değiştirebilir. Bu, yazdırma talimatını koda eklememe izin verdi.

Bu kod ünlülerin hiçbirini kullanmaz:

'`78'+11pv
:X:'z'=?;>1+

Kodu burada çalıştırabilirsiniz

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.