Outlet listrik

23

Ini adalah masalah dari NCPC 2005 . Roy memiliki apartemen dengan hanya satu outlet listrik, tetapi ia memiliki banyak colokan listrik. Hitung jumlah outlet maksimum yang dapat ia miliki dengan menggunakan soket ekstensi yang ia miliki. Jumlah outlet per strip daya diberikan sebagai input.

Ternyata jika jumlah outlet masing-masing strip

p1,p2,,pn

maka jumlah outlet adalah ,

1n+ipi

atau

.

1+p11+p21++pn1

Input ke program atau fungsi adalah serangkaian bilangan bulat positif yang tidak kosong.

Contohnya

2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098
Pål GD
sumber
17
Dan saya pikir Anda tidak seharusnya memasang kabel listrik ...
Joey
Sejauh yang saya tahu jawaban Retina saya adalah satu-satunya jawaban yang menggunakan input unary. Anda mungkin ingin melihat diskusi komentar di sana: codegolf.stackexchange.com/questions/71047/electrical-outlet/… ... Jika Anda berpikir bahwa solusi unary adalah terlalu banyak peretasan yang tidak sesuai semangat tantangannya, saya senang bagi Anda untuk menentukan bahwa input harus dalam desimal (dan kemudian akan memperbaiki jawaban saya sesuai).
Martin Ender
7
Karena listrik sangat mahal, kode Anda harus sesingkat mungkin untuk menghindari menggunakan lebih banyak energi
cat
1
@cat Waktu untuk menggali mesin turing yang digerakkan hamster tua dan komputer mekanik.
Pharap
1
@ imibis yakin, tetapi output akan diperlakukan sebagai informasi yang terkandung dalam aliran byte tidak seperti apa yang terjadi oleh yang diberikan oleh terminal Anda.
Martin Ender

Jawaban:

29

Retina , 3 byte

 1

Linefeed tambahan sangat penting.

Input adalah daftar angka unary yang dipisahkan oleh spasi .

Cobalah online!

Penjelasan

Kode hanya menghapus semua spasi dan juga 1setelah mereka dari string. Inilah mengapa itu bekerja:

Penambahan di unary sederhana: hanya menggabungkan angka-angka yang sama dengan menghapus pembatas. Mengurangkan dengan 1 juga sederhana: cukup hapus a 1dari setiap angka. Kami menginginkan 1 lebih dari jumlah input yang dikurangi, jadi kami hanya menghapus yang 1kami temukan setelah spasi, sehingga mengurangi semua kecuali input pertama.

Martin Ender
sumber
1
Saya bertanya-tanya apakah input di unary harus diizinkan.
John Dvorak
@ JanDvorak secara default, kecuali jika tantangan secara eksplisit menentukan input desimal. (Lihat tautan di jawaban.) Tidak masalah, Jelly tetap menang.
Martin Ender
@ MartinBüttner Ada sampel data baik dalam pertanyaan ini dan tugas asli. Tidakkah Anda berpikir (kecuali dinyatakan lain) bahwa itu harus menjadi kriteria yang diperlukan (meskipun tidak cukup) untuk lulus, bahwa kode tersebut bekerja dengan data sampel kata demi kata?
nitro2k01
1
@ nitro2k01 Tidak (dalam hal ini sebagian besar jawaban mungkin tidak valid). Kecuali jika tantangan secara eksplisit menentukan satu format input tertentu, kami biasanya menganggap bahwa daftar dapat diambil dalam format daftar asli apa pun . Hal yang sama berlaku untuk format angka (setidaknya unary dan mengambil integer sebagai nilai byte diizinkan oleh konsensus kecuali ada tantangan yang melarangnya). Sangat tidak mungkin untuk memasukkan data sampel dalam setiap format input asli yang masuk akal dalam tantangan.
Martin Ender
@ MartinBüttner Imo, itu bukan masalah yang direkomendasikan oleh alamat tersebut. Yang masih berbicara tentang ini adalah bahwa (kecuali saya salah) ini tidak berfungsi karena unary adalah format angka yang didukung atau asli di Retina tetapi itu terjadi ketika Anda memproses string sebagai data string. Ini hack. Bahkan ini adalah peretasan yang cerdas, tetapi saya masih tidak yakin bahwa itu sesuai dengan aturan. Jika angka-angka unary yang dipisahkan ruang adalah format asli di Retina dengan cara yang sama bahwa daftar byte adalah format asli dalam bf, saya akan menyetujui rekomendasi yang berlaku dan saya akan memiliki pendapat yang berbeda.
nitro2k01
9

Hexagony , 18 14 byte

.?<_(@'")>{+.!

Dibuka:

  . ? <
 _ ( @ '
" ) > { +
 . ! . .
  . . .

Cobalah online!

Saya tidak berpikir panjang sisi 2 adalah mungkin, tetapi harus ada solusi sisi panjang 3 yang lebih efisien.

Ini adalah pendekatan "decrement all, sum, increment" yang biasa, tetapi saya harus menambahkan diagram nanti untuk menunjukkan cara kerjanya di Hexagony.

Martin Ender
sumber
7

Python, 24 byte

lambda*n:1-len(n)+sum(n)

Cobalah online

Mego
sumber
1
Ini mengasumsikan bahwa fungsi pertama kali ditugaskan, kemudian diterapkan pada input dari variabel lain.
juandesant
1
@juandesant ... sangat bagus. Ini adalah fungsi literal, yang merupakan bentuk pengajuan yang valid.
FlipTack
7

Mathematica, 9 byte

Tr[#-1]+1&
A Simmons
sumber
7

Haskell, 17 15 byte

foldl1$(+).pred

Contoh penggunaan: ( foldl1$(+).pred ) [2,4,6]-> 10.

Versi lama, pendekatan yang berbeda, 17 byte: succ.sum.map pred.

nimi
sumber
6

J, 6 byte

+/+1-#

Jumlah plus satu panjang minus. Kuras dan terapkan, seperti:

   (+/+1-#) 2 3 4
7
Lynn
sumber
6

Labirin , 9 byte

"?;)!@
+(

Cobalah online!

Primer yang biasa:

  • Labyrinth adalah 2D dan berbasis stack. Tumpukan memiliki angka nol tanpa batas di bagian bawah.
  • Ketika penunjuk instruksi mencapai persimpangan, itu memeriksa bagian atas tumpukan untuk menentukan ke mana harus belok berikutnya. Negatif dibiarkan, nol di depan dan positif di kanan.

Di sini kita mulai dari kiri atas ", no-op, menuju ke kanan. Selanjutnya adalah ?, yang membaca int dari STDIN (membuang karakter yang tidak dapat diurai sebagai bilangan bulat, misalnya spasi). Sekarang kami memiliki dua kasus:

Jika input positif, kami belok kanan, melakukan:

(            decrement top of stack
+            add top two stack elements
             [continue loop]

Jika inputnya nol (yang terjadi pada EOF), kami langsung melanjutkan, melakukan:

;            pop zero from EOF
)            increment top of stack
!            output top of stack as number
@            halt program
Sp3000
sumber
5

Pyth, 5 byte

hstMQ

increment (jumlah (peta (decrement, input)))

Lynn
sumber
5

ES6, 25 byte

a=>a.map(n=>r+=n-1,r=1)|r
Neil
sumber
4
Saya akan memposting: "Salah satu kasus langka ketika mengurangi memenangkan permainan" ... dan itu 25 juga l=>l.reduce((a,b)=>a+b-1).
edc65
@ edc65 Ya, (,b)ini mahal, tapi saya suka versi itu juga.
Neil
5

MATL, 3 byte

qsQ

Cobalah online.

Penjelasan

qsQ
q      thread decrement over the input array
  s    sum
   Q   increment
sebuah spaghetto
sumber
4

05AB1E , 4 byte

Kode:

E<O>

Penjelasan:

E     # Evaluates input
 <    # Decrement on list
  O   # Compute the total sum
   >  # Increment on the sum
      # Implicit: output top of the stack

Mengambil input seperti array (mis [3, 4, 5].).

Adnan
sumber
Sangat elegan untuk lang golf
Pharap
4

Starry , 26 24 byte

, + '`      + ** `, +'*.

Mengharapkan bilangan bulat yang dipisahkan oleh baris. Cobalah online!

Terima kasih kepada @ MartinBüttner untuk -2 byte.

,           Read line as integer
 + '        Dupe and jump to label 1 if nonzero
`           Set label 0
      +     Push 1
 *          Sub
*           Add
 `          Set label 1
,           Read line as integer
 + '        Dupe and jump to label 0 if nonzero
*           Add
.           Output as integer

Loop tidak dibuka sehingga angka pertama tidak dikurangi, meniadakan kebutuhan untuk bertambah. Mendorong angka itu mahal di Starry ...

Sp3000
sumber
Saya hanya menghitung 20 byte.
Addison Crump
1
@VoteToClose Apakah Anda menghitung spasi utama? (Saya berasumsi Anda sedang berbicara tentang 26 byte)
Sp3000
4

Utilitas Bash + GNU, 16

Jika ada Nstrip daya, maka harus ada N-1pemisah dalam daftar input yang dipisahkan koma. Yang perlu kita lakukan adalah mengganti separator dengan - 1 +dan mengevaluasi secara hitung:

sed s/,/-1+/g|bc

Atau menggunakan trik yang sama:

Bash Murni (tanpa utilitas eksternal), 19

echo $[${1//,/-1+}]
Trauma Digital
sumber
3

APL (NARS 2000), 13 10 byte

{1+(+/⍵)-⍴∊⍵}

Sunting: Down to 10 with Lynn's (better) approach.

{1++/1-⍨⍵}

Koneke
sumber
3

gs2, 5 byte

(Di-encode CP437.)

W&Φd'

Itu read-nums dec m1 sum inc.

Lynn
sumber
3

CJam, 7 byte

q~:(:+)

Uji di sini.

Pendekatan yang sama dengan Lynn (decrement all, sum, increment). Ini juga berfungsi untuk 8 byte (dan mungkin sedikit lebih menarik):

q~{(+}*

Ini melipat "decrement, add" di atas daftar. Dengan melakukan itu, pengurangan hanya diterapkan ke semua elemen kecuali yang pertama, sehingga kita tidak perlu mengurus kenaikan secara terpisah.

Martin Ender
sumber
3

C, 60 59 55 byte

x;main(s){while(~scanf("%i",&x))s+=x-1;printf("%i",s);}
stmbgr1
sumber
3

Perl 6, 14 byte

{1+[+] --«@_}

pemakaian

my &f = {1+[+] --«@_}

say f([2,3,4]) # 7
say f([2,4,6]) # 10
say f([1,1,1,1,1,1,1,1]) # 1
say f([100,1000,10000]) # 11098
Tombol cepat
sumber
Saya sepenuhnya bermaksud untuk mengedit jawaban saya untuk hal yang sama (lihat komentar html )
Brad Gilbert b2gills
11 byte:{.sum-$_+1}
nwellnhof
3

Serius, 7 byte

,;l@Σ-u

Cobalah online!

Penjelasan:

,;l@Σ-u
,        push input
 ;       dupe
  l@     push length (n), swap
    Σ-u  push sum, subtract n, add one
Mego
sumber
2

Perl 6 , 20 byte

put 1+sum --«@*ARGS

(Anda bisa menggunakan <<bukan «)

Pemakaian:

$ perl6 -e 'put 1+sum --«@*ARGS' 100 1000 10000
11098
Brad Gilbert b2gills
sumber
«Adalah operator Perl?
user253751
@immibis Sebenarnya itu adalah bagian dari beberapa operator Perl 6 @arraya »+« @arrayb ++«@array @array».method @array»++ « a 'space separated' list of words »Beberapa dari mereka adalah apa yang dikenal sebagai operator Meta, di mana mereka bergabung dengan operator lain. (Perl 5 tidak memiliki operator tersebut saat ini.)
Brad Gilbert b2gills
2

Perl 5 23 + 2 = 25 atau 19 + 2 = 21

Membutuhkan -apbendera:

map{$.+=($_-1)}@F;$_=$.

Disimpan dalam file dan jalankan sebagai

perl -ap file.pl

EDIT: Jawaban lain, lebih kecil (19 + 2) tetapi pada dasarnya disalin dari dev-null answer:

$.+=$_-1for@F;$_=$.
Obrolan
sumber
2

F #, 25 byte

Seq.fold(fun s n->s+n-1)1

Ini adalah fungsi yang mengambil dalam array / daftar / urutan bilangan bulat dan mengembalikan hasil yang diperlukan.

Bagaimana itu bekerja:

Seq.foldmemungkinkan Anda untuk menerapkan fungsi ke setiap elemen berurutan sambil membawa beberapa keadaan sekitar saat itu melakukannya. Hasil dari fungsi sebagaimana diterapkan pada elemen pertama akan memberikan status yang akan dimasukkan ke dalam fungsi untuk elemen kedua, dan seterusnya. Misalnya, untuk meringkas daftar [1; 3; 4; 10], Anda akan menulisnya seperti ini:

Seq.fold (fun sum element -> sum + element) 0 [1; 3; 4; 10]
         (       function to apply        ) ^ (sequence to process)
                                     ( initial state )

Yang akan diterapkan seperti ini:

// First, initial state  + first element
0 + 1  = 1
// Then, previous state + next element until the end of the sequence
1 + 3  = 4
4 + 4  = 8
8 + 10 = 18

Dengan status terakhir menjadi nilai pengembalian Seq.fold.

Roujo
sumber
2

𝔼𝕊𝕄𝕚𝕟, 5 karakter / 7 byte

ï⒭+‡_

Try it here (Firefox only).

Menggunakan penyandian khusus dengan karakter 10-bit (thx @Dennis!). Jalankan encode('ï⒭+‡_')di konsol JS untuk mendapatkan formulir yang disandikan, dandecode(/*ENCODED TEXT HERE*/) mendekodekan formulir yang disandikan.

Penjelasan

Diterjemahkan ke Javascript ES6 sebagai:

i=>i.reduce(($,_)=>$+--_)
Mama Fun Roll
sumber
Pengkodean yang menarik.
lirtosiast
Ini juga bekerja dengan sangat baik.
Mama Fun Roll
2

Mornington Crescent , 1909 1873 1839 byte

Take Northern Line to Stockwell
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Turnham Green
Take District Line to Hammersmith
Take District Line to Turnham Green
Take District Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take Circle Line to Bank
Take Circle Line to Embankment
Take Northern Line to Stockwell
Take Northern Line to Embankment
Take Circle Line to Temple
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Blackfriars
Take Circle Line to Embankment
Take District Line to Parsons Green
Take District Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Parsons Green
Take District Line to Embankment
Take Circle Line to Blackfriars
Take Circle Line to Bank
Take Northern Line to Angel
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

Cobalah online!

pppery
sumber
"90% dari semua instruksi melibatkan mengambil Garis Distrik." Itu karena District adalah tempat semua stasiun aritmatika berada. Namun, pada TIO, sepertinya tidak berfungsi untuk semua contoh .
NieDzejkob
1873 byte dengan menggunakan nama garis yang lebih pendek jika mungkin
NieDzejkob
Penerjemah TIO memiliki bug dan tidak mengimplementasikan Turnham Green
pppery
Tangkapan bagus. Saya telah mengirim PR yang memperbaikinya di hulu.
NieDzejkob
1

Python 3, 79 byte

import sys
print(sum(map(lambda x: int(x)-1, sys.stdin.readline().split()))+1)
Pål GD
sumber
Sepertinya Anda menghitung baris baru sebagai dua byte. Mungkin menggantinya dengan titik koma untuk menyimpan byte. Beberapa ruang juga dapat dihapus.
Daffy
1

Ruby, 30 byte

$*.inject(1){|s,v|s+=v.to_i-1}

Cukup sederhana - mulai dari 1, tambahkan angka yang disediakan, masing-masing -1 (arg baris perintah ada di $*). Rasa malu injectadalah kata yang panjang.

Chowlett
sumber
1

PowerShell, 19 byte

$args-join'-1+'|iex

Catatan yang 1 + p1-1 + p2-1 + ... + pn-1setara denganp1-1 + p2-1 + ... + pn .

Mengambil input sebagai argumen baris perintah terpisah dengan $args. Kami -joinyang bersama dengan -1+pembatas untuk membuat string, seperti 2-1+3-1+4. String kemudian disalurkan ke Invoke-Expression(mirip dengan eval), dan menampilkan hasilnya.

AdmBorkBork
sumber
1

Perl, 21 + 2 = 23 byte

$a+=$_-1for@F;say++$a

Membutuhkan -adan -E:

$ perl -aE'$a+=$_-1for@F;say++$a'<<<'2 3 4'
7
andlrc
sumber
Anda dapat menggunakan -abendera untuk mendapatkan @Fvariabel dengan elemen yang sudah terpecah, dan ganti -n dengan -p sehingga Anda tidak perlu say, menguranginya menjadi 21 + 2:$a+=$_-1for@F;$_=++$a
ChatterOne
Menggunakan -pbukannya saysama karena saya harus $_=tetap menggunakan .
andlrc
@ChatterOne -aadalah ide bagus!
andlrc
1

Brainfuck, 15 byte

Asumsi: The, operator mengembalikan 0 setelah semua input telah habis, dan tidak ada kabel ekstensi dengan 0 colokan. Juga, IO harus dalam nilai byte, bukan kode karakter ASCII.

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

Penjelasan: Ini menggunakan 2 register. Daftar akumulator "Nilai", mewakili jumlah perangkat yang dapat dicolokkan, dan register "kabel saat ini" yang melacak nilai kabel saat ini. Dimulai dengan menambah nilainya dengan 1, untuk outlet yang ada. Kemudian, untuk setiap kabel ekstensi, itu mengurangi satu dari nilai karena plug diambil, kemudian menambah nilainya dengan jumlah plug.

Kebanyakan penerjemah online tidak beroperasi dalam mode input byte mentah. Untuk mengujinya secara online, gunakan kode ini:

+>,[->-[>+<-----]>---[-<+>]<[-<->]<[-<+>],]<.
Ethan
sumber
Bisakah saya menguji program di suatu tempat?
Pål GD
Terima kasih, koreksi kesalahan-kesalahan itu. Saya tidak mengetahui adanya penerjemah online yang beroperasi dalam mode byte. Saya dapat menggabungkan implementasi yang mengurangi '0' dari input yang akan berjalan pada penerjemah online apa pun.
Ethan
Jika Anda ingin menguji kode, jalankan di sini: copy.sh/brainfuck Jangan menaruh spasi di antara nilai-nilai numerik. Sayangnya, karena beroperasi dalam mode ASCII, kode demo hanya akan berfungsi pada nilai satu digit. Namun, versi 15 byte akan bekerja dengan baik pada nilai <= 255. Setelah Anda menjalankannya, lihat dump memori untuk melihat nilai akhir.
Ethan
Suatu hari BF akan memiliki standar yang sesuai untuk IO yang diharapkan dan kita hanya akan bisa mengatakan 'menggunakan standar 3' alih-alih misalnya 'input dan output semuanya diakhiri oleh null char'.
Pharap