Zayıflamış İkili Duvarlar

HyperNeutrino 08/18/2017. 14 answers, 1.278 views
code-golf number binary binary-matrix

Esinen: İkili bir duvar yarat

Pozitif tamsayıların bir listesi verildiğinde, bunları örnek olarak [2, 6, 9, 4] olduğu gibi birbirlerinin üstünde yazabiliriz:

0010
0110
1001
0100 

Bunu bir duvar olarak düşünebiliriz:

..#.
.##.
#..#
.#.. 

Ancak, bu çok zayıf bir duvar ve çöktü! Her 1 ( # ) yere "veya başka bir 1 ( # ) isabet edene kadar düşer. 0 s (s) hareketsiz 1 saniye bırakılan noktalarda bulunur.

Bu şu şekildedir:

....
....
.##.
#### 

Hangisinin çevirdiği:

0000
0000
0110
1111 

Bunlar, sayıların bir listesi olarak [0, 0, 6, 15] dır.

Başka bir test davası

[10, 17, 19, 23] 

Bu olur:

01010
10001
10011
10111 

olur ki:

00000
10011
10011
11111 

geri dönün:

[0, 19, 19, 31] 

Meydan okuma

Pozitif tam sayıların bir listesi verildiğinde, bu dönüşümü listeye uygulayın. Giriş / Çıkış, herhangi bir makul biçimde pozitif tam sayı listeleri olarak. Standart boşluklar geçerlidir.

Bu bir , bu nedenle en kısa cevap bayt kazanır!

5 Comments
1 Leaky Nun 07/29/2017
Daha testcase? Kare olmayan test kutuları iyi olurdu.
HyperNeutrino 07/29/2017
@LeakYNun Tabii. Bunu yapacağım.
Marcus Müller 07/30/2017
Bu sadece bit dizileri için sıralama problemidir.
HyperNeutrino 07/30/2017
@ MarcusMüller Haklısın - MATL'den sonra bunu anladım: P

14 Answers


Suever 07/29/2017.

MATL , 4 bayt

BSXB 

MATL Online'da deneyin

Explanation

% Implicitly grab input as an array 
    %   STACK: [10, 17, 19, 23]
B   % Convert each element to binary where each decimal number results in a row
    %   STACK: [0 1 0 1 0;
    %           1 0 0 0 1;
    %           1 0 0 1 1;
    %           1 0 1 1 1]
S   % Sort each column, placing all of the 1's at the bottom of each column
    %   STACK: [0 0 0 0 0;
    %           1 0 0 1 1;
    %           1 0 0 1 1;
    %           1 1 1 1 1] 
XB  % Convert each row from its binary representation to its decimal number
    %   STACK: [0, 19, 19, 31]
    % Implicitly display the result 
5 comments
HyperNeutrino 07/29/2017
o_O Bu nasıl çalışır: o
1 totallyhuman 07/29/2017
MATL sadece 4 bytes golf Jöle'si çıktı mıydı? o_O
Leaky Nun 07/29/2017
5 bayt şimdi :-p
HyperNeutrino 07/29/2017
Asla alttaki xD +1'e taşımak için dahili olacağını düşünmemiştim.
1 JungHwan Min 07/29/2017
@totallyhuman de, Dennis gelene kadar bekle

Anders Kaseorg 07/29/2017.

Python , 68 bayt

 f=lambda a:a and[x|y&a[0]for x,y in zip([0]+f(a[1:]),f(a[1:])+[-1])] 

Çevrimiçi deneyin!


Neil 07/29/2017.

JavaScript (ES6), 50 bayt

f=a=>a.map(_=>a.map((e,i)=>a[a[i]|=a[--i],i]&=e))&&a 

Açıklama: Duvardaki iki sıra şöyle diyelim:

0011
0101 

Sonuç şu şekilde olmalıdır:

0001
0111 

Başka bir deyişle, ilk satır iki sıranın AND'ına dönüşür ve ikinci sıra iki sıranın OR'ına dönüşür. Bunun, tüm bitlerin en altına düşmesi için yeterince tekrarlanması gerekiyor.


Leaky Nun 07/29/2017.

Jöle , 9 bayt

BUz0Ṣ€ZUḄ 

Çevrimiçi deneyin!


Justin Mariner 07/29/2017.

Japt , 16 bayt

m¤z3 ®¬n qÃz mn2 

Çevrimiçi deneyin! dizi sonucunu biçimlendirmek için -Q bayrağını kullanın.

açıklama

m¤z3 ®¬n qÃz mn2    Implicit: U = input array.
                        [10, 17, 19, 23]
m¤z3                Map U to binary strings and rotate the array left 90°
                         1010       0111
                        10001   ->  1011
                        10011       0001
                        10111       1000
                                     111
®¬n qà              Sort each binary string, putting 0s and spaces at the start
                        0111
                        0111
                        0001
                        0001
                         111
z mn2               Rotate right 90° and convert each back to a number
                         0000       0
                        10011   ->  19
                        10011       19
                        11111       31
                    Implicit output of resulting array 
2 comments
ETHproductions 07/30/2017
think bir mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Dizgiler dizisini döndürmek yerine 2D diziyi döndürmek gibi görünüyor, her iç diziyi null yerine null ile dolduruyor. Bu işe yaramıyor gibi görünüyor. Ve null boşlukların sola sıralandığı gibi, 1 saniyenin sağında sıralanır.

DanTheMan 07/30/2017.

Mathematica, 64 bayt

#~FromDigits~2&/@(Sort/@(PadLeft[#~IntegerDigits~2&/@#]))& 

 is \[Transpose] Geçiş Yap \[Transpose]

Bu, girişi (sayıların bir listesini) bir sayı listesinin bir listesine dönüştürür, onu bir kare matris olarak yatırır, üst üste bindirir, satırları altına "son", böylece üst üste bindirir, sonra sayılara dönüştürür .


xnor 07/30/2017.

Python 3.5 , 60 bayt

 def f(a,*t):
 if t:b,*r=f(*t);t=f(a|b,*r);a&=b
 return(a,*t) 

Çevrimiçi deneyin!

f(2, 6, 9, 4) gibi girdi alır. Girişin boş olmadığını varsayalım. Bir sürü kümeyi açarak kullanır.


Suever 07/30/2017.

Octave, 29 25 bayt

4 bytes saved thanks to @Stewie

@(x)bi2de(sort(de2bi(x))) 
2 comments
Stewie Griffin 07/30/2017
de2bi/bi2de , oktavda 4 bayt kazandırır. Oktave-online.net'de çalışır.
Suever 07/30/2017
@StewieGriffin Teşekkürler!

miles 07/29/2017.

J , 13 bayt

/:~"1&.|:&.#: 

Çevrimiçi deneyin!

açıklama

/:~"1&.|:&.#:  Input: array M
           #:  Convert each in M to binary with left-padding
       |:&     Transpose
/:~"1&         Sort each row
     &.|:      Inverse of transpose (which is just transpose)
         &.#:  Inverse of converting to binary 
2 comments
Zacharý 07/30/2017
Tekrar ikili bir sol dolgu var, +1. Ve ayrıca, sadece transpoze olduğu için, geçişin tersini neden kullanmanız gerektiğini açıklayabilir misiniz?
miles 08/01/2017
@ Zachariý Ters çevirmeler, her satırı sıralamadan önce kullanılan işlemleri geri almak için kullanılır. Geçişin tersinin sadece transpoze olduğu doğrudur, ancak bunu görmek için başka bir yol şu şekildedir: M olarak M , burada ilk iki işlev sadece son ikisinin tersini.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 bayt

bí0ζR€{øC 

Çevrimiçi deneyin!

Sihirbazdan çok farklı bir algoritma.

3 comments
Magic Octopus Urn 07/31/2017
ζ , kahretsin Benimkini silin, benim +1'imi al.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Neden sizinkini sildiniz? Gerek yok.
Magic Octopus Urn 07/31/2017
Gerçekten çok farklı değil (algoritma açısından) ve bu% 25 daha iyi.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 bayt

2⊥↑{⍵[⍋⍵]}¨↓2⊥⍣¯1⊢⎕ 

Çevrimiçi deneyin! (değiştirilip TryAPL geçerli olarak kabul eder)

Nasıl?

  • değerlendirilen girdi (diziler boşluklarla ayrılır)
  • 2⊥⍣¯1⊢ , argümanların her 2⊥⍣¯1⊢ ikili hale getirir (sorunun içindekinin yerini alır)
  • 2D bir diziyi vektörlerin bir vektörüne çevirir
  • {⍵[⍋⍵]}¨ vektörün her bir elemanını sıralar
  • vektörlerin vektörünü yine 2D bir diziye çevirir
  • 2⊥ convert (bunun 2⊥ için doğru sonuca ulaşırız)

James Heslip 07/30/2017.

Dyalog APL (23 karakter)

NO 
  1. Giriş değişkenlerini bir ikili matriste dönüştürün
  2. Matrisi sütunlara ayır
  3. Sütunları artan düzende sırala
  4. Sıralanmış satırları ondalık sıraya dönüştür

Örnek

{2⊥¨↓⍉↑{⍵[⍋⍵]}¨↓2⊥⍣¯1⊢⍵}10 17 19 23
      0 19 19 31 

Beni bu konuda düzelttiğin için Zacharý'ya teşekkürler.

5 comments
Zacharý 07/30/2017
(⊥⍣¯1)⍵ ile ⊥⍣¯1⊢⍵ (⊥⍣¯1)⍵ ile ⊥⍣¯1⊢⍵ . Ayrıca, split ( ↓[1] => ) eksen belirtimine ihtiyacınız olduğunu düşünmüyorum.
Zacharý 07/30/2017
Oh, ve bunu bir listeye geri dönüştürmeniz gerekiyor!
Zacharý 07/30/2017
Bu geçersiz.
James Heslip 07/30/2017
Teşekkürler, Zacharý, dün gece bu konuda çalışıyordum ve sanırım sorunu yanlış yönelttim. Şimdi çözümümü değiştirdim.
1 Zacharý 07/30/2017
Iyi iş çıkardın! ( ⊥⍣¯1 gerçekten bir yerleşik olmalı). Ve aslında kullanıcı adımı doğru almanız için teşekkür ederim.

ThePirateBay 07/29/2017.

JavaScript, 127 125 bayt

a=>a[m='map'](_=>b[m]((n,i)=>n&&(b[i]--,d|=1<a[m](e=>d+=!!(2**c&e),d=0)&&d)).reverse() 

Çevrimiçi deneyin

-2 bytes thanks to Cows quack

1 comments
Cows quack 07/29/2017
(1< 2**c&e

Dopapp 07/30/2017.

Python 2, 142 bayt

... ve hala golf ... umarım - Herhangi bir yardım takdir!

 def c(l):b=[bin(n)[2:]for n in l];print[int(n,2)for n in map(''.join,zip(*map(sorted,zip(*['0'*(len(max(b,key=len))-len(x))+x for x in b]))))] 

Bunun büyük bir kısmı, numaraları sıfırlarla dolgu yapmak içindir.

Daha okunabilir:

 def collapse(nums):
    bins = [bin(n)[2:] for n in nums]
    bins = [('0'*(len(max(bins, key = len)) - len(x))) + x for x in bins]
    print [int(n, 2) for n in map(''.join, zip(*map(sorted, zip(*bins))))] 

Bu, ikili dize gösterimlerinden oluşan bir dizi oluşturur, parantez yapar, saat yönünde 90º döndürür, her satırı sıralar, 90º geri döndürür ve her satırdan tamsayılar oluşturur.

2 comments
Mr. Xcoder 07/30/2017
142 bayt , fazladan paranteziniz var.
Dopapp 07/30/2017
@ Mr.Xcoder, ah evet aptalca

HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
2 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
3 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
4 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
8 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
9 Calum Scott

No Matter What flac

Calum Scott. 2018. Writer: Toby Gad;Calum Scott.
10 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
11 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
12 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
13 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
14 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
15 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
16 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
17 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
18 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
19 Little Mix

Told You So flac

Little Mix. 2018. Writer: Eyelar;MNEK;Raye.
20 Frida Sundemo

Apologize flac

Frida Sundemo. 2018.

Related questions

Hot questions

Language

Popular Tags