Bu dili biliyor musun?


34

Görev:

Buradaki zorluk, önceki gönderimler ve kendisi girdi olarak verildiğinde, yazdıkları dili aşağıdaki biçimde vermektir:

Diyelim ki ilk program Ruby'de. Çıktısı olmalı 1, çünkü Ruby 1bu mücadelede kullanılan st dilidir. Örnek bir program:

a=gets
puts 1

Girdi olarak kendisine verildiğinde geri döner 1.

Bir sonraki program Python'da olabilir. Çıktısı olmalı 2, çünkü Python 2mücadelede kullanılan ikinci dildir. Örnek bir program:

print(1 if input()[0]=="a"else 2)

İlk başvuru verildiğinde, çıktı verir 1ve kendisine çıktı verir 2.

Dilleri tekrarlamanıza izin verilir, ancak önceki cevapların dilinde bir cevap göndermenize izin verilmez.

Örneğin, üçüncü program Ruby'de ise, 1ilk program ve kendisi verilen (çünkü 1kullanılan st dili Ruby'dir) ve ikinci program verildiğinde çıkarması gerekir 2.


Kurallar:

  • nŞu anda mücadelede cevaplar varsa , en azından floor(n / 3)farklı diller olmalıdır. Bu kuralı ihlal eden gönderiler diskalifiye edilir.
  • Hiçbir iki "komşu cevap" (örneğin, cevap nve cevap n+1) aynı dili kullanamaz.
  • Bir dilin farklı sürümleri farklı diller olarak sayılmaz (yani Python 2 == Python 3).
  • Cevaplar önceki gönderileri tam girdi olarak almalıdır.
  • İlk başvuru giriş yapmalıdır.
  • Bir satırda birden fazla cevap gönderemezsiniz.
  • "Cevapları tekrarla" (önceki bir sunumla aynı kodu taşıyan cevaplara) izin verilmez.
  • Cevaplar, bu cevabın ayrılan bayt-sayımını geçemez - daha fazla ayrıntı için "Ayrılan Bayt-sayım" bölümüne bakınız.

Tahsis Edilen Bayt Sayısı:

Her cevap numarası için n, bu cevap için ayrılan bayt sayısıdır 45 + 5n.


Cevap biçimlendirme:

Yanıtınızı şöyle biçimlendirin:

# {answer no.}, {language}
{program}
This prints:
- `1` in answer(s) {all answers using 1st language, with links}
- `2` in answer(s) {all answers using 2nd language, with links}
...
{optional explanation}

Cevap listeleri için şunu yapın:

- `1` in answers [1]({link to answer}), [3]({link to answer})...

puanlama:

7 gün sonra geçerli olan herhangi bir başvuru olmadan hayatta kalabilmek için ilk cevabın kazandığı ilan edildi.


1
Bir kullanıcı ardı ardına iki gönderi gönderebilir mi?
Kritixi Lithos

Böylece, olduğu gibi, herhangi bir değişiklik yapmadan, cevap n ° 6 olarak cevap n ° 8 olarak tekrar edebilirim, ardından Martin n ° 7 (n yanılmıyorsam) vb. 15 dayatılan eşiğe ulaşmadan önce (yani floor(n / 3)diller) Bunun amaçlanan davranış olmadığını tahmin ediyorum.
plannapus

@plannapus Bunu da farkettim. Tabii ki, amacınız son cevaba sahip olmak, bu yüzden önemsiz bir takibe sahip olacağımı bilmek, bazı şeyleri karmaşık hale getirmek isteyebilirsiniz (ki bu kendi cevabımı göndermeden önce düşünmedim).
Martin Ender

3
Tahsis edilen bayt sayısı, geometrik ilerlemede büyür ve kodlar çok uzun olacağı için dilleri tükenene kadar muhtemelen bu zorluklar sona ermeyecektir.
Wolfram

2
IMO makul bir sabit limit (örneğin 384 veya 256 bayt), daha iyi çalışmış ve sonunda sıkı bir rekabet tetikleyecekti.
zeplin

Yanıtlar:


4

26. > <> (dil 12), 164 bayt

Benim ilk programım> <> 'da! 156 karakter, ancak UTF-8'de 164 bayt.

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
{:}&1+&=?v
      .&0/
v+!?='>'i41i
v+?='y'i47
v+?=' 'i12
v+?=' 'i24
v4
v6
v7
v8
v9
va
  v?(0:i
v1
n;\b1laa*)?+
/"^mwfPes{'tc"i2&01.;

Bu yazdırır:

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6cevapları 10 , 17 , 20 , 22 ve 25 (Bash).

  • 711 ve 19 cevapları ile (Mathematica).

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 1018 , 21 ve 23 cevapları ile (C / C ++).

  • 11Cevap 24 ile (Zsh).

  • 12 bu cevapla (> <>).

Çevrimiçi deneyin!

Açıklama:

İlk satır sadece cevap # 5'tir. Talimat işaretçisini alt satıra göndermekten başka bir şey yapmaz. /balığı sağa çevirir ve karakterler ^mwfPes{'tcyığına yerleştirilir. Tek bir giriş karakteri okunur ( i). (İfade Ciçin bu karakteri çağıralım .) 2, kayıt defterine ( 2&) konur . Sonra ikinci satırın başına atlıyoruz (satır 1) ( 01.).

Bu çizgi Cyığındaki her karakterle karşılaştırılır . Bir kopyası Cyığının altında tutulur. {yığını Cüste gelecek şekilde döndürür ; :kopyalar; }kopyayı aşağıya doğru döndürür. &1+&Bir eşleşme bulunana kadar register'ı ( ) arttırırız. (Yani C"c" ise, eşleşme bulunduğunda kayıt 3 C, "t" ise, kayıt 4, vb. Tutar.) Ardından, kayıt defterinde ( 0&.) satır numarasının ilk karakterine atlarız. .

Satır 3 ila 13 C, sırasıyla c, t, ', {, vb. Olduğunda ne yapılması gerektiği ile ilgilidir . Talimat göstericisi, zıpladığımızda geriye doğru hareket ediyor; verilen satırın ilk karakterine iner, ancak bir atlamadan sonra, çalıştırmadan önce bir keneyi ilerletir, böylece satırın geriye doğru ilerlemesine başlar. Her satır istif üzerinde uygun dil numarasına nbasar , sonra balığı yazdırır talimatın üzerine gönderir .

^bu sorunun cevabı, bu sorunun ilk satırı ile ilgili kendi sıkıntım yüzünden. Satır 13, EOF'ye kadar girişi okur. Sonra yığının uzunluğunu ( l) 100 ( aa*) ile karşılaştıran 15 no'lu satıra yönlendirir . O (uzunsa )?), biz eklemek + bve 112 olsun, bu dil; Aksi takdirde, 1 yığının üstünde kalır.


23

1. Retina , 0 bayt

Çevrimiçi deneyin!

Boş program 1boş giriş verildiğinde (örn. Kendisi) yazdırılır , çünkü boş regex'in girişle ne kadar sık ​​eşleşeceğini (her zaman olan 1+length(input)) sayır .


12

2. Brain-Flak , 22 bayt

{<>(())(<>)}{}(<>{}())

Çevrimiçi deneyin!

Bu, yığının tepesini kontrol eder ve sıfır değilse, karşıt yığına bir tane koyar. Sonra artar ve karşıt yığını döndürür. Bu boş program için 1, başka bir şey için 2 döndürür.

Brain-Flak'taki yığınlar varsayılan olarak sıfır olduğundan, boş bir program yığının tepesinde sıfıra sahip olurken, diğer herhangi bir program (boş karakterlerle biten programlar hariç) bir truthy değerine sahip olacaktır. Bunun anlamı, eğer girdi yığınında program çok basit bir şekilde çalışabiliriz.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one

Bu cevabı düzenleyebilir misiniz? Yanlışlıkla aşağı oy verdim :)
Conor O'Brien,

9

3. APL, 7 bayt

' {'⍳⊃⍞

Açıklama:

      ⍞  read from the keyboard
     ⊃   first item of list, or space if empty
' {'⍳    index into the string ' {', giving N+1 (=3) if not found

8

10. Bash (+ coreutils) [dil 6], 44, 74 bayt

Sabit Sürüm (dil kimliğini döndürür)

expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G

Not: Bu giriş programı metninden sonra sondaki yeni satırı bekler


7

9. Retina (dil 1), 20 bayt

$|}\{|[:'][^]']|,\b1

Çevrimiçi deneyin!

Plannapus gibi, işleri biraz değiştirmek için tekrar yazmaya karar verdim, bu da kodu önemli ölçüde kısaltdı (plannapus'un en son hesabını açıklamak için son cevabımın bir değişikliğinin 32 bayt civarında olacağını düşünüyorum).

açıklama

Diğer cevaplarım gibi, bu da sadece çeşitli regex eşleşmelerinin sayısını sayar, ancak çok daha verimli bir şekilde sonuçlanır:

  • $dizenin sonuyla eşleşir. Bu, her zaman dizenin sonuna kadar giden bir eşleşme olsa bile çalışır, bu da bize 1tüm girdiler için bir temel oluşturur .
  • }\{İkinci programda (Brain-Flak) tek bir eşleşme bulur ve sayımı buraya getirir 2. Ters eğik çizgi kaçmak için gerekli değildir, ancak regex'in bu bölümünün kendisiyle eşleşmesini önler.
  • [:'][^]']aslında oldukça süslü. Tek amaç, 'APL programındaki ikisini (dil 3) ve :JavaScript programındaki üçünü (dil 4) saymaktır , ancak bu bölümün kendisini eşleştirmesini önlememiz gerekir. Bu yüzden de bir sonraki karakteri ne olduğundan emin olun ', ne de ](bunlar bizim olanlardan sonra görünmüyor çünkü do eşleştirmek istediğiniz, ancak burada bu programa görünüyor).
  • 'Üç tane daha ihtiyacımız yüzden önceki bölümünden zaten R programlarında bir maç olur. Alt dize ,1, her ikisinde de üç kez ve başka hiçbir programda görünmez. ,\b1Kendisiyle tekrar eşleşmesini önlemek için aralarına bir totolojik sözcük sınırı ekleyerek eşleştiriyoruz.

Hm, bunun R cevaplarını hiç etkilemediğini fark ettim, çünkü 1onların varsayılan çıktıları. Bir sonraki cevapla bunun hakkında bir şeyler yapmam gerekecek.
Martin Ender

7

18. C (dil 10), 121 bayt

Bu, C89 veya C90 standardıdır. Try It Online'da clang veya gcc ile çalışır.

main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}

Bu yazdırır:

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6cevapları 10 ve 17 (Bash) ile.

  • 7Cevap 11 ile (Mathematica).

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 10 bu cevapla (C).

İşte tüm 18 cevapları ile çalıştıran bir bash sürücüsü. Çevrimiçi deneyin!

Ungolfed eşdeğeri (646 bayt):

#include <string.h>
#include <stdio.h>
int main(){
    char *v=" ^{ s ePfwm", b[999];
    gets(b); /* buffer overrun if more than 998 characters in the input.
                could be a problem if we get to 191 answers */
    char *c = strchr(v, b[0]); /* Find first character of input in v, or null */
    int n = strlen(b);
    if (!n) {
        printf("1");
    } else if (c) {
        printf("%d", c-v); /* Index of first character of input in v */
    } else if (n > 99) {
        printf("4");
    } else if (n > 60) {
        printf("5");
    } else if (n > 15) {
        printf("1");
    } else {
        printf("3");
    }
    return 0;
}

6

5. Retina (dil 1), 23 bayt

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}

Çevrimiçi deneyin!(Tüm olası girişleri test eder.)

Girdideki çeşitli şeylerin eşleşmelerini sayar:

  • ^$ giriş dizesiyle eşleşir, yani bir kez ilk cevap.
  • {} İkinci programda iki tanesini ve bunlardan bir tanesini içeren, kendisiyle eşleşir.
  • (?![⊂⍴])[⊂-⍴]üçüncü programda üç eşleşme bulabilen, özel , 8834 - 9076 kodlu karakterlerle eşleşir. Bu programda eşleşmenin sona ermesini önlemek için negatif görünüşü kullanırız.
  • \B=Bir maçları =o değil bir kelime karakter öncesinde. Bu =, dördüncü programdaki dördüyle eşleşir ve =bu programdakilerle eşleşmez .


4

4, JavaScript (ES6), 32 bayt

s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1

Boş bir giriş için 1, giriş a ile başlarsa 2, başka bir şeyle başlarsa {4, saksi takdirde .. 3 çıkar.


s[0]=='{'Tarafından değiştirebilirs[0]>'z'

1
@Masterzagh Bunun nasıl golf oynayabileceğini de düşünüyordum, ama ne yazık ki, bu bir kod golf değil: /
Kritixi Lithos

@KritixiLithos Evet, ama çoktan golf oynadı, bu yüzden daha ileri gitmek isteyeceğini düşündüm.

@Masterzagh İnsanlar bu gibi zorluklarda geçerli cevapları düzenlemekten kaçınmalıdırlar çünkü a) daha sonraki cevapları, b) üzerinde çalışmakta olan cevapları geçersiz kılabilirler.
Martin Ender

@MartinEnder, haklısın. Bu şekilde düzenlemeyeceğim. Golf göründüğünü biliyorum (üçlü operatörler yüzünden), ama bilerek böyle yazmadım ... Yine de tüm geri bildirimler için teşekkürler!
Luka

4

11. Mathematica [dil 7], 53 bayt

Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&

Adsız işlev, bir argüman olarak bir karakter listesi alarak ve pozitif bir tamsayı çıktısı alır. Çıktıya "^{'sceP"karar vermek için dizedeki konumunu kullanarak basitçe girişin ilk harfini dallar . Bu , ilk boş Retina programı ve en yeni Retina cevabı hariç , önceki tüm başvurular için doğru cevabı verir ; bu tükürük hatalarının her ikisi de, ancak çıktısı, /._@__->1değerlendirilmemiş herhangi bir işlevi dönüştüren kural tarafından onarılır 1.


Bence bu ilk karakter stratejisini mahvetmenin tam zamanı :)
Martin Ender

1
Gidecektim ama sonra kendi dilim için de doğru çıktı almam gerektiğini hatırladım: D
Greg Martin

4

16. Perl (dil 9), 94 bayt

while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}

Çevrimiçi deneyin! (tüm cevapları kontrol eder). "1234151516748149" çıkışını

Bu yazdırır:

  • 1, 1, 5, 7, 9 ve 14 cevaplarıyla (Retina).
  • Cevap 2 ile 2 (Brain-Flak).
  • Cevap 3 ile 3 (APL).
  • 4, 4, 12 ve 15 numaralı cevapları (Javascript).
  • 5, 6 ve 8 numaralı cevaplarla (R).
  • 6, cevap 10 (Bash) ile.
  • 7 cevap 11 (Mathematica) ile.
  • 8 cevabını 13 (Python) ile.
  • 9 bu cevabı ile (Perl).

Program giriş uzunluğunu kontrol eder ve mevcut dil dağıtımına eşler.


3

6. R (dil 5), 61 bayt

cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

Girişin ilk karakterinin ne olduğunu kontrol eder ve buna göre çıktıyı seçer.

Bu şekilde yazdırır:

  • 1cevap 1 ve 5 ile (Retina).

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4Cevap 4 ile (Javascript).

  • ve 5bu cevapla.

Kullanımı:

> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
{<>(())(<>)}{}(<>{}())
2
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
' {'⍳⊃⍞
3
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
4
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
5

Bunu bir REPL dışında çalıştırmak için, 8. cevap altındaki yoruma bakın.
plannapus

3

8. R (dil 5), 76 bayt

c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)

Giriş ilk harfi kontrol eder, ve (bu sırayla) ihtiva eden bir vektör ile karşılaştırır boş dize, {, ', svec . Daha sonra eşleşmenin dizinini (R dizini 1 esaslıdır) veya eşleşme yoksa 1 olarak verir.

Cevap n ° 6 ile aynı kavram, ancak cevap n ° 7 engeller ile eşleşmesini .

Bu yazdırır:

  • 1cevapları 1 ile 5 ve 7 ile (Retina).

  • 2 cevapla 2 (Beyin Flak) ile.

  • 3 cevapla 3 ile (APL).

  • 4Cevap 4 ile (Javascript).

  • ve 5cevapla 6 ve bu cevap (R) ile.

Yanılmıyorsam, bu cevabın bayt sayısı ödeneği 94 bayttır.


FYI R çevrimiçi tercümanların (rfiddle, ideone ve tryitonline) sorun çözme sorunları varmış gibi görünüyor (en azından readline () ile) ve bu nedenle düzgün davranmıyorlar. Bunu denemek istiyorsanız (ve önceki cevabı), R'nin yüklü bir sürümünde yerel olarak denemeniz gerekir, korkarım.
plannapus

^ Tamam, bir REPL'in dışı readlineile değiştirilmelidir readLines(file("stdin")). Bu, 16 karakter daha demektir: Cevap 6 bu nedenle 77 bayt (79 üzerinden izin verilen) ve bu cevap 92 bayt (94 üzerinden izin verilen) olmalıdır. Bu değişiklikle çevrimiçi tercümanlar üzerinde de çalışır.
plannapus

3

12. Javascript (dil 4), 117 bayt

Not: Buradaki hatayı düzeltmek için bir karakter değiştirdim.

c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;

Girişin ilk harfini, c ise girişin uzunluğunu kontrol eder.

Çıktılar:

  • 1, 1, 5, 7, 9 cevapları için
  • 2 cevap 2 için
  • Cevap 3 için 3
  • 4 cevap 4 ve bu cevap
  • 5 6, 8 cevapları
  • Cevap 10 için 6
  • Cevap 11 için 7

3

13. Python (dil 8), 110 bayt

Not: Bu cevap yayınlandıktan 6 saat sonra OP'nin tavsiyesi üzerine değiştirildi.

from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N

Bu, cevap 10 ile aynı fikirdir (bash cinsinden), ancak Python 3'te.

Bu yazdırır:

  • 11 , 5 , 7 ve 9 cevaplarıyla (Retina).

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 ve 12 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6Cevap 10 ile (Bash).

  • 7Cevap 11 ile (Mathematica).

  • 8 bu cevap için (Python).

Çevrimiçi deneyin! için: Cevap 1 , Cevap 2 , Cevap 3 , Cevap 4 , Cevap 5 , Cevap 6 , Cevap 7 , Cevap 8 , Cevap 9 , Cevap 10 , Cevap 11 , Cevap 12 veya bu cevap .


Geçerli bayt sınırı nedir?
Vi.

@Vi .: Peki, cevap 13 için 149 ve cevap 14 için 163 WAS; ancak OP sadece bayt sayısı kurallarını 45 + 5n olarak değiştirdi, bu yüzden cevap 13 için 110 bayt, cevap 14 için 115 bayt olacaktı.
Nick Matteo

Muhtemelen 110 baytlık bir çözüm bulmalısınız
clismique

@ Qwerp-Derp: Tamam. Umarım bu devam eden hiç kimsenin çalışmalarını bozmaz.
Nick Matteo,

Tamam, bayt sınırının Java uyumlu ülkeye gelmesine kadar yaklaşık 60 cevap bekliyorum.
Vi.

3

24. Zsh (dil 11), 142 bayt

C'deki önceki # 18 numaralı cevabım sonraki tüm girişimler için hala değişmeden çalışıyor ( demo ). Hadi biraz karıştıralım.

typeset -A p
p=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)
echo ${p[(k)$1]:-1} #@<`w&X{

Yorumun sonunda, 21 ve 23 numaralı cevapların uzunluğu ile eşleşmek ve Ly25'in C ++ cevapları tarafından kontrol edilen karakterleri kullanarak, sha256 veya sha384 hash'lerinin tek bir karakterinin her cevap için benzersiz olmamasını sağlamaktır. ;-)

Bu yazdırır:

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6cevapları 10 , 17 , 20 ve 22 (Bash).

  • 711 ve 19 cevapları ile (Mathematica).

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 1018 , 21 ve 23 cevapları ile (C / C ++).

  • 11 bu cevabı ile (Zsh).

Çevrimiçi deneyin!


Sanırım bu benden çok çizgili olan ilk cevap ... +1.
clismique

2

14. Retina (dil 1), 39 bayt

'[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$

Çevrimiçi deneyin! (Tüm geçerli girişleri test eder.)


1
Hadi Martin, farklı bir dilde yayınla ... aynı zamanda, cevap biçimlendirme işini yapabilir misin?
clismique

3
@ Qwerp-Derp Bu aslında standart regex golf oyununda ilginç bir varyasyona dönüşüyor. Bir dizi giriş yapmak ve bazılarını eşleştirmek ve bazılarını başarısız olmak yerine, burada her giriş için belirli sayıda eşleşme elde etmeniz gerekir. Acaba bu regex bir noktada katlanarak patlayacak mı?
Martin Ender

Gerçekten 39 bayt mı? TIO raporları 37 bayt.
Arnauld

1
@Arnauld TIO, Retina için yalnızca karakter saymak için kodlanmıştır, çünkü genellikle tek baytlı kodlamalar kullanırsınız. Bu cevap UTF-8 olsa da gerektirir.
Martin Ender

2

15. Javascript (dil 4), 108 bayt

golfed

t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1

2

17. Bash (+ coreutils + openssl) (dil 6), 103 bayt

golfed

expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x

Benim cevap # 10 aynı teknik kullanır , ancak Hex yerine Base64 kodlanmış sözlüğü ile .

Test için aşağıdaki veri dosyasını bir araya getirdim:

6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Ölçek

for i in `seq 17`
do
  echo -n `cat lchain|sed -n $i'{p;q}'|cut -c1`=\>
  cat lchain|sed -n $i'{p;q}'|cut -c6-|\
  expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
done

6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1

2

19. Mathematica (dil 7), 96 bayt

Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&

Girdi olarak bir karakter listesi alan ve bir tamsayı döndüren adsız işlev:

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6cevapları 10 ve 17 (Bash) ile.

  • 7Cevap 11 ve bu cevap (Mathematica) ile birlikte.

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 10Cevap 18 (C) ile birlikte.

Şimdiye kadar cevapların tüm uzunlukları belirgindir ve hatta farklı modulo 59'dur - bu nedenle 33, 34, ..., 91 aralığındaki tamsayının hangi modla uyuştuğu tespit edilebilir. Bunların hepsi dizge tarafından kodlanan yazdırılabilir ASCII karakterleridir ";NRU$ Q B [1: =L J, 5% 3 # >"; kullanarak ToCharacterCode@StringSplit@bu dizgiyi, bu aralıktaki 10 tam sayı listesinin listesine dönüştürür ve on alt listeden Position[...,Mod[Length@#,59,33]][[1,1]]hangisinin girişin değiştirilmiş uzunluğuyla eşleştiğini bulur.


1

20. Bash (+ coreutils + openssl) (dil 6), 121 bayt

golfed

expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u

Cevabım # 17 ile aynı yöntem (sırayla orijinal cevabım # 10 ).

Şu anda 10 ayrı dile sahip olduğumuz için onaltılık konum kodlamasına geçtim.

Veri

6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Test (çıktı)

./test
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2

1

23. C (gcc) (dil 10), 142 bayt

main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Çevrimiçi deneyin!

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6cevapları 10 , 17 , 20 ve 22 (Bash).

  • 7Cevap 11 ve 19 ile (Mathematica).

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 10Cevabınız 18 , 21 ve bu cevabınız (C).

Bu program, farklı karakterlerin sayısını sayar (ASCII'de, çok baytlı UTF-8 karakterleri birden fazla girişe bölünür) ve daha sonra, bu karakterin veya o karakterin oluşumunun sayısına bağlı olarak dikkatlice tasarlanmış bir karar ağacı izler.

Karar ağacı # 21'den (yay!) Değişmedi. Tam olarak aynı kodu göndermeme izin verilmedi, bu nedenle küçük değişikliklerle saf C'ye geri dönüyoruz.


0

21. C ++ (gcc) (dil C'nin bir değişkeni olarak 10), 142 bayt

main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Çevrimiçi deneyin!

  • 1cevapları 1 , 5 , 7 , 9 ve 14 (Retina) ile.

  • 2cevap 2 (Beyin Flak) ile.

  • 3Cevap 3 ile (APL).

  • 4cevapları 4 , 12 ve 15 ile (Javascript).

  • 5cevap 6 ve 8 (R) ile.

  • 6Cevapları 10 , 17 ve 20 (Bash).

  • 7Cevap 11 ve 19 ile (Mathematica).

  • 813 cevabında (Python).

  • 9Cevap 16 ile (Perl).

  • 10Cevabınız 18 ve bu cevabınız (C).

Bu program, farklı karakterlerin sayısını sayar (ASCII'de, çok baytlı UTF-8 karakterleri birden fazla girişe bölünür) ve daha sonra, bu karakterin veya o karakterin oluşumunun sayısına bağlı olarak dikkatlice tasarlanmış bir karar ağacı izler.

Diğer bilgiler : K harfi bu girişe kadar kullanılmamış. Harfler I, E, Y, j, k, q, z kullanılmamaktadır.


C ++ dil 11'i düşünmek için bir seçenek var, buna bir kaç bayt kaldı.
Lyth

0

22. Bash (+ coreutils) [dil 6], 123, 131 bayt

EDIT: İlk başta yanlış bir sürüm yayınlandı, şimdi düzeltilmesi gerekiyor.

golfed

expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L

Cevapları ile aynı teknik # 20, # 17 ve # 10 .

Veri

6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Test sürüşü

./test
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1

Nedir 44?
clismique,

22 * 2? 󠀠󠀠󠀠󠀠󠀠
Vi.

@ Qwerp-Derp, sadece bir yazım hatası
zeppelin

Hadi, cevapların şimdi sıkıcı oluyor - bir sonraki cevabın böyle ise, aşağı oylamayı düşünüyorum (ilginç değil mi, biliyor musun?)
clismique

1
Burada bir şeyler yanlış. Karışık harfinizde sadece 20 giriş var (3PgT vb.). Boş giriş için bir hata alıyorum ve 2 numaralı cevap için "4" alıyorum (ikisi de 20 numaralı cevapla doğru çalıştı.)
Nick Matteo

0

25. Bash (dil 6), 169 bayt

Cevaplarım ile aynı teknik # 22, # 20, # 17 ve # 10 .

Üzgünüm @ Qwerp-Derp! ;) Bunun sonuncusu olduğuna söz veriyorum :)

golfed

{ echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8

Veri

Yeni satırların # 24 cevabı için \ n olarak kodlandığını unutmayın.

6 25 { echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8
B 24 typeset -A p\np=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)\necho ${p[(k)$1]:-1} #@<`w&X{
A 23 main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Test Çıkışı

6=>6
B=>11
A=>10
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
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.