Samanlıkta iğne bulmak


38

Aynı yazdırılabilir ASCII karakterlerinden oluşan en az 2x2 boyutunda dikdörtgen bir saman yığını göz önüne alındığında, farklı bir karakter olan iğnenin konumunu (soldan sayılarak) çıkar.

Örneğin, aşağıdaki samanlık girilirse:

#####
###N#
#####
#####

Çıktı 3,1sıfır dizine alındığında (bu zorlukla kullanacağım şey) veya 4,2bir dizine alındığında olmalıdır.

Samanlık, yazdırılabilir herhangi bir ASCII karakterinden oluşabilir:

^^^
^^^
^N^
^^^
^^^
^^^

çıktı: 1,2

ve iğne herhangi olacak diğer yazdırılabilir ASCII karakter:

jjjjjj
j@jjjj
jjjjjj

çıktı 1,1

Köşede bir iğne olması da mümkündür:

Z8
88

çıktı 0,0

88
8Z

çıktı 1,1

veya iğnenin kenarına yerleştirmek için:

>>>>>>>>>>
>>>>>>>>>:
>>>>>>>>>>

çıktı 9,1

Kurallar ve Açıklamalar

  • Giriş ve çıkış herhangi bir uygun yöntemle verilebilir . Bu, girişi karakter listesi, tek bir dize vb. Olarak alabileceğiniz anlamına gelir.
  • Sonucu STDOUT'a yazdırabilir veya işlev sonucu olarak geri döndürebilirsiniz. Lütfen gönderiminizde çıktının hangi sırada olduğunu belirtin (yani, mücadelede kullanıldığı gibi yatay veya dikey, ya da tam tersi).
  • Tam bir program veya bir işlev kabul edilebilir.
  • Sen do not kullanılacak karakterleri seç. Sorun bu.
  • Samanlık boyutunun en az 2x2 olması garanti edilir, bu nedenle iğne hangisi ve saman hangisi belirsizdir.
  • Girişte yalnızca bir iğne var ve boyut olarak yalnızca bir karakter var.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle normal golf kurallarının tümü geçerli olur ve en kısa kod (bayt cinsinden) kazanır.

Önerilen test durumu: 88\n8Z(elbette herhangi iki karakterli).
Kevin Cruijssen

Çok boyutlu bir dizi olarak girdi alabilir miyiz? yani [['#', '#', '#', '#', '#'], ['#', '#', '#', 'N', '#'], ['#' , '#', '#', '#', '#'], ['#', '#', '#', '#', '#']];
640KB

2
@gwaugh Bir karakter listesi gibi mi? Evet, sorun değil (ve açıkça Tamam olarak adlandırılır).
AdmBorkBork

3
Girdileri yeni satırlar olmadan ve bir samanlığın genişliği (veya yüksekliği) olmayan bir çift dizge olarak alabilir miyiz? yani("########N###########", 5)
biri 15

3
@someone Evet, gerçek bir çoğunluğu olmasa da , buna izin verilmesi gerektiğini düşünüyorum.
AdmBorkBork

Yanıtlar:


17

R , 49 47 44 bayt

function(m,`?`=which)m==names(?table(m)<2)?T

Çevrimiçi deneyin!

Girdiyi matris olarak alır, 1 indeksli koordinatları döndürür


4
Bu whichödev utanç verici şekilde pürüzsüz.
CriminallyVulgar

4
Bu mücadeleyi R'de denemek için çok heyecanlandım, sonra bunu gördüm ve bunun yerine huşu içinde ağlamaya karar verdim
Sumner18 18

9

Perl 6 ,41 38 37 bayt

@Nwellnhof sayesinde 3 bayt kurtarıldı.

Jo King sayesinde 1 bayt kurtarıldı.

{map {[+] ^∞Z*!<<.&[Z~~]},$_,.&[Z]}

Çevrimiçi deneyin!

açıklama

Girdiyi karakter listelerinin bir listesi olarak alır ve iğnenin sıfır temelli X ve Y koordinatlarını içeren uzunluk 2'nin listesini döndürür.

{[+] ^∞ Z* !<<.&[Z~~]}Girişe ve transpozisyona blok uygulayarak çalışır . .&[Z~~]argümanın tüm sütunlarından geçer ve aksi Truetakdirde tüm öğeler aynıysa Falsedöndürür. Daha sonra tüm değerleri yok sayıyoruz (bu nedenle, boolün "Bu sütunda iğne var mı?" Sorusunu yanıtladığı sütun başına bir bool ile bir listemiz var), onları eleman şeklinde 0,1,2 dizisi ile çarpın. .. ( True = 1ve False = 0) ve listeyi toplayın, böylece tüm bloğun sonucu, iğnenin bulunduğu sütunun 0-temelli numarasıdır.

Nwellnhof'un daha iyi yaklaşımı, Perl 6 , 34 bayt

{map *.first(:k,*.Set>1),.&[Z],$_}

Çevrimiçi deneyin!

açıklama

Genellikle aynı yaklaşım, sadece daha etkili. Dizide ve transpoze üzerinde hala bir blok kullanıyor, ancak şimdi blok tüm satırları dönüştürüyor Setsve eleman sayısını kontrol ediyor. firstFonksiyonu daha sonra (nedeniyle indeksini verir :k1'den fazla eleman ihtiva ilk sıranın). Bu nedenle, sırası $_ve .&[Z]değiştirilmesi gerekiyordu.


Güzel yaklaşım! 34 bayt olan first(:k), Setve .&[Z].
nwellnhof

@nwellnhof, çok iyi yapıldı. Temelde bulmak istediğim şeyi buldunuz ama bunu başaramadı: (Ayrıca yazabileceğiniz konusunda hiçbir fikrim yoktu .&[Z].)
Ramillies,

Genel olarak, .&[op]eşdeğer görünmüyor [op] $_ancak Zbir nedenden dolayı çalışıyor.
nwellnhof

@JoKing, teşekkürler!
Ramillies,


6

Brachylog , 20 bayt

c≡ᵍ∋Ȯ&;I∋₎;J∋₎gȮ∧I;J

Çevrimiçi deneyin!

Çıktılar [I,J], Isatır dizini ve Jsütun dizinidir, her ikisi de 0 dizinlidir.

Aptalca uzun, ama Brachylog'da indeks almak genellikle çok ayrıntılı.

açıklama

c                       Concatenate the Input into a single string
 ≡ᵍ                     Group identical characters together
   ∋Ȯ                   Ȯ is a list of One element, which is the needle character
     &;I∋₎              Take the Ith row of the Input
          ;J∋₎          Take the Jth character of the Ith row
              gȮ        That character, when wrapped in a list, is Ȯ
                ∧I;J    The output is the list [I,J]

6

PHP ,99 85 bayt

('########N###########', 5Girdi olarak yeni satır içermeyen dize ve genişlik (veya yükseklik) kullanılması .

  • -5 bayt, chr () çağrısını kaldırarak, @Titus'a aittir.
  • -9 byte girişi iki fonksiyon argümanı olarak alarak, ayrıca @Titus
function($a,$l){return[($p=strpos($a,array_flip(count_chars($a,1))[1]))%$l,$p/$l|0];}

Çevrimiçi deneyin!

Ungolfed:

function need_hay( $a, $l ) {

    // identify the "needle" by counting the chars and 
    // looking for the char with exactly 1 occurrence
    // note: this is 1 byte shorter than using array_search()
    $n = array_flip( count_chars( $a, 1 ) )[1];

    // find the location in the input string
    $p = strpos( $a, $n );

    // row is location divided by row length, rounded down
    $r = floor( $p / $l );

    // column is remainder of location divided by row length
    $c = $p % $l;

    return array( $c, $r );

}

Çıktı:

#####
###N#
#####
#####
[3,1]

^^^
^^^
^N^
^^^
^^^
^^^
[1,2]

jjjjjj
j@jjjj
jjjjjj
[1,1]

1
1) Gerek yok chr: strpos için ikinci parametre bir tamsayıysa, bir ASCII kodu olarak yorumlanır. -> -5 bayt. 2) İki fonksiyon parametresi $s,$w9 bayt daha kaydedebilir.
Titus

@Titus, mükemmel olan chr () 'yi kaldırmak. Teşekkürler! Func params de benim için gerçekleşti, ben sadece giriş req's öğleden sonra koşmak istemedim. W / OP ile netleştireceğim.
640KB

5

05AB1E , 9 6 bayt

Giriş biçimini değiştirerek 3 bayt kaydedildi.

Giriş bir dize ve bir satır uzunluğu olarak alınır.
Çıktı, formun sıfır temelli bir listesidir.[y, x]

D.mks‰

Çevrimiçi deneyin! veya Test Paketi olarak

açıklama

D           # duplicate the input string
 .m         # get the least frequent character
   k        # get its index in the string
    s       # swap the row length to the top of the stack
     ‰      # divmod the index of the least frequent char with the row length

Dang, beni yendin. Bir cevap üzerinde çalışıyordu. Daha yeni 13 byte bitmişti. Ama seninki daha iyi, bu yüzden +1 yerine. :) Tamamen unuttum .m..
Kevin Cruijssen

@KevinCruijssen: Evet. Daha önce hiç kullandığımı sanmıyorum .m, ancak bir noktada
görebileceğimden çok emindim

5

Python 3 + NumPy , 75 66 bayt

@ ASCII- sayesinde -9 bayt

lambda x:where(x.view('i')-median(x.view('i')))
from numpy import*

Çevrimiçi deneyin!

Bu, girişin bir NumPy dizisi olduğunu varsayar. Çıktı sıfır dizinli ve önce dikey, sonra yatay.

Bu giriş dönüştürür chariçin intdaha sonra ot yığını karakter olacaktır, dizinin orta değerini hesaplar. Bunu, iğneyi sıfır olmayan tek eleman yapan diziden çıkardık. Son olarak, bu öğenin dizinini ile döndür numpy.where().


1
Girişin ASCII olacağını bildiğinizden (yani bir bayta uyar) neden uint8bir bayt daha az kullanmıyorsunuz ?
Draconis

1
Dil burada "Python 3 + numpy" olmalıdır, çünkü numpy normal Python dağılımına dahil değildir
ASCII-sadece

@Draconis aslında planımdı, ancak doğru uint8ASCII kodları arasında sıfırlar ortaya koydu . Bunun Python3'ün dizeler için standart giriş biçimi olarak Unicode kullanması nedeniyle olduğunu düşünüyorum.
hbaderts


1
Sorun değil, sonuçta sadece sizin çözümünüze dayanmakla kalmıyor, aynı zamanda normalde numpy kullanmıyorum. Ayrıca, bu bir çözüm, tüm çözümler genel olduklarından verilen zaten çok benzer olabileceğini tür kaçınılmaz ve bu nispeten kolay meydan okumadır
ASCII sadece

4

Jöle , 5 bayt

Çıkışlar [yükseklik, genişlik] (1 indeksli).

ŒĠLÐṂ

Çevrimiçi deneyin!

ŒĠLÐṂ – Monadic link / Full program. Takes a list of strings M as input.
ŒĠ    – Group the multidimensional indices by their values (treating M as a matrix).
  LÐṂ – And retrieve the shortest group of indices (those of the unique character).

Jöle , 5 bayt

ŒĠḊÐḟ

Çevrimiçi deneyin!


4

Jöle , 4 bayt

Belki de bu, Bay Xcoder için bir yorum olabilirdi, oldukça benzerdi ...

ŒĠEƇ

Tek dizili bir bağlantı, bir öğenin listesini veren karakter matrisini kabul eder, 1 indeksli (satır, sütun) soldan koordine eder.
(... Tam bir program olarak, karakter listelerinde sonuçların (Python biçiminde dizelerin listesi olduğu gibi) ayrıştırılması sonucu biçimlendirilmiş bir argüman verilmiştir. Tek koordinat yazdırılır.)

Çevrimiçi deneyin!

Nasıl?

ŒĠEƇ - Link: matrix, M
ŒĠ   - multi-dimensional indices grouped by Value
     -  ...due to the 2*2 minimum size and one needle this will be a list of two lists one
     -     of which will have length one (the needle coordinates as a pair) and the other
     -     containing all other coordinates as pairs
   Ƈ - filter keeping those for which this is truthy:
  E  -   all equal?
     -   ... 1 for the list of length 1, 0 for the list of at least 3 non-equal coordinates

1
Eh ... zekice olduğu için bu sınır gibi görünüyor .
Outgolfer Erik,

4

JavaScript (ES6), 55 bayt

(s)(w)sw[x,y]

s=>w=>[(i=s.indexOf(/(.)\1+(.)/.exec(s+s)[2]))%w,i/w|0]

Çevrimiçi deneyin!


JavaScript (ES6),  65  64 bayt

@Neil sayesinde 1 bayt kaydedildi

[x,y]

m=>m.some((r,y)=>r.some((c,x)=>!m[p=[x,y],~y&1].includes(c)))&&p

Çevrimiçi deneyin!

Nasıl?

c(x,y)r[Y]Yy2×2Y=0yY=1y


1
~y&1bir bayttan tasarruf eder y&1^1.
Neil,

4

Java 8, 132 111 bayt

m->{int c=m[0][0],i=0,j;for(c=m[1][0]!=c?m[1][1]:c;;i++)for(j=m[i].length;j-->0;)if(m[i][j]!=c)return i+","+j;}

@Dana sayesinde -8 bayt (ve -13 daha dolaylı) .

Karakter matrisi olarak giriş.

Çevrimiçi deneyin.

Açıklama:

m->{                    // Method with char-matrix parameter and String return-type
  int c=m[0][0],        //  Character to check, starting at the one at position 0,0
      i=0,j;            //  Index integers
  for(c=m[1][0]!=c?     //  If the second character does not equal the first:
         m[1][1]        //   Use the character at position 1,1 instead
        :c;             //  Else: keep the character the same
      ;i++)             //  Loop `i` from 0 indefinitely upwards:
    for(j=m[i].length;j-->0;)
                        //   Inner loop `j` in the range (amount_of_columns, 0]:
      if(m[i][j]!=c)    //    If the `i,j`'th character doesn't equal our character to check:
        return i+","+j;}//     Return `i,j` as result

1
124 - son returnifade hiçbir zaman isabet almamalıdır. Dış halkayı ilerletmek için daha iyi bir yol olabilir mi?
Dana,

@dana Teşekkürler! " Dış döngüyü devam ettirmek için daha iyi bir yol olabilir mi? " Gibi , kesinlikle var; sadece onu kaldırarak sonsuz bir döngü haline gelir. Ve sonra return"";ulaşılamaz ve aynı zamanda kaldırılabilir. : D Yani -21 bayt sana teşekkürler.
Kevin Cruijssen

İlginç ... Dış döngü durumunu kaldırmayı denedim ve bir unreachable codehata ile karşılaşıyordum. Finali kaldırmanın bir returndüzeltme olduğunu bilmiyordum .
Dana,

-> operatörü iç döngüde tam olarak ne yapar? Java sözlerini bu sözdizimi için bulmaya çalışıyordum ama hiçbir şey bulamadım
KBusc

1
@KBusc İki operatör var: i--ve >. :) Daha fazla bilgi için bu SO cevabına bakınız. Bu nedenle i > 0ilk önce i0'dan büyük olup olmadığını kontrol eder ve ardından döngünün gövdesine girmeden önce i1 ile azaltılır i--.
Kevin Cruijssen

3

MATL , 12 8 bayt

tX:XM-&f

Çevrimiçi deneyin!

modeFonksiyonu çoğunluk detektörü olarak kullanmak . 1 tabanlı endeksleri döndürür.

 t           % duplicate the input
  X:         % turn the copy into a linear array
    XM       % find the arithmetic mode of that (the 'haystack' character)
      -      % Subtract that from the original input
       &f    % find the position of the non-zero value in that result

@LuisMendo sayesinde -4 karakter


1
@LuisMendo Teşekkürler. findMATLAB'da bile 2 çıktı versiyonunu bildiğimi sanmıyorum . (Merhaba, btw!)
sundar - Monica'yı

3

Wolfram Dili 37 58 bayt

Daha önceki girişim, "tek karakterin" matrisin sol üst köşesinde olduğu durumu doğru şekilde ele almadı. Bu yapar.

#~Position~Keys[TakeSmallest[Counts@Flatten@#,1]][[1]]&

Counts@Flatten@#Dizideki her karakterden kaç tanesinin olduğunu listeler #.

TakeSmallest[...,1] gibi bir ilişkilendirme kuralı biçiminde en az sıklıkta olan sayıyı döndürür. <| "Z"->1|>

Keys...[[1]]"key" ifadesini ilişkilendirme içindeki tek öğeye, en az kullanılan karaktere geri döndürür. (Mevcut davada "Z")

#~Position~...anahtarın orjinal matris içindeki konumunu döndürür #,.


3

Perl 5 -p00, 52 45 bayt

/^(.)(\1*
)*(\1*)|^/;$_=$&=~y/
//.$".length$3

45 bayt

52 bayt

Nasıl

  • -p00: gibi -nama aynı zamanda, paragraf modu
  • /^(.)(\1* )*(\1*)|^/ : ikisiyle de eşleşir
    • başlangıçtan itibaren $1: ilk karakter $2,: tekrarlama (kullanılmaz) $3,: satırdaki "iğne" den önceki karakterler, $&tam eşleşme
    • veya boş dize (konum 0) yakalama yok.
  • $_= : varsayılan girdi / değişken değişkenini atamak için
  • yani $&=~y/ //yeni satır sayısı$&
  • .$".: ile birleştirmek $"(varsayılan olarak boşluk karakteri) ve birleştirmek
  • length$3 : uzunluğu $3

3

R 42 bayt

function(m)which(ave(m,m,FUN=length)==1,T)

Çevrimiçi deneyin!

Giriş: saman yığını matrisim

Çıktı: (row,col) vektör - dizinden başlar1


1
Güzel iş ve PPCG'ye hoş geldiniz! f=Bayt sayısından çıkarılabildiğinden , bunun 42 bayt olduğuna inanıyorum function(m)=.
BLT

@BLT Bundan emin değildim ama kafaları için teşekkürler :)
niko




2

PowerShell , 107 98 82 77 bayt

$l=@{}
$args|%{if($_-10){$l.$_+=$x++,+$y}else{$x=0;++$y}}
$l|% v*|? c*t -eq 2

Çevrimiçi deneyin!

LF ile sıçrayan bir ipi alır. Sıfırla dizine alınmış konumu x, y döndürür. unrolled:

$locations=@{}                      # make a hashtable. key=char, value=location array
$args|%{
    if($_-10){                      # if current char is not LF
        $locations.$_+=$x++,+$y     # add $x,$y to hashtable value and move $x to next pos
    }else{
        $x=0;++$y                   # move $x,$y to next line
    }
}
$locations|% Values|? Count -eq 2   # find and output location array with 2 elements (x,y)



1

Retina 0.8.2 , 41 bayt

s`(?=(.)+\1)(.*?¶)*(.*)(?!\1|¶).+
$.3,$#2

Çevrimiçi deneyin! 0 endeksli. Açıklama:

s`

Yeni .satırlarla eşleşmesine izin ver . Bu, 3 bayt maliyeti (3 bayt ?önce ) ancak 6 bayt kazandırır.

(?=(.)+\1)

İki özdeş karakter için ileriye bakın. \1o zaman saman olur.

(.*?¶)*

İğneden önceki yeni satır sayısını sayın.

(.*)

İğnenin solundaki samanı yakalayın.

(?!\1|¶)

İğnenin saman veya yeni hat olmadığından emin olun.

.+

Sonuç onu değiştirecek şekilde samanın geri kalanını eşleştirin.

$.3,$#2

Soldaki samanın genişliğini ve yeni satır sayısını girin.


1

C # (Visual C # Etkileşimli Derleyici) , 82 bayt

x=>w=>{int y=x.IndexOf(x.GroupBy(c=>c).Last(g=>g.Count()<2).Key);return(y%w,y/w);}

6 byte'ı tıraş ettiğin için teşekkürler!

Çevrimiçi deneyin!

Eski çözüm, 106 bayt

n=>m=>{var z=n.Distinct();int d=n.IndexOf(n.Count(c=>c==z.First())>1?z.Last():z.First());return(d%m,d/m);}

Her ikisi de bir dize ve sütunların miktarını belirten bir tamsayı olarak girdi alır.

Çevrimiçi deneyin!


@dana Enumerable.Last()bir delegenin kabul edildiğini asla anlamadım , teşekkürler
Cehalet

1

Java 8, 104 Bayt

(x,w)->{int i=0,p=x.length;for(;i<p;i++)if(x[i]!=x[(i+1)%p]&&x[i]!=x[(i+2)%p])break;return i/w+","+i%w;}

Giriş, karakter dizisi ve satır genişliğini gösteren tam sayıdır.

Çıktı sıfır temelli, dikey sonra yataydır (yani satır numarası sonra sütun numarası)

Açıklama:

(x,w)->{
    int i=0, p=x.length;
    for (;i<p;i++)          //iterate through characters in x
      if (x[i]!=x[(i+1)%p] && x[i]!=x[(i+2)%p])    //compare x[i] with the two subsequent characters in array, wrapping around if necessary
        break;
    return i/w+","+i%w;}  //return row number then column number, zero-based

1

Python 3 , 93 89 85 58 bayt

Yeniden yazma işlemini tamamlayarak tekrar yazın concatenated string, width:

lambda g,w:divmod(g.index({g.count(c):c for c in g}[1]),w)

Çevrimiçi deneyin!


Orijinal cevap:

def k(g):t=''.join(g);return divmod(t.index({t.count(c):c for c in t}[1]),len(g[0]))

EDIT: noktalı virgül için satır sonu / girintiyi değiştirerek 4 bayt kurtardı. Kullanarak 4 bayt daha kaydedildi divmod(thanks @JonathanFrech).

Çevrimiçi deneyin!

Bunun çok daha kısa olabileceğini biliyorum, ancak sadece bu dictanlama etrafında bir yaklaşım denemek istedim .


1
Kullanarak divmodbeş bayt kazandıracak.
Jonathan Frech

0

MATL , 11 bayt

tX:YmyYk-&f

Çıktı satır, sonra sütun; 1 tabanlı.

Çevrimiçi deneyin!

açıklama

t    % Implicit input. Duplicate
X:   % Linearize into a column
Ym   % Compute mean (characters are converted to ASCII codes)
y    % Duplicate from below: pushes input again
Yk   % Closest value: gives the input value that is closest to the mean
-    % Subtract, element-wise. Gives non-zero for the value farthest from the mean
&f   % Two-output find: gives row and column indices of nonzeros. Implicit display

0

Pyth, 15 14 12 bayt

.Dxz-zh.-z{z

Girdiyi satırın uzunluğu olarak alır ve girişi satırsız olarak alır ve [satır, sütun] olarak çıkar.
Burada dene

açıklama

.Dxz-zh.-z{z
       .-z{z    Subtract one of each character from the input.
      h         Take the first.
    -z          Remove all instances from the input.
  xz            Find the remaining character in the input.
.D          Q   Take the result divmod the (implicit) length of the row.

Eski yaklaşım

mxJmt{kdeSJ.TB

Burada dene

açıklama

mxJmt{kdeSJ.TB
           .TBQ   Take the (implicit) input and its transpose...
m      d          ... and for each...
   mt{k           ... deduplicate each row...
 xJ     eSJ       ... and find the index of the largest.     

0

Kömür , 40 bayt

≔§⎇⌕θ§θ¹ηθ⁰ζSθW⁼№θζLθ«⊞υωSθ»I⌕Eθ⁼ιζ⁰,ILυ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Yanlış bir şey yapmalıyım çünkü bu neredeyse Retina cevap verdiği sürece. Açıklama:

≔§⎇⌕θ§θ¹ηθ⁰ζ

İlk dizedeki ikinci karakterin aynı zamanda ilk karakter olup olmadığını kontrol edin ve ilk dizenin ilk karakterini alın, aksi halde değilse ikinci dizenin ilk karakteri. Bu o zaman saman.

SθW⁼№θζLθ«⊞υωSθ»

Uzunluğu kısa olan bir dize bulunana kadar dizeleri okumaya devam edin.

I⌕Eθ⁼ιζ⁰,ILυ

Eşleşmeyen öğenin konumunu ve ardından daha önce okunan dizgelerin çıktısını alın.


0

MATLAB, 68 22 bayt

[r,c]=find(v~=v(1));if size(r,1)>1 disp([1,1]);else disp([r,c]);end;

[1,1]Bu çözümde olduğu gibi herhangi bir davayı hariç tutabilseydim, birkaç bayt kurtarmış olabilirdim.

Güncellenmiş çözüm :

@(v)find(v-mode(v(:)))

Özel durum probleminde bana yardımcı olduğu ve 42 byte tasarruf sağladığı için @ sundar'a teşekkürler! Ayrıca, önerileriniz için @Luis_Mendo'ya teşekkürler ve beni 2 bayt kurtardı!


Ne için çek kurtulmak düşünüyorum [1,1]kullanarak durumunda mode(v(:))yerine v(1).
sundar - Monica'yı

Kodunuzu, tam bir program veya işlev olacak şekilde sarmanız gerekir; girişin bir değişken olduğunu varsayamazsınız v. Ayrıca, muhtemelen yerini alabilecek ~=tarafından -ve kaldırmak son;
Luis Mendo

0

Röda , 81 bayt

f a{i=indexOf;l=i("
",a)+1;chars a|sort|count|[[_2,_1]]|min|i _[1],a|[_%l,_1//l]}

Çevrimiçi deneyin!

Girdiyi yeni satır sonlandırılmış satırlar içeren bir dize olarak alır. 0 indeksli yatay ve dikey indeksler içeren bir akış döndürür.

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.