Odmienne sita

17

Biorąc pod uwagę listę liczb całkowitych, utwórz maskę logiczną, tak aby można było użyć prawdziwych indeksów do odfiltrowania różnych wartości z listy. Który indeks jest wybrany jako prawdziwy, nie ma znaczenia, dopóki tylko jeden z nich zostanie wybrany dla każdego zestawu wskaźników odpowiadających identycznym wartościom.

Dane wejściowe będą niepustą listą liczb całkowitych nieujemnych w formacie odpowiednim dla Twojego języka, a dane wyjściowe będą listą wartości logicznych zgodnych z powyższą specyfikacją. Dozwolone jest używanie własnych definicji wartości prawdy i fałszu na liście wyników.

W poniższych przykładach określam, że jestem 1prawdomówny i 0jestem fałszywy.

[5, 4, 7, 1]  Input
[1, 1, 1, 1]  Output
              Select only the values with with true indicies in the sieve
[5  4  7  1]  Contains zero duplicate values

[5, 9, 7, 5, 6, 0, 5]
[0, 1, 1, 1, 1, 1, 0]
[   9, 7, 5, 6, 0   ]

Przypadki testowe

Gdy występuje or, oznacza to, że istnieje wiele prawidłowych wyników. Jeśli ...po elipsie występuje końcowa elipsa or, oznacza to, że nie wszystkie możliwe wyniki zostały wymienione.

[0] = [1]

[55] = [1]

[32, 44] = [1, 1]

[0, 0] = [1, 0] or [0, 1]

[9001, 9001, 9001] = [1, 0 , 0] or [0, 1, 0] or [0, 0, 1]

[5, 4, 7, 1] = [1, 1, 1, 1]

[1, 2, 3, 4, 3, 5] = [1, 1, 1, 1, 0, 1] or
                     [1, 1, 0, 1, 1, 1]

[5, 9, 7, 5, 6, 0, 5] = [1, 1, 1, 0, 1, 1, 0] or
                        [0, 1, 1, 1, 1, 1, 0] or
                        [0, 1, 1, 0, 1, 1, 1]

[0, 8, 6, 6, 3, 8, 7, 2] = [1, 1, 1, 0, 1, 0, 1, 1] or
                           [1, 0, 0, 1, 1, 1, 1, 1] or
                           [1, 0, 1, 0, 1, 1, 1, 1] or
                           [1, 1, 0, 1, 1, 0, 1, 1]

[45, 47, 47, 45, 24, 24, 24, 8, 47, 41, 47, 88]
= [1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1] or ...

[154, 993, 420, 154, 154, 689, 172, 417, 790, 175, 790, 790, 154, 172, 175, 175, 420, 417, 154, 175, 172, 175, 172, 993, 689, 993, 993, 790]
= [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] or ...

Zasady

  • To jest więc wygrywa najkrótsze rozwiązanie.
  • Wbudowane są dozwolone!
  • Dozwolone jest używanie własnych definicji wartości prawdy i fałszu na liście wyników. Jeśli zdecydujesz się to zrobić, podaj swoje definicje.
  • Dane wejściowe będą niepustą listą nieujemnych liczb całkowitych.
  • Możesz swobodnie wybierać między wyjściem tylko z jednego sita lub z wielu, a nawet z nich wszystkich. Dopóki każde sito jest ważne, będzie akceptowane.
mile
źródło
2
Bo [0, 8, 6, 6, 3, 8, 7, 2]czy [1, 0, 0, 1, 1, 1, 1, 1]należy dodać do listy prawidłowych wyników?
atlasolog
Czy twoje własne definicje wartości prawdy i fałszu odnoszą się do języka, czy możemy swobodnie wybierać? Czy muszą być konsekwentne?
Dennis
@atlasologist Dzięki za złapanie literówki
mile
@Dennis Możesz dowolnie definiować własne wartości boolowskie, nie muszą one być takie same jak wybrany język, ale musisz być zgodny z własnymi definicjami. Zamiast 1 i 0 dla prawdy i fałszu w moich przykładach, mogłem zrobić wartości ujemne jako fałszywe i nieujemne (zero lub dodatnie) jako prawdziwe.
mile
OK, dziękuję za wyjaśnienie. Mówiąc konsekwentnie, miałem na myśli to, czy musi istnieć jedna prawdziwa wartość, czy może być kilka.
Dennis

Odpowiedzi:

11

MATL, 7 6 4 bajtów

1 bajt zapisany dzięki @Luis
2 bajty zapisane dzięki @Dennis

&=Rs

Definiujemy 1jako prawdę, a wszystkie inne wartości określamy jako falsey

Wypróbuj online

Wszystkie przypadki testowe

Wyjaśnienie

    % Implicitly grab input array
&=  % 2D array of equality comparisons
R   % Get the upper triangular portion
s   % Sum down the columns
    % Implicitly display the result
Suever
źródło
1 bajt mniej:&=Rs1=
Luis Mendo
@LuisMendo Ha Dosłownie bawiłem się takim podejściem!
Suever,
2
PO wyjaśnił, co w tym wyzwaniu oznacza prawda i fałsz. Jeśli zdefiniujesz 1 jako prawdę, a wszystko inne jako fałsz, możesz porzucić l=.
Dennis
Świetne zastosowanie. Chodziło o to, aby uniknąć konieczności dodawania etapu filtrowania, a teraz dopasowałeś rozwiązanie Galaretki Dennisa.
mile
9

Galaretka , 4 bajty

ĠṪ€Ṭ

Sprzyja ostatnim wystąpieniom. Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .

Jak to działa

ĠṪ€Ṭ  Main link. Argument: A (array)

Ġ     Group; paritition the indices of A according to their corresponding values.
 Ṫ€   Tail each; select the last index of each group.
   Ṭ  Untruth; generate a Boolean array with 1's at the specified indices.
Dennis
źródło
Czy to nie odetnie zer na końcu?
Leaky Nun
2
Na końcu nie może być zera, ponieważ wybieramy ostatnie wystąpienie każdej unikalnej liczby całkowitej.
Dennis
To sprytne.
Leaky Nun
8

Python 3, 47 35 39 36 bajtów

lambda n:[n.pop(0)in n for x in n*1]

Wyskakuje pierwszy element z listy, sprawdza, czy istnieje on gdzie indziej na liście, i wstawia Truelub Falsedo nowej listy.

W przypadku tej funkcji Falsewskazuje odrębną wartość orazTrue poza tym jest ( True=0i False=1)

Dzięki Dennis za tonę bajtów

Oryginał, 47 bajtów:

lambda n:[(1,0)[n.pop()in n]for x in[1]*len(n)]

Spróbuj

atlasolog
źródło
lambda n:[1-(n.pop()in n)for x in n*1]oszczędza kilka bajtów.
Dennis
3
PO wyjaśnił, że prawdziwa wartość nie musi być prawdziwa, więc też lambda n:[n.pop()in n for x in n*1]działa.
Dennis
Nowa wersja trochę mnie straciła, dopóki nie zdałem sobie sprawy, że używa wartości zanegowanych, jak xnor dla prawdy i fałszu.
mile
Musisz to zrobić .pop(0)lub maska ​​wyjdzie odwrócona.
xnor
Nie to znaczyło Xnor. najpierw .pop()przetwarza ostatni element, więc są w odwrotnej kolejności.
Dennis
7

Pyth, 6 bajtów

.eqxQb

Wyświetla listę booli ( Truei False). Sprawdza każdy element na wejściu, czy jego indeks jest równy indeksowi pierwszego wystąpienia wartości. Innymi słowy, sprawdza się, czy każdy element występuje po raz pierwszy.

W pythonowym pseudokodzie:

.e      enumerated_map(lambda b,k:    # maps with b as value and k as index
  q       equal(
   xQb      Q.index(b),
            k),                       # implicit lambda variable
          Q)                          # implicit argument to map

Sprawdź to tutaj.

busukxuan
źródło
6

J , 2 bajty

~:

Stąd pomysł na to wyzwanie. Wbudowane ~:jest wywoływane Nub-Sievew J i tworzy listę logiczną, która wykonuje operację opisaną w wyzwaniu. Tutaj 1reprezentuje truei 0reprezentuje false.

mile
źródło
6

05AB1E , 8 bajtów

Kod:

v¹ykN>Qˆ

Wyjaśnienie:

y         # For each in the array
 ¹yk      # Get the index of that element in the array
    N>Q   # And see if it's equal to the index
       ˆ  # Add to the global array and implicitly output

Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .

Adnan
źródło
4

APL, 6 bajtów

⍳∘⍴∊⍳⍨

Spróbuj

Wyjaśnienie:

   ⍳⍨  For each character in the string, get the index of its first occurrence
⍳∘⍴     Make a list 1 .. length of input
  ∊    Check if each index is present
Woofmao
źródło
4

C #, 63 bajty

int[]l(List<int> i)=>i.Select((m,n)=>i.IndexOf(m)-n).ToArray();

Mógłbym również sprawić, że zwróci 1 lub 0, a termby sprawi, że parametr i typ zwrotu będą takie same, pozwalając mi zrobić to samo wyrażenie lambda?

mile widziane niektóre wskazówki

ten sam kod typu

    public static List<int>l(List<int>i){
        return i.Select((m,n)=>i.IndexOf(m)==n?1:0).ToList();
    }
downrep_nation
źródło
jeśli zdefiniujesz prawdę jako 0, a fałsz jako cokolwiek innego, możesz zamienić == n na -n i zwrócić int []
raggy
to świetny pomysł
downrep_nation
użyj również wyrażenia funkcji int [] l (List <int> i) => i.Select ((m, n) => i.IndexOf (m) -n) .ToArray ();
obdarty
o mój boże, to od teraz oszczędza tyle bajtów w moich odpowiedziach. dziękuję bardzo
downrep_nation
Czy możesz podać przykład na .NetFiddle?
aloisdg przenosi się do codidact.com
3

Python, 35 bajtów

f=lambda l:l and[l.pop(0)in l]+f(l)

Wykorzystuje Truejako wartość fałszowania iFalse jako wartość prawdziwości. Oznacza ostatni wygląd każdego elementu.

Wybiera pierwszy element tylko wtedy, gdy nie pojawia się wśród pozostałych elementów, a następnie powraca do reszty listy, o ile nie jest pusty. l.pop(0)Wyodrębnia pierwszego elementu, a także usuwania.

xnor
źródło
3

Siatkówka , 23 bajty

(\d+)((?!.* \1\b))?
$#2

Dane wejściowe to lista rozdzielona spacjami. (W rzeczywistości inne formaty, takie jak, [1, 2, 3]będą również działać, o ile przed każdym numerem będzie spacja oprócz pierwszego).

Wypróbuj online! (Działa jednocześnie na wielu przypadkach testowych oddzielonych od linii).

Po prostu zamieniamy każdy element, 0jeśli w jego danych wejściowych pojawi się kolejna jego kopia, i 1inaczej.

Martin Ender
źródło
2

PowerShell v2 +, 40 bajtów

$a=@();$args[0]|%{(1,0)[$_-in$a];$a+=$_}

Tworzy pustą tablicę $a. Następnie bierzemy listę danych wejściowych $args[0]i łączymy ją w pętlę |%{...}. Każda iteracja możemy wybrać jedną 1lub 0z pseudo-trójskładnikowego podstawie tego, czy obecny jest elementem$a czy nie. Wybory te pozostaną w przygotowaniu. Następnie dodajemy bieżący element do tablicy $a. Elementy potoku są gromadzone, a dane wyjściowe jako tablica są niejawne.

Przykład:

(wyjście tutaj z separatorem nowej linii, ponieważ jest to ustawienie domyślne .ToString()dla tablicy)

PS C:\Tools\Scripts\golfing> .\distinct-sieves.ps1 1,2,3,4,1,3,5,7
1
1
1
1
0
0
1
1
AdmBorkBork
źródło
1

JavaScript (ES6), 31 bajtów

f=a=>a.map((e,i)=>i-a.indexOf(e))

Zero jest prawdziwe, a inne liczby to fałsz.

Neil
źródło
1

Mathematica, 53 31 bajtów

Dzięki milom za pomysł, który zaoszczędził 22 bajty.

s[[;;x++]]~FreeQ~#&/@(x=0;s=#)&
Martin Ender
źródło
Co powiesz na korzystanie MapIndexedz poprzednich list? MapIndexed[s[[;;#-1&@@#2]]~FreeQ~#&,s=#]&zajmuje 41 bajtów.
mile
@miles Ohh, to o wiele lepsze (i trochę poprawiłem;))
Martin Ender
O, to dobry sposób na skrócenie MapIndexedtego przypadku i nawet nie musisz wyodrębniać ani zmniejszać indeksu
mile
1

Perl 5

push@o,map{$b=pop@a;(grep{/^$b$/}@a)?1:0}(1..~~@a);
Kaundur
źródło
1. ..zapewnia kontekst skalarny, więc nie powinieneś go potrzebować ~~. 2. grepzwraca wartość prawda / fałsz, więc nie powinieneś tego potrzebować ?1:0. 3. grep/.../,@ajest krótszy niż grep{/.../}@a. 4. Nie powinieneś potrzebować finału ;. 5. Nie powinieneś potrzebować nawiasów w pobliżu 1..@a. 6. Nie pokazujesz, skąd pochodzi dane wejściowe lub wyjściowe: patrz meta.codegolf.stackexchange.com/q/2447
msh210
1

Java, 96 bajtów

void s(int[]a){for(int i=0,j,n=a.length,b=1;i<n;a[i++]=b,b=1)for(j=i+1;j<n;)b=a[i]==a[j++]?0:b;}

Zmienia tablicę w miejscu. Sprzyja ostatniemu wystąpieniu.

Prawdziwą wartością jest 1wartość falsey 0.

Sprawdź wszystkie przypadki testowe .

Nie golfowany:

void sieve(int[]a){
    int n = a.length;
    for(int i=0;i<n;i++){
        int b = 1;
        for(int j=i+1;j<n;j++){
            if(a[i] == a[j]){
                b = 0;
            }
        }
        a[i] = b;
    }
}
Leaky Nun
źródło
1

Właściwie 11 bajtów

;╗ñ`i@╜í=`M

Wypróbuj online!

Wyjaśnienie:

;╗ñ`i@╜í=`M
;╗           save a copy of input in reg0
  ñ          enumerate
   `i@╜í=`M  for each (index, value) pair:
    i@         flatten, swap
      ╜í       first index in input of value
        =      compare equality
Mego
źródło
1

Pyke, 4 bajty

F@oq

Wypróbuj tutaj!

     - o = 0 #(Implicit)
F    - for i in input:
 @   -   input.index(i)
   q -  ^==V
  o  -   o+=1
niebieski
źródło
1

C ++, 242 bajty

Trzeba przyznać, że rozwiązanie to jest nadmierne, ponieważ działa na każdym standardowym pojemniku dowolnego zamówionego typu:

#include<algorithm>
#include<list>
#include<set>
template<class T>auto f(T a){using V=typename T::value_type;std::set<V>s;std::list<bool>r;std::transform(a.begin(),a.end(),std::back_inserter(r),[&](V m){return s.insert(m).second;});return r;}

Nie golfowany:

(i dalej uogólnione)

template<class T>
auto f(T a)
{
    using std::begin;
    using std::end;
    using V=typename T::value_type;
    std::set<V>s;
    std::list<bool>r;
    std::transform(begin(a),end(a),std::back_inserter(r),[&](V m){return s.insert(m).second;});
    return r;
}

Zestaw testowy:

int test(const std::list<bool>& expected, const auto& x) { return f(x) != expected; }
#include<array>
#include<chrono>
#include<forward_list>
#include<initializer_list>
#include<string>
#include<vector>
using namespace std::literals::chrono_literals;
int main()
{
    return 0
        + test({},            std::vector<short>{})
        + test({1},           std::array<int,1>{})
        + test({1},           std::vector<char>{55})
        + test({true,true},   std::vector<unsigned>{32,44})
        + test({1,0},         std::list<std::string>{"zero", "zero"})
        + test({1,0,0},       std::vector<long>{9001,9001,9001})
        + test({1,1,1,1},     std::array<char,4>{5,4,7,1})
        + test({1,1,1,1,0,1}, std::initializer_list<std::string>{"one","two","three","four","three","five"})
        + test({1,0,1,0,0},   std::forward_list<std::chrono::seconds>{60s, 1min, 3600s, 60min, 1h});
}
Toby Speight
źródło
1

TSQL 52 bajty

DECLARE @ TABLE(i int identity, v int)
INSERT @ values(1),(2),(3),(4),(3),(5)

SELECT i/max(i)over(partition by v)FROM @ ORDER BY i

Skrzypce

t-clausen.dk
źródło
1

PHP, 66 62 39 bajtów

  • akceptuje wszystkie wartości atomowe (boolean, liczba całkowita, liczba zmiennoprzecinkowa, łańcuch)
    z wyjątkiem wartości, które mają wartość false (false, 0, „”) i ciągi liczbowe („1” równa się 1)
  • flagi po raz pierwszy

nowa wersja (program, 37 + 2 bajty)
bije Javę i (teraz znowu) C #. Nawet prawie bije teraz Pythona. Szczęśliwy.

<?foreach($a as$v)$u[$v]=print$u[$v]|0;
  • +6 dla PHP> = 5,4, + 16-3 dla funkcji
  • druki undelimited lista 0(prawda) i 1(fałsz)
    wkładka !poprint odwrócić
  • Wykorzystanie: set register_globals=On, short_open_tags=Ona error_reporting=0w php.iniza php-cgi
    wywołujemyphp-cgi -f <filename> a[]=<value1> a[]=<value2> ...;echo"" ;
  • PHP> = 5,4 zamienić $az $_GET[a](+6), zestaw short_open_tags=Onierror_reporting=0
  • lub wymienić $azarray_slice($argv,1) (+19), usunąć <?(-2)
    i połączeniaphp -d error_reporting=0 -r '<code>' <value1> <value2> ...;echo""

stara wersja (funkcja, 62 bajty)

function f($a){foreach($a as$v)$u[$v]=1|$m[]=$u[$v];return$m;}
  • zwraca tablicę falsefor true itrue false; (ouput jako pusty ciąg lub 1)
    wstaw !po$m[]= aby odwrócić
  • Istnieje również inny sposób dla kwalifikowanej funkcji z 55 bajtami.

testy (na starej wersji)

function out($a){if(!is_array($a))return$a;$r=[];foreach($a as$v)$r[]=out($v);return'['.join(',',$r).']';}
function test($x,$e,$y){static $h='<table border=1><tr><th>input</th><th>output</th><th>expected</th><th>ok?</th></tr>';echo"$h<tr><td>",out($x),'</td><td>',out($y),'</td><td>',out($e),'</td><td>',(strcmp(out($y),out($e))?'N':'Y'),"</td></tr>";$h='';}
$samples=[
    [0],[1],    [55],[1],    [32,44],[1,1],    [9001,9001,9001],[1,false,false],
    [5,4,7,1],[1,1,1,1],    [1,2,3,4,3,5],[1,1,1,1,false,1],
    [5,9,7,5,6,0,5],[1,1,1,false,1,1,false],    [0,8,6,6,3,8,7,2],[1,1,1,false,1,false,1,1],
    [45,47,47,45,24,24,24,8,47,41,47,88],[1,1,'','',1,'','',1,'',1,'',1],
    [154,993,420,154,154,689,172,417,790,175,790,790,154,172,175,
        175,420,417,154,175,172,175,172,993,689, 993,993,790],
        array_merge([1,1,1,false,false,1,1,1,1,1],array_fill(0,18,false))
];
for($i=count($samples);$i--;--$i)for($j=count($samples[$i]);$j--;)$samples[$i][$j]=!$samples[$i][$j];
while($samples)
{
    $a=array_shift($samples);
    $em=array_shift($samples);
    test($a,$em,$ym=s($a));
    $eu=[];foreach($em as$i=>$f)if($f)$eu[]=$a[$i];
    $yu=[];foreach($ym as$i=>$f)if($f)$yu[]=$a[$i];
#   sort($eu); sort($yu);
    test('unique values',$eu,$yu);
}
echo '</table>';
Tytus
źródło
1

Haskell, 29 27 bajtów

f a=[elem x t|x:t<-tails a]

Używa Falsejako true, Truejako false wartość:

λ> let f a=[elem x t|x:t<-tails a] in f [5, 9, 7, 5, 6, 0, 5]
[True,False,False,True,False,False,False]

Być może będziesz musiał import Data.Listużyć, tailsale tryhaskell.org uruchamia kod w obecnej postaci.

Will Ness
źródło
Nie ma potrzeby stosowania zewnętrznego nawiasu. \a->[...]jest właściwą funkcją. W przypadku wątpliwości należy nadać mu nazwę: f a=[...].
nimi
@nimi nie mogłyby tego nazwać bez nawiasów. ale nadanie jej nazwy działa, wielkie dzięki.
Czy Ness
Nie podoba mi się to uzasadnienie import Data.Listbardzo częstego pomijania . za. jest bardzo śliskim nachyleniem, ponieważ w konfiguracji GHCi można umieścić dowolną liczbę importów (a nawet definicji!). b. traktuje tryhaskell.org jako autorytatywną implementację języka Haskell, ale tak naprawdę tak nie jest. (Ponownie, co jeśli utworzę własne środowisko try-Haskell-online, które zawiera wszystkie importowane i definicje, których golfiści mogliby kiedykolwiek chcieć? Czy to wciąż naprawdę „Haskell”?)
Lynn
Powiedziano mi kiedyś, że jeśli istnieje jakakolwiek platforma, która obsługuje ten kod w obecnej postaci, ten kod jest akceptowalny. Nie wiem, jakie są dokładne zasady, przestrzegam tego, co mi powiedziano. Myślę, że tak, jeśli twoja strona jest dostępna 24 godziny na dobę i działa w standardowym Haskell, dlaczego nie. Ale masz rację co do pierwszego, usunąłem go. Dzięki.
Czy Ness
1

Perl 5+ Perligata , 343 bajty

315 bajtów plus 28 dla -MLingua::Romana::Perligata

Użyj jako perl -MLingua::Romana::Perligata foo.pl; input (od stdin) i output (do stdout) to oddzielone podkreśleniem ciągi liczb całkowitych dziesiętnych. Testowane na Strawberry 5.20.2 z wersją 0.6 Perligata; Nie wiem, czy to działa z wersją Perligata 0.50.

huic vestibulo perlegementum da.qis _ scindementa da.dum qis fac sic
ao qis decumulamentum da.ao aum tum nullum addementum da.meo io.meo ro.per ium in qis fac sic
si ium tum aum aequalitas fac sic ro I da cis cis
ro nullum tum non rum addementum da.capita bis rum cis
per in bis fac sic hoc tum _ egresso scribe cis

Oczywiście jest to jasne jak dzwon. Jeśli tak nie jest, uruchom go -MLingua::Romana::Perligata=convertezamiast zamiast -MLingua::Romana::Perligata, i perlzamiast uruchomić skrypt, wypisze tłumaczenie na zwykły Perl:

 $_ = Lingua::Romana::Perligata::getline (*STDIN );
 @q = split ( '_');
while (@q) { $a = pop (@q );
 $a =  ($a + 0);
my $i ;
my $r ;
for $i (@q) {if ( ($i eq $a)) { $r = 1}
}
;
 $r =  (0 +  ! ($r));
unshift (@b, $r)}
;
for $_ (@b) {print (STDOUT $_, '_')}

Do analizy token-by-token użyj -MLingua::Romana::Perligata=discribe .


Uwagi do gry w golfa:

  • Nieudokumentowane (ale nic dziwnego), po tym nie potrzebujesz spacji . .
  • (Również nic dziwnego) scinde nie potrzebuje drugiego argumentu i używahoc .
  • Musiałem użyć ao aum tum nullum addementum da ponieważ nie mogłem dostaćmorde do pracy.
  • Podobnie użyłem per ium in qis... ro I da ponieważ nie mogłem dostaćvanne do pracy.
  • Zamiast tego huic vestibulo perlegementum dapróbowałem-pMLingua::Romana::Perligata , ale też nie mogłem go uruchomić.

Tylko dla kopnięć (chociaż cała ta odpowiedź była tylko dla kopnięć):

  • Po wyczyszczeniu go Huic vestibulo perlegementum da. Qis lacunam scindementa da. Dum qis fac sic ao qis decumulamentum da. Ao aum tum nullum addementum da. Meo io. Meo ro. Per ium in qis fac sic si ium tum aum aequalitas fac sic ro I da cis cis. Ro nullum tum non rum addementum da. Capita bis rum cis. Per in bis fac sic hoc tum lacunam egresso scribe cis.Tłumacz Google daje This court perlegementum grant. QIS gap scindementa grant. While QIS QIS decumulamentum do so ao da. Ao sum and no addementum grant. My io. My ro. Through ium in QIS do so if the sum ium equality do so ro 1 from cis. Ro was not any rum addementum grant. The heads of the bis side. Write, do so as soon as he at that time that in the gap by the Kish was taken..
msh210
źródło