Apakah Anda tahu bahasa itu?


34

Tugas:

Tantangan Anda adalah, diberikan kiriman sebelumnya dan itu sendiri sebagai input, output bahasa yang mereka tulis, dalam format berikut:

Katakanlah program pertama ada di Ruby. Ini harus menampilkan 1, karena Ruby adalah 1bahasa pertama yang digunakan dalam tantangan ini. Contoh program adalah:

a=gets
puts 1

Ketika diberikan sendiri sebagai input, ia kembali 1.

Program selanjutnya mungkin dalam Python. Itu harus keluaran 2, karena Python adalah 2bahasa nd yang digunakan dalam tantangan. Contoh program adalah:

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

Diberikan submisi pertama, ia menghasilkan 1, dan dengan sendirinya menghasilkannya 2.

Anda diperbolehkan mengulangi bahasa, meskipun Anda tidak diizinkan mengirimkan jawaban dalam bahasa jawaban sebelumnya.

Sebagai contoh, jika program ketiga di Ruby, itu harus output 1diberikan program pertama dan itu sendiri (karena Ruby adalah 1bahasa pertama yang digunakan), dan mengingat program kedua itu harus di-output 2.


Aturan:

  • Jika ada njawaban saat ini dalam tantangan, setidaknya harus ada floor(n / 3)bahasa yang berbeda. Setiap pengajuan yang melanggar aturan ini didiskualifikasi.
  • Tidak ada dua "jawaban tetangga" (mis. Jawaban ndan jawaban n+1) tidak dapat menggunakan bahasa yang sama.
  • Versi bahasa yang berbeda tidak dihitung sebagai bahasa yang berbeda (jadi Python 2 == Python 3).
  • Jawaban harus menerima kiriman sebelumnya secara penuh sebagai masukan.
  • Pengajuan pertama harus mendapat masukan.
  • Anda tidak diperbolehkan mengirimkan beberapa jawaban sekaligus.
  • "Ulangi jawaban" (jawaban yang memiliki kode yang sama persis dengan kiriman sebelumnya) tidak diizinkan.
  • Jawaban tidak diizinkan untuk membahas jumlah byte yang dialokasikan dari jawaban itu - lihat "Jumlah byte yang dialokasikan" untuk perincian lebih lanjut.

Byte-count yang dialokasikan:

Untuk setiap nomor jawaban n, byte-count yang dialokasikan untuk jawaban itu adalah 45 + 5n.


Pemformatan jawaban:

Format jawaban Anda seperti ini:

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

Untuk daftar jawaban, lakukan ini:

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

Mencetak:

Jawaban pertama untuk bertahan setelah 7 hari tanpa pengajuan yang valid setelah itu dinyatakan sebagai pemenang.


1
Bisakah satu pengguna memposting dua pengiriman berturut-turut secara berturut-turut?
Kritixi Lithos

Jadi, sebagaimana adanya, saya dapat mengulangi apa adanya, tanpa perubahan apa pun, jawaban saya n ° 6 sebagai jawaban n ° 8, setelah itu Martin dapat mengulangi nomornya n ° 7 (kecuali jika saya salah) dll. Hingga jawaban n ° 15 sebelum mencapai ambang yang dikenakan (yaitu floor(n / 3)bahasa). Saya menduga ini bukan perilaku yang dimaksudkan.
plannapus

@plannapus Saya perhatikan ini juga. Tentu saja, tujuan Anda adalah untuk mendapatkan jawaban terakhir, jadi mengetahui bahwa saya akan memiliki tindak lanjut yang sepele juga Anda mungkin ingin menyulitkan hal-hal (yang saya tidak pikirkan sebelum memposting jawaban saya sendiri).
Martin Ender

3
Jumlah byte yang dialokasikan tumbuh dalam deret ukur geometris, dan mungkin tantangan ini tidak akan berhenti sampai kita kehabisan bahasa, bukan karena kode akan menjadi terlalu panjang.
Wolfram

2
IMO batas tetap yang wajar (mis 384 atau 256 byte), akan bekerja lebih baik, dan akan memicu persaingan yang ketat di akhir.
zeppelin

Jawaban:


4

26. > <> (bahasa 12), 164 byte

Program pertama saya di> <>! Ini 156 karakter, tetapi 164 byte di UTF-8.

^$|(?![⊂⍴])[⊂-⍴]|\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.;

Ini mencetak:

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 , 17 , 20 , 22 , dan 25 (Bash).

  • 7dengan jawaban 11 dan 19 (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10dengan jawaban 18 , 21 , dan 23 (C / C ++).

  • 11dengan jawaban 24 (Zsh).

  • 12 dengan jawaban ini (> <>).

Cobalah online!

Penjelasan:

Baris pertama adalah jawab # 5. Ia tidak melakukan apa-apa selain mengirim pointer instruksi ke baris bawah. /belok kanan ikan, dan karakter ^mwfPes{'tcdiletakkan di tumpukan. Satu karakter input dibaca ( i). (Mari kita memanggil karakter ini Cuntuk eksposisi.) 2 dimasukkan ke dalam register ( 2&). Lalu kita lompat ke awal baris kedua (baris 1) ( 01.).

Baris ini membandingkan Csetiap karakter pada stack. Salinan Cdisimpan di bagian bawah tumpukan. {memutar tumpukan begitu Cdi atas; :duplikat; }memutar salinan kembali ke bawah. Kami menambah register ( &1+&) sampai kecocokan ditemukan. (Jadi jika C"c", register memegang 3 ketika pertandingan ditemukan; jika Cadalah "t", register memegang 4, dan seterusnya.) Kemudian kita melompat ke karakter pertama dari nomor baris dalam register ( 0&.) .

Baris 3 hingga 13 berurusan dengan apa yang harus dilakukan ketika masing-masing Cadalah c, t, ', {, dll. Penunjuk instruksi bergerak mundur ketika kita melompat; itu mendarat pada karakter pertama dari garis yang diberikan, tetapi setelah melompat itu memajukan tanda centang sebelum mengeksekusi, jadi itu mulai mengeksekusi dari ujung garis akan mundur. Setiap baris mendorong nomor bahasa yang sesuai pada tumpukan, lalu mengirimkan ikan ke ninstruksi, yang mencetaknya.

^adalah kasus yang paling rumit, karena pengecut saya sendiri dengan baris pertama dari jawaban ini. Baris 13 membaca input hingga EOF. Kemudian mengarahkan ke baris 15, yang membandingkan panjang tumpukan ( l) hingga 100 ( aa*). Jika lebih panjang ( )?), kami menambah + bdan 1mendapatkan 12, bahasa ini; jika tidak, 1 tetap berada di atas tumpukan.


23

1. Retina , 0 byte

Cobalah online!

Program kosong mencetak 1ketika diberi input kosong (yaitu dirinya sendiri), karena ia menghitung seberapa sering regex kosong cocok dengan input (yang selalu 1+length(input)).


12

2. Brain-Flak , 22 byte

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

Cobalah online!

Ini memeriksa bagian atas tumpukan dan menempatkan satu di tumpukan yang berlawanan jika tidak nol. Ini kemudian menambah dan mengembalikan tumpukan yang berlawanan. Ini membuatnya mengembalikan 1 untuk program kosong dan 2 untuk apa pun.

Karena tumpukan di Brain-Flak default ke nol, program kosong akan memiliki nol di atas tumpukan sementara program lain (kecuali program yang berakhir dengan karakter nol) akan memiliki nilai kebenaran. Ini berarti kita dapat menjalankan program if yang sangat sederhana pada tumpukan input.

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

Bisakah Anda mengedit jawaban ini? Saya tidak sengaja memilihnya :)
Conor O'Brien

9

3. APL, 7 byte

' {'⍳⊃⍞

Penjelasan:

      ⍞  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) [bahasa 6], 44, 74 byte

Versi Tetap (mengembalikan id bahasa)

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

Catatan: ini mengharapkan baris tambahan, setelah teks program input


7

9. Retina (bahasa 1), 20 byte

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

Cobalah online!

Seperti halnya plannapus, saya memutuskan untuk menulis ulang untuk mengubah keadaan sedikit, yang akhirnya juga memperpendek kode (modifikasi jawaban terakhir saya untuk akun terbaru plannapus akan berakhir sekitar 32 byte, saya kira).

Penjelasan

Seperti jawaban saya yang lain, ini hanya menghitung jumlah berbagai kecocokan regex, tetapi melakukannya dengan lebih efisien:

  • $cocok dengan akhir string. Ini selalu berhasil, bahkan jika ada kecocokan hingga akhir string, jadi ini memberi kita dasar 1untuk semua input.
  • }\{menemukan kecocokan tunggal dalam program kedua (Brain-Flak), membawa jumlah hingga sana 2. Backslash tidak diperlukan untuk melarikan diri tetapi mencegah bagian dari regex ini untuk mencocokkan dirinya sendiri.
  • [:'][^]']sebenarnya cukup mewah. Satu-satunya tujuan adalah untuk menghitung keduanya 'dalam program APL (bahasa 3) dan tiga :dalam program JavaScript (bahasa 4), tetapi kita perlu mencegah bagian ini agar tidak cocok dengan dirinya sendiri. Jadi kami juga memastikan bahwa karakter berikutnya adalah tidak ', juga tidak ](karena mereka tidak muncul setelah yang kita lakukan ingin mencocokkan, tetapi mereka muncul dalam program ini di sini).
  • Dari 'bagian sebelumnya sudah menyebabkan satu kecocokan dalam program R, jadi kita perlu tiga kecocokan lagi. Substring ,1muncul di keduanya tiga kali, dan tidak ada program lain. Kami mencocokkannya dengan menambahkan batas kata tautologis di antaranya dengan ,\b1untuk mencegah pencocokan lagi.

Hm, baru menyadari bahwa ini tidak menggagalkan jawaban R sama sekali, karena 1ini hanyalah output default mereka. Saya harus melakukan sesuatu tentang itu dengan jawaban berikutnya.
Martin Ender

7

18. C (bahasa 10), 121 byte

Ini adalah standar C89 atau C90. Ini bekerja dengan baik dentang atau gcc di Try It Online.

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

Ini mencetak:

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 dan 17 (Bash).

  • 7dengan jawaban 11 (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10 dengan jawaban ini (C).

Ini adalah driver bash yang menjalankannya dengan 18 jawaban di Coba online!

Setara tidak disatukan (646 byte):

#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 (bahasa 1), 23 byte

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

Cobalah online! (Menguji semua input yang mungkin.)

Menghitung kecocokan dari berbagai hal di input:

  • ^$ cocok dengan string input, yaitu jawaban pertama sekali.
  • {} cocok sendiri, yang ada dua di program kedua, dan satu di yang ini.
  • (?![⊂⍴])[⊂-⍴]cocok dengan karakter dengan poin kode 8834 hingga 9076, eksklusif , yang menemukan tiga kecocokan dalam program ketiga. Kami menggunakan lookahead negatif untuk menghindari ujung kisaran yang cocok dalam program ini.
  • \B=cocok dengan =yang tidak didahului oleh karakter kata. Ini cocok dengan empat =di dalam program keempat, dan tidak cocok dengan =dalam program ini.

5

7. Retina (bahasa 1), 27 byte

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

Cobalah online! (Menguji semua input yang mungkin.)

Modifikasi minor dari jawaban kelima . \B=sudah menemukan 4 kecocokan pada jawaban keenam, dan \b5menemukan kecocokan lain tanpa mencocokkan jawaban lain.


4

4, JavaScript (ES6), 32 byte

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

Output 1 untuk input kosong, 2 jika input dimulai dengan {, 4 jika dimulai dengan sdan 3 sebaliknya.


Anda dapat mengganti s[0]=='{'dengans[0]>'z'

1
@Masterzagh Saya juga berpikir tentang bagaimana ini bisa golf, tapi sayangnya, ini bukan kode-golf: /
Kritixi Lithos

@ KritixiLithos Ya, tapi dia sudah bermain golf jadi saya pikir dia ingin melangkah lebih jauh.

@Masterzagh Orang-orang harus menghindari pengeditan jawaban yang valid dalam tantangan seperti ini karena mereka dapat membatalkan a) jawaban nanti, b) jawaban yang saat ini sedang dikerjakan.
Martin Ender

@ MartinEnder, Anda benar. Karena itu saya tidak akan mengeditnya. Saya tahu ini terlihat seperti golf (karena operator ternary), tetapi saya tidak sengaja menulisnya seperti itu ... Terima kasih atas semua umpan baliknya!
Luke

4

11. Mathematica [bahasa 7], 53 byte

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

Fungsi yang tidak disebutkan namanya mengambil daftar karakter sebagai argumennya dan menghasilkan bilangan bulat positif. Cukup cabang pada huruf pertama dari input, menggunakan posisinya dalam string "^{'sceP"untuk memutuskan output. Ini memberikan jawaban yang tepat untuk semua pengiriman sebelumnya kecuali program Retina kosong awal dan jawaban Retina terbaru ; kedua kesalahan meludah ini, tetapi output diperbaiki oleh aturan /._@__->1yang mengubah fungsi yang tidak dievaluasi menjadi 1.


Saya pikir ini benar-benar waktu untuk mengacaukan strategi karakter pertama :)
Martin Ender

1
Saya akan pergi, tapi kemudian saya ingat saya harus mengeluarkan dengan benar untuk bahasa saya sendiri juga: D
Greg Martin

4

16. Perl (bahasa 9), 94 byte

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

Cobalah online! (periksa semua jawaban). Output "1234151516748149"

Ini mencetak:

  • 1 dengan jawaban 1, 5, 7, 9 dan 14 (Retina).
  • 2 dengan jawaban 2 (Brain-Flak).
  • 3 dengan jawaban 3 (APL).
  • 4 dengan jawaban 4, 12 dan 15 (Javascript).
  • 5 dengan jawaban 6 dan 8 (R).
  • 6 dengan jawaban 10 (Bash).
  • 7 dengan jawaban 11 (Mathematica).
  • 8 dengan jawaban 13 (Python).
  • 9 dengan jawaban ini (Perl).

Program memeriksa panjang input dan memetakannya ke distribusi bahasa saat ini.


3

6. R (bahasa 5), ​​61 byte

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

Cek apa karakter pertama dari input dan pilih output yang sesuai.

Ini dengan demikian mencetak:

  • 1dengan jawaban 1 dan 5 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 (Javascript).

  • dan 5dengan jawaban ini.

Pemakaian:

> 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

Untuk menjalankan ini di luar REPL, lihat komentar di bawah jawaban 8.
plannapus

3

8. R (bahasa 5), ​​76 byte

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

Cek huruf pertama dari input, dan membandingkannya dengan vektor yang mengandung (agar) string kosong, {, ', sdan c. Kemudian output indeks pertandingan (R indeks berbasis 1) atau 1 jika tidak ada kecocokan.

Konsep yang sama dengan jawaban n ° 6 tetapi mencegah jawaban n ° 7 tidak cocok.

Ini mencetak:

  • 1dengan jawaban 1 , 5 dan 7 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 (Javascript).

  • dan 5dengan jawaban 6 dan jawaban ini (R).

Jika saya tidak salah, jumlah byte-count untuk jawaban ini adalah 94 byte.


Penerjemah online FYI R (rfiddle, ideone, dan tryitonline) tampaknya memiliki masalah dalam menangani stdin (setidaknya dengan readline ()) dan karenanya tidak akan berperilaku baik. Jika Anda ingin mencoba ini (dan jawaban sebelumnya) Anda harus mencoba secara lokal pada versi R yang diinstal, saya khawatir.
plannapus

^ Ok, di luar REPL readlineharus diganti oleh readLines(file("stdin")). Yang berarti 16 karakter lagi: jawaban 6 karenanya harus 77 byte (dari 79 diperbolehkan) dan ini menjawab 92 byte (dari 94 diizinkan). Dengan perubahan ini berfungsi pada penerjemah online juga.
plannapus

3

12. Javascript (bahasa 4), 117 byte

Catatan: Saya mengubah karakter untuk memperbaiki kesalahan yang satu ini.

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;

Periksa huruf pertama dari input, jika c, periksa panjang input.

Output:

  • 1 untuk jawaban 1, 5, 7, 9
  • 2 untuk jawaban 2
  • 3 untuk jawaban 3
  • 4 untuk jawaban 4 dan jawaban ini
  • 5 untuk jawaban 6, 8
  • 6 untuk jawaban 10
  • 7 untuk jawaban 11

3

13. Python (bahasa 8), 110 byte

Catatan: Jawaban ini diubah 6 jam setelah diposkan, atas rekomendasi OP.

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

Ini adalah ide yang sama dengan jawaban 10 (dalam bash), tetapi dalam Python 3. (Pendekatan ini dapat bekerja paling banyak 3 entri sebelum kita kehabisan digit hex.)

Ini mencetak:

  • 1dengan jawaban 1 , 5 , 7 , dan 9 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 dan 12 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 (Bash).

  • 7dengan jawaban 11 (Mathematica).

  • 8 untuk jawaban ini (Python).

Cobalah online! untuk: Jawaban 1 , Jawaban 2 , Jawaban 3 , Jawaban 4 , Jawaban 5 , Jawaban 6 , Jawaban 7 , Jawaban 8 , Jawaban 9 , Jawaban 10 , Jawaban 11 , Jawaban 12 , atau jawaban ini .


Berapa batas byte saat ini?
Vi.

@ Vi.: Ya, itu 149 untuk jawaban 13 dan 163 untuk jawaban 14; tetapi OP baru saja mengubah aturan hitungan byte menjadi 45 + 5n, sehingga akan menjadi 110 byte untuk jawaban 13 dan 115 byte untuk jawaban 14.
Nick Matteo

Anda mungkin harus meletakkan solusi 110 byte ke atas.
clismique

@ Qwerp-Derp: Baiklah. Semoga itu tidak akan merusak pekerjaan yang sedang berlangsung siapa pun.
Nick Matteo

OK, menunggu sekitar 60 jawaban sampai batas byte sampai ke tanah ramah Java.
Vi.

3

24. Zsh (bahasa 11), 142 byte

Jawaban saya sebelumnya # 18 di C masih berfungsi tidak dimodifikasi untuk semua entri berikutnya ( demo ). Jadi mari kita campur sedikit.

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{

Tujuan dari komentar di akhir adalah untuk mencocokkan panjang jawaban 21 dan 23, dan memastikan bahwa tidak ada karakter tunggal dari hash sha256 atau sha384 yang unik untuk setiap jawaban sejauh ini, menggunakan karakter yang diperiksa oleh jawaban Ly ++ C ++. ;-)

Ini mencetak:

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 , 17 , 20 , dan 22 (Bash).

  • 7dengan jawaban 11 dan 19 (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10dengan jawaban 18 , 21 , dan 23 (C / C ++).

  • 11 dengan jawaban ini (Zsh).

Cobalah online!


Saya pikir ini adalah jawaban pertama yang multi-baris ... +1 dari saya.
clismique

2

14. Retina (bahasa 1), 39 byte

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

Cobalah online! (Menguji semua input yang valid.)


1
Ayo Martin, posting dalam bahasa yang berbeda ... juga, bisakah Anda melakukan hal pemformatan jawaban?
clismique

3
@ Qwerp-Derp Ini sebenarnya berubah menjadi variasi yang menarik pada golf regex standar. Daripada memiliki satu set input dan harus mencocokkan beberapa dari mereka dan gagal beberapa lainnya, di sini Anda harus mendapatkan sejumlah kecocokan pada masing-masing input. Saya bertanya-tanya apakah regex ini akan meledak secara eksponensial di beberapa titik.
Martin Ender

Apakah ini benar-benar 39 byte? TIO melaporkan 37 byte.
Arnauld

1
@Arnauld TIO hardcoded untuk hanya menghitung karakter untuk Retina karena Anda sering menggunakan pengkodean byte tunggal. Jawaban ini membutuhkan UTF-8.
Martin Ender

2

15. Javascript (bahasa 4), 108 byte

Golf

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) (bahasa 6), 103 byte

Golf

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

Menggunakan teknik yang sama dengan jawaban saya # 10 , tetapi dengan kamus yang disandikan Base64 , bukannya Hex .

Saya telah mengumpulkan file data berikut untuk pengujian:

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

Uji

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 (bahasa 7), 96 byte

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

Fungsi tanpa nama mengambil daftar karakter sebagai input dan mengembalikan integer:

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 dan 17 (Bash).

  • 7dengan jawaban 11 dan jawaban ini (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10dengan jawaban 18 (C).

Sejauh ini semua panjang jawaban berbeda, dan mereka bahkan berbeda modulo 59 — karenanya dapat dideteksi dengan bilangan bulat mana di kisaran 33, 34, ..., 91 yang sebangun dengan (mod 59). Ini semua adalah karakter ASCII yang dapat dicetak, disandikan oleh string ";NRU$ Q B [1: =L J, 5% 3 # >"; menggunakan ToCharacterCode@StringSplit@mengubah string ini menjadi daftar sepuluh daftar bilangan bulat dalam rentang itu, dan Position[...,Mod[Length@#,59,33]][[1,1]]menemukan mana dari sepuluh sublists yang cocok dengan panjang input yang dimodifikasi.


1

20. Bash (+ coreutils + openssl) (bahasa 6), 121 byte

Golf

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

Metode yang sama dengan jawaban saya # 17 (yang pada gilirannya didasarkan pada jawaban asli saya # 10 ).

Karena kami memiliki 10 bahasa yang berbeda sekarang, saya telah beralih ke pengkodean posisi heksadesimal.

Data

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

Tes (keluaran)

./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) (bahasa 10), 142 byte

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

Cobalah online!

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 , 17 , 20 dan 22 (Bash).

  • 7dengan jawaban 11 dan 19 (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10dengan jawaban 18 , 21 dan jawaban ini (C).

Program ini menghitung jumlah karakter yang berbeda (dalam ASCII, sehingga multi-byte karakter UTF-8 dapat dipecah menjadi beberapa entri) dan kemudian mengikuti pohon keputusan yang dirancang dengan hati-hati, berdasarkan pada jumlah kemunculan karakter ini atau itu.

Pohon keputusan tidak berubah dari # 21 (yay!). Saya tidak diizinkan memposting kode yang persis sama, jadi kami kembali ke pure C dengan sedikit modifikasi.


0

21. C ++ (gcc) (bahasa 10 sebagai varian C), 142 byte

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

Cobalah online!

  • 1dengan jawaban 1 , 5 , 7 , 9 , dan 14 (Retina).

  • 2dengan jawaban 2 (Brain-Flak).

  • 3dengan jawaban 3 (APL).

  • 4dengan jawaban 4 , 12 , dan 15 (Javascript).

  • 5dengan jawaban 6 dan 8 (R).

  • 6dengan jawaban 10 , 17 dan 20 (Bash).

  • 7dengan jawaban 11 dan 19 (Mathematica).

  • 8dengan jawaban 13 (Python).

  • 9dengan jawaban 16 (Perl).

  • 10dengan jawaban 18 dan jawaban ini (C).

Program ini menghitung jumlah karakter yang berbeda (dalam ASCII, sehingga multi-byte karakter UTF-8 dapat dipecah menjadi beberapa entri) dan kemudian mengikuti pohon keputusan yang dirancang dengan hati-hati, berdasarkan pada jumlah kemunculan karakter ini atau itu.

Trivia : huruf K tidak digunakan sampai entri ini. Surat I, E, Y, j, k, q, z tetap tidak digunakan.


Ada opsi untuk mempertimbangkan bahasa C ++ 11, beberapa byte tersisa agar sesuai
dengannya

0

22. Bash (+ coreutils) [bahasa 6], 123, 131 byte

EDIT: Diterbitkan versi yang salah pada awalnya, harus diperbaiki sekarang.

Golf

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

Teknik yang sama dengan jawaban saya # 20, # 17 dan # 10 .

Data

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

Uji Coba

./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

Apa 44?
clismique

22 * 2? 󠀠󠀠󠀠󠀠󠀠
Vi.

@ Qwerp-Derp, hanya salah ketik
zeppelin

Ayolah, jawaban Anda semakin membosankan sekarang - jika jawaban Anda berikutnya seperti ini, saya sedang mempertimbangkan untuk menurunkan suara (itu tidak menarik, Anda tahu?)
clismique

1
Ada yang salah di sini. Hanya ada 20 entri dalam huruf hash Anda (3PgT dll.). Untuk input kosong saya mendapatkan kesalahan, dan untuk jawaban # 2 saya mendapat "4" (keduanya bekerja dengan benar dengan jawaban 20.)
Nick Matteo

0

25. Bash (bahasa 6), 169 byte

Teknik yang sama dengan jawaban saya # 22, # 20, # 17 dan # 10 .

Maaf @ Qwerp-Derp! ;) Saya berjanji ini adalah yang terakhir :)

Golf

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

Data

Perhatikan bahwa baris baru dikodekan sebagai \ n untuk jawaban # 24

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

Output Uji

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.